Software elements of a product or system take time to create. Thus re-using blocks of code developed for previous applications may save on development time.
Software created with re-use in mind most likely used a structured and modular programming approach.
This permits the elements which provide a discreet function to encompass a self-contained block of code. It accepts specific inputs and returns the desired outputs. A printer driver is an example of software code that may become part of many different applications and printing tools.
Software reuse is a process to create a software element or system which incorporates previously created software elements.
Benefits of software reuse
- Dependability & reliability may improve given previous testing and use
- Risk reduction as you avoid the elements of detailed software development
- Standards compliance accomplished with prior work
- Development time reduced by starting with blocks of reusable software
- Permits more resources for new functional elements of the system
Downside of software reuse
- Maintenance cost increase
- Software tools require longer support
- Software tools may become obsolete
- “Not invented here” attitude reduces acceptance
- Overhead of creating & maintaining a component library
- It takes time to select reusable software components.
With some work to organize and plan for the reuse of software, an organization can save significant time and money.
Thinking through and creating a strategy to build systems using reusable software blocks mirrors the hardware concept of creating a platform. Each successive iteration of the system as much as 80% (or more) of the components remain the same allowing the development team to focus on incorporating new functionality within the platform.
Software components do require an element of flexibility, yet many functions remain relatively stable over time.
For example, gathering and recording a voltage sensor reading hasn’t really changed much over time. Once that software component is developed and proven to work well, it becomes part of the software component library available for use and reuse.
What can be reused?
Reusing simple functions makes sense and is likely already in use within your software team. It is possible to also reuse complete application system, too. Here is a list of possible software elements that could be reused:
- Component frameworks
- Application product lines
- Legacy wrapping algorithms
- COTS integration services
Beside specific blocks of code, it is also possible to reuse solution concepts to solve similarly structured problems, this includes design patterns and generative programming.
Part Selection Process and Reliability (article)
Material Selection and Reliability (article)
Descriptive Models of the Design Process (article)