Software quality assurance involves testing computer software design and implementation and ensuring that it meets a minimum standard of quality. At the core of the quality assurance process is testing, which is the method by which every step of the development cycle is analyzed in order to find defects, such as malfunctions or security problems. The most commonly known part of the software quality assurance process is software and code testing; however, it also covers other aspects of the engineering cycle. Other aspects of software engineering that are subject to quality analysis include the design and implementation stages.
The overall concept of software quality assurance requires it to start at the software planning phase. Poorly planned software can be difficult or impossible to write in a way that meets the expectations of the organization that envisioned it. Quality management at the design stage involves studying the ramifications of the project's specifications, or goals, as well as the organization's plans for achieving their goals. The benefit of quality analysis at the design phase is that it finds and eliminates mistakes early, rather than later in the development cycle when design problems are much more expensive to fix.
A software test engineer, also known as a software quality analyst, is the primary person responsible for carrying out the testing process. This person designs and executes the test plans that will assist an organization in improving the quality of their software. Ideally, a programmer should never test his own product, which means that within a project, a programmer and test engineer are two different people.
Test plans are a critical part of the system of quality assurance, particularly the software testing phase. The purpose of test plans is to determine conditions that mark the success or failure of software. A typical test plan will include a comprehensive list of programs and sub-programs, or procedures that must be tested, as well as the techniques involved in testing. Another critical function of a test plan is determining which defects are unacceptable. Test plans are typically designed before the project's actual software code is developed.
When test engineers write programs to implement test plans, these are called test scripts. Test scripts are an essential part of the software quality assurance process. Their purpose is to automate the testing of a program's existing code in order to find defects. In addition, test engineers typically use commercially designed testing tools to look for potential issues. Test plans are implemented during the coding stage of software development.
There are a number of important steps involved in the actual testing stage of the software quality assurance process. These include unit testing, which assesses the integrity of various sections of software code, as well as fault injections, which are designed to investigate how the programs respond to erroneous data. Additional steps include load testing, or stress testing, which sees how a program functions under heavy usage, and intrusion or security testing to test a program's resistance to unauthorized access. A software project is also typically subjected to usability testing, in order to verify that the resulting program is easy for others to use.
Specialists who engage in software code testing are generally separated into two groups, one called black box testers and the other known as white box, or glass box, testers. Black box testing is a more superficial process that begins at the software coding stage and does not examine any underlying computer code. It investigates a software's usability, cosmetic consistency, and the occurrence of errors and malfunctions.
White box testing is a process that starts at the very beginning of the software quality assurance process, at the design stage. It includes the prediction of potential problems before the code is actually written, as well as writing test plans and advanced test scripts. Unlike black box testing, white box testing also involves the study of the underlying computer code.
Quality assurance also applies to the software implementation phase, which is when the software is close to completion and is installed on computer systems for evaluation. This phase is often referred to as alpha testing and it occurs when the nearly finished product is installed and tested by the developer staff. When the software is presented to potential customers outside the company, it is called beta testing. If defects appear after the software is released and a patch needs to be developed, regression testing is used to ensure that new errors are not created by the updates.