Testing Levels
- In ISTQB, Testing Levels refer to the various stages of software testing that occur at different points in the software development lifecycle. Each level of testing focuses on specific objectives, from testing individual components to evaluating the entire system.
Unit Testing (Component Testing)
- Details
- Key Concepts
Unit Testing focuses on individual components or units of the software, typically a single function or class. This is the lowest level of testing.
Objective: To verify that each component or unit functions correctly in isolation.
Who performs it: Typically done by developers.
White-box Testing: Since unit testing often requires knowledge of the code, it involves white-box testing techniques.
Test Doubles: In unit testing, you may use mock objects or stubs to simulate the behavior of dependencies like databases or external services.
Integration Testing
- Details
- Key Concepts
Integration Testing verifies the interactions between integrated components or systems to ensure they work together as expected.
Objective: To identify issues in the interaction between integrated modules. ie: Interfaces and Data Flow.
Who performs it: Developers or testers.
Incremental Testing: Testing is done incrementally as modules are integrated. This can be done in two main approaches:
Top-Down Integration: Starts from higher-level components and moves to lower levels.
Bottom-Up Integration: Starts from lower-level components and moves up.
Stubs and Drivers: Used to simulate missing modules during incremental testing. A placeholder or dummy function that returns fixed or mock data for modules that are not developed yet.
System Testing
- Details
- Key Concepts
System Testing evaluates the complete, integrated system to verify that it meets the specified requirements.
Objective: To ensure the entire system works as a whole and satisfies functional and non-functional requirements.
Who performs it: Independent testers (typically).
Black-box Testing: System testing typically focuses on black-box testing where the tester doesn't need to know the internal code but verifies functionality against requirements.
Functional vs. Non-Functional Testing:
Functional Testing: Verifies system behavior according to functional requirements.
Non-Functional Testing: Tests attributes like performance, usability, reliability, and security.
Acceptance Testing
- Details
- Key Concepts
Acceptance Testing is conducted to ensure that the system meets the business requirements and is ready for delivery to the end-users.
Objective: To validate that the system satisfies the end-user or customer needs before it is released.
Who performs it: End-users or customer representatives.
User Acceptance Testing (UAT): End-users validate the software in a real-world environment to ensure it meets their expectations.
Operational Acceptance Testing (OAT): Focuses on whether the system is ready for deployment, including checks on backup, disaster recovery, and system maintenance.
Alpha and Beta Testing:
Alpha Testing: Performed by the development team or in-house testers before the product is released to the customer.
Beta Testing: Performed by end-users in a real-world environment before the final release.
Regression Testing
- Details
- Key Concepts
Regression Testing ensures that changes have not negatively impacted existing functionality. ie: Bug Fixes or New Features.
Objective: To detect any unintended consequences of code changes.
Automated Regression Testing: Frequently automated to reduce the effort and time needed to test previously validated functionalities.
Smoke Testing: A type of regression testing that checks basic functionality to ensure that the build is stable enough for further testing.
Retesting
- Details
- Key Concepts
Retesting involves testing a specific defect that was previously found and fixed to ensure that the issue has been resolved.
Objective: To verify that a particular defect has been successfully fixed without introducing new issues.
- Difference from Regression Testing: Retesting focuses on checking the fix for a specific defect, while regression testing checks for unintended impacts on other parts of the system.