Software testing is an activity which evaluates and improves the quality of the software by discovering the defects and fixing them. It is a critical aspect of the software testing life cycle (STLC). The aim is not just to fix the errors or bugs but also to develop the software as per the client requirement by meeting their expectations. This article on “Types of Software Testing” will provide you with in-depth knowledge about the different types of Software Testing in the following sequence :

What is software testing 

Software Testing is a process for identifying errors, bugs, defects, gaps or any missing requirements as compared to the actual requirements given by the client. Software testing is an important aspect of software development.  A software testing life cycle is not an isolated activity. It is a series of actions performed during the testing phase of the SDLC to confirm that the software or the product meets the quality goals. The importance of testing in SDLC is to identify all the errors and bugs in an application or software by improving its performance and enhancing reliability.

Principles of Software Testing

Software testing principles are the pillars of the testing, which every tester should be aware of. These principles help every tester to stay focused on the objectives of testing. There are seven principles of testing which help the testing teams to understand their goals and effectively utilize their time and effort. The seven principles are discussed in detail.

#1. Testing reveals the defects presence

Every software application before getting released into the production gets tested. There are numerous tests conducted depending upon the need of testing. The objective of the testing is not only to declare that the application is defect free but to bring out as many hidden defects using different testing techniques. The revealing of defects and fixing them will help to produce an application which meets the client’s requirements.

#2. Early testing

The testing should start at an early phase of the SDLC as it reduces the unnecessary cost of fixing errors. It should start at the requirements gathering stage itself. 

#3. Fallacy of exhaustive testing

The process of testing a software or an application with all the valid and invalid inputs and with all pre-conditions is known as exhaustive testing. Any application developed cannot be tested exhaustively. Exhaustive testing consumes time and effort and most of the time proves ineffective. The tester can test only a few test cases and conclude that the application is developed and ready to use as per the client’s requirements.

#4. Defect Clustering

Defect clustering means there are many defects gathered in a small number of modules. During testing, the testers usually encounter a situation where the errors/bugs/defects are found in a particular functionality. The rest of the functionalities may have fewer defects. This means the defects are not distributed uniformly in an application. The errors may be clustered or centralized around a few functionalities. This is called defect clustering. This follows the 80-20 rule, which is also known as the Pareto rule. Therefore, 80% of the defects are found in 20% of the modules. If the testers classify the defects, then they can identify the possible defects in certain functionality.

#5. Context dependent testing

There are several applications available in the market. Every application belongs to a certain domain. Each application in that domain may have several functionalities, features, UI etc. The testing process will be done based on the context of the application developed. 

#6. Pesticide Paradox

In software testing, the same test cases are used repeatedly over a period of time. After a certain point of time, these test cases cannot find new defects. Hence, the testers should review such test cases and update periodically for the detection of new bugs.

#7. Absence of error – Fallacy

The testers should not be obsessed with 99% error free application and run behind multiple testing methods and different test cases. The efforts will be futile as it may not meet the customer’s requirements. They should focus their testing to deliver an application as per the customer’s requirements.

Having understood the seven principles, lets us discuss the various types of testing.

Want to Become a Master in Manual Test Engineer? Visit here Manual Testing Training

Types of Software Testing

A tester performs two types of testing to eliminate bugs/errors. Broadly, there are two types of testing - functional and non-functional. 

Type#1: Functional Testing:

Functional testing is performed to test the functional aspects of a software application. Every function should be tested to verify if the functional requirements are met. There are various types of functional testing.

1. Unit Testing:

  A software application may have several modules and each module is a unit. Testing the functional aspect of every unit is known as unit testing. To conduct unit testing, programming knowledge is necessary. Therefore, programmers perform unit testing.

2. Integration Testing:

Each unit of the software application should be integrated into a unified functionality. These integrations should also be tested to check whether they are functioning properly. This testing is known as integrated testing. The number of integrated tests is less compared to unit testing. Integration testing is four types i) top-down ii) bottom up iii) sandwich iv) big-bang

