ST-Manual Testing - 3 - Introduction to software Testing
Software Testing - Introduction
What
is software Testing ?
Software testing is a process of evaluating a software
system or application to determine whether it meets specified requirements and
to identify any defects. The purpose is to validate and verify the
functionality, performance, and stability of the software before it is released
to the end-users.
When
do we go for software testing ?
Software testing is typically performed:
- During
the development process, to catch and fix bugs early.
- Before
the release of the software, to ensure its quality and functionality.
- After
the release of the software, to monitor and maintain its performance and
identify any issues.
Software testing is performed to:
- Ensure
software functionality and quality before release.
- Find
and fix bugs and errors.
- Verify
that the software meets the requirements and specifications.
- Improve
software reliability and performance.
- Provide
confidence to stakeholders and users.
- Facilitate
maintenance and future updates.
If software is not tested adequately, it can result in:
- Poor
quality and unreliable software.
- Unsatisfied
users and customers.
- Financial
losses due to bug fixes and damage control.
- Missed
deadlines and project delays.
- Damage
to reputation and credibility.
- Security
vulnerabilities and increased risk of data breaches.
Here are some examples of major software failures that
were inversely proportional in impact due to the lack of proper testing:
- Knight
Capital Group (2012): A lack of proper testing led to a software failure
that resulted in the loss of $440 million in just 45 minutes. The software
was supposed to execute trades, but instead it placed unintended orders,
leading to massive losses.
- Healthcare.gov
(2013): The launch of Healthcare.gov, the website for the Affordable Care
Act, was plagued by technical difficulties and user frustration. Poor
testing and insufficient attention to detail resulted in the site
crashing, slow load times, and a user experience that was far from
optimal.
- Tesla
Autopilot (2016): Tesla’s Autopilot system, designed to provide
semi-autonomous driving capabilities, was involved in a fatal crash due to
a software failure. It was later determined that the software failed to
identify a white truck against a bright sky, leading to the collision.
- Equifax
Data Breach (2017): A lack of proper testing led to a vulnerability in
Equifax's systems that allowed hackers to access sensitive information,
including Social Security numbers and birth dates, of over 140 million
people.
- Facebook
Data Scandal (2018): Facebook was hit with a major data scandal when it
was revealed that the data of millions of users had been harvested by
political consulting firm Cambridge Analytica. It was later determined
that the lack of proper testing and security measures led to the data
breach.
These examples highlight the importance of proper testing in
software development. Thorough testing can help identify potential problems and
prevent them from becoming major failures that can cause significant harm and
impact.
Software testing can be performed through various methods,
including:
- Unit
Testing: Tests individual components or units of code.
- Integration
Testing: Tests the interaction and communication between different
components.
- System
Testing: Tests the entire system to ensure it meets requirements.
- Acceptance
Testing: Tests the software from the end-user's perspective to determine
if it is fit for use.
- Regression
Testing: Tests that previously working functionality has not been impacted
by recent changes.
- Performance
Testing: Tests the software's performance under different load conditions.
- Security
Testing: Tests the software's security features and resistance to attacks.
- Usability
Testing: Tests the software's ease of use and user experience.
In the Scrum software development model, testing is
integrated into the development process as follows:
- Sprint
Planning: Test cases and test strategies are defined and prioritized in
this stage.
- Sprint
Development: Developers write code and perform unit testing, while testers
perform integration and system testing.
- Sprint
Review: Completed features and functionalities are demonstrated and
tested.
- Sprint Retrospective: Feedback on the testing process and potential improvements are discussed.
When to start testing
and when to end testing in Scrum?
In the Scrum software development model, testing starts as
soon as the first piece of code is written and ends just before the product is
released.
- Sprint
Planning: The testing process begins with the definition and
prioritization of test cases and strategies.
- Sprint
Development: Testing continues throughout the development process, with
unit testing performed by developers and integration and system testing
performed by testers.
- Sprint
Review: Completed features are demonstrated and tested during the Sprint
Review.
- Sprint
Retrospective: Feedback on the testing process and potential improvements
are discussed during the Sprint Retrospective.
Testing continues until all features have been thoroughly
tested and any bugs and issues have been resolved. It is an ongoing process
throughout the development cycle to ensure that the software meets the quality
and reliability standards required for release.
How much testing is
enough in Scrum model ?
The amount of testing in the Scrum software development
model is determined by the definition of done (DoD) for each sprint. The DoD is
a shared understanding of what constitutes a usable increment of the product
and should include testing as an essential component.
In Scrum, enough testing is performed to meet the definition
of done for each sprint and ensure that the software is ready for release. This
includes testing of individual units, integrated components, and the system.
The focus is on testing the highest priority and risk items first, and then
proceeding with less critical items.
It is important to note that testing is an ongoing process
in Scrum and more testing may be required as new features are added or changes
are made. The goal is to continuously improve the quality of the software,
while also ensuring that it meets the needs of the stakeholders and end-users.
The typical software testing life cycle (STLC) is a
structured testing process that defines the testing activities to be performed
at each stage of the software development process. The STLC typically consists
of the following phases:
- Requirements
Analysis: Analyze the software requirements and identify the scope of
testing.
- Test
Planning: Define the testing approach, test strategy, and create a test
plan.
- Test
Case Development: Develop test cases to validate the requirements and
identify potential defects.
- Test
Environment Setup: Prepare the test environment and make sure it is ready
for testing.
- Test
Execution: Execute the test cases and document the results.
- Test
Results Analysis: Analyze the test results, identify defects and document
them.
- Defect
Tracking and Reporting: Report the defects to the development team, track
their status and prioritize their resolution.
- Test
Closure: Document the testing results, analyze the testing process and
make improvements for future projects.
This process is iterative and may be performed multiple
times during the development cycle, as changes are made and new features are
added to the software. The STLC helps ensure that the software is thoroughly
tested and meets the quality and reliability standards required for release.
Advantages of doing thorough software testing include:
- Improving
Quality: Testing helps identify and resolve defects and bugs, resulting in
a higher quality and more reliable software product.
- Reducing
Risks: Thorough testing helps to identify potential risks and mitigate
them before the software is released, reducing the risk of failure and
costly downtime.
- Enhancing
User Experience: Testing helps to ensure that the software meets the needs
and expectations of the end-users, resulting in a better user experience.
- Improving
Maintainability: Testing helps to identify areas of the software that may
be difficult to maintain or upgrade in the future, making it easier to
maintain and enhance over time.
- Increased
Confidence: Thorough testing provides confidence in the software's
functionality and reliability, reducing the risk of costly bugs and
defects.
- Better
Budget Management: Testing helps to identify and resolve issues early in
the development cycle, reducing the cost of rework and avoiding
last-minute surprises that can impact budget and timeline.
- Meeting
Regulatory Requirements: Thorough testing helps ensure that the software
meets regulatory requirements, reducing the risk of legal and financial
consequences.
Thorough software testing is critical for
ensuring the quality and reliability of software products and reducing the risk
of defects and failures.
What is the basic skillset
a test engineer needs in scrum ?
A test engineer in a Scrum team needs the following basic
skills:
- Understanding
of software testing concepts and methodologies: This includes knowledge of
various types of testing such as functional, regression, and performance
testing.
- Knowledge
of testing tools and technologies: This includes experience with test
automation tools, bug tracking systems, and test management tools.
- Ability
to write and execute test cases: This includes the ability to create test
cases that accurately reflect the requirements and identify potential
defects.
- Knowledge
of software development life cycle (SDLC): This includes an understanding
of the development process and the role of testing in the SDLC.
- Communication
and collaboration skills: Testers need to be able to effectively
communicate and collaborate with the development team and stakeholders to
identify and resolve defects.
- Analytical
and problem-solving skills: Testers need to be able to analyse and
interpret complex information, identify problems, and find solutions.
- Adaptability
and flexibility: Testing in a Scrum environment require the ability to
adapt to changing requirements and priorities, and to work effectively in
a fast-paced, dynamic environment.
In addition to these basic skills, continuous learning and
professional development are important to keep up with the latest tools,
techniques, and trends in software testing.
Comments
Post a Comment