Different Types of Software Testing
Here are various types of software testing techniques you can employ to ensure that changes to your code work as expected. However, not all testing is created equal, and we investigate how some testing practices differ.
There are four main types of functional testing
1. Unit Testing
Unit testing is a type of software testing that is performed on a single unit or component to test its corrections. The developer typically performs unit testing during the application development phase. Each testing unit can be considered a method, function, procedure, or object. For test execution, developers frequently use test automation tools such as NUnit, Xunit, and JUnit.
Unit testing is important because it allows us to find more defects.
There is, for example, a simple calculator application. For addition functionality, the developer can write a unit test to see if the user can enter two numbers and get the correct sum.
a) White Box Testing
White box testing is a type in which the tester can see and interact with an application’s internal structure or code. This technique makes it simple to identify flaws in an application’s design or errors in business logic. White box test techniques include statement coverage and decision coverage/branch coverage.
b) Gorilla Testing
Gorilla testing is a technique in which the tester and/or developer thoroughly test the application’s module in all aspects. Gorilla testing is used to determine the robustness of your application.
For example, the tester is testing the website of a pet insurance company, which offers the service of purchasing an insurance policy, a pet tag, and a Lifetime membership. The tester can concentrate on a single module, the insurance policy module, and thoroughly test it with positive and negative test scenarios.
2. Integration Testing
Integration testing is a type of software testing in which two or more application modules are logically grouped and tested as a unit. This type of testing aims to identify flaws in the interface, communication, and data flow between modules. Integrating modules into the overall system uses either a top-down or bottom-up approach.
This type of testing is performed on system modules or between systems. For example, suppose a user purchases a plane ticket from any airline’s website. While buying a ticket, users can see flight details and payment information. Still, flight details and payment processing are two separate systems. While integrating the airline website and payment processing system, integration testing should be performed.
a) Gray box testing
Gray box testing, as the name implies, is a hybrid of white-box and black-box testing. Testers have only a hazy understanding of an application’s internal structure or code.
3. System Testing
System testing is a type in which the tester evaluates the entire system against the specifications.
a) End-to-End Testing
It entails testing an entire application environment in a scenario that simulates real-world use, such as interacting with a database, using network communications, or interacting with other hardware, applications, or systems, if applicable.
A tester, for example, is putting a pet insurance website through its paces. End-to-end testing includes purchasing an insurance policy, LPM, tag, adding another pet, updating credit card information on user accounts, updating user address information, and receiving order confirmation emails and policy documents.
b) Black Box Testing
Blackbox testing is a software testing technique in which testing is performed without knowledge of a system’s internal structure, design, or code. Testers should only pay attention to the input and output of test objects.
c) Smoke Testing
Smoke testing ensures that the system’s basic and critical functions are working correctly at a high level.
When the development team provides a new build, the Software Testing team validates it to ensure no major issues exist. The testing team will ensure that the build is stable, and additional detailed testing will be performed.
For example, a tester puts a pet insurance website through its pages. Purchasing an insurance policy, adding another pet, and providing quotes are all basic and essential features of the application. Before performing in-depth testing on this website, smoke testing ensures that all its functionalities are operational.
d) Sanity Testing
Sanity testing is done on a system to ensure that newly added functionality or bug fixes are functional. On a stable build, sanity testing is performed. The regression test is a subset of it.
A tester, for example, is putting a pet insurance website through its paces. The discount for purchasing a policy for a second pet has changed. Then, only the buying insurance policy module is subjected to sanity testing.
e) Happy path Testing
Happy Path Testing aims to test an application on a positive flow successfully. It does not search for negative or incorrect conditions. The emphasis is solely on valid and positive inputs that cause the application to produce the expected output.
f) Monkey Testing
A tester performs monkey testing, assuming that if the monkey uses the application, the monkey will enter random input and values without any knowledge or understanding of the application.
Monkey Testing is used to see if an application or system crashes by providing random input values/data. Monkey Testing is done randomly, no test cases are scripted, and it is unnecessary to be aware of the system’s full functionality.
4. Acceptance Testing
Acceptance testing is testing in which the client/business/customer puts the software through its paces using real-world business scenarios.
The client only accepts the software when all the features and functionalities work as expected. This is the final stage of testing before the software goes into production. This is also referred to as User Acceptance Testing (UAT).
a) Alpha Testing
Alpha testing is a type of acceptance testing done by an organization’s team to find as many flaws as possible before releasing software to customers.
The pet insurance website, for example, falls under UAT. The UAT team will run real-time scenarios such as purchasing an insurance policy, purchasing an annual membership, changing the address, and transferring pet ownership like the user would use the actual website. The team can use test credit card information to process payment-related scenarios.
b) Beta Testing
Beta testing is a type of software testing performed by clients/customers. It is carried out in the real world before releasing the product to the market for actual end users.
Beta testing ensures that there are no significant flaws in the software or product and that it meets the business requirements from the end-user perspective. When the customer accepts the software, beta testing is considered successful.
End users typically perform this testing. This is the final round of testing before releasing the application for commercial use. Typically, the Beta version of a released software or product is limited to a specific number of users in a particular area.
As a result, the end user uses the software and provides feedback to the company. The company then takes the necessary steps before releasing the software globally.
c) Operational acceptance testing (OAT)
In the production environment, operations or system administration staff perform operational acceptance testing on the system. Functional acceptance testing aims to ensure that system administrators can keep the system running correctly for users in real time.
The OAT focuses on the following points:
- Testing of backup and restore.
- Installing, uninstalling, and upgrading software.
- The recovery process in case of a natural disaster.
- User management
- Maintenance of the software.
There are four main types of non-functional testing.
1. Security Testing
It is a type of testing carried out by a specialized team. Any hacking method can gain access to the system.
Security testing is performed to determine the security of the software, application, or website against internal and/or external threats. This testing includes determining how secure software is against malicious programs and viruses and how secure and robust the authorization and authentication processes are.
It also examines how software behaves in the face of a hacker attack and malicious programs and how software is maintained for data security following a hacker attack.
a) Penetration Testing
Penetration testing, also known as pen testing, is a type of security testing performed as an authorized cyberattack on a system to identify security flaws.
Outside contractors, also known as ethical hackers, conduct pen testing. That is why it is also referred to as ethical hacking. Contractors carry out various operations such as SQL injection, URL manipulation, Privilege Elevation, session expiry, and report generation for the organization.
Please do not conduct the Pen testing on your laptop or computer. Always obtain written permission before conducting pen tests.
2. Performance Testing
The application’s stability and response time are tested using load during performance testing.
The term “stability” refers to the application’s ability to withstand a load. The response time of an application refers to how quickly it is available to users. Tools are used to perform performance testing. Loader.IO, JMeter, LoadRunner, and other similar tools are available on the market.
a) Load testing
Load testing tests an application’s stability and response time by applying a load equal to or less than the application’s designed number of users.
For example, suppose your application handles 100 users at a time with a response time of 3 seconds. In that case, load testing can be done by applying a load of 100 or less. The goal is to ensure that the application responds to all users within 3 seconds.
b) Stress Testing
Stress testing involves putting an application’s stability and response time to the test by applying a load greater than the intended number of users.
For example, suppose your application handles 1000 users at a time with a response time of 4 seconds. In that case, you can stress test it by applying a load of more than 1000 users. Test the application with 1100,1200, and 1300 users to see how long it takes to respond. The goal is to test an application’s stability under stress.
c) Scalability Testing
Scalability testing involves testing an application’s stability and response time by applying a load greater than the intended number of users.
For example, suppose your application handles 1000 users at a time with a response time of 2 seconds. In that case, scalability testing can be performed by applying a load of more than 1000 users and gradually increasing the number of users to determine where my application is crashing.
Assume my application provides the following response time:
- 1000 users in -2 seconds
- 1400 users in -2 seconds
- 4000 users in 3 seconds
- 5000 users – 45 seconds
- 5150 users- crash – This is the point that needs to identify in scalability testing
d) Volume testing (flood testing)
Volume testing involves transferring a large amount of data to a database to test an application’s stability and response time. It tests the database’s ability to handle data.
e) Endurance Testing (Soak Testing)
Endurance testing verifies an application’s stability and response time by applying a load continuously for extended periods to ensure it works correctly.
For example, car manufacturers use soak testing to ensure that users can drive cars for hours without incident.
3. Usability Testing
Usability testing is testing an application from the user’s point of view to ensure its look, feel, and user-friendliness.
For example, a stock trading mobile app is being tested for usability by a tester. Testers can determine whether the mobile app is easy to use with one hand, whether the scroll bar is vertical, whether the app’s background color is black, and whether the price and stock are displayed in red or green.
The main idea behind usability testing for this type of app is that the user should be able to see the market as soon as they open the app.
a) Exploratory testing
Exploratory testing is done informally by the testing team. This testing aims to explore the application and look for any defects that may exist. To test the application, testers apply their knowledge of the business domain. Test charters guide exploratory testing.
b) Cross browser testing
Cross-browser testing involves running an application on various browsers, operating systems, and mobile devices to evaluate its look, feel, and performance.
Why is cross-browser testing required? The answer is that different users use different operating systems, browsers, and mobile devices. The company’s goal is to provide a good user experience regardless of the devices.
The browser stack provides all browsers and mobile device versions to test the application. For learning purposes, it is recommended that you use the browser stack’s free trial for a few days.
c) Accessibility Testing
The goal of Accessibility Testing is to determine whether or not the software or application is accessible to people with disabilities.
In this context, disability refers to deafness, color blindness, mental disability, blindness, old age, and other disabled groups. Various checks are carried out, such as font size for the visually impaired, color and contrast for color blindness, and so on.
4) Compatibility testing
This type of testing validates how software behaves and runs in various environments, including web servers, hardware, and network environments.
Compatibility testing ensures that software can run on a variety of configurations, databases, browsers, and versions. The testing team carries out compatibility testing.
Other Types of Software Testing
The name implies that this testing is performed on an ad-hoc basis, i.e., without reference to the test case and any plan or documentation for this type of testing.
This testing aims to find defects and break the application by executing any application flow or any random functionality.
Ad-hoc testing is a casual method of detecting defects that anyone on the project can perform. It is difficult to identify defects without a test case. Still, it is possible that defects discovered during ad hoc testing were not identified using existing test cases.
When an input or data is entered into the front-end application, it is saved in the database. Testing that database is known as Database Testing or Back-end Testing.
Databases include SQL Server, MySQL, Oracle, and others. Database testing entails testing the structure of tables, schema, stored procedures, data structures, and so on. Back-end testing does not use a GUI; instead, testers are directly connected to the database with appropriate access and can easily verify data by running a few queries on the database.
During this back-end testing, issues such as data loss, deadlock, corruption, and so on may be discovered. These issues must be resolved before the system goes live in the production environment.
Browser Compatibility Testing
This subtype of Compatibility Testing (explained further below) is carried out by the testing team.
Browser compatibility testing is done for web applications to ensure that the software can run on a variety of browsers and operating systems. This testing also determines whether a web application runs on all browser versions.
Backward Compatibility Testing
It is a type of testing that determines whether newly developed or updated software works well with older versions of the environment.
Backward compatibility testing determines whether a new software version is compatible with a file format created by an older version. It also works well with older versions of that software’s data tables, files, and structures. If any software is updated, it should function appropriately on top of the previous version.
Black Box Testing
Internal system design is not taken into account in this type of software testing. The requirements and functionality are used to guide the tests.
Detailed information about the benefits, drawbacks and different types of Black Box testing can be found here.
Boundary Value Testing
This type of testing examines the application’s behavior at the boundary level.
Boundary Value Testing is used to determine whether or not defects exist at boundary values. Boundary Value Testing is used to test a variety of numbers. Each range has an upper and lower boundary, and testing is done on these boundary values.
If a test range of numbers from 1 to 500 is required, then Boundary Value Testing is performed on values at 0, 1, 2, 499, 500, and 501.
Branch coverage or decision coverage testing is another name for this. It is white box testing carried out at the unit test level. It is done to ensure that every possible path from the decision point is executed at least once to achieve 100% test coverage.
Read numbers A, B
If (A>B), then
Print(“A is greater”)
Print(“B is greater”)
There are two branches here, one for if and one for else. We need two test cases with different A and B values to achieve 100% coverage.
- Test case 1: A=10, B=5. It will cover the if branch.
- Test case 2: A=7, B=15. It will cover the else branch.
Comparison testing refers to comparing a product’s strengths and weaknesses with previous versions or similar products.
It is a testing technique that is similar to Black Box Testing. During the Equivalence Partitioning process, a set of groups is chosen, and a few values or numbers are selected for testing. It is assumed that all values in that group produce the same result.
This testing aims to eliminate redundant test cases within a specific group that produce the same output but do not contain any defects.
Suppose the application accepts values between -10 and +10. In that case, the values chosen for testing using equivalence partitioning are zero, one positive, and one negative. For this testing, the Equivalence Partitioning is -10 to -1, 0, and 1 to 10.
Real-time testing is an example. It includes real-time scenarios and scenarios based on the testers’ experience.
This type of testing is also known as experience-based testing because it uses the tester’s prior knowledge of how the application worked, how to break the application, and what types of errors are common in this type of application.
Graphical User Interface (GUI) Testing
This GUI Testing aims to validate the GUI following the business requirements. The Detailed Design Document and GUI mockup screens describe the application’s expected user interface.
GUI testing includes determining the size of the buttons and input fields on the screen and the alignment of all text, tables, and content within the tables.
It also validates the application’s menu. It validates that the page does not change after selecting different menus and menu items and that the alignment remains constant after hovering the mouse over the menu or sub-menu.
Incremental Integration Testing
Incremental Integration Testing is a Bottom-up approach to testing, which means that an application is continuously tested as new functionality is added.
Application functionality and modules should be self-contained enough to be tested independently. Programmers or testers carry this out.
Installation testing ensures that the software application has been correctly installed and is functioning as expected. Installation testing is the stage of testing that occurs before users interact with the application for the first time. Installation testing is also referred to as “Implementation Testing.”
Uninstallation testing is done to ensure that all of the software’s components or elements have been removed from the system.
Installation and uninstallation testing is performed on full, partial, or upgraded install/uninstall processes on various operating systems in different hardware or software environments.
Mutation testing is a type of white box testing in which the source code of one program is changed to see if the existing test cases can detect the system’s defects.
Because the program source code change is so minor, it has no effect on the entire application; only the specific area with the impact and the related test cases should be able to identify those errors in the system.
The tester’s mindset is to “Break the System/Application,” which is accomplished through Negative Testing.
Negative testing is done with incorrect data, invalid data, or input. It validates if the system throws an error due to invalid input and behaves as expected.
It should not take long to load any page or system and should be consistent even during peak load. This testing is carried out using various performance and load tools.
It is a type of software testing that determines how well an application or system recovers after a crash or disaster.
Recovery testing determines whether or not the system can continue to function after a disaster. Assume the application is receiving data via a network cable unplugged unexpectedly.
Plug in the network cable later; the system should then begin receiving data from where it lost connection due to the network cable being unplugged.
Regression testing involves testing the application’s unchanged features to ensure that any bug fixes, new features, deletions, or updating of existing features do not have an impact on the application’s functionality.
Determining the regression’s scope is an important part of Regression Testing. To determine the scope of the regression, the tester must first select the area of the application where changes occurred and the impact of those changes on the entire application. Because it is difficult to cover the whole regression test suite in each release, regression testing employs Automation Testing Tools.
Risk-Based Testing (RBT)
Functionalities or requirements are tested based on their priority in Risk-Based Testing. Risk-Based testing includes testing of highly critical functionality with the most significant impact on business and a high failure probability.
Priority decisions are made based on business needs. Once all functionalities have been prioritized, high-priority functionality or test cases are executed first, followed by medium and low-priority functionality.
Low-priority functionality may or may not be tested based on available time. Risk-Based testing is used when there is insufficient time to test the entire software, and the software must be implemented on time and without delay.
This approach is only followed by client and organization senior management discussion and approval.
Static testing is a type of software testing that is performed without executing any code. Static testing can be done in several ways, including reviews, walkthroughs, and inspections. Static testing encompasses activities such as requirement document review, customer requirement specification, high-level and low-level design, code syntax, naming standards, and so on.
Static testing encompasses test cases, test plans, and test scenarios. Static testing is performed to prevent defects rather than to detect them later. This is why static testing is inexpensive.
Tester, for example, is putting a pet insurance website through its paces. The logic for calculating premiums is described in the required documentation. Static testing can include reviewing the developer code for premium calculation and comparing it to the requirement document to prevent premium calculation defects.
Vulnerability testing is the process of identifying flaws in software, hardware, and networks. Suppose the system is vulnerable to such attacks, viruses, and worms. In that case, the hacker can control it using malicious programs.
We need to see if those systems go through Vulnerability Testing before going into production. It may detect critical security flaws and defects.
The Types of Software Testing listed above are only a subset of testing.
However, there is still a list of over 100+ types, but not all testing types are used in all projects. As a result, we’ve covered some common types of software testing commonly used throughout the software testing life cycle.
In addition, different organizations use different definitions or processes, but the basic concept is the same everywhere. These testing types, techniques, and methods of implementation change as the project, requirements, and scope change.