Reengineering
Abstract
Reengineering is a term applied to software development where an existing or legacy) system is undergoing some degree of redevelopment. It is synonyms are software renewal and software renovation.
Systems were upgraded in two ways. The first way was by completely rebuilding, thus replacing the initial system. As technology advanced, both in hardware and software capability, the capability to enhance software gracefully was improved and became more cost effective. New hardware was developed to be “upward-compatible” from prior systems, thus, enabling moving to a new generation of hardware while rehosting existing software. Software portability was enhanced through the effective use of high order languages, cross-compilers, and standard interfaces to operating system support environments. In addition, the investment in software was becoming so great that rewriting the system was not cost-effective. A combination of these and other circumstances gave rise to the reengineering of software that is common in today's business environment.
Changes to systems are driven by customer and user demands. As a system becomes old hardware performance becomes an issue. Existing hardware may be one to two generations old in terms of hardware that is currently available, and maintenance of the hardware may be costly. In some situations the original vendor may have gone out of business or dropped support for the system. The user may be completely satisfied with the existing software and may wish to simply replace the hardware with a modem system. In another example, the software may be becoming old in the sense that it has undergone extensive upgrade and maintenance is difficult and costly. Or, the original software may not have been engineered well, with poor or missing documentation describing its operation and construction. The user may wish to correct this situation, developing new documentation at the same time upgrading the system to new hardware. This was a common occurrence in the 1980s as users were concerned with the maintenance and support of systems.
Reengineering of software intensive systems has a spectrum of possibilities. Both hardware and software can be reengineered, either by themselves or in some combination. In a hardware reengineered project, the hardware is normally swapped out with new equipment, and the software may not be modified at all. Or, the hardware may be held constant and the software reengineered.