Types Of Software Testing, Functional Testing, Non-functional Testing, Structural Testing, and Change Related Testing (Re & Regression Testing).
Different Types Of Software Testing
A Test type is a group of test activities aimed at testing specific characteristics of a software system, or a part of a system, based on specific test objectives. Such objectives may include:
• Evaluating Functional quality characteristics, such as completeness, correctness, and appropriateness.
• Evaluating Non-functional quality characteristics, such as reliability, performance efficiency, security, compatibility, and usability.
• Evaluating whether the Structure or architecture of the component or system is correct, complete, and as specified.
• Evaluating the Effects of changes, such as confirming that defects have been fixed (confirmation testing) and looking for unintended changes in behavior resulting from software or environment changes (regression testing).
1. Functional Testing
Functional Testing of a system involves tests that evaluate functions that the system should perform.
Functional requirements may be described in work products such as business requirements specifications, epics, user stories, use cases, or functional specifications, or they may be undocumented. The functions are “what” the system should do.
Functional tests should be performed at all test levels (Unit testing, Integration testing, System testing, and Acceptance testing), though the focus is different at each level.
Functional testing considers the behavior of the software, so black-box techniques may be used to derive test conditions and test cases for the functionality of the component or system.
Functional test design and execution may involve special skills or knowledge, such as knowledge of the particular business problem the software solves (e.g., online banking software for the banking industry).
2. Non-functional Testing
Non-functional testing of a system evaluates characteristics of systems and software such as usability, performance efficiency, or security. Non-functional testing is the testing of “how well” the system behaves.
Contrary to common misperceptions, non-functional testing can and often should be performed at all test levels, and done as early as possible. The late discovery of non-functional defects can be extremely dangerous to the success of a project.
Black-box techniques may be used to derive test conditions and test cases for non-functional testing. For example, boundary value analysis can be used to define the stress conditions for performance tests.
The thoroughness of non-functional testing can be measured through non-functional coverage. Nonfunctional coverage is the extent to which some type of non-functional element has been exercised by tests, and is expressed as a percentage of the type(s) of the element being covered.
Non-functional test design and execution may involve special skills or knowledge, such as knowledge of the inherent weaknesses of a design or technology (e.g., security vulnerabilities associated with particular programming languages) or the particular user base (e.g., the personas of users of healthcare facility management systems).
3. Structural Testing (White-box Testing)
Structural/White-box testing derives tests based on the system’s internal structure or implementation. Internal structure may include code, architecture, workflows, and/or data flows within the system.
The thoroughness of white-box testing can be measured through structural coverage. Structural coverage is the extent to which some type of structural element has been exercised by tests, and is expressed as a percentage of the type of element being covered.
White-box test design and execution may involve special skills or knowledge, such as the way the code is built, how data is stored (e.g., to evaluate possible database queries), and how to use coverage tools and to correctly interpret their results.
4. Change-related Testing
When changes are made to a system, either to correct a defect or because of new or changing functionality, testing should be done to confirm that the changes have corrected the defect or implemented the functionality correctly, and have not caused any unforeseen adverse consequences.
After a defect is fixed, the software may be tested with all test cases that failed due to the defect, which should be re-executed on the new software version.
It is possible that a change made in one part of the code, whether a fix or another type of change, may accidentally affect the behavior of other parts of the code, whether within the same component, in other components of the same system, or even in other systems.
Note: Confirmation testing and Regression testing are performed at all test levels.
Test Types and Test Levels
It is possible to perform any of the test types mentioned above at any test level.
Types Of Software Testing