Approaches of Integration Testing

  • Big bang integration testing: Big bang testing technique integrates individual programs into a single integrated program when all the programs are completed and tested. This testing is performed by the testing teams.
  • Hybrid integration testing: This testing is a kind of integration testing which combines top-down and bottom-up approach. This kind of testing is useful when an application is tested in various markets, to conduct UAT and testing in multiple languages.  This testing is performed by the testing teams.
  • Hybrid integration testing: This testing is a kind of integration testing which combines top-down and bottom-up approach. This kind of testing is useful when an application is tested in various markets, to conduct UAT and testing in multiple languages.  This testing is performed by the testing teams.

3. Regression Testing:

When a new unit is added, there will be changes in the program. A regression testing ensures all the whole module is functioning as per the requirements after the addition of the new unit.  

4. Sanity Test:

A sanity test is a basic test performed by the testers when they receive a new build. It is a sub-set of regression test and unscripted. This testing follows a narrow and deep approach 

5. Smoke Test:

A smoke test is a preliminary test performed to check if the application or the build is stable for further testing. The smoke testing is also known as build verification testing or confidence testing. In simple words, it is a quick regression testing which ensures that the major functionalities are intact to proceed for the further testing process. A smoke test can be done manually or automated depending on the organization’s need.

6. Interface Testing:

The interface testing is done to test the user interface to ensure the customers do not face any challenges while navigating the application.

7. System Test:

A system testing is conducted by the testers to test an integrated application or build. The objective of the system test is to ensure the application of the system or build is as per the client’s requirements.

8. Acceptance Testing/Beta Testing:

The acceptance testing or beta testing is carried out by the client to ensure the software application ready to release in the market. The beta testing is conducted in the real environment. The acceptance testing is carried out to ensure there is no product failure and all the business requirements have adhered.

Related Blog: Software Testing Life Cycle(STLC) - Different Phases of Software Testing

Type#2: Non-Functional Testing:

Subscribe to our youtube channel to get new updates..!

Non-functional testing is done to test the performance, reliability, security and usability of the application. This testing helps to improve the quality of the application. Non-functional testing is performed using certain tools and not done manually.

1. Performance Testing:

Performance testing is conducted to check if the performance of the application is as desired or not. The application performance is analyzed with the help of testing tools and if any issues or bugs are identified then they are fixed. Some of the popular performance testing tools are Rational Performance Tester, Complete, Apache Jmeter etc.

  • Load Testing: This testing is a kind of functional testing where the application is tested under an expected load. The load test helps to find the behaviour of the application or system under normal conditions and under peak conditions. This testing is performed by performance testers or performance engineers.
  • Stress Testing: This testing is performed by the testing team to check the robustness of the application.
  • Endurance Testing: This testing is non-functional testing. It is also known as soak testing. The testing is conducted to check if the system is capable of taking load over a significant period of time. This test also checks if there are any memory leaks. Endurance testing is conducted by the testing team.

2. Volume Testing:

The volume testing checks the system behaviour for the massive volume of data processed and the response time of the application/software. The large data volume can impact the performance if timely testing is not done.

3. Security Testing:

The security test is conducted to find out the vulnerability of the software or the application in use. The security breaches can be detected and prevented with security testing.

4. Compatibility Testing:

The compatibility testing is performed on the application of the software to check the compatibility with hardware, software, network environment, mobile devices, operating systems, etc.

5. Install Testing:

Install testing is also known as implement testing. Install testing is done to check if the application or the software is installed with all the desired features and functionalities. This testing is also done in the last phase of the STDC before the end-user gets access to the application.

6. Recovery Testing:

The recovery testing is done to check how soon the application recovers from crashes, failures and other issues.

7. Reliability Testing:

A reliability testing tool checks if the application or the software runs without errors. Reliability testing confirms that the application or the software reliable to use.

Different types of Reliability Testing

  • Usability Testing: The usability testing helps to check if the software or the application is user-friendly. If the tester is able to navigate without getting stuck then the test is positive.
  • Regression testing: In this testing, the complete features or partial features are re-tested and re-executed to make sure all the existing functionalities are working properly.  This test is performed by the functional teams.
  • Load testing: This testing is a kind of functional testing where the application is tested under an expected load. The load test helps to find the behaviour of the application or system under normal conditions and under peak conditions. This testing is performed by performance testers or performance engineers.

8. Compliance Testing:

Compliance testing is an audit which is done on the application or software to check all the regulations, specifications, requirements, technical standards, contract specifications are met.

