Types of testing

In this post, we will try to cover each type of software testing and also categorize them based on different parameters.

types of testing

Depending on the objective of testing

1. Functional testing - Functional testing is a type of testing that involves validating the application with its functional specifications or the business requirements.

2. Non-functional testing - Non functional testing includes testing the non-functional requirements of the system like performance, security, scalability, usability, robustness etc.

Based on test execution method - manual or automated

3. Manual testing - Manual testing is a type of testing in which test case execution is performed manually by humans.

4. Automated testing - Automation testing is a type of testing in which automated test case execution is performed using different automation tools and scripts.

Based on test design technique

5. Black box testing - Black box testing is a type of testing in which the tester is reqired to have have any knowledge of the internal architecture or implementation of the system.

6. White box testing - White box testing is a type of testing in which the tester analyses the internal architecture of the system as well as the quality of source code on different parameters like code optimization, code coverage, code reusability etc.

7. Glass box testing - Same as white box testing

8. Gray box testing - In gray box testing, the tester has partial access to the internal architecture of the system e.g. the tester may have access to the design documents or database structure. This information helps tester to test the application better.

9. Specification based testing - Same as black-box testing.

10. Structure based testing - Same as white-box testing.

Levels of testing

11. Unit testing - Unit Testing is the first level of testing usually performed by the developers. In unit testing, a module or component is tested in isolation.

12. Integration testing - Integration testing is the testing of a group of related modules. It aims at finding interfacing issues between the modules.

13. System testing - System testing is the level of testing where the complete integrated application is tested as a whole. It aims at determining if the application conforms to its business requirements.

14. Acceptance testing - Acceptance testing is the final and one of the most important levels of testing on successful completion of which the application is released to production.

Type of integration testing

15. Big bang Integration Testing - In big bang integration testing, testing starts only after all the modules are integrated.

16. Top-down Integration Testing - In top down integration, testing/integration starts from top modules to lower level modules.

17. Bottom-up Integration Testing - In bottom up integration, testing starts from lower level modules to higher level module up in the heirarchy.

18. Hybrid Integration Testing - Hybrid integration testing is the combination of both Top-down and bottom up integration testing. In this approach the integration starts from middle layer and testing is carried out in both the direction

Type of acceptance testing

19. Alpha testing - Alpha testing is a type of acceptance testing that is performed end users at the developer site.

20. Beta testing - Beta testing is the testing done by end users at end user's site. It allows users to provide direct input about the software to the development company.

Black box testing or specification based testing types

21. Equivalence partitioning testing - Grouping test data into logical groups or equivalence classes with the assumpation that any all the data items lying in the classes will have same effect on the application.

22. Boundary value analysis testing - Testing using the boundary values of the equivalence classes taken as the test input.

23. Decision tables testing - Testing using decision tables showing application's behaviour based on different combination of input values.

24. Cause-effect graph testing - Testing using graphical representation of input i.e. cause and output i.e. effect is used for test designing.

25. State transition testing - Testing based on state machine model.

26. Use case testing - Testing carried out using use cases.

White-box or structural testing types

{These testing types are performed by devs and white-box testers only, feel free to ignore these in case you are not into white-box testing}

27. Statement testing - Test scripts are designed to execute code statements and coverage is the measure of line of code or statements executed by test scripts.

28. Decision testing/branch testing - Measure of the percentage of decision points(e.g. if-else conditions) executed out of the total decision points in the application.

29. Condition testing - Testing the condition outcomes(TRUE or FALSE). So, getting 100% condition coverage required exercising each condition for both TRUE and FALSE results using test scripts(For n conditions we will have 2n test scripts).

30. Multiple condition testing - Testing the different combinations of condition outcomes. Hence for 100% coverage we will have 2^n test scripts. This is very exhaustive and very difficult to achieve 100% coverage.

31. Condition determination testing - It is an optimized way of multiple condition testing in which the combinations which doesn't affect the outcomes are discarded.

32. Path testing - Testing the independent paths in the system(paths are executable statements from entry to exit points).

33. Mutation testing - Mutation testing is a type of white box testing in which the source code of the application is mutated to cause some defect in its working. After that the test scripts are executed to check for their correctness by verifying the failures caused the mutant code.

34. Loop testing - Loop testing is a type of white box testing in which primarily focus on validating the different kinds of loop constructs.

Performance testing types

