Professional Documents
Culture Documents
Computer Science
Chapter 4 The Re-
engineering and Reuse of
Software
Definitions
Re-engineering
The combination of reverse engineering
and forward engineering
The concept of “redoing” a software system
Reuse
Using a given piece of software to solve
more than one problem
Reverse engineering
The tools and methods used to understand
software
Figuring out a software system for potential
redeployment
Introduction
Software re-engineering and reuse are
concerned with maximizing software
usage for any given development
effort
Both are used to maximize profit
and minimize turnaround time
Software re-engineering and reuse also
help minimize staff
The more code you can reuse the
less code you have to write and
rewrite
Introduction (cont)
Reuse not only applies to using a piece
of software:
Reuse designs and ideas thrown out
during design phase
May have use in other applications
Reverse engineering and reuse can
help recover lost investment
Time has already been placed into
designing it the first time around.
Historical Background - Reuse
Reuse dates back to sharing of algorithms
through publications
Reuse of high level language and packages
Textbook publications
Use of macros and similar assembly
instructions
Subroutine entry and exit
For loops, if blocks, arithmetic
Reuse associated with flexibility
Parameterization
Build scripts
Historical Background
- Re-engineering
Flow-charting tools have been around for
awhile
Now evolved into UML and sequence
diagrams
Cross reference listings of variables
Helps understand large pieces of software
Originally designed to help maintain COBOL
legacy systems around 1980s
Implementations – Reuse
Integration into lifecycle
Building phase to construct the reusable
components into a library
Incorporating those reusable components
into the building of a software system
Time required to account for integration
issues
Design for “plug and play”
Which components comes from domain analysis
File Input/Output component not needed for
a system that won’t write to disk
Implementations – Reuse
Component based
Give clear descriptions and classifications
Avoid over generalization
Map instead of tree
Object oriented programming lends itself to
reuse
Objects are often in reusable component
form
Inheritance provides contexts for reuse
Sorted Map inherits from Map
Size or granularity
Implementations – Reuse
Reuse in design
Component or components could fulfill
a requirement based on specifications
If multiple components are used then
requirements must be broken down
further
Logging utility = Time utility + Format utility
+ File utility + Process input utility
Identification,evaluation, modification,
and integration
White-box reuse
Reuse with simple modifications of code
Implementations – Reuse
MIL – Module Interconnection Languages –
Prieto-Diaz, et. al (1986)
Going beyond procedure calls in code
Helps in system building another higher
language
Design with reuse involves transforming
the outputs of one components to the
inputs of another
Implementations – Re-
engineering
Reverse engineering involves abstracting the
current system and revealing the nature of
the system
Describe the system to a non technical
person
Documentation of class methods and
members could be used during the process
Outlining tools and sequence diagrams
have been in use for many decades
Implementations – Re-
engineering
Use of formal transformations
Gather details about an efficient algorithm
that may be difficult to understand
Use of wide spectrum language - Ward
An interactive system to abstract details of
implementation into Z language and
implement Z language in code language of
choice
Implementations – Re-
engineering
Use of reverse engineering back to
specifications – Lano, et. al
Used to reverse engineer COBOL applications
Using good coding practices helps the re-
engineering process
Self documenting code
Knowledge of higher level domain
concepts helps re-engineering
Knowing for what purpose the software
system was used
Implementations – Re-
engineering
Using design patterns in code
Helps to know the purpose for a
software system and helps the forward
process by knowing how to build the
system
Object-oriented programming facilitates
the reverse-engineering process
Components of the high level systems
share the names of the objects
Implementations – Domain
Analysis
Identify the major concepts and the
relationships between the concepts
Usage of components is determined by
the domain in which they will be used
Determine if components needed have
already been built
Helps guide the production of
components for better reuse
Adequate domain models help scope the
components and their usage
Challenges of Re-
engineering and Reuse
Personnel issues
“Why buy when you can build?”
Reuse doesn’t always mean buying
Contrast to electronic engineering
Build your own microprocessor?
Payoff issues
Rewarding someone for building a reusable
component by royalties?
Challenges of Re-
engineering and Reuse
Economical issues
Payoff occurs after component production
Most companies are geared towards producing a
system
Gain another contract and reduce turnaround
time from reuse
Accounting treats software as consumable and not
capital
Concept of making software reusable capital like
a desk
Legal issues
Protection against physical piracy and intellectual
piracy
Use of proprietary software remedies certain issues
Conclusions
Software reuse, re-engineering, and
reverse engineering are cutting-edge
methodologies
Product Line and Battle Command Product
Line
Technology has caught up to these
practices
UML
There is a future in adding reuse to the
software lifecycle
Economic gains must be established