Agile Unit V
Agile Unit V
1
2. The Good Enough Approach to Testing
The key principles and concepts behind the "Good Enough Approach to Testing" include:
• Risk-Based Testing: This approach prioritises testing efforts based on the risks
associated with different software parts. Critical functionalities or areas with a higher
likelihood of failure receive more extensive testing, while less critical components may
receive less attention.
• Cost-Effective Testing: The strategy aims to balance thoroughness and budget
constraints. It recognises that exhaustive testing can consume significant resources and
time, which may not be justifiable in all situations.
• Timely Delivery: In many software development projects, delivering the product
within a specific timeframe is crucial. The "Good Enough Approach" acknowledges
that spending too much time on testing can delay the release, and sometimes, a timely
release with minor defects is preferable to a delayed, defect-free release.
• Customer Expectations: It aligns testing efforts with customer expectations.
Depending on the software's purpose and target audience, customers may be willing to
accept a lower testing rigour in exchange for faster delivery or lower costs.
• The "Good Enough Approach to Testing" would involve extensive testing efforts on
the core functionalities related to browsing offers, adding items to the cart, and making
payments. These functions are critical to the app's success.
• Lesser-used features like user profile customisation or complex analytics reporting
might receive less intensive testing because they are secondary to the app's main
purpose.
• The testing team would prioritise rapid testing cycles to meet the marketing campaign's
deadline. This approach may involve accepting minor, non-critical defects if they do
not significantly impact the core user experience.
• Customer feedback and early user testing would play a vital role in identifying and
addressing issues quickly. Any critical defects would be addressed promptly, while less
critical ones might be deferred for future updates.
2
3. Testing as the Best Defense
"Testing as the Best Defense" is fundamental in software development and quality
assurance. It emphasises that rigorous and comprehensive testing is one of the most
effective strategies to prevent software defects, vulnerabilities, and issues from reaching
end-users. By proactively identifying and addressing problems during development,
organisations can reduce the likelihood of costly post-release failures and ensure that
software meets high-quality standards. Here's an expanded explanation and an example of
the "Testing as the Best Defense" concept:
3
• Regression Testing: Regression testing is performed to confirm that existing
functionalities remain intact whenever new features or updates are introduced. This
safeguards against unintended side effects or regressions.
By implementing rigorous testing at every stage of development, the company ensures that
the e-commerce platform is robust, secure, and user-friendly when launched. This proactive
approach minimises the risk of critical issues arising in the production environment,
ultimately leading to a successful and reliable product.
4
4. Sharing a Code Base with Another Project Team
"Sharing a Code Base with Another Project Team" is a practice where multiple project
teams collaborate on and utilise a common codebase or software component to achieve various
objectives. This approach is often employed in large organisations or complex software
development scenarios to promote code reuse, consistency, and efficiency. It facilitates better
resource allocation and can lead to more streamlined development processes. Here's an
expanded explanation and an example of sharing a code base with another project team:
Sharing a code base among multiple project teams involves several key elements:
• Common Code Repository: Teams store the shared code, libraries, or components in
a common repository accessible to all participating teams. Version control systems like
Git are often used to manage and track changes.
• Collaboration: Teams develop, maintain, and update the shared code. Effective
collaboration is essential to ensure that changes made by one team do not negatively
impact the others.
• Versioning: Clear versioning strategies are established to manage changes and updates
to the shared code. Teams must coordinate and communicate to ensure compatibility
with specific versions.
• Communication: Frequent communication and documentation are critical to keep all
teams informed about changes, updates, and potential issues related to the shared
codebase.
• Testing: Testing is necessary to confirm that changes to the shared code do not
introduce defects or compatibility issues for the teams relying on it.
Example: Imagine a software development organisation with several project teams working
on different products, each requiring user authentication functionality. Instead of each team
independently building and maintaining its authentication system, they decided to share a
common authentication module:
By sharing the authentication module, the organisation reduces duplication of effort and
ensures consistent security and user experience across all its products. This approach also
5
allows teams to benefit from any improvements or bug fixes to the authentication module,
enhancing overall efficiency and code quality.
6
5. Sharing Common Components with Another Project Team
Example: Consider a software development company with multiple project teams working on
different web applications. Each application requires user authentication, and rather than
implementing authentication from scratch for each project, they decided to share a standard
authentication module:
7
functionality of the web applications relying on it. Each project team also performs
integration testing to ensure compatibility with their specific implementations.
• Documentation: Detailed documentation of the shared authentication module is
provided, including API documentation, code examples, and guidelines on how to
integrate and customise the module for different projects.
8
6. Depending upon Code or Components Produced by Another Project Team
Example: Imagine a large software development company with multiple project teams
working on different software products. Each product requires a database management system
(DBMS) for storage and retrieval. Instead of each faction setting up and maintaining its own
DBMS, they decide to depend on a centralised, company-wide DBMS team:
9
their applications interact correctly with the DBMS and that data is stored and retrieved
accurately.
• Documentation: The DBMS team provides comprehensive documentation that
includes guidelines on connecting to the DBMS, best data storage and retrieval
practices, and details on managing schema changes or database migrations.
Depending on the centralised DBMS team and their shared DBMS solution, the individual
project teams save time and effort in setting up and maintaining their database systems. This
approach ensures that all projects within the organisation benefit from a reliable, standardised,
and well-maintained DBMS solution, ultimately improving project efficiency and consistency.
However, it also requires careful coordination and communication to manage dependencies
effectively.
10