35. Performance testing - Performance testing is type of testing performed to evaluate the different performance attributes of the application like - responsiveness, stability, reliability etc. For determining these attributes, we have different types of performance testing techni

36. Load testing - Load testing is a type of testing which involves evaluating the performance of the system under expected workload. A typical load test includes determining the response time, throughput, error rate etc during the course of the load test.

37. Stress testing - Stress testing is a type of performance testing where we evaluate application's performance at load much higher than the expected load. Another aspect of the stress testing is to determine the breakpoint of the application, the point at which the application fails to respond in correct manner.

38. Endurance testing - Endurance testing is also known as 'Soak Testing'. It is done to determine if the system can sustain the continuous expected load for long durations. Issues like memory leakage are found with endurance testing.

39. Soak testing - Same as endurance testing.

40. Stability testing - Same as endurance testing

41. Spike testing - In spike testing, we analyze the behavior of the system on suddenly increasing the number of users. It also involves checking if the application is able to recover after the sudden burst of users.

42. Volume testing - Volume testing is performed by feeding the application with high volume of data. The application can be tested with large amount of data inserted in the database or by providing a large file to the application for processing. Using volume testing, we can identify the bottleneck in the application with high volume of data.

Experience based testing

43. Experience based testing - The experienced based testing techniques are completely based on the experience or intution of the tester. Two most common forms of experienced based testing are - adhoc testing and exploratory testing.

44. Adhoc testing - Adhoc testing is an unstructured way of testing that is performed without any formal documentation or proper planning.

45. Exploratory testing - Exploratory testing is a type of testing in which new test case are added and updated while exploring the system or executing test cases. Unlike scripted testing, test design and execution goes parallely in exploratory testing.

All other types of testing

46. Retesting - Retesting is a type of testing in which we verify if the fixed issue is resolved or not.

47. Regression testing - Regression testing includes testing the application to verify that a new code change doesn't affect the other parts of the application.

48. Smoke testing - Smoke testing is a type of testing in which the all major functionalities of the application are tested before carrying out exhaustive testing.

49. Sanity testing - Sanity testing is the subset of regression testing, which is carried out when there is some minor fix in application in a new build.

50. Dynamic testing - Testing performed by executing or running the application under test either manually or using automation (opposite of reviews and walk- throughs).

51. Static testing - Static testing is a type of testing in which testing is carried out without actually running the code. It involves activities like reviews, inspections and walk-throughs.

52. Monkey testing - Monkey testing is a type of testing that is performed randomly without any predefined test cases or test inputs.

53. Gorilla testing - Gorilla testing involves testing an individual module or functionality of the application heavily in order to test its robustness.

Usability testing - Usability testing is the type of testing that aims at determining the extent to which the application is easy to understand and use.

54. Accessibility testing - Accessibility is the type of testing which aims at determining the ease of use or operation of the application specifically for the people with disabilities.

55. Compatibity testing - Testing software to see how compatible the software is with a particular environment - Operating system, platform or hardware.

56. Configuration testing - Configuration testing is the type of testing used to evaluate the configurational requirements of the software along with effect of changing the required configuration.

57. Localisation testing - Localisation testing is a type of testing in which we evaluate the application's customization(localized version of application) to a particular culture or locale. Generally the content of the application is checked for updation(e.g. content language).

58. Globalisation testing - Globalisation testing is a type of testing in which application is evaluated for its functioning across the world.

59. Internationalization testing - Same as globalisation testing

60. Negative testing - Negative testing is a type of testing in which the application's robustness(graceful exiting or error reporting) is evaluated when provided with invalid input or test data.

61. Security testing - Security testing is a type of testing which aims at evaluating the integrity, authentication, authorization, availabilty, confidentiality and non-repudation of the application under test.

62. Penetration testing - Penetration testing or pen testing is a type of security testing in which application is evaluated(safely exploited) for different kinds of vulnerabilities that any hacker could expolit.

63. Crowdsourced testing - Crowdsourced testing is a type of testing which is carried out by a large group or community of QA professionals instead of in-house QAs or hired QA consultants.

