Introduction To Software Reuse
Introduction To Software Reuse
net/publication/250034287
CITATIONS READS
20 6,757
1 author:
Jacob L. Cybulski
Deakin University
90 PUBLICATIONS 556 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Jacob L. Cybulski on 09 January 2015.
Abstract
Effective reuse of software products is reportedly increasing productivity, saving time,
and reducing cost of software development. Historically, software reuse focused on
repackaging and reapplying of code modules, data structures or entire applications in the
new software projects (Prieto-Diaz 1994). Recently, however, it has been acknowledged
as beneficial to redeploy software components across the entire development life-cycle,
starting with domain modelling and requirements specification, through software design,
coding and testing, to maintenance and operation. There were also attempts to reuse
aspects of project organisation and methodology, development processes, and
communication structures. However, as the concept of reusing software components is
very clear at the code level (whether in source or binary form), the very same concept
becomes more fuzzy and difficult to grasp when discussed in the context of reusing
specifications and designs (whether in textual or diagrammatical form), or quite
incomprehensible when applied to software informal requirements, domain knowledge or
human skills and expertise (expressed in natural language, knowledge representation
formalism, or existing only in humans). This problem of dealing with reusable software
artefacts resulting from the earliest stages of software development, in particular
requirements specifications, attracted our particular interest in the reusability technology.
Our work is motivated primarily by the possibility of improving the process of
requirements elicitation by methodical reuse of software specifications and their
components with the aid of information extracted from user informal requirements
documents. The problems and issues that we aim to investigate in this research are best
illustrated by the following statement outlining current needs and the goals for the future
research in requirements reuse:
• "More research is needed on the advantages and the necessary methods for
requirements reuse. For example, what are requirements ’components’, what makes
them reusable, how can we store and retrieve them, and how do we write a
requirements specification that gives us the highest probability of creating or reusing
existing requirements components?" (Hsia, Davis et al. 1993).
1
Reuse Introduction Cybulski
1. Definitions
To address the issues advanced by Hsia, Davis and Kung, and to avoid any confusion
farther in this paper, we need to clearly define some major concepts of software reuse,
reusability, reusable artefacts, their possible forms, reusability methods, their major
motivators and inhibitors, etc. Hence, we adopt our definitions from Prieto-Diaz (Prieto-
Diaz 1989) as follows :-
• reuse is the use of previously acquired concepts or objects in a new situation, it
involves encoding development information at different levels of abstraction, storing
this representation for future reference, matching of new and old situations,
duplication of already developed objects and actions, and their adaptation to suit new
requirements;
• reusability is a measure of the ease with which one can use those previous concepts or
objects in the new situations.
2. Reuse Artefacts
The object of reusability, reusable artefact, can be any information which a developer
may need in the process of creating software (Freeman 1983), this includes any of the
following software components :-
• code fragments, which come in a form of source code, PDL, or various charts;
• logical program structures, such as modules, interfaces, or data structures;
• functional structures, e.g. specifications of functions and their collections;
• domain knowledge, i.e. scientific laws, models of knowledge domains;
• knowledge of development process, in a form of life-cycle models;
• environment-level information, e.g. experiential data or users feedback;
• artefact transformation during development process (Basili 1990); etc.
A controlled collection of reuse artefacts constitutes a reuse library. Such libraries
must contain not only reusable components but are also expected to provide certain types
of services to their users (Wegner 1989), e.g. storage, searching, inspecting and retrieval
of artefacts from different application domains, and of varying granularity and
abstraction, loading, linking and invoking of stored artefacts, specifying artefact
relationships, etc. The major problems in the utilisation of such reuse libraries are in
determining appropriate artefact classification schemes and in the selection of methods to
effectively and efficiently search the library. To bypass the problems with reuse libraries,
the use of specialised domain-specific languages was proposed as an alternative. Such
languages use strict syntax and semantics defined in terms of an application domain and
its reusable artefacts. While enforcing notational conformance with a predetermined
syntax and semantics, the domain-specific languages restrict the number of possible
2
Reuse Introduction Cybulski
3. Artefact Characteristics
Certain classes of software artefacts have been identified as eminently suitable to become
part of a reuse library and be, subsequently, utilised as reusable software resources. Such
artefacts usually share a number of characteristics, deemed to actively promote reusability
(Biggerstaff and Richter 1989; Matsumoto 1989; McClure 1989), those artefact are
perceived to be :-
• expressive, i.e. they are of general utility and of adequate level of abstraction, so that
they could be used in many different contexts, and be applicable to variety of problem
areas;
• definite, i.e. they are constructed and documented with a clarity of purpose, their
capabilities and limitations are easily identifiable, interfaces, required resources,
external dependencies and operational environments are specified, and all other
requirements are explicit and well defined;
• transferable, i.e. it is possible to easily transfer an artefact to a different environment
or problem domain, this usually means that it is self-contained, with few
dependencies on implementation-related concepts, it is abstract and well
parametrised;
• additive, i.e. it should be possible to seamlessly compose existing artefacts into new
products or other reusable components, without the need for massive software
modifications or causing adverse side effects;
• formal, reusable artefacts should, at least at some level of abstraction, be described
using a formal or semi-formal notation, such an approach provides means to formally
verify an artefact correctness, it enables to predict violation of integrity constraints
during artefact composition, or to assess the level of completeness for a product
constructed of reusable parts;
• machine representable, those of the artefacts which can be described in terms of
computationally determined attribute values, which can easily be decomposed into
machine representable parts, which can be accessed, analysed, manipulated and
possibly modified by computer-based processes, have a clear potential for becoming
part of a flexible reuse library; those artefacts can be easily searched for, retrieved,
interpreted, altered and finally integrated into larger system;
• self-contained, reusable artefacts which embody a single idea are easier to understand,
they have less dependencies on external factors, whether environmental or
implementational, they have interfaces which are simple to use, they are easier to
extend, adapt and maintain;
• language independent, no implementation language details should be embedded in
reusable artefacts, this also means that most useable artefacts are those which are
3
Reuse Introduction Cybulski
4
Reuse Introduction Cybulski
5
Reuse Introduction Cybulski
6
Reuse Introduction Cybulski
domain
analysis management
sources of methods procedures domain
domain knowledge models
technical literature
taxonomies
existing implementations
Do standards
customer surveys
Domain functional models
expert advice
current and future
Analysis domain languages
requirements
problem domain
domain analyst
expert
7
Reuse Introduction Cybulski
Synthesis Analysis
Integration
Adaptation
Identification
Selection
Understanding
Retrieving
Library
Generalisation
Searching
Classification
Storage
Organisation
8
Reuse Introduction Cybulski
Figure 3). Also, reuse tasks may significantly overlap with those performed in other
development phases, e.g. software integration or maintenance. The separation of concerns
lead some researchers (Hall and Boldyreff 1991) into pointing out that reuse must occur
across different projects or problem areas, as opposed to those tasks which aim at the
change, improvement or refinement of software undertaken within a single project which
should not be regarded as reuse, e.g.
• software porting, which only aims at adopting existing software product to different
hardware or operating system environments;
• software maintenance, which strives to correct software erroneous behaviour or to
alter the existing program to suit changing requirements; and
• software reconfiguration, which provides a method of customising software to be
used with different hardware components or making only a subset of its facilities
available to the user.
9
Reuse Introduction Cybulski
Customers
2.1
Requirements
analysis
New system
requirements
Component
2.2 2.5
requirements
Design with Search & selection
reuse Generic of components
components Search
Generic Criteria
components
New component
Component library
specification S1 & catalogue
Catalogue Classified
indexes generic
component
New
2.3 components 2.6
Design & implement. Classification &
of new components storage of artefacts
All
Components
2.4
Integration &
testing
New
system
Operations
10
Reuse Introduction Cybulski
their reliability is greater. This of course has an very positive impact on the quality of
such systems maintenance.
• Improvement in documentation and testing. Reusable components are normally
accompanied by high quality documentation and by previously developed tests plans
and cases. Whenever a new system is created by simple selection and altering of such
components, then, their documentation and tests will have to be much easier to
develop as well.
• High speed and low cost replacement of aging systems. As the reuse-based systems
share a very large collection of program logic via the reuse library, thus, they are
significantly less complex and much smaller in size than those developed from
scratch. Such systems will therefore need less effort during porting or adaptation to
new hardware and software environments. It should also be noted that it would
normally be the reusable components of the system that is technology intensive, and
thus, very expensive to develop, e.g. graphical user interfaces, databases,
communications, device control, etc. Sharing that cost across several systems would
certainly reduce it when a global replacement of computing resources is called for.
Reuse drawbacks. At the same time, in practice, radical gains in productivity and
quality cannot be achieved due to some preconceptions held by developers and their
management (Tracz 1988b; Hemmann 1992). The claims commonly put forward by
programmers include :-
• reusing code, as compared with development of entirely new systems, is boring;
• locally developed code is better than that developed elsewhere (NIH factor);
• it is easier to rewrite complex programs from scratch rather than to maintain it;
• there are no tools to assist programmers in finding reusable artefacts;
• in majority of cases, developed programs are too specialised for reuse;
• adopted software development methodology does not support software reuse;
• reuse is often ad-hoc and is unplanned;
• there is no formal training in reusing code and designs effectively;
• useful reusable artefacts are not supported on the preferred development platform;
• the reuse process is too slow;
• interfaces of reusable artefacts are too awkward to use;
• code with reusable components is often too big or too inefficient;
• programs built of reusable components are not readily transportable;
• reusable components do not conform to adopted standards;
• reuse techniques do not scale up to large software projects;
• there are no incentives to reuse software.
11
Reuse Introduction Cybulski
Myth Correction
Software reuse is a technical problem, so Software reuse is both a technical and non-technical
let’s wait until proper tools are introduced problem, frequently reuse gains may be achieved by
into the organisation first. changing work practices rather than introducing new
development tools.
Special tools are needed to store, search No special tools are needed, available data base
and retrieve software components. technology can be applied to help organise and
retrieve software in large repositories
Reusing code results in huge increases in No order of magnitude increase in productivity or
productivity. quality is possible by introducing software reuse only.
Intelligent tools will solve the reuse Artificial intelligence may play some role in
problem. Artificial intelligence is our improving reuse tools, e.g. in information retrieval or
saviour. domain modelling. But majority of reuse effort will
go into changing management and development
practices.
The Japanese have solved the reuse Japanese firms were first to reuse code on a large
problem. scale but most of the savings come from reusing code.
There is still scope to improve on the Japanese
experience.
Ada has solved the reuse problem. No single language will solve the problem of software
reuse. Reuse of specifications and designs, as well as,
reuse of domain knowledge, goes well beyond the
capability of programming languages.
Designing software from reusable parts is It is certainly worthwhile to study hardware reuse
like designing hardware using integrated while developing the model for software reuse.
circuits. Nevertheless, reuse of software and hardware are
quite distinct activities, each having their own
requirements and peculiarities.
Reused software is the same as reusable Reusing software planned to be reused is easier to
software. reuse than that which wasn’t specially constructed,
but, it costs more to develop software for reuse than
to develop software from scratch.
Software reuse will just happen. A lot of planning, training, and cost must be spent
before some gains from software reuse will be visible.
12
Reuse Introduction Cybulski
13
Reuse Introduction Cybulski
14
Reuse Introduction Cybulski
6. Summary
This paper defined the concepts of software reuse, reusability, reuse artefact and reuse
library. It listed those attributes of software artefacts which increase a chance of them
being reused, e.g. they have to be expressive, definite, transferable, additive, formal,
machine representable, self-contained, language independent, able to represent data and
procedures, verifiable, simple, and easily changeable. Then the paper gave an overview of
major reuse efforts in the life-cycle, starting with coding and design, and then going
through specification and requirements capture, and finally covering domain analysis and
modelling. Two forms of reuse-based development were discussed, i.e. development-for-
reuse, aiming at the construction of reuse library, and consisting of artefact identification,
generalisation, classification and storage; and the second, development-by-reuse, aiming
at the construction of a new software product with the use of reuse library, and including
the tasks of searching for reusable artefacts, their understanding, adaptation to new
requirements, and their integration into a new system. The stages of artefacts processing
include their analysis, organisation and synthesis. Finally the paper analyses the benefits
and the perceived disadvantages of software reusability, focusing in particular on the
myths and misconceptions held by developers and their managers. Four preconditions for
reusability success were given as reduction in cognitive complexity, ease of
implementation, ability to understanding of artefact structure and function, and finally,
economy of reuse.
7. Bibliography
Agresti, W. W. and F. E. McGarry (1988). The Minnowbrook Workshop on Software
Reuse: A summary report. Software Reuse: Emerging Technology. W. Tracz.
Washington, D.C., Computer Society Press: 33-40.
Ambler, A. L. and M. M. Burnett (1990). Influence of visual technology on the evolution
of language environments. Visual Programming Environments: Paradigms and
Systems. P. G. Ephraim. Los Alamitos, California, IEEE Computer Society Press: 19-
32.
Arango, G. and R. Prieto-Diaz (1991). Part1: Introduction and Overview, Domain
Analysis and Research Directions. Domain Analysis and Software Systems Modeling.
P.-D. Ruben and A. Guillermo. Los Alamitos, California, IEEE Computer Society
Press: 9-32.
Basili, V. R. (1990). Viewing maintenance as reuse-oriented software development. IEEE
Software: 19-25.
Biggerstaff, T. J. and C. Richter (1989). Reusability framework, assessment, and
directions. Software Reusability: Concepts and Models. J. B. Ted and J. P. Alan. New
York, New York, ACM Addison Wesley Publishing Company. 1: 1-18.
15
Reuse Introduction Cybulski
16
Reuse Introduction Cybulski
17
Reuse Introduction Cybulski
18