Before software can be reusable it first has to be usable.
Software reuse continues to be practiced since the early days of programming. Separate compilation of Fortran II subroutines and increased use of Fortran subroutine libraries are examples of reuse practiced in the early days of programming . Formal software reuse was first introduced by Dough McIlroy. He envisioned an industry for the development of reusable components and the industrialization of the production of application software from off-the-shelf components . Other examples of early development of reuse include the concept of program families introduced by David Parnas  and the concepts of domain and domain analysis introduced by Jim Neighbors . A set of programs with several common attributes and features is known as a program family. On the other hand, domain analysis means finding objects and operations of a set of similar software systems in a specific problem domain. A domain is a field of expertise or a specialized body of knowledge. The concept of program families is related to the concept of domain analysis [3,5,6]. In this context, software reuse involves two main activities: software development with reuse and software development for reuse.
Intuitively, software reuse means using existing assets in the development of a new system. Reusable assets can be both reusable artifacts and software knowledge. There are four types ...