The Software Development Lifecycle (SDLC) is a process used to plan, develop, test, and deliver software. Testing plays a critical role at every phase of SDLC to ensure that the final product is reliable, functional, and meets user requirements.
Different SDLC models determine how and when testing is performed. Let’s explore the most common models in detail:
The Waterfall Model is one of the earliest SDLC models. It follows a linear, sequential approach where each phase depends on the completion of the previous phase.
Example:
- Imagine you’re building a house. You only inspect the quality of the plumbing and electrical work after the entire house is built.
- If issues are found, fixing them may require tearing down parts of the house.
The V-Model improves upon the Waterfall Model by integrating testing into every development phase. It is also known as the Validation and Verification model.
| Development Phase | Corresponding Testing Phase |
|---|---|
| Requirements Analysis | Acceptance Testing: Validate the system meets user requirements. |
| System Design | System Testing: Verify the entire system works as specified. |
| Architecture Design | Integration Testing: Test interfaces between integrated modules. |
| Coding (Implementation) | Unit Testing: Test individual components or units of the code. |
Example:
- In the V-Model, as soon as requirements are defined, testers design acceptance tests to validate those requirements.
- If requirements are unclear, defects can be caught immediately.
The Iterative/Incremental Model breaks the software development process into small increments. Each increment builds upon the previous one.
Example:
- Imagine developing a website.
- In the first iteration, you build the “Login” feature and test it.
- In the second iteration, you add the “Product Catalog” feature and test both it and the login functionality.
- This continues until the entire system is built.
The Agile Model is a modern development approach where development and testing occur iteratively and collaboratively. Agile focuses on incremental delivery and adaptability to changing requirements.
Test-Driven Development (TDD):
Continuous Integration (CI):
Frequent Automated Testing:
| Model | Key Features | When Testing Occurs | Best Use Case |
|---|---|---|---|
| Waterfall | Sequential phases; testing is late. | After implementation. | Small, well-defined projects. |
| V-Model | Testing corresponds to each development phase. | Parallel to development. | Projects with clear, stable requirements. |
| Iterative/Incremental | Development in small increments. | After each increment. | Evolving or large projects. |
| Agile | Iterative, collaborative development. | Continuously during sprints. | Projects with frequent changes. |
In software testing, there are four main test levels:
Each level has its purpose, scope, and focus, as outlined below:
Unit Testing involves testing individual components or modules of the software. It ensures that each unit of the code works as expected.
Example of Unit Testing:
Suppose you have a function to add two numbers:def add(a, b): return a + bUnit test cases:
- Input:
add(2, 3)→ Expected Output:5.- Input:
add(-1, 1)→ Expected Output:0.- Input:
add(0, 0)→ Expected Output:0.
Integration Testing verifies the interfaces and interactions between integrated components or systems.
| Type | Description |
|---|---|
| Top-Down | Testing starts with high-level modules first, integrating lower-level modules step by step. |
| Bottom-Up | Testing starts with low-level modules first, integrating higher-level modules gradually. |
| Big-Bang | All components are integrated at once, and testing is performed on the complete system. |
Top-Down Approach:
Bottom-Up Approach:
Big-Bang Integration:
Real-Life Example:
Suppose you’re building an e-commerce website. Integration testing ensures:
- The “Add to Cart” feature sends the correct product details to the “Checkout” module.
- The “Payment” module processes correct amounts from the “Cart” module.
System Testing verifies the entire software system as a whole against the specified requirements.
Example of System Testing:
For an online banking system, system testing would include:
- Testing login with valid and invalid credentials.
- Transferring money between accounts and verifying the transaction.
- Ensuring the system responds quickly under high user load.
Acceptance Testing is the final level of testing that determines if the system meets business needs and is ready for deployment.
| Type | Description |
|---|---|
| User Acceptance Testing (UAT) | Performed by end-users to ensure the system works as expected. |
| Operational Acceptance Testing | Validates whether the system is ready for deployment (e.g., installation, backups, and failover testing). |
Imagine testing a Hospital Management System:
User Acceptance Testing (UAT):
Operational Acceptance Testing:
| Test Level | What is Tested | Who Performs It | Purpose |
|---|---|---|---|
| Unit Testing | Individual components or modules. | Developers | Verify internal logic and code correctness. |
| Integration Testing | Interaction between components. | Developers or testers | Verify interfaces and data flow. |
| System Testing | Entire system as a whole. | Testing team | Validate end-to-end functionality. |
| Acceptance Testing | Business processes and real usage. | End-users/stakeholders | Ensure the system meets business needs. |
The main test types include:
Each test type targets specific aspects of the software to ensure it meets both functional and non-functional requirements.
Functional Testing verifies that the software behaves as expected and performs its functional requirements correctly.
| Scenario | Input | Expected Outcome |
|---|---|---|
| Login - Valid Credentials | Username: user1, Password: Pass123 | “Login successful” |
| Login - Invalid Password | Username: user1, Password: wrong | “Invalid credentials” |
| Search Functionality | Search term: “Laptop” | Display list of laptops |
| Checkout Payment | Enter valid credit card details | Payment successful, order confirmed |
Non-Functional Testing evaluates aspects of the software other than functionality, such as performance, usability, security, and compatibility.
Performance Testing
Measures how the system behaves under normal and peak loads.
Includes:
Load Testing: Simulate a specific number of users to check performance.
Stress Testing: Push the system beyond its limits to identify breaking points.
Scalability Testing: Test how well the system scales as user load increases.
Example:
An e-commerce website must handle 10,000 concurrent users during a sale. Performance testing verifies page load times and server response.
Usability Testing
Ensures the system is user-friendly and easy to navigate.
Focuses on:
Interface design.
Navigation flow.
User satisfaction.
Example:
A banking app is tested to ensure users can transfer funds quickly and intuitively.
Security Testing
Identifies vulnerabilities and ensures the system is protected from threats like hacking, unauthorized access, and data breaches.
Includes:
Penetration Testing: Simulate attacks to find security weaknesses.
Authentication Testing: Verify login and access control mechanisms.
Example:
Testing an e-commerce app to ensure payment details are encrypted and only authorized users can view orders.
Compatibility Testing
Verifies the system works correctly on:
Different browsers (Chrome, Firefox, Safari).
Different operating systems (Windows, Mac, Linux).
Various devices (mobile phones, tablets, desktops).
Example:
A website is tested on Chrome, Firefox, and Safari to ensure consistent performance and appearance.
Structural Testing verifies the internal code structure of the software. It ensures that the code behaves as expected and meets quality standards.
def check_even(number):
if number % 2 == 0:
return "Even"
else:
return "Odd"
2 → Path: True condition → Output: "Even"3 → Path: False condition → Output: "Odd"Structural testing ensures all paths (True and False) are tested.
Change-Related Testing focuses on verifying the software after changes are made.
Regression Testing
Confirmation Testing (Re-Testing)
| Test Type | Focus | Example |
|---|---|---|
| Functional Testing | Verifies system functionality. | Login feature works with valid credentials. |
| Non-Functional Testing | Checks quality attributes (e.g., performance, usability). | System handles 10,000 users simultaneously. |
| Structural Testing | Tests internal code and logic. | All decision branches in a function are executed. |
| Change-Related Testing | Ensures changes don’t break existing functionality. | New feature does not impact existing features. |
Understanding which test types are commonly applied at each test level is essential for both real-world testing and ISTQB exam questions.
| Test Level | Common Test Types |
|---|---|
| Unit Testing | - Structural (White-box)- Functional |
| Integration Testing | - Functional- Structural (especially interface-level white-box testing) |
| System Testing | - Functional- Non-Functional (e.g., performance, security, usability) |
| Acceptance Testing | - Functional- Non-Functional (focused on business context, such as usability or operational readiness) |
ISTQB emphasizes the difference between static testing and dynamic testing, and it's important to understand how both can be applied across the Software Development Lifecycle (SDLC).
Static testing is not limited to any one test level. It is universally applicable across all SDLC phases and models, including Waterfall, V-Model, Agile, etc.
Change-related testing includes two main types:
| Type | Purpose | When Performed |
|---|---|---|
| Regression Testing | Ensure that recent changes haven’t broken existing features | After every build, deployment, or bug fix |
| Confirmation Testing | Verify that a specific defect has been successfully fixed | Immediately after a defect fix is deployed |
“Which type of testing is most suitable to automate after every code deployment?”
Correct Answer: Regression Testing
| Aspect | Regression Testing | Confirmation Testing |
|---|---|---|
| Focus | Unintended impact on existing features | Verify specific defect fix |
| Timing | After any change (feature, fix, config) | Immediately after fixing a reported defect |
| Automation Suitability | High – stable, reusable, frequent | Medium – case by case |
| Common Test Levels | Integration, System, Acceptance | Any level where the defect was found |
What is the difference between test levels and test types in ISTQB?
Test levels represent stages of testing related to the software development lifecycle, while test types focus on specific objectives or qualities being tested.
Test levels structure testing activities based on the scope of the component being evaluated. Typical levels include component testing, integration testing, system testing, and acceptance testing. Each level verifies different artifacts and responsibilities within the lifecycle. Test types, however, describe the purpose of the test regardless of level. Examples include functional testing, usability testing, performance testing, and security testing. A test type can occur at multiple levels—for instance, performance testing may be conducted at both system and integration levels. Understanding this distinction helps testers plan comprehensive coverage without confusing structural scope with testing objectives.
Demand Score: 72
Exam Relevance Score: 92
What is the main objective of component testing?
The objective of component testing is to verify that individual software units function correctly in isolation.
Component testing focuses on the smallest testable parts of the application, such as functions, classes, or modules. It is typically performed early in the development process and often executed by developers. The purpose is to validate internal logic, data structures, and individual operations before the components are integrated with others. By identifying defects at this stage, teams can reduce the cost and complexity of fixing issues later in the development lifecycle. Component tests may involve white-box techniques, unit testing frameworks, and controlled test environments that isolate the component from external dependencies.
Demand Score: 68
Exam Relevance Score: 85
What distinguishes system testing from acceptance testing?
System testing verifies the complete integrated system against specified requirements, while acceptance testing determines whether the system satisfies user or business needs.
System testing evaluates the fully integrated application in an environment similar to production. The focus is on verifying that the system meets functional and non-functional requirements defined in specifications. Acceptance testing occurs later and is typically conducted by customers, users, or stakeholders. Its purpose is to confirm that the delivered system is ready for operational use and meets business expectations. While system testing validates the product from a technical perspective, acceptance testing validates it from a business perspective.
Demand Score: 71
Exam Relevance Score: 89
What is maintenance testing and when is it performed?
Maintenance testing is performed after changes are made to software to verify that modifications work correctly and have not introduced new defects.
Maintenance testing occurs when an existing system is modified due to bug fixes, enhancements, environment changes, or platform upgrades. It usually includes two major activities: confirmation testing and regression testing. Confirmation testing verifies that a specific defect has been successfully fixed. Regression testing ensures that previously working functionality still behaves correctly after the change. Because software changes can unintentionally affect unrelated components, regression testing is critical to maintaining system stability during updates or releases.
Demand Score: 70
Exam Relevance Score: 86