In large, complex applications, such as operating systems, it is practically impossible to iron out every single bug before releasing it both from a difficulty point of view and due to time constraints. Different software applications require different approaches when it comes to testing, but some of the most common tasks in software QA include:
- PPQA audits: Process and Product Quality Assurance is the activity of ensuring that the process and work product conform to the agreed upon process.
- Validation testing: Validation testing is the act of entering data that the tester knows to be erroneous into an application. For instance, typing "Hello" into an edit box that is expecting to receive a numeric entry.
- Data comparison: Comparing the output of an application with specific parameters to a previously created set of data with the same parameters that is known to be accurate.
- Stress testing: A stress test is when the software is used as heavily as possible for a period of time to see whether it copes with high levels of load. Often used for server software that will have multiple users connected to it simultaneously. Also known as Destruction testing. Fault injection is especially useful for any software system with exposed interfaces, e.g., protocol implementations.
- Conformance testing: Confirms that the software implementation complies with established standards.
- Load testing: Establishes the maximum amount of traffic that a target can accept.
- Usability testing: Confirms that the software solution is "user-friendly" enough.
- Robustness testing: Software systems are presented with invalid or unexpected inputs to determine whether they have robust error-handling or input validation. Such systems pass the test(s) if they can tolerate a wide variety of invalid or unexpected inputs across the entire protocol interface specification.