9. Localization Testing:

Localization testing assures that the software or the application behaves as per the local settings. In simple terms, the application or software behaves as per the customization.

let's gain more knowledge in-depth about these testing types:

#1) Alpha Testing:

The alpha testing is done in the entire software or the application to check for the errors and bugs. Alpha testing is done in the last phase of testing by the developers before delivering the software or the application to the client.

#2) Ad-hoc Testing:

The ad-hoc testing is intended to find the defects or errors which the existing test cases could not identify. This testing can be performed by any stakeholder. The testing is unstructured and informal without reference to any specific test case or test design documents. The ad-hoc tester is expected to have knowledge of the domain and the workflow.

#3) Accessibility Testing:

Acceptance testing is intended to find out if the contents of the website can be accessed easily by disabled people. The testing is conducted by the disabled person like deaf, blind, mentally handicapped etc.)

#4) Active Testing:

Active testing is intended to test the introduced test data and analyze the execution results. This testing is conducted by the core testing team who are a part of the STLC.

5) Agile Testing:

Agile testing is conducted to test the software as per the client’s request to meet the client requirement. It allows incremental testing and coding.  This testing follows agile methodology and principles and conducted by the core quality testing team.

#6) API Testing:

The API Testing targets at the code level and tests the code functionality. This testing is conducted by the quality assurance team and not a developing team. The API testing needs high level coding knowledge and understanding of the API functionality.

#7) Automated Testing:

Automated testing is conducted to test the actual outcome with the expected outcome. Automated testing is done by the testing teams using automation testing tools and by writing test scripts. It is useful when repetitive manual tasks are difficult to perform.

#8) All-Pairs Testing:

All pair testing is also known as pair-wise testing which is a black box testing. Each input is tested in pairs and all possible permutations and combinations are possible to test on the inputs. This testing is performed by the testing team.

#9) Age Testing:

The age testing is conducted to check how well the software will perform in future. This evaluation process is conducted by the testing teams.

#10) Backward Compatibility Test: 

The backward compatibility test verifies the present software or the product with the previous versions of the test environment. The compatibility of the software in development is tested with previous versions in the software environment. This testing is performed by the testing team.

#11) Benchmark Testing:

Benchmark testing is a technique which uses the data and programs to assess the current hardware and software in a given configuration. This testing is conducted by developers and database administrators. The current performance is assessed and changes for improvement are made.

#12) Blackbox Testing:

The black box testing is conducted to verify the functionality of the software application in development. The testing is conducted by the quality assurance team. This testing can be performed by testers who do not have coding or knowledge of internal structure knowledge.

#13) Binary Portability Testing:

This testing is performed to confirm an application’s binary interface specification (ABI). This technique tests the portability across various system platform and environment. This test is performed by testing teams.

#14) Boundary Value Testing:

This testing is based on the assumption that the bugs aggregate at the boundaries. The testing is done thoroughly and extensively at the boundary to check for defects. This testing is conducted by the testing team.

#15) Branch Testing:

Branch testing is a technique of developing test cases to test the source code at every branching condition. It is a white box testing applied during unit testing. This testing is done by the developer.

#16) Breadth Testing:

In Breadth testing, all the functionalities of the product or the software are tested but the features of the product are not tested in depth. This testing is conducted by the testing team.

#17) Code driven Testing:

A code driven testing is the first step in the test-driven development.  This is used is unit testing to check if all the codes are functioning as per the requirements. This testing is performed by the development team.

#18) Decision Coverage Testing:

In this type of testing, rules are set as true or false to execute every condition. This type of testing is performed in automation testing by the testing teams.

#19) Dynamic Code:

Dynamic testing is performed to test the nature of the code and the dynamic behaviour of the code. This testing is done by testing teams.

#20) Exploratory Testing:

Exploratory testing is a part of agile environment. There are no pre test cases, test designs in this testing. This testing helps the software testers to keep pace with the agile requirements and development. It is performed by testing teams.

#21) Error-handling Testing:

This type of testing is performed to check if the system or the software program can handle errors in future. The objective of performing the error-handling test is to safeguard that the applications are efficient enough to handle incorrect transactions. This testing is performed by the developers and the testers

#22) End-to-end Testing:

