The following definitions are mainly taken from ISTQB® Foundation Level Syllabi (Foundation Level Syllabus - ISTQB® International Software Testing Qualifications Board). In this document I want to provide a quick overview of the major test categories defined by ISTQB®.
A group of test activities that are organized and managed together. A test level is linked to the responsibilities in a project. Examples of test levels are component test, integration test, system test and acceptance test.
Component testing (also known as a unit, module or program testing) searches for defects in, and verifies the functioning of, software modules, programs, objects, classes, etc., that are separately testable. It may include testing of functionality and specific non-functional characteristics.
Integration testing tests interfaces between components, interactions with different parts of a system, such as the operating system, file system and hardware, and interfaces between systems. Testing of specific non-functional characteristics (e.g., performance) may be included in integration testing as well as functional testing.
System testing is concerned with the behavior of a whole system/product. In system testing, the test environment should correspond to the final target or production environment as much as possible in order to minimize the risk of environment-specific failures not being found in testing. System testing may include tests based on risks and/or on requirements specifications, business processes, use cases, or other high level text descriptions or models of system behavior, interactions with the operating system, and system resources. System testing should investigate functional and a non-functional requirements of the system, and data quality characteristics.
Acceptance testing is s often the responsibility of the custo mers or user rs of a system; other stakeholders may be involved as well. Typical forms of acceptance testing include the following:
UAT (User Acceptance Testing)
Typically verifies the fitness for use of the system by business users.
Alpha and beta (or field) testing
Alpha testing is performed at the developing organization’s s site but not by the developing team.
Beta testing or field-testing, is performed by customers or potential customers at their own locations.
A group of test activities aimed at testing a component or system focused on a specific test objective, i.e. functional test, usability test, regression test etc. A test type may take place on one or more test levels or test phases
Testing of Function (Functional Testing)
The functions that a system, subs system or component are to perform may be des cribed in wo rk products s such as a requirements s specification, use cases, or a functional specification, or they may be undocumented. The functions s are “what” the system does. Functional testing considers the external behavior of the software (black-box testing).
Testing of Non-functional Software Characteristics (Non-function Testing)
Non-functional testing includes, but is not limited to, performance testing, load testing, stress testing, usability testing, maintainability testing, reliability testing and portability testing. It is the testing of “how” the system works. May be performed at all test levels.
Testing of Software Structure/Architecture (Structural Testing)
Structural (white-box) testing may be performed at all test t levels. Structural techniques are best used after specification-based techniques, in order to help measure the thoroughness of testing through assessment of coverage of a type of structure.
Testing Related to Changes: Re-testing and Regression Testing
After a defect is detected and fixed, the software should be re-tested to confirm that the original defect has been successfully removed. This is called confirmation. Debugging (locating and fixing a defect) is s a development activity, not a testing activity. Regression testing may be performed at all test levels, and includes functional, non-functional and structural testing. Regression test suites are run many times and generally evolve slowly, so regression testing is a strong candidate for automation.