Ch15 Software reuse
Chapter Overview
Title: Software Reuse
Author: Ian Sommerville
Chapter: 15 (Date: 17/11/2014)
Topics Covered
The reuse landscape
Application frameworks
Software product lines
Application system reuse
Software Reuse
Definition: In engineering, systems are designed by composing existing components used previously.
Shift in Focus: Traditionally focused on original development; there's now a recognition that systematic software reuse can accelerate development and reduce costs.
Trend: Shift towards reuse-based development has increased significantly in the last decade.
Reuse-Based Software Engineering
System Reuse: Complete systems are reused, encompassing multiple application programs.
Application Reuse: Applications can be reused as-is or through the development of application families.
Component Reuse: Individual components, ranging from sub-systems to single objects, can be reused.
Object and Function Reuse: Small-scale components that implement a single well-defined object or function can be reused.
Benefits of Software Reuse
Accelerated Development: Speeds up production by reducing development and validation time.
Effective Use of Specialists: Application specialists can focus on developing reusable software instead of repetitive tasks.
Increased Dependability: Reused software is typically more reliable as it has been tested in previous systems.
Lower Development Costs: Less code written means lower costs.
Reduced Process Risk: Existing software costs are known, reducing risk in project budgeting.
Standards Compliance: Reusable components can uphold UI standards, aiding user familiarity and decreasing mistakes.
Problems with Reuse
Component Library Management: Building and maintaining a reusable component library can be costly.
Finding and Adapting Components: Locating suitable components in the library and adapting them to new environments is a challenge.
Higher Maintenance Costs: If reused components' source code is unavailable, maintaining them can lead to compatibility issues over time.
Lack of Tool Support: Some tools may not facilitate reuse effectively, particularly in embedded systems engineering.
Not-invented-here Syndrome: Developers may hesitate to reuse components due to a preference for original work.
The Reuse Landscape
Scope of Reuse: Reuse can occur at various levels from simple functions to complete application systems, incorporating a wide array of techniques.
Approaches: Categories include architectural patterns, application frameworks, product lines, service-oriented systems, etc.
Supporting Approaches to Software Reuse
Application Frameworks: Collections of classes used to create application systems.
Application System Integration: Merging multiple systems to provide extended functionality.
Architectural Patterns: Standard software architectures used for common application types.
Aspect-oriented Development: Integrating shared components within an application at different points at compile time.
Component-based Software Engineering: Developing systems by integrating standardized components.
Software Product Lines
Definition: Groups of applications sharing a common architecture are adaptable for specific contexts.
Customization Methods: Involves configuring components, adding new components, selecting from libraries, or modifying existing components.
Configuration and Deployment Factors
Critical Factors in Planning: Includes the development schedule, experience of the team, software lifetime, and execution platform specifics.
Application Frameworks
Definition: An integrated set of software artifacts collaborating to provide a reusable architecture for related applications.
Characteristics: Frameworks present a skeletal architecture, extended through concrete classes and methods.
Web Application Frameworks (WAFs)
Purpose: Facilitate dynamic website construction, adhering to MVC (Model-View-Controller) architecture.
Core Features: Include user authentication, dynamic page creation, database interaction, session management, and AJAX support.
Extending Frameworks
Customization: Involves adding classes and methods to adapt general frameworks for specific applications; complexity can hinder effective usage.
Software Product Line Structures
Base Systems: Composed of core components and configurable application components to deliver specialized applications.
Product Line Architecture: Must distinctively structure subsystems to facilitate modifications.
Integrated Application Systems
Combination of Systems: Pulls together multiple systems to meet diverse functionality requirements.
Challenges: Selecting appropriate system functionalities and ensuring compatibility between different systems.
Key Points to Remember
There are various ways to reuse software, enhancing development speed and reducing costs.
Software product lines are adaptive systems sharing common architectures.
Application system reuse offers substantial functionality, improving the speed of development.
Potential drawbacks include dependency on external vendors and challenges with system integration.