Quality assurance is a deceptively simple phrase for what is one of the most integral parts of the software development process. While traditionally it’s been pushed back towards the end of the software development process, agile places a much higher importance on it, integrating quality assurance all the way through.
The idea, of course, is to ensure that the software product meets the client’s requirements and that it meets quality benchmarks.
All of this is a bit nebulous — and for good reason. A quality assurance professional has to be flexible and understand how the end-user is likely to interact with the software and how the client wants the software to be. It can be broken down into multiple areas:
- Front end
- Back end
- Test plans
- Systems testing
- Security testing
- Accessibility testing
- Manual testing
- Automated testing
Each one of these focuses on a slightly different point in the development life cycle. Front-end testing is perhaps the simplest — it can be as simple as using a command-line interface or a GUI and ensuring the software acts as intended. However, it might be more in-depth, with knowledge of scripting, hacking, and other forms of cyber assault being used to try to force the interface to break or reveal information that the user shouldn’t have access to. That falls more in line with security testing, but it is still fundamentally the same job.
Backend testing checks how databases, business logic, and other parts interact with the developed application, perhaps comparing inputs or ensuring that data is correctly retrieved and secured.
Test plans help predict the application path, and systems testing checks that the application works with a variety of other systems — including legacy ones. Security testing is fairly self-explanatory, and accessibility testing checks that it works with voice software and conforms to various regulatory requirements.
Depending on what sort of business you’re in, you may focus on a highly specific role, or you might have a combination of tasks across multiple roles. It also depends on what your specialties are. Someone with in-depth knowledge of front-end development might choose to focus primarily on the front end while someone with cybersecurity training might focus on the security aspect. In addition, you may not necessarily know how the system works — black box testing means that you’re coming at it from a position of zero knowledge about the system, whereas white box testing means that you have at least a structural knowledge of the system.
QA testing generally requires some skill with computer languages and a willingness to learn. Various iterations of C, HTML, Java, Python and Ruby are often desirable, and you can pick up other languages on the way. Object-oriented languages are particularly useful (C#, Java, Python) and a good knowledge of testing frameworks: GitLab, Jenkins, Bitbucket, Bamboo and Selenium are good starters.
You may also need to know specialized project management software. Atlassian’s group of products (which also includes Bitbucket) such as Jira are often used to track bugs and events, and Confluence is usually desirable. Other software to be familiar with include:
People skills are essential to quality assurance. In many cases, you will be delivering bad news to developers who have worked very hard on the project, and you also need to understand how to focus on the small things while still seeing the big picture. A lot of it is asking the right questions — many of which are essentially variations of “how can I break this?”
You also have to be able to write reports and communicate concepts clearly and succinctly as well as conform to a team mindset.
Ultimately, agile views software QA as a vital part of the team throughout the development process, and this results in fewer software-breaking bugs making it through to the end of the development stage. If you are a software QA developer, have a look on our careers page to see if there are any jobs that may be suited to you.