64. Databse testing - Database testing is checking the integrity of actual data in the front end with the data present in the database. It involves validating the data in the database, checking that there are no orphan records (record with a foreign key to a parent record that has been deleted"), no junk records are present, updating records in database and verify the value in the front end.

65. API testing - API testing is a type of testing that involves testing of the Restful APIs and SOAP webservices directly using some client like Advanced Rest Client or tools like SOAPUI.

66. ETL testing - ETL(Extract-Transform-Load) testing is a type of testing that involves checking the consitency of data after extraction from source to destination.

67. Data warehouse testing - Same as ETL testing.

68. Robustness testing - Robustness testing is a type of testing that is performed to find the robustness of the application i.e. the ability of the system to behave gracefully in case of erroneous test steps and test input.

69. A/B testing - A/B testing is a type of testing in which the two variants of the software product are exposed to the end users and on analysing the user behaviour on each variant the better variant is chosen and used thereafter.

70. Concurrency testing - Concurrency testing is a multi-user testing in which an application is evaluated by analyzing application's behaviour with concurent users acccessing the same functioanity.

71. All pair testing - All pair testing is a type of testing in which the application is tested with all possible combination of the values of input parameters.

72. Failover testing - Failover testing is a type of testing that is used to verify application's ability to allocate more resources(more servers) in case of failure and transfering of the processing part to back-up system.

73. Fuzz testing - Fuzz testing is a type of testing in which large amount of random data is provided as input to the application in order to find security loopholes and other issues in the application.

73. Fault injection testing - Fault injection testing is a type of testing in which fault is intentionally introduced in the application in order to improve the test coverage.

74. UI testing - UI or user interface testing is a type of testing that aims at finding Graphical User Interface defects in the application and checks that the GUI conforms to the specifications.

75. Pilot testing - Pilot testing is a testing carried out as a trial by limited number of users evaluate the system and provide their feedback before the complete deployment is carried out.

76. Backend testing - Backend testing is a type of testing that invloves testing the backend of the system which comprises of testing the databases and the APIs in the application.

77. Compatibility testing - Compatibility testing is a type of non-functional testing that invloves checking the compatibility of the application with different environment factors like - operating system, hardware, browser, network, devices, software versions etc.

78. Browser compatibility testing - Browser compatibility testing is a type of testing that invloves validating the correctness and consistency of the application over different browsers.

79. Cross-browser testing - Same as browser compatibility testing.

80. Forward compatibility testing - Forward compatibility testing involves validating the application with newer version of the other platform or softwares.

81. Backward compatibility testing - Backward compatibility testing involves validating the application with older version of the other platform or softwares.

82. Downward compatibility testing - Same as Backward compatibility testing

83. Component testing - Component testing is a type of testing that is involves testing the functionality of the individual components or module of the application.

84. Module testing - Same as component testing

85. 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 continously evolving project instead of being confined to a particular phase.

86. End to end testing - End to end testing is a type of testing in which the application's flow is tested from start to end under real world scenarios in order to ensure that application works as per the requirement.

87. Happy path testing - Testing the positive or default flow of the application with valid input is called happy path testing.

88. Incremental testing - Incremental testing is also know as incremental integration testing. In this testing, integration between the modules is tested and on successful testing new modules are incrementlly added till the time each module of the application is integrated and tested.

89. Recovery testing - Recovery testing is a type of non-functional testing that involves testing the ability of the system to recover from a carsh or failure.

90. Risk based testing - Risk based testing is a type of testing in which test cases are prioritised on the basis of risk involved or the impact of the failure.

91. Vulnerability testing - Vulnerability testing involves testing and identification of the vulnerability or weakness in the application.

92. Compliance testing - Compliance testing is a type of non-functional testing that involves validating that the built product conforms the organization's standards and other

93. Conformance testing - Same as compliance testing

94. Destructive testing - A type of testing that aims at checking the robustness of the application by intentionally breaking or crashing the application.

95. Dependency testing - Dependency testing involves checking the pre-conditions or the initial state and configuration of teh system required for correct functioning of the application.

96. Scenario testing - Scenario testing is a type of testing in which testing of complex test flows is simplified by making use of scenarios i.e. user flows. It helps in testing the end to end flow of the application.

97. Installation testing - In installation testing, the installation process is checked based on the installation guide.

98. Documentation testing - Documentation testing involves reviewing and validating the documents and user manual of the system.

99. AB testing - AB testing is a way of creating and analyzing two varients of an application in order to find which varient performs better in terms of user experience, monetary benefits(e.g. for e-commerce application) or any xyz goal. And then eventually keeping the better performing varient.

100. Split testing - Same as AB testing