Over the years the software industry has developed many solutions to producing quality software to meet business needs. Software, however, is an ever-changing industry, and our tried methods are failing to keep up with modern development practices. Quality Engineering has made waves in the industry for a few years and is often associated with iterative or agile development processes, as a new way of ensuring quality software. How does Quality Engineering fit in to traditional Quality Assurance to get us working software?
According to the Oxford English dictionary, Quality Assurance is defined as “The maintenance of a desired level of quality in a service or product, especially by means of attention to every stage of the process of delivery or production.” Quality Assurance is a process developed by the manufacturing sector, which was grappling with the quality problem during reconstruction after the Second World War. Software Quality Assurance borrows from this history to help ensure that we produce working software. In a typical organization, the Quality Assurance team acts as a final gatekeeper for software, testing the “done” software against a static requirements specification and either approving the release for production or denying it with a list of defects that the development team needs to fix.
Quality Engineering on the other hand is a relative newcomer to the scene. Quality Engineering is a holistic approach to quality software across many different parts of the organization to quickly assure quality software is going to be produced and has been produced, meeting the latest requirements, and that no regressions have been introduced.1
Quality Engineers will work with management to ensure quality is scoped into the application from the outset. They work with the product stakeholders to ensure that quality is accounted for while defining the requirements. They assist the development team (in agile they are an integral part of the development team) to design quality software and ensure that the software is written to be testable from the beginning. From Unit Tests down to Automated UI tests, software generally needs to be written so it can be tested robustly, without needing to change all the tests when a requirement change is made.
Quality Engineers will have the final say on when software is complete and on executing any final necessary manual tests. They enforce the definition of “done”; reminding the rest of the development team to pay attention to the CI environment if and when tests are failing. Finally, they will help design the ongoing application monitoring solutions, with the rest of the development team, to ensure that the released software is still functioning as expected.
Quality Assurance and Quality Engineering have some differences as well. As our software projects move towards faster and faster iterations, traditional Quality Assurance is usually unable to manually regression test the entire application along with all of the new features as the products get larger. This pushes Quality Engineers to need new scripting skills to develop automated tests. Along with automated UI testing, Quality Engineers need to educate and assist the rest of the development team in properly testing their code. Agile best practices typically dictate that the bulk of the testing happens at the unit test level, with less integration/api tests, functional UI tests, and minimal manual tests.
Quality Assurance in the past needed only to think about the test plans and whether or not the test cases were passing. Now, with the additional responsibilities stated above, Quality is moving earlier and earlier in the process. This necessitates that engineers think holistically, across the organizational boundaries, and be able to speak to different teams and stakeholders about the quality.
So to answer the question posed at the beginning, how does Quality Assurance and Quality Engineering fit together? Quality Assurance is an aspect of Quality Engineering. Producing quality software is hard and getting it right is everyone’s job. Getting Quality Engineers involved in the software delivery process early helps ensure that quality software is being built from the beginning.
- Ruth Breu; Annie Kuntzmann-Combelles; Michael Felderer (January–February 2014). “New Perspectives on Software Quality” (PDF). IEEE Software. IEEE Computer Society. pp. 32–38. Retrieved 2017-02-16.