With countless types of software testing, it can be daunting to figure out what you should focus on and when. Our experience has taught us that focusing on the right testing at the right time, saves both time and money.
This diagram illustrates the software testing cycle. It starts with very specific tests on core components, then tests those components as a whole and works its way towards user acceptance and beta testing.
Following this testing cycle increases efficiency as each new test builds upon previous tests. To be even more efficient, using automated software testing will greatly reduce the effort when regression testing.
In an agile software testing environment, this testing cycle would be broken down into smaller cycles and have a higher dependence on regression testing.
Here is a brief description of the most common types of software testing:
1. Acceptance testing –Test cases are created from user stories. Normally this type of testing is done to verify that the system meets the customer’s specified requirements. This testing is performed to determine whether to accept an application.
2. Alpha testing – In house virtual user environment can be created for this type of testing. Testing is done at the end of software development. There is a possibility of some minor design changes as a result of such testing.
3. Beta testing – This is a final testing before releasing application for commercial purpose. This is the second phase of software testing in which a sample of the intended audience tries the product out.
4. Black box testing – Internal system design is not considered in this type of testing. Tests are based on requirements and functionality of the software.
5. Comparison testing – Comparison of product strengths and weaknesses with previous versions or with other similar products.
6. Compatibility testing – Testing how well software performs in a particular hardware/software/operating system/network environment and different combinations of above.
7. End-to-end testing – Similar to system testing, this involves testing of a complete application environment in a situation that mimics real-world use, such as interacting with a database, using network communications, or interacting with other hardware, applications, or systems if appropriate.
8. Functional testing – This type of testing ignores the internal parts and focuses on the output, i.e. whether the output is as per requirement or not. This is a black-box type testing geared to functional requirements of an application.
9. Incremental integration testing – Bottom up approach for testing i.e. continuous testing of an application as new functionality is added; Application functionality and modules should be independent enough to test separately. Incremental integration testing is done by programmers or by testers.
10. Install/uninstall testing – Tested for full, partial, or upgrade install/uninstall processes on different operating systems under different hardware and software environment.
11. Integration testing – Testing of integrated modules to verify combined functionality after integration. Modules are typically code modules, individual applications, client and server applications on a network, etc. This type of testing is especially relevant to client/server and distributed systems.
12. Load testing – This is a performance testing to check software behavior under load. This entails testing an application under heavy loads, such as testing of a web site under a range of loads to determine the point at which the system’s response time degrades or fails.
13. Performance testing – Term often used interchangeably with ’stress’ and ‘load’ testing. This utilizes different performance and load tools and checks whether the system meets performance requirements.
14. Recovery testing – Testing how well a system recovers from crashes, hardware failures, or other catastrophic problems.
15. Regression testing – Testing the application as a whole for modifications in any module or functionality. It is difficult to cover the entire system in regression testing so automation tools are typically used.
16. Sanity testing – Testing to determine if a new software version is performing well enough to be accepted for a major testing effort. If the application is crashing in initial use then the system is not stable enough for further testing.
17. Security testing – Testing to determine whether the system is vulnerable to hackers and to evaluate how well the system protects against unauthorized internal or external access.
18. Stress testing – System is stressed beyond its specifications to check how and when it fails. Testing is performed under heavy load, e.g. putting in large numbers beyond storage capacity, complex database queries, continuous input to system or database load.
19. System testing – The entire system is tested as per the requirements. Black-box type testing that is based on overall requirements specifications, this covers all combined parts of a system.
20. Unit testing – Testing of individual software components or modules. This is typically done by the programmer and not by testers, as it requires detailed knowledge of the internal program design and code. Testing may require developing test driver modules or test harnesses.
21. Usability testing – User-friendliness check. Application flow is tested, and it is determined whether a new user can understand the application easily. Proper help functions are documented at points where the user could potentially become stuck. System navigation is checked in this testing.
22. White box testing – This testing, also known as Glass Box Testing, is based on knowledge of the internal logic of an application’s code. Internal software and code workings should be known for this type of testing. Tests are based on coverage of code statements, branches, paths, and conditions.