Chapter 18
Reuse-based software engineering is an approach to development that tries to maximize the reuse of existing software. The software units that are reused may be of radically different sizes. There may be an application system reuse, different particular component reuse or object and function reuse. A complementary form of reuse is concept reuse, where rather than reuse a component, the reused entity is more abstract and is designed to be configured and adapted for a range of situations.
An obvious advantage of software reuse is that overall development costs should be reduced. Fewer software components need be specified, designed, implemented and validated. However, there are also costs and problems associated with software reuse. There is a significant cost associated with understanding whether a component is suitable for reuse in a particular situation and in testing that component to ensure compatibility.
Design patterns are high-level abstractions that document successful design solutions. They are fundamental to design reuse in object-oriented development. A pattern description should include a pattern name, a problem and solution description, and a statement of the results and trade-offs of using the pattern. A huge number of published patterns are now available covering a range of application domains and languages. The use of patterns is an effective form of reuse.
Program generators are an alternative approach to concept reuse where the reusable concepts are embedded in a generator system. The designer specifies the abstractions required using a domain-specific language, and an executable program is generated.
Application frameworks are collections of concrete and abstract objects that are designed to be reused through specialization and addition of new objects. Three classes of framework are:
A commercial-off-the-shelf product is a software system that can be used without change by its buyer. COTS product reuse is concerned with the reuse of large-scale systems. These provide a lot of functionality, and their reuse can radically reduce costs and development time. Potential problem with COTS-based reuse include lack of control over functionality and performance, lack of control over system evolution, the need for support from external vendors and difficulties in ensuring that systems can interoperate.
One of the most effective approaches to reuse is creating software product lines or application families. A product line is a set of applications with a common application-specific architecture. Various types of specialization of a software product line may be developed:
My thoughts
While working on our project we touched only one aspect of software reuse – program generators. Rose Real Time is a good example of program generator. When we just started I was thinking about Rose RT as a weird way to develop a system, it was hard to understand how learning a new environment and using it may be useful or may lead to faster development, but today I see all advantages of this approach. We don’t have to think about building a server, about network routines, about designing a system in a good way with straight C and Java, we don’t even have to think about choosing the way of connecting java and c code. So now I think of software reuse as actually useful thing that helps us reduce the development time.