How do software development teams make sure the products they release are of high quality?
Not so long ago, a cynical answer to this question would have been something like, “Since when did software development teams care about quality?” It’s unfair, but it’s rooted in perceived quality issues from all types of development teams, from “lone wolf” contract developers to giant software conglomerates.
Before we can answer how quality development occurs, we need to know exactly what “software quality” is. As it turns out, the term means different things to various stakeholders.
Five aspects of software quality must be addressed in every software project:
This is the most straightforward component because it’s based on clear, objective criteria derived from functional requirements of the application. Does the software meet each requirement? If it does, it passes; if not, it fails. Functional requirements must be written in a way that satisfies clear, “testable” criteria.
This component tends to be more subjective, and essentially revolves around two questions: “Do users like it?” and “Does it look good?” Various methods can be used to check usability, from checklists to full-fledged usability tests involving actual users.
This is another component that is often subjective and based on arbitrary criteria, such as “complete processing within a few seconds” or “load page under 1 second.” Some applications (such as software that automatically executes foreign-exchange transactions in overseas markets) have very strict performance requirements and are subject to rigorous performance testing.
Security has become increasingly important in recent years. It’s critical need has created an entire sub-specialty of software quality.
This aspect affects the development team more than end-users, but it’s important; especially for whoever is paying the bills. Poorly designed applications are expensive to update when the underlying architecture has to be redesigned. A high-quality application will be “future-proofed;” that is, designed in anticipation of being modified at some point.
It’s helpful to have some idea of the product roadmap so the developers know what modifications to expect. They can then design accordingly.
Quality begins by ensuring development and QA teams understand the requirements of the software, its intended use, characteristics of the expected users, and the environment in which users operate. By keeping these in mind, the development team can make appropriate design choices.
The team can rely on several techniques to maintain a high level of quality throughout the development project:
There are many others. How well each one works depends on the size and scope of the project as well as the availability of resources, the project schedule, and the type of software being developed (mobile app, web app, firmware, and so on).
The agile development methodology is quite well-suited for ensuring product quality. The software is constantly subjected to testing and evaluation by both the QA team and the customer. It also improves quality when the entire team, including the customer, is involved in the project from beginning to end. There is ongoing communication and transparency among all stakeholders and problems are managed as they are identified instead of waiting.
Here’s an obviously important component of quality assurance in software is testing: You can’t know whether the code works until you try it out. Several types of testing are now used in most development projects depending on size, scope, and software type:
Many types of testing can be automated to at least some degree. Automated testing makes the testing process more efficient, comprehensive, and repeatable; all of which are important in a fast-paced agile environment.
Quality is a product of continuous improvement. Good development teams constantly seek better, more effective ways to build quality into their software and provide the best possible product to their customers.
Even with the best testing methods, the most rigorous coding standards, and the most thorough testers, no software of any appreciable complexity is going to be “bug-free.” But with a sound development methodology, open communication, and a high level of discipline among all stakeholders, QA can minimize trouble and release a quality product.