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.