Types of Software Testing
Software testing is a process of verifying whether a software program or system is performing according to requirements and specifications. The program is executed in a controlled manner in order to identify defects and flaws so they can be fixed by the development team before it is delivered to the client. There are various kinds of software testing and the type used depends on the types of defects that the test team is trying to locate. For example, performance testing is done to find defects when the system does not perform as expected, while usability testing is used to locate flaws while using the system.
Testing Mechanism vs. Testing Type
When considering the various types of software testing, many people make the mistake of thinking of the testing mechanism with the type of software testing. The testing mechanism refers to whether the tester is using manual software testing or automated software testing. The testing type refers to performance testing, functional testing, etc. So a functional test can be performed using manual testing or automated testing.
While there are several different kinds of software testing, the most common testing types used by organizations are: functional testing, performance testing, compatibility testing, usability testing, scalability testing, accessibility testing, security testing, and regulatory-compliance testing. Descriptions of these testing types and more are listed below.
Types of Software Testing
Acceptance testing –This type of testing is done in order to verify that a piece of software or a system meets the requirements specified by the customer. It is usually either performed by the customer or in the presence of the customer to determine whether to accept the application.
Alpha testing – This type of testing is performed in-house and usually at the end of development. Sometimes a virtual user environment is created to support this testing. The results of this testing may indicate the need for minor changes.
Beta testing – This type of testing is typically performed either by outside organizations or by the end-users. This is usually the final round of testing before the software is released to the end customers.
Black box testing – In this type of testing, requirements and functionality are the main focus. The internal design of the system is not considered. This means that an input is given and the output is checked. Another name for this type of testing is Behavioral Testing.
Comparison testing – This type of testing us used to compare the strengths and weaknesses of a software product with previous versions or with other similar products.
Compatibility testing – This type of testing is performed to determine how well the software behaves with the hardware, operating system, other software, and/or the network environment.
Compliance Testing - This type of testing verifies that the software or system was developed in keeping with the necessary standards, guidelines, and procedures.
Configuration Testing – This type of testing is similar to the compatibility testing and is done to determine the optimal hardware and software configuration. It also is used to determine the effect of changing certain resources such as the CPU, memory, disk drives, etc.
Conformance Testing – This type of testing is used to verify that the software implementation conforms to industry standards. This is important when a product requires portability, compatibility, and/or interoperability in order to fulfill the needs of the end user.
End-to-end testing – This type of testing involves testing of a total application environment in a scenario that imitates real-world use. An example of this is interacting with a database, hardware, and other applications or systems. In a sense it is similar to system testing.
Error-Handling Testing – This type of test determines whether the software system is capable of properly processing errors and erroneous transactions.
Exploratory Testing – This testing type simply explores the features of the software.
Functional testing – This kind of software testing validates that the software meets specifications and flawlessly performs all of the required functions. This typically requires a series of tests which checks all features and uses a variety of normal and abnormal input data. This type of testing can be performed with both manual and automated testing and using black or white box methodologies.
Incremental Integration Testing – This type of testing is considered to be a bottom up approach for testing. It may simply be continuously testing an application as new functions are added. It also means that some modules and functions must be independent of each other and should be able to be tested separately.
Install/Uninstall Testing – This kind of testing verifies that the install and uninstall processes work for all of the intended hardware and operating systems. This usually applies to both partial and full installations/removals as well as upgrades.
Integration Testing – This type of testing is used to integrate modules of software for the purpose of verifying combined functionality. In this case, code modules are combined and tested as a group to confirm that they function together as expected. There are two variations of integration testing. In bottom-up integration, lower level functions are tested first in order to eliminate some of the testing required for higher level components. In top-down integration testing, the top-level modules are tested in order to alleviate the need for testing the lower level modules.
Inter-Systems Testing – This kind of software testing verifies that the interface between two or more software applications or systems operates as anticipated.
Load testing – This is basically performance testing used to verify how a system behaves under load. This helps to determine the point at which the response time of a system either degrades or fails.
Mutation Testing – For this kind of testing, code that was modified to fix a defect is checked.
Performance Testing – This type of testing simply verifies that a software system meets the performance requirements. The term for this testing is often used interchangeably with stress testing and load testing.
Recovery Testing – This kind of software testing is used to determine how well a software system recovers from hardware failures, system crashes, and any other catastrophic issues.
Regression Testing – This type of testing is considered to be one of the most important. It checks whether small changes in any components cause defects in the system for each new release. Previous versions of the software are tested repeatedly in order to determine if new quality problems have been introduced into the software. Since it is very difficult to thoroughly check the entire system, regression testing is often automated.
Scenario Testing – This kind of software testing is used to provide more realistic and meaningful combinations of functions of the software.
Security Testing – This type of testing is used to evaluate how well a system is able to protect itself from unauthorized internal or external access. This also includes willful damage to the code.
Smoke Testing – This type of testing is sometimes called build verification testing, link testing, and “turn it on and see if it catches fire” testing. It is used to verify the general testability of the software. It simply checks whether the application is ready to proceed to major testing.
Stress Testing – In this type of testing the software is checked to see how far it can perform beyond its specifications before it fails. Tester may perform actions such as inputting larger values, complex database queries, and adding data beyond storage capacity.
System Testing – For this kind of software testing, the entire systems is tested to confirm compliance with requirements. It verifies that the system meets both functional and non-functional specifications.
Unit testing – This type of testing is usually performed during the development phase and it checks the individual software components or modules. It is usually performed by the developers and not by the testers so it requires detailed familiarity of the inner workings of the software. It ensures proper software behavior prior to the integration of the system.
Usability Testing – This type of testing verifies that the software application is user-friendly. The flow of the navigation of the application is evaluated as well as how easy it is for the user to understand.
White box testing – This kind of software testing is also known as Glass Box testing. It is performed based on knowledge of the internal working of the software so tests usually check code statements, conditions, paths, and branches.