Updated: May 15, 2021
Types of software testing
Pre-read - Types of testing, how they are related?
Software testing is an integral and most critical part of the software development life cycle (SDLC). In today's age, there is software for every possible human need. It is important for software professionals to understand what are the different ways to test software.
Three software testing types -
Black Box Testing
Black Box testing is based on testing without going into the code rather than running the executable and treating the system as a black-box. Testing is done from an end-user perspective without worrying about how code is written, its design, etc. This type of software testing technique examines the functionality of the software as a black box without knowing internal code structure, internal paths, and implementation details. It mainly focuses on the input conditions and output behavior of software applications and the goal is to test software as per functional and non-functional requirements.
This method of test can be applied to every level (unit, integration, system integration, user acceptance testing) of software testing. The benchmark of this testing type is a specification or requirements document. It allows the tester to select a functional flow, provides input to verify its functionality, and validates whether the software gives the expected output of this functional test. If the function produces the expected output, then the software passes the test, otherwise, it fails.
Black Box Testing can be further divided into two types
1. Functional Testing
The type of black-box testing is concerned only with the functional requirements of a system and covers whether the functionality of an application or system is behaving as expected. It mostly emphasizes integration between key components to provide the required functionality to end-users. The segments covered in functional testing involve user interface, APIs, database, client/server applications, and overall functionality of software applications.
Functional Testing Types -
1. Progression Testing (also known as incremental progression)
It is used to test new modules as they are developed by the development team. As the development completes, it is important to test them comprehensively as the chances of finding bugs in fresh and untested code is maximum. The test ensures running all the possible test cases to achieve 100% progression testing.
2. Regression Testing -
A type of functional testing that confirms that a recent code change has not adversely affected any existing features of the software application. The tester then identifies the impacted area due to a change and plans the testing. He then selects test cases from an already existing test suite and re-executed them to ensure existing functionalities are working as expected. Regression means re-testing to ensure that the existing parts of the application remain unchanged.
3. Smoke Testing -
It is also known as “Confidence” or “Build Verification” testing. Smoke Testing is a software testing process that determines whether the deployed software build is stable or not. It merely checks that the most important functionalities are working or not. It acts as a confirmation test, which if the application passes the smoke test, the QA team proceeds with further software testing.
4. Sanity Testing -
A subset of functional testing, sanity testing is conducted whenever a new build is received for testing. It is performed by the testing team for basic tests. Sanity testing acts as a stoppage to check whether testing for an application can proceed or not. It is used to validate the functionality of the software and does not delve into detailed testing. The sanity Testing technique is usually deployed to test if the section of the application is still working after a critical bug fix.
5. Browser Compatibility Testing / Cross-browser testing-
Browser Compatibility testing is applied as not all browsers and devices work on the same configuration, they face browser compatibility issues on different levels. It primarily focuses on availing the website’s basic features to users on different browser-OS combinations, devices, and assistive tools. This is why browser testing is important because if the website is not tested on various platforms and browsers, it won’t work the same on all of them, causing inconvenience and subsequently impacting business.
6. Experience Based Testing-
As the name suggests, in this type of technique people’s knowledge, skills and background are of prime importance to test the application. Though technical and business understanding enhances the success of experienced-based testing.
Following are the methods that fall under Experience Based Testing:
Error guessing techniques
Checklist based testing
Fault Attack Testing
2. Non-Functional Testing
Non-functional testing is defined as a software testing type that is used to test the attributes of the system such as performance, security, memory leaks, etc. It checks the non-functional parameters such as reliability, UX, load test, and usability of the software. Non-functional testing plays a crucial role in customer satisfaction. An excellent example of non-functional testing would be to test how many people can work simultaneously on any software.
Non-functional Testing Types -
1. Performance Testing-
Performance Testing is a testing technique performed to determine the quality attributes of the system such as speed, stability, reliability, scalability, response time, and resource usage of a software application under a particular workload. The goal is to measure and improve the performance of the system. It examines multiple indicators such as browser, page, and network response times, server query processing time to help identify software performance.
Learn - Types of performance testing.
2. Security Testing-
Security testing is an essential part of software testing that is used to discover vulnerabilities or weaknesses of the system and it also determines that the data and resources of the system are protected from possible threats. It is used to ensure that the software system is safe from all potential ambiguous causes so that it does not stop working.
It also aims at verifying 6 basic principles as listed below:
3. Installation Testing (also known as implementation testing)-
Installation testing is done to confirm that the software is working as expected after installing on a targeted device with all the components are working as per expectations after installation. It is also known as implementation testing and is the last phase of testing. This testing procedure is performed to ensure quality and for users to receive optimum experience.
4. Resilience or Recovery Testing-
Resilience Testing is a type of system testing which aims at testing the software’s ability to recover from failures such as software or hardware crashes. This testing procedure is carried out to ensure that the system is fault-tolerant and it validates that the system recovery is performed properly.
Resilience Testing aims to determine if the software operations can continue after it incurring integrity loss. The system is expected to mend from faults and resume to its original form within a pre-specified time. Resilience Testing finds its use in mission-critical systems such as defence systems.
5. Reliability Testing-
Reliability Testing is an important software testing technique that is performed by the QA team to ensure that the software is reliable and is functioning for a specified amount of time in a given environment. It is used to test the software to render a fault-free operation. Reliability Testing is used to verify the application to be reliable for its intended purpose. It incorporates the results from both functional and non-functional testing techniques. It determines the primary driver that is the cause of failure.
6. Usability Testing (also known as User Experience UX Testing)-
Usability Testing is a testing technique that is done from the user’s viewpoint to determine if the software is easily usable. It is carried out at the design stage of the software development life cycle which gives the developer clarity of the user’s needs. It can be evaluated based on the level of skill required to use the software. Usability testing maintains a balance for both novice and expert users.
7. Compliance Testing (also known as Conformance Testing)-
Compliance Testing is a software testing technique used to certify that the software system complies with the regulations as a set of internal or external standards before it is released into production. The purpose of compliance testing is to maintain and confirm the compliant state of the application.
It includes the following aspects:
8. Localization Testing-
Localization testing is the software testing process for checking the behavior of software for a specific region, locale, or culture settings. This testing technique is executed only on the localized version of the product. It ensures that the application is capable of being used in a specific region. It finds its use in modules affected by localization such as UI and content, critical business scenarios, etc.
Advantages of black-box testing -
White Box Testing has a thorough nature that provides a clear structure to code.
White Box Testing speeds up the testing process significantly. Many times, the developer can see the bug and immediately have a general idea about what is to be done to fix the issues.
It allows the code to be optimized by removing hidden errors which may not be detected during backbox testing.
In this testing technique, the code goes through section by section and allows developers to remove superfluous sections of code.
Understanding the internals of the application allows unit tests.
Disadvantages of black-box testing -
It is not possible to test exhaustive test data.
There are chances of having missed the testing of unidentified paths, code branches, etc.
Best Suited applications for black-box testing-
The advantage of black-box testing is that it suits all kinds of applications. Tester has to ensure it treats the software application as a black-box and tests all the possible functional flows. Hence it is unavoidable for applications that are used by end-users.
Learn Advance - How to write a Test Plan?