Software testing is not an activity to take up when the product is ready. An effective Software Testing begins with a proper plan from the user requirements stage itself. Software testability is the ease with which a computer program is tested. Metrics can be used to measure the testability of a product. The requirements for effective Software Testing are given in the following sub-sections.
Operability in Software Testing:
1. The better the software works, the more efficiently it can be tested.
2. The system has few bugs (bugs add analysis and reporting overhead to the test process)
3. No bugs block the execution of tests.
4. The product evolves in functional stages (allows simultaneous development & testing)
Observability in Software Testing:
1. What is seen is what is tested
2. Distinct output is generated for each input
3. System states and variables are visible or queriable during execution
4. Past system states and variables are visible or queriable (eg., transaction logs)
5. All factors affecting the output are visible
6. Incorrect output is easily identified
7. Incorrect input is easily identified
8. Internal errors are automatically detected through self-testing mechanism
9. Internally errors are automatically reported
10. Source code is accessible
Controllability in Software Testing:
1. The better the software is controlled, the more the testing can be automated and optimised.
2. All possible outputs can be generated through some combination of input in Software Testing
3. All code is executable through some combination of input in Software Testing
4. Software and hardware states can be controlled directly by testing
5. Input and output formats are consistent and structured in Software Testing
6. Tests can be conveniently specified, automated, and reproduced.
Decomposability in Software Testing:
1. By controlling the scope of testing, problems can be isolated quickly, and smarter testing can be performed.
2. The software system is built from independent modules
3. Software modules can be tested independently in Software Testing
Simplicity in Software Testing:
1. The less there is to test, the more quickly it can be tested in Software Testing
2. Functional simplicity
3. Structural simplicity
4. Code simplicity
Stability in Software Testing:
1. The fewer the changes, the fewer the disruptions to testing
2. Changes to the software are infrequent
3. Changes to the software are controlled in Software Testing
4. Changes to the software do not invalidate existing tests in Software Testing
5. The software recovers well from failures in Software Testing
Understandability in Software Testing:
1. The more information we have, the smarter we will test
2. The design is well understood in Software Testing
3. Dependencies between internal external and shared components are well understood.
4. Changes to the design are communicated.
5. Technical documentation is instantly accessible
6. Technical documentation is well organized in Software Testing
7. Technical documentation is specific and detailed
8. Technical documentation is accurate