Software Reuse
Definition
Software Reuse is the practice of using existing software artifacts (code, designs, components, documentation, test cases) to build new software, instead of developing everything from scratch.
Types of Reusable Artifacts
- Source code modules/functions/classes
- Design patterns and architectures
- Libraries and frameworks
- Documentation and test plans
- Domain knowledge / requirement templates
Levels of Reuse
| Level | Description | Example |
|---|---|---|
| Code reuse | Reusing functions, classes, modules | Utility libraries, data structures |
| Design reuse | Reusing architecture/design patterns | MVC pattern, design patterns (Singleton, Observer) |
| Component reuse | Reusing pre-built components | Third-party UI components, plugins |
| Application/System reuse | Reusing whole systems/frameworks | ERP frameworks, COTS (Commercial Off-The-Shelf) software |
Approaches to Reuse
- Black-box reuse — using a component without modification (e.g., library function)
- White-box reuse — modifying/adapting existing source code to fit new needs
Advantages
- Reduces development time and cost
- Improves reliability (reused components are already tested)
- Increases productivity
- Promotes standardization across projects
Disadvantages / Challenges
- Reused components may not perfectly fit new requirements (adaptation needed)
- Licensing and compatibility issues
- Maintenance dependency on third-party components
- Requires investment in building reusable, well-documented components initially
Relation to Software Crisis
Reuse is one of the key strategies (along with better process models) proposed to combat the software crisis by reducing redundant effort.
Exam tip: Be ready to distinguish Black-box vs White-box reuse and list 2–3 levels of reuse with examples.