Software Testing is a process used to identify the correctness, completeness and quality of the developed software. There are a number of different testing approaches that are used to do this ranging from the most informal ad hoc testing, to formally specified and controlled methods such as Automated testing.
The Quality of the application can and normally does vary widely from system to system but some of the common quality attributes include reliability, stability, portability, maintainability and usability, for a more complete listing of attributes it is suggested that the ISO standard ISO-9126 be consulted.
A list of software testing activities includes:
- System functional testing
- Regression testing
- Load testing
- Performance testing
- Stress testing
- Security testing
- Installation testing
- User testing
- Stability testing
- Authorization testing
- Customer acceptance testing
- Conformance testing
In general, software engineers distinguish software faults and software failures. In case of a failure, the software does not do what the user expects. A fault is a programming error that does not actually manifest itself. A fault can turn into a failure when the software is ported to a different hardware platform or a different compiler, or when the software gets extended.
Software testing is a sub-field of Software Quality Assurance. In the latter, software engineers take a broader view on software and its development. They examine and change the software engineering process itself to reduce the amount of faults that end up in the code.
Regardless of the methods used or level of formality involved the desired result of testing is a level of confidence in the software, so that the developers are confident that all possible defects have been identified and resolved, that the software is function correctly and that in the event of major failure that they can state in a court of law that they did every thing humanly possible to insure that the software was safe, and correct.