A Survey on Software Reuse Processes Eduardo Santana de Almeida 1 , Alexandre Alvaro 1 , Daniel Lucrédio 2 , Vinicius Cardoso Garcia 2 , Silvio Romero de Lemos Meira 1 1 Federal University of Pernambuco and C.E.S.A.R. - Recife Center for Advanced Studies and Systems, 2 Federal University of São Carlos, Brazil {esa2, aa2, srlm}@cin.ufpe.br, {lucredio, vinicius}@dc.ufscar.br Abstract Software reuse processes have been under continuous attention in the software engineering and software reuse research communities during past years. Although several processes have been investigated to develop reusable software, there are not available studies that compare them. In this way, this paper presents a detailed survey on software reuse processes. 1. Introduction Software reuse is a critical aspect for companies interested in the improvement of software development quality and productivity [1]. Quality could be improved by reusing all forms of proven experience, including products and processes, as well as quality and productivity models. Productivity could increase by reusing existing experience, rather than creating everything from the beginning [2]. Through the years, several research works, including company reports [3, 4, 5, 6, 7], informal research [8] and empirical studies [9, 10, 11] have shown that an effective way to obtain the software reuse benefits is to adopt a reuse process. However, the existing reuse processes present crucial problems such as gaps in important activities like development for and with reuse, and putting more emphasis on some specific activities (analysis, design and implementation). Even today, with the ideas of software product lines, there is still no clear consensus about the activities (inputs, outputs, artifacts) and the requirements that an effective reuse process must have. In this context, we agree with Bayer et al. when they say [12] (pp. 122): “Existing methods have been either not flexible enough to meet the needs of various industrial situations, or they have been too vague, not applicable without strong additional interpretation and support. A flexible method that can be customized to support various enterprise situations with enough guidance and support is needed”. Under this motivation, this paper presents a detailed survey based on eleven software reuse processes representing the state-of-the-art in the area. We believe that this survey can contribute with the development in the area, as well as with the definition of new reuse processes. 2. Software Reuse Processes: A Survey The argument for defining processes for specific software development tasks should be a familiar one. A well-defined process can be observed and measured, and thus improved. Moreover, the adoption of processes also allows the dissemination of effective work practices to occur more quickly than the building up of personal experience. An emphasis on process helps software development to become more like engineering, with predictable time and effort constraints, and less like art [13]. Besides the issues related to non-technical aspects, a software reuse process must also describe two essential activities: the development for reuse and the development with reuse. In the literature, several research works that study efficient ways to develop reusable software can be found. These works focus on two directions: domain engineering and, currently, product lines, as can be seen in the next sections. 2.1. Domain Engineering Processes Domain engineering is the activity of collecting, organizing, and storing past experience in building systems or parts of systems in a particular domain in the form of reusable assets, as well as providing an adequate means for reusing these assets when building new systems [14]. Among the works of the early 80’s and 90’s, such as [15, 16, 17, 18, 19, 20], a special focus is placed on the domain engineering processes to develop reusable software. An example of this work may be seen in [15]. In this work, Neighbors proposed the first domain engineering approach, as well as a prototype - Draco - based on transformation technology. The main ideas introduced by Draco include: Domain Analysis, Domain-Specific Languages, and Components as sets of transformations. Draco supports the organization of software construction knowledge into a number of related domains. Each Draco domain encapsulates the needs and 66 0-7803-9093-8/05/$20.00 ©2005 IEEE.