How is software quality assurance different from software testing?
Testing runs the software to find defects. Quality assurance looks at the whole way the software is built, so fewer defects are created in the first place. Testing is one activity inside a quality assurance system.
| Software quality assurance (QA) | Software quality control (QC) | Software testing | |
|---|---|---|---|
| Focus | The process used to build the software | The product that comes out | Running the software against expected results |
| Approach | Preventive | Detective | Detective |
| Typical activities | Standards, code review, process audits, training | Inspection, defect tracking, release checks | Unit, integration, system and acceptance tests |
| Timing | Throughout the lifecycle | At milestones and before release | During and after build |
What does a software quality assurance process include?
- Quality plan. Agree the standards, roles, tools and the measures that will show quality is on track.
- Requirements review. Check that requirements are clear, testable and complete before work starts.
- Reviews and inspections. Peer code review and design review catch problems while they are cheap to fix.
- Test planning. Decide what will be tested, at which level and with what pass criteria.
- Process audits. Confirm the team is following the agreed process, not just producing output.
- Defect management. Log each defect, find the root cause and fix the process, not only the code.
- Release and retrospective. Check the release criteria, then review what to change next time.
What are common software quality assurance measures?
- Defect density: defects found per size of the software, such as per thousand lines of code.
- Escaped defects: problems found by users after release.
- Test coverage: the share of code or requirements exercised by tests.
- Review effectiveness: the share of defects caught before testing.
- Mean time to repair: how long a defect takes to fix once found.
Which standards apply to software quality assurance?
ISO/IEC 25010 defines software product quality characteristics such as reliability, security and maintainability. ISO 9001 sets quality management system requirements that many software teams adopt for their processes. Teams often add CMMI or an agile framework for how the work is run.