Chapter 30 - Reengineering
Overview
This chapter defines reengineering as the process of legacy software
products. The new software products often have increased functionality, better
performance, greater reliability, and are easier to maintain than their
predecessors. Business process reengineering (BPR) defines business goals,
evaluates existing business processes, and creates revised business processes
that better meet current goals. Software reengineering involves inventory
analysis, document restructuring, reverse engineering, program and data
restructuring, and forward engineering. Many reengineering work products are the
same as those generated for any software engineering process (analysis models,
design models, test procedures). The final product for any reengineering process
is a reengineered business process and/or the reengineered software to support
it. The same SQA practices are applied to software reengineering as to they
would to any other software development process. Testing is used to uncover
errors in content, functionality, and interoperability.
Business Process Reengineering Principles
- Organize around outcomes, not tasks.
- Have those people who use the output of a process, perform the process.
- Incorporate information processing work into the real work that produces
the raw information.
- Treat geographically dispersed resources as though they were centralized.
- Link parallel activities instead of integrating their results.
- Put the decision point where the work is performed and build control into
the process.
- Capture the data once, at its source.
Business Process Reengineering Model
- Business redefinition (business goals are identified in the context of
four key drivers - cost reduction, time reduction, quality improvement,
empowerment)
- Process identification (processes critical to achieving business goals are
identified and prioritized)
- Process evaluation (existing processes are analyzed and measured, costs
and time consumed by processes are noted, quality/performance problems are
isolated)
- Process specification and design(use-cases are prepared for each process
to be redesigned, these use-case scenarios deliver some outcome to a customer,
new tasks are design for each process)
- Prototyping (used to test processes before integrating them into the
business)
- Refinement and instantiation (based on feedback from the prototype,
business processes are refined and then instantiated within a business
system)
Software Reengineering Process Model
- Inventory analysis(sorting active software applications by business
criticality, longevity, current maintainability, and other local criteria
helps to identify reengineering candidates)
- Document restructuring (need to decide to live with weak documentation,
update poor documents if they are used, or fully rewrite the documentation for
critical systems focusing on the "essential minimum")
- Reverse engineering (process of design recovery - analyzing a program in
an effort to create a representation of the program at some abstraction level
higher than source code)
- Code restructuring (source code is analyzed and violations of structured
programming practices are noted and repaired, the revised code also needs to
be reviewed and tested)
- Data restructuring (usually requires full reverse engineering, current
data architecture is dissected and data models are defined, existing data
structures are reviewed for quality)
- Forward engineering (also called reclamation or renovation - recovers
design information from existing source code and uses this information to
reconstitute the existing system to improve its overall quality and/or
performance)
Reverse Engineering Concepts
- Abstraction level (ideally want to be able to derive design information at
the highest level possible)
- Completeness (level of detail provided at a given abstraction level)
- Interactivity (degree to which humans are integrated with automated
reverse engineering tools)
- Directionality (one-way means the software engineer doing the maintenance
activity is given all information extracted from source code, two-way means
the information is fed to a reengineering tool that attempts to regenerate the
old program)
- Extract abstractions (meaningful specification of processing performed is
derived from old source code)
Reverse Engineering Activities
- Understanding process (source code is analyzed to at varying levels of
detail - system, program, component, pattern, statement - to understand
procedural abstractions and overall functionality)
- Understanding data
- internal data structures
- database structure
- what are the basic actions (e.g. key strokes or mouse operations)
processed by the interface?
- what is a compact description of the system's behavioral response to these
actions?
- what concept of equivalence of interfaces is relevant here?
Restructuring Benefits
- Improved program and documentation quality
- Makes programs easier to learn, improves productivity, reduces developer
frustration
- Reduces effort required to maintain software
- Software is easier to test and debug
Types of Restructuring
- program logic modeled using Boolean algebra and series of transformation
rules are applied to yield restructured logic
- create resource exchange diagram showing data types, procedure and
variables shared between modules, restructure program architecture to minimize
module coupling
- analysis of source code
- data redesign
- data record standardization
- data name rationalization
- file or database translation
Forward Engineering
- Client/Server architectures
- application functionality migrates to each client computer
- new GUI interfaces implemented at client sites
- database functions allocated to servers
- specialized functionality may remain at server site
- new communications, security, archiving, and control requirements must be
established at both client and server sites
- Object-oriented architectures
- existing software is reverse engineered so that appropriate data,
functional, and behavioral models can be created
- use-cases are created if reengineered system extends functionality of
application
- data models created during reverse engineering are used with CRC modeling
as a basis to define classes
- create class hierarchies, object-relationship models, object-behavior
models and begin object-oriented design
- a component-based process model may be used if a robust component library
already exists
- where components must be built from scratch, it may be possible to reuse
algorithms and data structures from the original application
- understand the original user interface and how the data moves between the
user interface and the remainder of the application
- remodel the behavior implied by the existing user interface into a series
of abstractions that have meaning in the context of a GUI
- introduce improvements that make the mode of interaction more efficient
- build and integrate the new GUI
Economics of Reengineering
- Cost of maintenance =cost annual of operation and maintenance over
application lifetime
- Cost of reengineering = predicted return on investment reduced by cost of
implementing changes and engineering risk factors
- Cost benefit = Cost of reengineering - Cost of
maintenance