The Joint Logistic Commanders Computer Resources Management group (JLC/CRM) authorized and sponsored a DoD policy workshop in Santa Barbara, California in 1992. Now known as SB-1, this workshop formally defined software reengineering terminology for the DoD. These definitions are in quotes below. The asides attempt to clarify these formal definitions.
Aside: The new form of the subject system could be structured code - from "spaghetti" code; design information in graphical form - from input code; or the translation of the source code from one language to another while preserving the system's functionality.
Aside: This higher abstraction level is understood within the context of the software system's lifecycle. The classic waterfall development lifecycle calls for requirements/specifications followed by design, code, test, implement, and maintain. Thus, if we start with the code, reverse engineering will extract design information which is at a higher abstraction level in the lifecycle.
Aside: Notice the difference between software engineering and forward engineering. A hot topic within software reengineering circles is whether we even need the term "forward engineering" since this implies the normal development lifecycle sequence of events. If this was the extent of forward engineering, then forward engineering and software engineering can be considered identical terms. But we define forward engineering as using the output of reengineering. This implies that some reengineering must have occurred prior to the forward engineering activity. For example, the most common forward engineering activity involves the generation of source code from design information which was captured by a previous reverse engineering activity.
Aside: As in source code reengineering, data reengineering must have a goal or target configuration. We call this a target meta model. For example, relational data bases (RDBs) are a desirable target meta model (currently, less than 5% of all data files are RDBs). Data reengineering tools help to translate flat files and hierarchical files to RDB's. Each reengineering activity for source code has a corresponding activity in data reengineering. Reverse engineering of data captures the design information of data files. Restructuring data could normalize that data. Data translation can move data files from a flat file configuration to a relational data base. And retargeting data files assists the migration of data to new platforms.
Aside: Sometimes, the output of reverse engineering is thought to be the same as redocumentation. After all, when reverse engineering captures the design information from the legacy source code, the resulting information usually includes data flow diagrams, control flow charts, etc. The difference between redocumentation and reverse engineering is that the redocumentation usually generates system documentation according to a standard. For example, there are redocumentation tools that create documentation for DoD-STD-2167A - a DoD software documentation standard.
A special case of redocumentation tools are reformatting tools. Otherwise known as "pretty printers", reformatters make source code indentation, bolding, capitalization, etc. consistent thus making the source code more readable.
Aside: Recall that reverse engineering can extract design information from source code. Design is a higher level of abstraction than code (ref. most lifecycle charts). Restructuring code leaves the system at the same abstraction level (i.e. the coding level) but radically rearranges the source code to fit a new paradigm such as structured code or object-oriented code.
Aside: The new configuration could be a new hardware platform, a new operating system, or a CASE platform. A good rule of thumb is that if more than 20-30% of the software must be changed during a retargeting project, then redeveloping the software specifically for the new platform might be a better strategy.
Aside: Tools that support BPR include process modelers (and simulators) that allow organizations to run what-if scenarios on their key business processes. Other BPR tools enable an organization to set goals and gather information about current or projected processes.