OOSE_SQA_and_Software_Reuse_Lecture
OOSE_SQA_and_Software_Reuse_Lecture
Software Reuse
Introduction:
In this lecture, we will explore two crucial aspects of modern software engineering:
software quality assurance (SQA) and software reuse. Both are fundamental to delivering
high-quality, reliable, and cost-effective software systems.
Definition:
Software Quality Assurance is a set of activities designed to ensure that the software
development process and its outcomes meet specified quality standards. The focus is on
the prevention of defects and the continuous improvement of processes to maintain
software quality.
Quality Standards
Standards like ISO/IEC 25010 define quality models with characteristics such as:
• Functionality: Does the software deliver the required functionality?
• Reliability: How well does the software perform under various conditions?
• Usability: Is the software easy to use and understand?
• Efficiency: Is the system optimized in terms of performance and resource usage?
• Maintainability: How easy is it to correct or modify the software?
• Portability: Can the software be easily transferred to different environments?
SQA Activities:
• Reviews and Inspections:
Example: Code inspections or peer reviews where the team checks for potential
defects or design flaws.
Example in Agile:
In a Scrum team, each sprint includes not only feature development but also testing and
peer reviews. Automated unit tests are run with each code commit to identify regressions
early.
2. Software Reuse
Definition:
Software reuse refers to the practice of using existing software components, designs, or
systems in the creation of new software. This not only accelerates development but also
enhances reliability since reused components are often well-tested.
Levels of Reuse:
• System Reuse: Reusing entire systems with minor modifications.
Example: Enterprise resource planning (ERP) systems like SAP or Oracle are
reused across different industries with slight customizations.
• Component Reuse: Reusing software components such as libraries or frameworks.
Example: Reusing authentication modules from a pre-built library like OAuth in
multiple applications.
• Object and Function Reuse: Reusing specific functions or classes.
Example: Reusing a logging function or a mathematical utility class in multiple
projects.
Challenges in Reuse:
• Finding Reusable Components: It can be difficult to locate components that exactly
match project needs.
• Integration Issues: Combining reused components with new systems can lead to
compatibility issues.
• Licensing and Legal Issues: Some components may come with restrictive licenses,
limiting their reuse.
Example of SPL:
Automotive software systems often use SPLs. Car manufacturers might have a product
line for the infotainment system, where the core functionality is shared across models but
customized for each vehicle’s requirements. This structured reuse saves time and ensures
consistency across products.
Design Patterns and Reuse:
Design patterns are another important aspect of reuse. These are generalized, reusable
solutions to common problems in software design.
Example:
The Singleton Pattern ensures a class has only one instance and provides a global point of
access to it.
Real-world Example: A database connection pool implemented as a Singleton to ensure
only one connection pool is created throughout the application.
Key Takeaways:
1. Software Quality Assurance is essential for ensuring that both the process and
product meet desired standards. It involves a variety of techniques, from reviews
and static analysis to testing and audits.
By combining strong SQA practices with strategic software reuse, organizations can
not only produce higher-quality software but also reduce development time and cost.
Discussion Points:
1. Can you think of a project where you could have benefitted from reusing software
components?
2. What challenges do you anticipate when trying to introduce software quality assurance
practices in an agile team setting?