Software reusability
What Is Software Reusability?
Software reusability is a quality attribute of software engineering concerned with the degree to which existing software artifacts, including code modules, libraries, components, design patterns, and documentation, can be used in new systems or contexts without significant modification. The goal is to reduce development effort, improve reliability, and accelerate delivery by drawing on previously validated building blocks rather than recreating functionality from scratch. Reusability is both a property that can be measured and a design objective that must be planned for from the start.
The concept draws from manufacturing principles of standardized components and has been a formal subject of software research since at least the 1968 NATO Software Engineering Conference. It intersects with concerns about software maintainability, portability, and modularity, and is addressed by standards bodies including the IEEE.
Object-Oriented Programming and Component Design
Object-oriented programming is the technical foundation most closely associated with software reusability. By organizing code into classes with well-defined interfaces, inheritance hierarchies, and encapsulated behavior, OOP makes it possible to extend and compose existing components with minimal coupling to their internal implementation. Early IEEE research on reusability in object-oriented design identified inheritance and abstraction as the primary mechanisms through which OOP delivers reusable structures. Design patterns, formalized by the Gang of Four in their 1994 catalog, provide a higher-level vocabulary of reusable solutions to common structural and behavioral problems. Component-based development takes this further, packaging reusable units with explicit dependency declarations and version contracts to allow substitution without modification of dependent code.
Cohesion metrics measure how closely the responsibilities within a module are related: high cohesion is a reliable predictor of reusability because a module with a single, well-bounded purpose is more likely to fit cleanly into a new context than one that mixes unrelated concerns.
Capability Maturity and Reuse Programs
Organizational factors determine whether individual reusable components are actually reused across projects. The Capability Maturity Model for Software (CMM), originally developed at the Software Engineering Institute at Carnegie Mellon University and later extended into the CMMI framework, provides a process maturity ladder that describes how organizations systematically develop and institutionalize practices, including reuse. At higher maturity levels, organizations maintain component repositories with classification schemes, measure actual reuse rates, and provide economic incentives that align developer behavior with organizational reuse goals. Without such infrastructure, reusable code exists in theory but gets bypassed in practice because it is undiscoverable or poorly documented.
Reuse libraries and asset management systems are the operational expression of these process practices: they catalog reusable artifacts by domain, interface, and quality attributes so that developers can locate and evaluate candidates in the time it would otherwise take to write their own.
Measurement and Quality Attributes
Reusability is assessed through a combination of static analysis and process metrics. Object-oriented metrics such as coupling between objects (CBO), depth of inheritance tree (DIT), and lack of cohesion in methods (LCOM) are commonly used to estimate a component's reuse potential. A systematic literature review of object-oriented reusability metrics in the ACM SIGSOFT Software Engineering Notes surveys the evidence base for these measures and their correlation with actual reuse outcomes. Standardized interfaces, thorough documentation, automated test suites, and stable APIs all improve reusability beyond what static metrics capture.
Applications
Software reusability has applications in a wide range of disciplines, including:
- Enterprise application frameworks and middleware platforms
- Embedded systems with shared hardware abstraction layers
- Open-source library ecosystems for scientific and engineering computing
- Safety-critical systems where reusing certified components reduces re-certification costs
- Cloud services built on composable infrastructure components