Software Testing
Software Testing
2. Develop test plans - Outline the schedule of tasks, resources, test items, risks,
approaches and exit criteria for the testing effort based on priorities and
objectives.
4. Set up test environments and data - Get the required software, hardware, tools
and datasets ready for test execution.
5. Run tests - Execute the test cases while closely observing system behavior.
Perform additional exploratory tests when needed.
6. Log and report defects - Document in detail any defects, crashes or deviations
found. Categorize, isolate test data and steps to reproduce. Assign to
appropriate teams for analysis and remediation.
7. Retest bug fixes - Confirm resolved bugs no longer occur. Also ensure other
areas have not been impacted negatively.
8. Regression test entire system - Whenever new code changes or features are
introduced, conduct selective testing across the software to catch any fresh
quality issues or errors.
9. Provide testing status updates - Keep relevant teams and stakeholders
informed on progress, test coverage, defect metrics and overall quality through
reports.
11. Maintain documentation - Record all testing details including plans, cases,
results, defects, data, scripts, reports etc. for traceability, analysis and retesting.
Error: A human mistake made during the software development process. This could
be a misunderstanding of a requirement by a business analyst, a design flaw by an
architect, or a typo in the code by a developer.
An error is a human mistake made during any phase (design, coding, requirement,
etc.).
A fault (or defect) is the incorrect part inside the system caused by an error.
A defect is a problem or flaw in a software system where it does not meet the
expected requirements or behavior.
Failure: The visible, observable result of a defect or fault during software execution.
A failure occurs at runtime when the software fails to perform its intended function,
often encountered by end-users in production.
A failure happens when the system does not give the expected result.
2. Verify Requirements Are Met – Ensure the software meets all documented
requirements and user stories as part of the overall goals of software testing.
3. Ensure Quality & Reliability – Confirm the product performs consistently and
reliably under expected operating conditions.
4. Improve User Experience – Identify and resolve usability issues that could
hinder adoption or customer satisfaction.
8. Enable Confident Releases – Give stakeholders the assurance that the product
is ready for launch with verified quality standards.
The main objectives of software testing are to ensure that the software is reliable,
efficient, and meets the user's requirements. The following are the typical objectives of
software testing:
• To identify defects in the software and prevent them from becoming errors or
bugs in the final product.
• To validate that the software meets the specified requirements and functionality.
• To ensure that the software is user-friendly and meets the user's needs.
Enterprise System – For a financial ERP platform, key goals of software testing may
include validating complex transaction workflows, ensuring system scalability for
thousands of concurrent users, and confirming integration accuracy with third-party
accounting software.
1. Defect Detection
Find bugs, errors, and inconsistencies before the software reaches end users. The
earlier a defect is caught, the cheaper and easier it is to fix.
2. Quality Assurance
Verify that the software meets defined quality standards — functionality, performance,
security, and usability all align with expectations.
• Verification — Are we building the product right? (Does it match the spec?)
• Validation — Are we building the right product? (Does it solve the user's actual
problem?)
Ensure the software behaves consistently under normal and abnormal conditions,
including edge cases and unexpected inputs.
5. Security Assurance
6. Performance Evaluation
Check that the system responds within acceptable time limits under various loads (load
testing, stress testing, etc.).
7. Confidence & Risk Reduction
Give stakeholders and developers confidence that the system is ready for release by
systematically reducing the risk of failures in production.
8. Regression Prevention
Ensure that new changes don't break existing, working functionality — especially critical
in agile/continuous delivery environments.
9. Compliance Verification
Ultimately, testing ensures the end product is usable, intuitive, and meets user
expectations — reducing churn and support costs.
Verification is the process of checking whether the software is being built correctly
according to the requirements and design documents. It is a static process involving
reviews, walkthroughs, and inspections, and asks the question: "Are we building the
product right.
Validation is the process of checking whether the correct software has been built and
whether it meets the actual needs of the user. It is a dynamic process involving actual
execution of the software through testing, and asks the question: "Are we building the
right product.
At this stage, software testers collaborate with key stakeholders to gather and
understand testing requirements. The insights gained are documented in
the Requirement Traceability Matrix (RTM), forming the backbone of the testing
strategy.
Product Owner: Represents business goals and defines the problem that needs
solving.
Developer: Builds the solution based on the product owner’s specifications.
Tester: Validates that the solution works correctly and identifies issues.
Test Planning:
Once the requirements are understood, the Test Planning phase begins. This is
the stage in the Software Testing Life Cycle where the test strategy is formalized.
• Test Objectives: Identify what aspects (functionality, usability, performance, or
security) need to be tested.
• Test Deliverables: Define the test cases, scenarios, and data that will be
produced and monitored.
• Scope: Clarify which features will be tested and which will not (in-scope vs. out-
of-scope).
• Resources: Estimate the costs, tools, and personnel required for the testing
process.
• Timeline: Set milestones for test phases alongside the software development
cycle.
• Test Approach: Choose appropriate testing techniques (e.g., black box or white
box testing), levels (unit, integration, system), and types (regression, smoke,
performance).
In this stage of the Software Testing Life Cycle, testers start developing test cases
based on the requirements and planning outcomes. A test case outlines how a
particular feature or functionality will be tested.
A strong test case should clearly outline what’s being tested, expected
outcomes, and pass/fail criteria.
Test Execution:
Now that the test cases are written and the environment is set up, the Test
Execution phase begins. During this step in the Software Testing Life Cycle, test
cases are executed, and the outcomes are compared to the expected results.
The final phase in the Software Testing Life Cycle is Test Cycle Closure. After all
test cases have been executed, the focus shifts to analyzing the outcomes and
creating the Test Report.
the internal structure and working of an application. It ensures that the code
• Ensures thorough code coverage by creating test cases for different paths,
White box testing, also known as structural or glass box testing, focuses on
examining the internal structure and code of an application. It ensures that the
logic, control flow, and data handling work correctly at the code level.
• Control Flow & Path Identification: Includes creating control flow graphs
(CFG) and using cyclomatic complexity and path testing to identify all
• Test Case Design: Test cases are designed based on internal code structure
outputs.
• Execution & Reporting: Tests are executed at unit and integration levels,
and detailed reports are generated highlighting coverage metrics, defects, and
1. Path Testing
Path Testing focuses on testing all possible execution paths in the program
to ensure each path behaves as expected.
• Verifies logical conditions, branches, and decision points.
• Ensures all code paths are executed at least once.
• Helps improve efficiency by identifying redundant or unused paths.
2. Loop Testing
Loop Testing ensures that loops in the program execute correctly under
different conditions.
• Validates loop initialization, execution, and termination.
• Detects issues like infinite loops or incorrect iteration counts.
• Checks loop behavior with minimum, maximum, and boundary values.
3. Unit Testing
Unit Testing tests individual components or functions of the application in
isolation.
• Ensures each unit performs its intended functionality correctly.
• Validates logic against design requirements during development.
• Helps detect defects early at the smallest level of code.
4. Mutation Testing
Mutation Testing evaluates the quality of test cases by making small
changes (mutations) in the code.
• Introduces minor code modifications to check test effectiveness.
• Ensures existing test cases can detect errors.
• Helps improve overall test coverage and robustness.
5. Integration Testing
Integration Testing checks how different modules or components work
together as a system.
• Verifies interaction between integrated units after unit testing.
• Ensures smooth data flow across modules.
• Identifies interface and communication issues.
6. Penetration Testing
Penetration Testing simulates cyber-attacks to identify vulnerabilities in the
system.
• Detects security weaknesses in the application.
• Ensures protection against unauthorized access.
• Helps strengthen system security before deployment.
Black Box Testing is a software testing technique where the tester evaluates
1 . Input Layer: This layer includes all types of inputs provided to the system,
such as user inputs, test data, or external requests.
2. System Under Test (SUT): The actual application where the business
logic is executed. In Black Box Testing, the tester does not have knowledge
scenarios, and test data used for execution and future reference.
• Effective for testing large and complex systems at the functional level
• Executes tests from the end user’s or client’s perspective, ensuring better
usability validation
functional specifications.
Internal None; the internal structure is Full access to source code and
Best for high levels (System, Best for low levels (Unit,
Testing Levels
Acceptance). Integration).
Software testing techniques are methods used to design and execute tests to
a human tester.
process.
7. System testing - Tests the complete software system to ensure it meets the
specified requirements.
or end-user's expectations.
been made to ensure the changes have not introduced new defects.
10. Performance testing - Tests the software to determine its performance
11. Security testing - Tests the software to identify vulnerabilities and ensure it
12. Exploratory testing - A type of testing where the tester actively explores
13. Boundary value testing - Tests the software at the boundaries of input
14. Usability testing - Tests the software to evaluate its user-friendliness and
ease of use.
15. User acceptance testing (UAT) - Tests the software to determine if it meets
system.
The Levels of Software Testing are mainly divided into four categories, which are
as follows:
1. Unit Testing
Unit Testing is the first level of software testing and focuses on verifying
identify and fix defects early before integrating these components with other parts
of the system.
Unit tests help developers spot bugs early in the development process, making it
easier and quicker to fix them. It's the first layer of defense to verify that each part
2. Integration Testing
modules or components work together. This level checks how different modules
individual parts work perfectly, they might face issues when interacting with one
another.
Integration testing ensures that data flows correctly between modules and that
they communicate seamlessly. It helps catch problems that might arise when
3. System testing
software system to ensure it meets the specified requirements. This stage checks
4. Acceptance Testing
Acceptance Testing, also known as User Acceptance Testing (UAT), is the final
test before releasing the software to the end-users. In this phase, the customer or
UAT is crucial because it verifies whether the software is ready for production and
meets business requirements. It’s the last chance to catch any overlooked issues
before deployment. If the software passes this stage, the customer gives the
Testing task:
quality and reliability. These tasks range from initial planning and requirement
Testing Activities:
Test Planning: Defining the project's testing scope, objectives, and strategy while
Test Analysis & Design: Analyzing the "test basis" (requirements) to determine
Test Implementation: Preparing the test environment, gathering test data, and
Test Execution: Running the designed tests (manually or via tools), comparing
Test Completion: Checking if all defect reports are closed and creating a final
Software testing tools are used to make the testing process faster, more accurate,
and more efficient. They are categorized based on the type of testing they support.
1. Functional Testing Tools These tools test whether the software works as
expected. Popular tools include Selenium, which is used for automating web
browser testing, and QTP/UFT (Quick Test Professional), which is used for
functional and regression testing. Katalon Studio is another widely used tool that
2. Performance Testing Tools These tools check the speed, stability, and
scalability of software. JMeter is the most popular open-source tool used for load
and performance testing. LoadRunner is another tool used for measuring system
JUnit is used for Java applications, NUnit is used for .NET applications, and PyTest
4. Bug Tracking Tools These tools help in recording, tracking, and managing
defects. JIRA is the most widely used bug tracking and project management tool.
Bugzilla and Mantis are also popular open-source bug tracking tools.
managing test cases. TestRail and Zephyr are commonly used test management
6. Mobile Testing Tools These tools are used to test mobile applications. Appium
is the most popular open-source tool for automating mobile app testing on both
ZAP and Burp Suite are widely used tools for finding security flaws in web
applications.
8. API Testing Tools These tools test the functionality and performance of APIs.
Postman and SoapUI are the most commonly used tools for API testing.
• Clarifies Project Goals: The plan defines how project objectives will be
uncontrolled expansion.
requirement gaps, and disputes that often lead to delays and rework.
stability.
project.