In this testing the application flow is tested from the beginning to the end. The end-to-end testing is performed to ensure data integrity between various systems and its components. This testing is conducted by testing teams.

#23) Equivalence Partitioning Testing:

In this type of testing, the input data is divided into partitions at least once to check the bugs in the center of the input. Test cases can be created for each partition. The advantage of this test is that there are minimum test cases, hence saves time in testing. This testing is also performed by the testing team.

#24) Fault Injection Testing:

In this type of testing, faults are injected or introduced into the code and to improve the coverage of the code. Fault injection testing is usually performed in stress testing.  This testing is performed by the testing team to check the robustness of the application.

#25) Formal Verification Test:

A formal verification testing is a technique to prove or disprove the accurateness of the algorithms in the applications using mathematics. The formal verification test helps to test the digital circuits, combinational circuits, cryptographic protocols etc. in the source code. This testing is conducted by the quality assurance teams.

#26) Fuzz Testing:

Fuzz testing is a technique performed to find the coding errors and the security issues in the application, operating systems or the network. As a process of testing, huge data is inputted known as fuzz. The possibilities of the application to crash are tested.  This testing is conducted by the testing teams.

#27) Glass Box Testing:

Glass box testing is also known as clear box testing or open box testing which helps to disclose the errors at the source code level. It observes the program structure which derives the test data from the program logic or the program code.  This testing is performed by the development team.

#28) Grey Box Testing: 

This testing is a combination of white box and black box testing techniques.  Grey box testing is done by testing the functionalities with some knowledge of the code. This testing can be performed either by the development team or by the testing teams.

#29) Gorilla Testing:

Gorilla testing is also known as frustrating testing. In this testing, the module of the application is tested repeatedly over a hundred times. It is a manual testing process performed to check the robustness of the system. This testing can be done by developers and sometimes by the testers.

#30) GUI Software Testing:

As the name suggests the GUI testing verifies the graphical user interface of the system. This testing involves checking the menu bar, dialogue box, different types of bars, menus, buttons etc. This testing is done by the testers.

#31) Hybrid Integration Testing:

This testing is a kind of integration testing which combines top-down and bottom-up approach. This kind of testing is useful when an application is tested in various markets, to conduct UAT and testing in multiple languages.  This testing is performed by the testing teams.

#32) Inter Systems Testing:

In this type of testing, the testing is done at the integration points when an application is hosted across different locations. Inter systems testing ensures correct data flow across all integration points. This testing is conducted by the testing team.

#33) Keyword-driven Testing:

The keyword driven testing is an automation testing technique also known as action-word testing or table-driven testing. In this testing, the test cases are separated based on the way they are executed. Hence, the test cases can be used in the planning stage or in the execution stage.  The test uses certain action words or keywords to execute the test cases.

#34) Loop Testing:

This testing is a kind of white box testing where the loops in the program of an application is tested. This testing is conducted by the development teams

#35) Manual Support Testing:

In this type of testing, the tester plays the role of an end-user and tests the application or software manually. The tester verifies that the system/application/software is free from errors and bugs and all the features function as per the requirements.

#36) Mutation Testing:

It is a type of white box testing, where the tester brings change(mutate) is certain statements in the source code and checks if the application/ software/ program throws errors. Mutation testing is used in unit testing. This testing is done by testing teams.

#37) Operational Testing:

This testing is a non-functional software testing which evaluates the software application before the production phase. Operational testing ensures that the software is ready in its operational environment. This testing is performed by the testing teams 

#38) Passive Testing: 

This testing is done by the manual testers just by monitoring and observation. The testers do not interact with the product directly.

#39) Penetration Testing:

This is a specialized testing method conducted by testers by ethical hacking and tests the security aspects of the system/product/application. This testing is performed by the penetration engineers to find the vulnerabilities of the system that the hacker could exploit.

Conclusion

Software testing is an exhaustive procedure performed to remove the errors and deliver a product as per the client’s requirements. The principles of the testing will help the testers to stay focused on their testing objectives, and the various testing types will help them to test an application/product/software depending on the need to test. The ultimate objective of testing is to ensure the product meets the client requirement and achieves client satisfaction. Hope you found the article informative and if you have any query, please drop in the comment box.