Companies consume talent that universities produce: Well-educated, trained, and trainable people. I say trainable because universities teach students how to learn, which is an invaluable skill for working professionals as the learning doesn’t end in the classroom. Universities create curriculums to properly cover material for all sorts of academic areas. But the material taught throughout the four years of university (that becomes the sum of one’s educational experience) should also be dictated by the desires and aspirations of what industries need—and the needs and desires of their future workforces. We’ll take a look at four of the different ways people can learn testing and how each one can be taken advantage of so that the problems of finding trained people and training people can be solved in the most optimal way.
The misconception about testing born in University
There is a huge problem today for the testing world related to universities—since the first year of learning software development, students learn how to code, but most of the time they are not taught testing until the last year or so and it’s just an elective. Here is a root problem for the testing community. Since our formative years, we learn a strict process, which is fairly reflected in the industry. In my experience, at the University of the Republic in Uruguay, first we learned mathematics and scientific subjects, which helped us to create abstract and logical thinking. Then we learned:
- Basic programming that is structured using fundamental builders
- Programming with abstract data types
- Programming algorithms on data structures
- OOP (C ++) programming
- A more abstract language (Java)
- Operating systems, architecture, and other areas of the same branch
- Then a difficult process such as RUP, putting it into practice in a group of 12 to 14 people
In these subjects, we have the chance to learn a little bit of testing. During the 4th or 5th year, there are often specific testing electives offered, but what does that lead students to believe: That testing is something that is left for the end and also optional (a very unpopular idea within the testing community). And what do you know? Is this not what usually happens in real-world software development? There’s so much talk about the “testing phase,” when it should not be a stage, but should go hand in hand with development itself. Testing should be a set of different activities that accompany and give feedback for development from the beginning. It’s worth noting that it is an empirical process that is based on experimentation, where it gives you information about the quality of a product or service to someone who is interested in it. This process should be going on the whole time so we can shed light upon the most information possible.
As performance testing guru, Scott Barber, puts it, “Only conducting performance testing at the conclusion of system or functional testing is like conducting a diagnostic blood test on a patient who is already dead.” (The same idea can be generalized for software testing.) Software quality cannot be added at the end of a project like a cube of sugar can be added to a cup of coffee to make it sweet after it’s already been brewed. In each stage of the development process, we will have testing activities to do that support different aspects of quality of the final project. If left to the end, testing is much more costly as bugs have had more time to grow and hide in software.
Furthermore, the time it takes to repair them also increases.
How Universities could better teach testing
Testers would like to see testing incorporated into the material about programming, teaching both tasks as a part of the same activity. Actually, most companies nowadays start testing before coding using TDD (test-driven development), BDD (behavior-driven development), ATDD (acceptance test-driven development), agile (where you should do a lot of unit testing), etc. If we want to build good software, we need to have good tests, managing them all together with the source code, and must only consider the code to be done once it has passed all of the tests. After teaching elementary testing as a companion activity to coding, universities could teach more specific subjects about sophisticated techniques of software testing.
There are certain things that university courses can implement to have a maximum impact and to fully prepare students for their testing careers. The first being helping testers develop the necessary soft skills to be effective testers. These skills include observation, analysis, communication, thinking outside the box, etc. One way to get students to think outside of the box is to have a discussion on how would you test a bottle. A car? A pen? Another effective way of teaching testing is to evaluate not only their knowledge on a multiple choice exam, but grade their actual testing work. Evaluating them as they put what they are learning into practice is much more practical than just making sure they have memorized all of the definitions in testing. Lastly, university professors can try to bring in real world projects or help testers with their work beyond the classroom. For example, I once had a student who told me he needed to test what he had developed for his thesis. We planned an exploratory testing session followed by “mob testing” his product. That was useful for him and proved to be very engaging for the rest of the class because what they were doing while learning was very useful for a classmate and thus served as a very nice motivator.
In-House Corporate Training
Finding trainable testers
In the past ten years, me and my company, Abstracta, have hired over 70 testers, and a fact that I am most proud of is that most of them still work with us. It is crucial to pick the right people who are highly trainable. Sometimes it’s more important to hire for attitude than skill as skill is easier to teach than having the right attitude.
How to find good testers? Well, this is a very complex topic by itself. Here is a very interesting article that gives good interview questions for hiring testers. When determining the traits that you need in a tester, it is important to know the soft skills that your company relies on to work cohesively, the technology and tools that your company uses, and which skills are required and those which would be nice for a tester to have.
Onboarding and training employees
Once you have found the perfect candidate, make sure not to fall off the wagon with onboarding them. One important thing to do is create a checklist of things that the new hire should do and by what date as well as what the rest of the team needs to go over with the new employee. It is also a good idea to ask the new hire what goals they want to set and work to accomplish during their onboarding. One could be to write a blog post in the first three months or study something new that they can present to the team. It may also be important that they finish learning something before starting on the project that they were hired to do.
To keep employees captivated and advancing through your company, you can turn to external and internal methods of training. Externally, you could put them in traditional courses or online courses (which we will talk about next). Internally, there are many ways to train your testers:
- Pair testing
- Rotating projects, have them help with others
- Have them learn something so they can present and teach it to everyone else in a seminar
- Propose events, conferences, etc., that testers can attend and present at to learn about new aspects of software testing
- Create communities of practice (ref. https://en.wikipedia.org/wiki/Community_of_practice)
- Special workshop lunches where testers can share ideas, project experiences, etc.
- Having a Slack channel (or similar) to share ideas, tips, interesting material, problems, experiences, questions and answers, etc., between experienced testers and new ones. In that way everyone knows about each other’s problems and solutions proposed by the rest of the team.
- Doing all of the above activities in teams of people who do not typically work in teams so they can create better ties and share knowledge
E-learning is an up-and-coming channel for training. Some of the best universities offer their courses online and there are more and more options to learn different things in the e-learning format (or even combining the best of both worlds by taking courses that are partially online).
Digital classes differ greatly from traditional ones as the challenge in e-learning is much bigger but so are their benefits and possibilities. The e-learning format works very well in cases when you are onboarding testers or giving them continuous training in the workplace because they can do it from the comfort of their desk. You can find classes in all formats from live webinars to just watching a YouTube video. Knowledge is abundant on the web and that’s what makes it so great!
At Abstracta, to take advantage of online learning, we have developed and promoted our employees by giving them online course trainings and certifications. We have even built our own online software testing certification courses as a part of our Abstracta Academy. We hire junior testers and as time goes by, they are able to learn new skills like performance testing to develop into senior testers and project managers.
Foundations for Learning
Lastly, there is the philanthropic model that is my favorite way to develop new junior testers. In my home country of Uruguay, I have had the opportunity to be a part of a social project called Project Nahual. The project started in Argentina ten years ago and two years ago we started one in Uruguay. Now, other countries are joining in like Colombia and Chile. Its mission is to train underprivileged youth in order for them to access better employment opportunities (of higher quality and higher pay). Project Nahual has so far been successful in teaching young people about technology. It specifically teaches software testing, as the idea is that it’s the quickest and most effective way to enter the technology sector because even though it may be challenging, it is easier to get involved with and the starting salaries are higher than those of other fields, at least in Uruguay.
Teaching people in this context is a very big challenge and at the same time it’s very rewarding: You are helping people to live a better life (making society better as a whole too), contributing to the growth of the technology field, and providing more trained people for basic testing tasks. Not to mention, the volunteers end up devoting their very precious time (which, when you really think about it, is one of the most valuable things anyone has to offer) to a wonderful project. As they volunteer, they learn how much knowledge about testing they already have and learn how to communicate it to those who are not used to technology, while at the same time making new friends. I hope that more people become inspired by this idea and consider starting up one of these projects in other countries as it has spread to mine.
In summary, the map to becoming a software tester is not limited to just one road. Here I discussed four different ways that I have watched testers be born from and grow, each with its own pluses and minuses. The great thing about software testing is that there is a large international community of testers, and one of the greatest resources we have to pull knowledge from is our fellow testers. Have you learned testing from a combination of ways? How do you think testing education could be made more accessible to the world? How else can we solve the problems of training and finding good testers?