In this post ‘Types of Software Testing‘, I would like to mention almost all the software testing types in one place. One challenge to learning about software testing is that there are many terms in the industry, and these terms often used inconsistently. While there is no universally-accepted definitions for all the testing terms, I think a good source is to refer ISTQB Certified Tester Foundation Level Syllabus.
The Ultimate List of 100+ Software Testing Types
I would like to start with Software Testing before going to the actual post 100+ Software Test Types.
Software Testing: It is a process, to evaluate the functionality of a software application with an intent to find whether the developed software met the specified requirements or not and to identify the defects to ensure that the product is defect-free in order to produce a quality product. Read more on Software Testing Definitions & Approaches.
The Ultimate List of Types of Testing:
Let’s see different types of Testing one by one.
1. Functional testing: In simple words, what the system actually does is functional testing. To verify that each function of the software application behaves as specified in the requirement document. Testing all the functionalities by providing appropriate input to verify whether the actual output is matching the expected output or not. It falls within the scope of black-box testing and the testers need not concern about the source code of the application.
2. Non-functional testing: In simple words, how well the system performs is non-functionality testing. Non-functional testing refers to various aspects of the software such as performance, load, stress, scalability, security, compatibility, etc., Main focus is to improve the user experience on how fast the system responds to a request.
3. Manual testing: Manual testing is the process of testing the software manually to find the defects. A tester should have the perspective of an end-user and to ensure all the features are working as mentioned in the requirement document. In this process, testers execute the test cases and generate the reports manually without using any automation tools.
4. Automated testing: Automation testing is the process of testing the software using an automation tool to find the defects. In this process, executing the test scripts and generating the results are performed automatically by automation tools. Some most popular tools to do automation testing are HP QTP/UFT, Selenium WebDriver, etc.,
Learn the Difference between Manual & Automated Testing here…
5. Black box testing: Black Box Testing is a software testing method in which testers evaluate the functionality of the software under test without looking at the internal code structure. This can be applied to every level of software testing such as Unit, Integration, System and Acceptance Testing.
6. Glass box testing: The glass box testing is a methodology of testing that scans the program structure and then creates the test data based on the flow and logic of the program. This type of testing is mainly done by utilizing the internal programming logic to select the proper test data and to remove design errors.
The glass box testing is called open box testing, logic-driven testing, path driven testing, or clear box testing. The techniques of glass box testing are Path Coverage, Branch Coverage, and Statement Coverage.
7. White box testing: White Box Testing is also called as Glass Box, Clear Box, and Structural Testing. It is based on applications internal code structure. In white-box testing, an internal perspective of the system, as well as programming skills, are used to design test cases. This testing usually was done at the unit level.
8. Specification-based testing: Specification-based testing is similar to behavior-driven testing and black-box testing. The testers perform this testing by viewing the application as a black box and they do not have any understanding of the internal logic or the flow of the program. Thus in short the testers are more concerned with the behavior of the application.
Specification-based testing includes both nonfunctional and functional testing. A specification may be in the form of a prototype, a written document, a group of use cases. It is considered a reference for building test data. The techniques for specification-based testing are Decision Table, Equivalence Partitioning, Boundary Value Analysis, and State Transitioning.
9. Structure-based testing:
The structure-based testing requires the technical know-how of the program logic and flow. This type of testing ensures that there is maximum test coverage and test design is proper. The structure-based testing is adopted in the initial phase of the project development to determine the amount of testing that is needed.
The structure-based testing also assists in creating some additional test cases to increase the test coverage, different from preexisting test cases. So it achieves more depth in testing. The techniques for structure-based testing are Path testing, Condition Testing, Multiple Condition Testing, Decision Testing, and Statement Testing.
10. Gray box testing: Grey box is the combination of both White Box and Black Box Testing. The tester who works on this type of testing needs to have access to design documents. This helps to create better test cases in this process.
11. Unit testing: Unit Testing is also called Module Testing or Component Testing. It is done to check whether the individual unit or module of the source code is working properly. It is done by the developers in the developer’s environment.
12. Component testing: Refer Unit Testing
13. Module testing: Refer Unit Testing
14. Integration testing: Integration Testing is the process of testing the interface between the two software units. Integration testing is done by multiple approaches such as Big Bang Approach, Top-Down Approach, Bottom-Up Approach, and Hybrid Integration approach.
15. System testing: Testing the fully integrated application to evaluate the system’s compliance with its specified requirements is called System Testing AKA End to End testing. Verifying the completed system to ensure that the application works as intended or not.
16. Acceptance testing: It is also known as pre-production testing. This is done by the end-users along with the testers to validate the functionality of the application. After successful acceptance testing. Formal testing conducted to determine whether an application is developed as per the requirement. It allows the customer to accept or reject the application. Types of acceptance testing are Alpha, Beta & Gamma.
17. Big bang Integration Testing: Combining all the modules once and verifying the functionality after completion of individual module testing.
Top-down and bottom-up are carried out by using dummy modules known as Stubs and Drivers. These Stubs and Drivers are used to stand-in for missing components to simulate data communication between modules.
18. Top-down Integration Testing: Testing takes place from top to bottom. High-level modules are tested first and then low-level modules and finally integrating the low-level modules to a high level to ensure the system is working as intended. Stubs are used as a temporary module if a module is not ready for integration testing.
19. Bottom-up Integration Testing: It is a reciprocate of the Top-Down Approach. Testing takes place from bottom to up. Lowest level modules are tested first and then high-level modules and finally integrating the high-level modules to a low level to ensure the system is working as intended. Drivers are used as a temporary module for integration testing.
20. Hybrid Integration Testing: Hybrid integration testing is the combination of both Top-down and bottom-up integration testing.
21. Alpha testing: Alpha testing is done by the in-house developers (who developed the software) and testers. Sometimes alpha testing is done by the client or outsourcing team with the presence of developers or testers.
22. Beta testing: Beta testing is done by a limited number of end-users before delivery. Usually, it is done in the client’s place.
23. Gamma Testing: Gamma testing is done when the software is ready for release with specified requirements. It is done at the client’s place. It is done directly by skipping all the in-house testing activities.
24. Equivalence partitioning testing: Equivalence Partitioning is also known as Equivalence Class Partitioning. In equivalence partitioning, inputs to the software or system are divided into groups that are expected to exhibit similar behavior, so they are likely to be proposed in the same way. Hence selecting one input from each group to design the test cases.
25. Boundary value analysis testing: Boundary value analysis (BVA) is based on testing the boundary values of valid and invalid partitions. The Behavior at the edge of each equivalence partition is more likely to be incorrect than the behavior within the partition, so boundaries are an area where testing is likely to yield defects. Every partition has its maximum and minimum values and these maximum and minimum values are the boundary values of a partition. A boundary value for a valid partition is a valid boundary value. Similarly, a boundary value for an invalid partition is an invalid boundary value.
26. Decision tables testing: Decision Table is aka Cause-Effect Table. This test technique is appropriate for functionalities which has logical relationships between inputs (if-else logic). In the Decision table technique, we deal with combinations of inputs. To identify the test cases with a decision table, we consider conditions and actions. We take conditions as inputs and actions as outputs.
27. Cause-effect graph testing: The cause-effect graph testing is a test case development methodology that begins with a collection of requirements and then identifies the optimal number of test cases needed to achieve maximum coverage with minimum time and cost.
28. State transition testing: Using state transition testing, we pick test cases from an application where we need to test different system transitions. We can apply this when an application gives a different output for the same input, depending on what has happened in the earlier state.
29. Exhaustive Testing: Testing all the functionalities using all valid and invalid inputs and preconditions is known as Exhaustive testing.
30. Early Testing: Defects detected in the early phases of SDLC are less expensive to fix. So conducting early testing reduces the cost of fixing defects.
31. Use case testing: Use case testing is carried out with the help of a use case document. It is done to identify test scenarios to test end to end testing
32. Scenario testing: Scenario testing is a software testing technique that is based on a scenario. It involves converting business requirements to test scenarios for better understanding and achieve an end to end testing. A well-designed scenario should be motivating, credible, complex, and the outcome of which is easy to evaluate.
33. Documentation testing: Documentation testing is done to validate the documented artifacts such as requirements, test plan, traceability matrix, test cases.
34. Statement coverage testing: Statement coverage testing is a white box testing technique which is to validate whether each and every statement in the code is executed at least once.
35. Decision coverage testing/branch coverage testing: Decision coverage or branch coverage testing is a white box testing technique which is to validate every possible branch is executed at least once.
36. Path testing: Path coverage testing is a white box testing technique which is to validate that all the paths of the program are executed at least once.
37. Mutation testing: Mutation testing is a type of white box testing which is to change (mutate) certain statements in the source code and verify if the tests are able to find the errors.
38. Loop testing: Loop testing is a white box testing technique which is to validate a different kind of loops such as simple loops, nested loops, concatenated loops, and unstructured loops.
39. Performance testing: This type of testing determines or validates the speed, scalability, and/or stability characteristics of the system or application under test. Performance is concerned with achieving response times, throughput, and resource-utilization levels that meet the performance objectives for the project or product.
40. Load testing: It is to verify that the system/application can handle the expected number of transactions and to verify the system/application behavior under both normal and peak load conditions.
41. Stress testing: It is to verify the behavior of the system once the load increases more than its design expectations.
42. Soak testing: Running a system at high load for a prolonged period of time to identify the performance problems is called Soak Testing.
43. Endurance testing: Endurance testing is a kind of nonfunctional testing. It is also called soak testing. An application is given a considerable load for a considerable duration to check its behavior and performance under such a condition.
44. Stability testing: Stability testing is a testing methodology used to check the capacity of the application to do the required actions under a specific state or stress. It is a type of non-functional testing and is used to detect performance bugs.
Stability testing is sometimes called endurance testing. It is an optional testing technique used to verify if the application can perform uninterruptedly for a specific duration of time with a significant number of users and stress. It also checks memory leaks or other issues that degrade the stability of the application.
45. Scalability Testing: Scalability testing is a type of non-functional testing. It is to determine how the application under test scales with the increasing workload.
46. Volume testing: It is to verify that the system/application can handle a large amount of data
47. Robustness testing: Robustness testing is a type of testing that is performed to validate the robustness of the application.
48. Vulnerability testing: Vulnerability testing is the process of identifying the vulnerabilities or weaknesses in the application.
49. Adhoc testing: Ad-hoc testing is quite opposite to the formal testing. It is an informal testing type. In Adhoc testing, testers randomly test the application without following any documents and test design techniques. This testing is primarily performed if the knowledge of testers in the application under test is very high. Testers randomly test the application without any test cases or any business requirement document.
50. Exploratory testing: Usually, this process will be carried out by domain experts. They perform testing just by exploring the functionalities of the application without having the knowledge of the requirements.
51. Retesting: To ensure that the defects which were found and posted in the earlier build were fixed or not in the current build. Say, Build 1.0 was released. The test team found some defects (Defect Id 1.0.1, 1.0.2) and posted. Build 1.1 was released, now testing the defects 1.0.1 and 1.0.2 in this build is retesting.
52. Regression testing: Repeated testing of an already tested program, after modification, to discover any defects introduced or uncovered as a result of the changes in the software being tested or in another related or unrelated software components.
53. Smoke testing: Smoke Testing is done to make sure if the build we received from the development team is testable or not. It is also called as “Day 0” check. It is done at the “build level”. It helps not to waste the testing time to simply testing the whole application when the key features don’t work or the key bugs have not been fixed yet.
54. Sanity testing: Sanity Testing is done during the release phase to check for the main functionalities of the application without going deeper. It is also called as a subset of Regression testing. It is done at the “release level”. At times due to release time constraints rigorous regression testing can’t be done to the build, sanity testing does that part by checking main functionalities.
55. Dynamic testing: Dynamic testing involves the execution of code. It validates the output with the expected outcome
56. Static testing: Static Testing involves in reviewing the documents to identify the defects in the early stages of SDLC.
57. Monkey testing: Perform abnormal action on the application deliberately in order to verify the stability of the application.
58. Gorilla testing: Gorilla testing is done by testers, sometimes developers also join hands with testers. It involves testing a system repeatedly to test the robustness of the system.
59. Usability testing: To verify whether the application is user-friendly or not and was comfortably used by an end-user or not. The main focus of this testing is to check whether the end-user can understand and operate the application easily or not. An application should be self-exploratory and must not require training to operate it.
60. Accessibility testing: Accessibility testing is a subset of usability testing. It aims to discover how easily people with disabilities (such as visual Impairments, Physical Impairment, Hearing Impairment, Cognitive Impairment, Learning Impairment) can use a system.
61. Compatibility testing: It is to deploy and check whether the application is working as expected in a different combination of environmental components.
62. Configuration testing: Configuration testing is the process of testing an application with each one of the supported hardware and software configurations to find out whether the application can work without any issues.
63. Localization testing: Localization is a process of adapting globalization software for a specific region or language by adding local specific components.
64. Globalization testing: Globalization is a process of designing a software application so that it can be adapted to various languages and regions without any changes.
65. Internationalization testing– Refer Globalization testing
66. Positive Testing: It is to determine what system supposed to do. It helps to check whether the application is justifying the requirements or not.
67. Negative testing: It is to determine what system not supposed to do. It helps to find the defects from the software.
68. Security testing: Security testing is a process to determine whether the system protects data and maintains functionality as intended.
69. Penetration testing: Penetration testing is also known as pen testing. It is a type of security testing. It is performed to evaluate the security of the system.
70. Database testing: Database testing is done to validate the data in the UI is matched with the data stored in the database. It involves in checking the schema, tables, triggers etc., of the database.
71. Bucket Testing: Bucket testing is a method to compare two versions of an application against each other to determine which one performs better.
72. A/B testing: Refer Bucket Testing…
73. Split testing– Refer bucket testing…
74. Reliability Testing: Perform testing on the application continuously for a long period of time in order to verify the stability of the application
75. Interface Testing: Interface testing is performed to evaluate whether two intended modules pass data and communicate correctly to one another.
76. Concurrency testing: Concurrency testing means accessing the application at the same time by multiple users to ensure the stability of the system. This is mainly used to identify deadlock issues.
77. Fuzz testing: Fuzz testing is used to identify coding errors and security loopholes in an application. By inputting a massive amount of random data to the system in an attempt to make it crash to identify if anything breaks in the application.
78. GUI Testing: Graphical User Interface Testing is to test the interface between the application and the end user. Mainly testers concern about the appearance of the elements such as fonts and colors conforms to design specifications.
79. API testing: API stands for Application Programming Interface. API testing is a type of software testing that involves testing APIs using some tools like SOAPUI, PostMan.
80. Agile testing: Agile testing is a type of testing that involves following principles of agile software development methodology. In this agile testing, testing is conducted throughout the lifecycle of the continuously evolving project instead of being confined to a particular phase.
81. End to end testing: The end to end testing is a testing methodology to check if the flow of the software from beginning till the end is as per the expected result. It helps to determine the dependencies in the system and ensures there is no data loss or corruption while the interaction between multiple components.
While doing end to end testing, the key features like interaction among the database, other systems, network, and so on are tested and verified if they are happening as per expected results.
82. Recovery testing: Recovery testing is performed in order to determine how quickly the system can recover after the system crash or hardware failure. It comes under the type of non-functional testing.
83. Risk-based testing: Identify the modules or functionalities which are most likely cause failures and then testing those functionalities.
84. Installation testing: It is to check whether the application is successfully installed and it is working as expected after installation.
85. Formal Testing: It is a process where the testers test the application by having pre-planned procedures and proper documentation.
86. Pilot testing: Pilot testing is testing carried out under a real-time operating condition by the company in order to gain the confidence of the client
87. Backend testing: Backend testing is a testing technique for the database and server-side validation. It is often known as database testing. It is done to test if the entered data in the front end is stored and reflected in the database. The backend testing is used to prevent data truncation and loss.
The database testing can be nonfunctional [which deals with the performance of the database], functional [which deals with application characteristics from the backend] and structural [which deals with the testing of the database structure like tables, views, and so on]. Thus the backend testing deals with the back end items which are not viewable from the front end.
88. Cross-browser testing: Cross Browser Testing is a type of non-functional test which helps us to ensure that our website or web application works as expected in various web browsers.
89. Browser compatibility testing: The browser compatibility testing is an important part of the testing phase. It is done to verify the application in multiple web browsers. There must be sufficient resources allocated to carry out this testing.
The most essential points to check in a browser compatibility testing are the font look and feel in browsers, header and footer, styles of the page, formats in date, image positioning, HTML and CSS validation, zoom in and zoom out and alignment of the elements on the page and so on.
90. Forward compatibility testing: Forward compatibility testing is to validate the application under test is working as intended in the later versions of the software’s current version.
91. Backward compatibility testing: Backward compatibility testing is to validate the application under test is working as intended in the earlier versions of the software’s current version.
92. Downward compatibility testing: Refer to Backward compatibility testing…
93. Compliance testing: Compliance testing is non-functional testing which is done to validate whether the software meets a defined set of standards.
94. Conformance testing: Conformance testing is a testing technique to check that a product meets certain standards before its release. These standards are defined by organizations like IEEE to ensure that the software is compliant.
The conformance testing features include the below points:
- It is carried out by external organizations that are certified in their domain.
- It checks the robust testing process.
- It carries out testing with approved testing processes.
95. UI testing: In UI testing, testers aim to test both GUI and Command Line Interfaces (CLIs)
Also, refer to GUI Testing…
96. Destructive testing: Destructive testing is a testing technique that aims to validate the robustness of the application by testing continues until the application breaks.
97. Dependency testing: Dependency testing is a testing technique that examines the requirements of an application for pre-conditions, initial states, and configuration for the proper functioning of the application.
98. Crowdsourced testing: Crowdsourced testing is carried out by a community of expert quality assurance testers through an online platform.
99. ETL testing: ETL (Extract, Transform, and Load) testing involves invalidating the data movement from source to destination and verifying the data count in both source and destination and verifying data extraction, transformation, and also verifying the table relations.
100. Data warehouse testing: Refer to ETL testing…
101. Fault injection testing: Fault injection testing is a testing technique in which fault is intentionally introduced in the code in order to improve the test coverage.
102. Failover testing: Failover testing is a testing technique that validates a system’s ability to be able to allocate extra resource during the server failure and transferring of the processing part to back-up systems
103. All pair testing: All pair testing approach is to test the application with all possible combination of the values of input parameters.
104. Pairwise Testing: The pairwise testing is a testing method to test an application with permutation and combination of parameters. It is done to test all the feasible discrete combinations of specifications. By using the normal exhaustive testing approach, it may become impossible to test the complete product. But by following the permutation and combination of inputs, the testing of the product is achievable.
For example, let us consider a product to be tested with 15 inputs and there are 15 possible configurations for each input. So there are a total 15^15 inputs to be tested. In such a scenario, complete testing is not possible and we have to choose combinations of inputs.
Here I am going to conclude different types of software testing types. If you like this post, please share it with your friends.
Here I have hand-picked a few posts which will help you to learn more interview related stuff:
- Manual Testing Tutorial
- Agile Tutorial
- Manual Testing Interview Questions
- Agile Interview Questions
- Why You Choose Software Testing As A Career
- General Interview Questions
If you have any more questions, feel free to ask via comments. If you find this post useful, do share it with your friends on Social Networking.