In the ever-evolving landscape of software development, the spotlight often falls on the developers, heralded as the rock stars of the process, building the foundations and bringing ideas to life.
But elsewhere in the tech world, software testing is undergoing a quiet revolution. Testers play a crucial role in ensuring the quality and reliability of the final product. Under the wider umbrella of Quality Engineering, there’s a host of unique advantages and exciting opportunities along its career path. Here are a few of them!
In making sure software works properly, testing is often reduced to “playing with the software, and seeing what happens”. But testing is much more complicated than that! It’s a complex discipline which involves understanding requirements, planning carefully, and paying attention to detail. There are no “best practices”, only good practices which are used in an appropriate context. You’ll use a variety of different techniques and tools to check if the software behaves correctly and performs as it should.
Testing has traditionally been seen as a very “manual” process: you might be familiar with the stereotype of a room full of testers, isolated from the world, filling out spreadsheets of test cases with columns like “Expected Output” and “Actual Output”. But the rising popularity of test automation has rapidly shifted the expected skillset of a tester.
Organisations are now keen to hire testers who have experience in programming, and working with popular test automation frameworks such as Selenium. These same abilities make it possible for testers to be active participants in code reviews, allowing them to spot potential problems before they ever get their hands on working code. Test Automation Engineers (sometimes referred to as Software Developers in Test, or SDETs) can be some of the most valuable members of a rapidly delivering development team.
Even if you’re not writing test automation, being a skilled programmer can give you incredible opportunities to augment your testing. For instance, rather than manually running dozens of API tests by hand, imagine if you built a tool which would repeatedly submit requests with randomly generated data, and which would automatically report if an unexpected response was received. Rather than being a threat to a tester’s role, coding gives testers the ability to perform at an even higher level.
One of the most important weapons in a tester’s arsenal is the word “Why”. If you’ve got a natural curiosity, you’ll get plenty of opportunities to leverage it during your testing activities. It’s the ability to spot that one loose thread in an application which, when pulled, makes the entire process collapse like a deck of cards. Or, after discovering a bug, it’s the drive to identify the exact circumstances which cause the bug to occur (perhaps even analysing the code itself to pinpoint the problem).
In your most zen moments, you’ll be undertaking activities with a sense of deep focus. Yet there’s also a skill in knowing when to defocus: when to come back up for air, and refocus your testing efforts elsewhere. Those memes where characters see floating algebra equations around their heads? That’s most days in testing.
Being a software tester is like being a digital scientist. Just as scientists formulate hypotheses and conduct experiments, testers develop theories about how the software is behaving, and then design tests to validate or challenge those assumptions. They make educated guesses about potential issues, vulnerabilities, or corner cases, and then systematically investigate them.
Testers meticulously vary test inputs, pushing the software to its limits, and carefully observe the outcomes, akin to changing variables in a scientific experiment. Whereas developers might only have time to analyse the “happy path” of how an application should be behaving, it’s the testers who get to pull out their beakers and create the trickiest concoctions. You think the “Name” field on your form is behaving correctly? What if you enter a name with accented characters? Does the field also accept numbers (and should it)? What about double-barrelled surnames? What if you paste an extremely large amount of text, like the complete works of Shakespeare? Testing gives you the opportunity to be endlessly creative.
Testing often gets reduced to a verb: the act of performing some tests. Or it’s treated as a phase of the development process: “we’ve built some software, now it’s time to test it”. It’s certainly possible to “test” at other stages of the development process—for instance, by performing analysis of a requirements specification—but this still underplays the role that a tester can serve within a team.
In Quality Engineering, we seek to improve the overall quality of a software product or system throughout its entire lifecycle. In part, this is achieved by “shifting left” with our testing efforts: ensuring testers are involved during planning and development activities, potentially even pairing with developers while they’re writing their code, or helping them to generate representative unit tests. There’s also a goal of “shifting right”, by getting the test team involved with deployment processes, CI/CD pipelines, and ensuring that logging/monitoring is configured to help us to identify issues in production.
While many disciplines within the software development process may be quite “heads-down”, testers seek to take a proactive and holistic approach to quality, by being comfortable with communicating with people from different disciplines, and being able to clearly and accurately deliver information about the quality of a product—even if that news is bad!
Testing isn’t a single skill. You’re not going to “complete” testing. There are many specialisms where somebody could choose to dedicate their career: for example, accessibility testing (ensuring that software is usable by people with additional needs, such as with a screen reader), security testing (ensuring that applications are robust enough to withstand potential hacks or other attacks) or usability testing (working with real users to uncover their thoughts about new or future iterations of a product). Even if you don’t opt to specialise, there’s a need to incorporate facets of these non-functional requirements in most projects that you’ll be working on.
And that’s only the specialisms that we know of today. In recent years, software development trends have had knock-on effects for testers, as they’ve had to work to keep their skills up-to-date with what they’re testing. The rise in microservices and the “Internet of Things” (IoT) have led to, among other things, a rise in the need for API testing skills. Similarly, advances in artificial intelligence have created a need for stronger domain knowledge, including understanding AI models and data sets. If you like a variety of challenges, working in Quality Engineering will offer you a rich vein of them.
There are many compelling reasons to consider Quality Engineering as a potential career path. You get to be a proactive advocate for product quality, communicating with people from a wide variety of disciplines, and you’ll be exploring the unknown whilst wielding your skills in planning, analysis, note-taking and reporting. With its diverse and dynamic nature, a career in Quality Engineering opens up exciting opportunities to make a tangible difference in the software development process.