ESE Module 5-4
Reuse and Management Issues
learned the benefits of reuse. The wheel was probably
the first reusable design. Column and arch designs
that withstood the challenge of nature were reused
repeatedly by the engineers of antiquity. Machine
designs created in the 17th and 18th centuries are still
in use today. The list of reusable components in classi-cal engineering disciplines is almost endless. And what about software? After many false starts, the software industry is finally beginning to move toward component reuse.
Readings
The following reading is an edited and adapted ver-
sion of a series of articles written by Edward Berard in
the mid-1980s and posted on the Internet newsgroup comp.software.eng. This material is used with his permission.
Berard addresses many of the problems associat-
ed in achieving a reuse culture, discusses the techni-
cal aspects of reuse, and offers a few suggestions for
overcoming at least some reuse problems. It is interest-
ing to note that although Berard wrote this material in
the 1980s, the problems he defines and the solutions
he proposes are equally valid today.
A quick study of the possible benefits of reusing software
reveals that there is much more to be gained than a simple
cost savings during the development of a software product.
For example, the reuse of a software component which is
known to be reliable introduces less risk than redesigning
and recoding the same component for each new applica-
tion. Efficiency issues can also be more effectively address-
ed if one can focus attention on optimizing a set of reusable
components rather than having to continually reoptimize
newly recoded versions of previously existing modules.
However, it seems that [many companies] are greatly
confused about just what an increased emphasis on soft-
ware reusability might mean. While they might acknowl-
edge that some existing software development practices
will have to change, they seem unaware of which specific
items will be different. There are a number of very large
roadblocks to software reusability, and it should be useful
to mention a few of them.
1. Few companies and organizations have anything that
even slightly resembles a comprehensive software reusabil-
ity plan. Yes, many of these companies and organizations
have someone somewhere who is "researching" the idea.
However, few have any intention of implementing such a
plan any time in the near future. Let's face it: software
We're all guilty of it to some extent. Technologists wor-
ship technology. Even though experience indicates
otherwise, we believe that all problems could be
solved if only a better more robust, more adaptable,
more powerful technology were introduced.
Software people have fallen prey to technology
worship with every new technological advance: struc-
tured programming, new programming languages,
rapid prototyping, fourth generation techniques,
CASE, ... every new technology has been hyped as
the solution to the software bottleneck. And yet, prob-
lems persist.
With the widespread use of object technologies,
technology worship has escalated to new levels. And
that's a danger signal. It is true that object-oriented software engineering offers significant benefits. But it's also true that it must be coupled with a mature software process, good project management, solid SQA and SCM, thorough testing and a meaningful reuse strategy, if it is to achieve the benefits that have been advertised.
In this ESE module, we'll explore the infrastructure
that must be established to support object-oriented
methods:
· reuse strategies
· management for OO projects
· object-oriented testing
Reuse offers significant potential and may lead to real
breakthroughs in software quality and development
productivity. But a number of technical and manage-
ment problems remain to be solved. We'll explore
these and examine potential solutions in this ESE mod-
ule.
An object-oriented project requires a somewhat
different management approach than a software
project that uses conventional methods. The primary
reason for this is the evolutionary nature of the object-
oriented paradigm and the need to encourage
reuse.
Finally, the testing of OO systems requires subtle
changes in testing strategy and tactics to accommo-
date the unique nature of the OO system. We'll con-
sider some of these changes.
Reuse and Reusability Strategies
Reuse is an engineering concept that dates back mil-
lennia, not decades. As art evolved into craft, and
craft matured into engineering, ancient cultures
5-4.2 ·· Essential Software Engineering
reuse is hardly a "top priority item" for many software
firms.
2. Examine the commercial marketplace. How many vendors do you see who are selling software reuse related
products? I am not referring just to reusable software mod-
ules. What about entire software reusability systems, or
tools specifically designed to aid and foster the reuse of
software. (Some vendors have taken old products and
placed the words "reuse" and "reusable" in their marketing
literature. While some of their claims may be true, the
reuse of software is not quite business as usual.)
3. Look at the software engineering training available.
How many courses whose main focus is software reuse can
you name? Compare that to the number of [object-oriented
programming / development courses] that are currently
offered. For that matter, how much emphasis is placed on
the reuse of software in the existing courses? Remember, it
is not only the technical staff who must be trained in soft-
ware reuse. Management must also be trained in software
reuse.
4. Examine the attitudes of the software personnel (pro-
grammers and managers) themselves. For some time now,
I have been participating in software reusability forums,
and I have become aware of many horror stories relating to
software reuse. For example, it is not uncommon to hear
technical personnel recite long lists of the "disadvantages
of reusing software." Managers seem equally committed to
maintaining the status quo. Even when managers purchase
the tools and training necessary for rudimentary software
reuse, staff resistance to the concept can still be high.
5. Many companies continue to encourage software
development methodologies which do not facilitate reuse
(e.g., functional decomposition), while discouraging others
that seem to encourage reuse (e.g., object oriented
approaches).
6. Few companies provide incentives to produce
reusable program components. In fact, there are disincen-
tives. The customer for the current project will be hesitant
to fund the extra expense required to develop reusable
components. As a result, project managers push to get the
job done with program components that are as specific as
is possible.
Finally, in addition to the technical problems which must
be addressed, we have to consider many other connected
issues. Political, managerial, legal, cultural, financial, mar-
keting, and productization issues must also be considered.
A Brief Technical Analogy
In the computer hardware industry, reuse is the norm. For
example, there are standard CPU chips, standard RAM,
mathematical coprocessor, and ROM chips. These, and
other, chips are used in a wide variety of applications. A
long time ago, electronics engineers discovered that one of
the most important axioms of reusability was generality.
Unlike their software counterparts, electronics engi-
neers do not have to verify, for example, that every "op-
code" supported by a particular CPU is executed in a spe-
cific application. Nor do they have to demonstrate that
every last byte of RAM is utilized. While the reasons for
this should be obvious, it would be helpful to point out a
few of them:
1) Once a CPU chip is created and verified, a known (and
typically very high) level of reliability can be established
for the chip. When this chip is reused in another applica-
tion, its known reliability can be factored into a determina-
tion of the overall reliability of the new system.
2) If a change is introduced into the software which is
running on a particular CPU chip, specifically a change
which now requires that a previously unused "op-code"
come into use, there is little need to replace (or alter) the
CPU chip. (Think of an Ada package as a chip, and the
operations in its interface as "op-codes." A similar argu-
ment could be made for the amount of random access
memory incorporated in a computer system.
3) As new engineers are assigned to a project, it is likely
that they may have experience with standard, reusable
chips. Even if they do not have experience with the specific
chips being used, there are certain fundamental concepts
which are common to particular classes of chips, and the
new engineers are likely to be aware of these concepts.
4) With the demand for computer hardware (everything
from embedded systems to stand-alone computers) at an
ever increasing high level, the cost and time required to
custom-design chips so that they are optimized for a specif-
ic application is prohibitive. {Notice that since few organi-
zations track real software costs, that it is often difficult to
make a similar justification for not overly-customizing soft-
ware.}
How does one apply the above analogy to reusable
software? Consider the design of a reusable software com-
ponent. To be truly reusable, a software component must
be usable in some place other than its current specific
application (or part of an application). To increase the
chances of this happening, the software engineer must
make the component more general. In fact, there are well-
known ways of increasing the generality of a software
component to a very high level.
Of course, there are trade-offs. Increasing the generali-
ty may decrease the efficiency, or even increase the com-
plexity. These, and other considerations, must be balanced
against such factors as the potential increased reliability
resulting from using a known verified component, and the
cost and times savings resulting from software reuse.
Some of the items which we now know about software
reusability are:
Reuse and Management Issues ·· 5-4.3
2..Require that software reusability be an integral part of
any technical and managerial training. This should be espe-
cially true for Ada and object-oriented training.
3. In accordance with your in-house software reusability
plan, acquire the tools and libraries you feel will most posi-
tively contribute to the reuse of software within your orga-
nization.
4. Encourage the use of methodologies and tools which
have been demonstrated to enhance the reuse of software.
5. Track and measure both the reuse of software and the
impact of software reuse. Policy decisions should be made
on "hard data," not on guesswork.
6. Management must let it be known that it actively
encourages the reuse of software.
7. Recognize that more than just "modules" can be
reused. Tools, test data, designs, plans, environments, and
other software items can be reused.
8. Above all, recognize that software reuse is not 'busi-
ness as usual." A commitment to software reuse will
require some changes. These changes should be introduced
in an effective manner. Remember that the concept of soft-
ware reuse is alien to most technical and managerial per-
sonnel.
The above suggestions are not the only ones that need to be
considered. I view them as a "starting point" for future dis-
cussions.
Edward V. Berard
Berard Software Engineering, Inc.
902 Wind River Land, Suite 203
Gaithersburg, MD 20878
Phone:(301)417-9884
FAX: (301)417-0021
Email:
Berard's company specializes in "Object-Oriented Training,
Consulting, Mentoring, and CASE Tools"
Exercise 5-7
Defining Reusable Components
Consider the application domain for the computer
software developed by your organization.
1. Write a one or two page description of the appli-
cation domain. What are the characteristics of the
problems you solve and the software products that
you build? What information is processed and what
form does the output take?
2. Apply a grammatical parse to your description
and isolate a set of potential objects (see ESE Module
5-2 for additional information on this approach).
· Much more than source code can be reused. In fact,
designs, plans, test data, and documentation (among oth-
ers) can be reused. The smallest gains in productivity, relia-
bility, etc., are obtained by only reusing source code.
Reusing the documentation associated with "reusable
source code" greatly enhances any gains associated with
merely reusing the source code.
· Reusability is not a concept that is limited to the cod-
ing phase of the software life-cycle. It must be a highly visi-
ble item from requirements analysis to the retirement of the
product.
· Research seems to indicate, and practice seems to
show, that the majority of many software products can be
assembled from reusable components.
· There are any number of metrics associated with soft-
ware reuse. They include metrics which measure the sheer
bulk of source code and documentation reused in an appli-
cation, to metrics which measure the affects of software
reusability, e.g., software productivity metrics.
Do we know what software reuse is. There are two
answers to this question. The vast majority of today's soft-
ware practitioners either do not know what it is, or assume
that it is "yet another buzzword." There is a small minority
of individuals and organizations who are researching and
implementing various aspects of software reuse.
Software reusability technology is indeed a collection
of things. These things include reusable components, tax-
onomies, reusability systems, composition concepts,
methodologies, and others. This technology is more cou-
pled with the size of the software product than it is with
"the scale at which the reuse is to take place."
Software design methodologies do play an important
part in software reuse. Some methodologies enhance soft-
ware reuse, others discourage it. We have known for some
time that software designs should be constructed so that
they can easily be modified. We are only now beginning to
understand that by bringing software reusability issues to
the first phases of the software life-cycle, we can greatly
enhance the impact of software reusability. Finally, by
studying the designs of many systems within a particular
application domain we are finding designs are very much
reusable, e.g., consider the basis for many fourth-genera-
tion languages.
Some Suggestions