Every software development project is unique in terms of its testing scope and the prioritization of testing activities. To deliver quality software in due time and at an optimal cost, QA teams combine varied testing approaches and types. In this article, we have leveraged our three-decade experience in software testing to guide you through the common testing types and shared patterns of balancing different types of testing in a software development project.
To provide a well-rounded picture, we grouped the testing types according to 3 criteria: testing aims, automation level, and formalization level.
Types of testing by aims
Performing functional testing, test engineers verify that the functionality of software complies with the requirements specification. To test features, test engineers provide an application with a certain input and verify an output against the expected result without getting to know the inner structure of the item under test.
Test engineers validate non-functional aspects of software, including:
- Performance – checking software response time, reliability, and resource consumption under expected and stress load.
- Usability – verifying an application’s workflows and scenarios from the point of view of an end user; identifying complex, unclear or inconvenient navigation components; checking an application for compliance with Web Content Accessibility Guidelines.
- Security – done by security specialists performing vulnerability assessment, penetration testing, and security code review in order to verify whether an application is protected from attacks, data breaches, and other security threats.
- Compatibility – verifying whether an application shows consistent performance on different devices, browsers, operating systems, and with varied network configurations.
- Compliance – validating an application against relevant standards and regulations, for example, HIPAA for software used in the healthcare sector.
- Localization – validating whether an application adapts a user interface, a default language, currency, date and time format, and other information to the targeted region correctly.
Balancing functional and non-functional testing
Testing activities should start with comprehensive functional testing. With a functional test suite successfully running, the testing scope can be extended with relevant non-functional types of software testing. The types of non-functional testing relevant for a particular application should be determined based on an application type, the complexity of its architecture, relevant industry regulations, the range of devices an application is supposed to run on, and other factors.
To have the testing scope under control, test teams can resort to risk-based testing, which means prioritizing testing activities based on the probability and aftermath of potential defects.
Types of testing by automation level
Self-explanatorily, manual testing stands for the manual execution of tests to validate functionality, usability, and other relevant aspects of software against the requirements specification. For that, test engineers usually create test cases. Test cases describe scenarios to be validated, the steps to be executed, prerequisites, test data, and an expected result.
A well-rounded test automation strategy calls for the automation at the following levels:
- At the unit level, the development team executes automated tests to validate individual software components.
- At the API level, the development or the test team employs respective tools (e.g., Postman, Fiddler) to verify the integration among several software components.
- At the UI level, the test team uses test automation tools (e.g., Selenium, Appium, Protractor) to validate an application by simulating the actions of a user on the app’s interface.
Balancing manual and automated testing
Test cases that are executed frequently and do not change much with each iteration are good candidates for automation. Automated testing also applies to user scenarios that need to be tested with a number of varied data inputs.
In its turn, manual testing is well applied for validating new, complex or changing functionality. Automating testing of unstable or too complex functions may be challenging, hence, time and investments needed for automation may outweigh the actual benefits.
Types of testing by formalization level
Test case-based testing
Test engineers design test cases in advance and rely on them during test execution. Test engineers compare the actual result against the expected result (stated in a test case and derived from the requirements) and state a pass or fail verdict.
Exploratory testing presupposes simultaneous investigation, test design, and test execution. Instead of designing test cases in advance, test engineers use information gained during exploration and the results of previously executed tests to design new, better-quality test cases.
Ad hoc testing
This type of testing presupposes no formal test preparation, recognized test design technique or expected results. Testing is carried out informally and test engineers are not required to obey a particular workflow.
Balancing test case-based, exploratory and ad hoc testing
Any development project presupposes the combination of exploratory, test case-based, and ad hoc testing. Exploratory testing is well-suited at the early stages of a project, as it allows test engineers to gain familiarity with an application and develop ideas on how the app is to be tested. Once testers have gained the required knowledge and informally experimented with test procedures, they may start with formalization. Later in the development life cycle, when testers are well-acquainted with software, they perform ad hoc testing to find obscure defects.
In this article, we have provided a general overview of different testing types and outlined the basic principles of test prioritization. To advance in the domain, check out our software testing and QA blog – we offer a closer look at the mentioned testing types and discuss other non-trivial issues.
Compliance requirements have many nuances. We carefully analyze each customer’s situation to identify, prioritize, and help eliminate any compliance gaps.