Reverse Engineering

Elliot Chikofsky

Elliot Chikofsky

Northeastern University

Search for more papers by this author
James H. Cross II

James H. Cross II

Auburn University

Search for more papers by this author
First published: 15 January 2002
Citations: 1

Abstract

Reverse engineering is most recognized as the procedure for taking apart someone else's product to learn how it works. However, reverse engineering is a general term that refers to a process of analysis, supported by methods and tools to investigate an existing system, its components, and their interrelationships, regardless of the implementation and ownership of the system. In the context of software, reverse engineering is a set of techniques for the discovery of information about a software system, whether of your own or someone else's creation.

The term “reverse engineering” has had its origin in the analysis of hardware, particularly the hardware developed by a competitor. Reverse engineering is actually a very common analysis process. Every time a hardware engineer looks at an unfamiliar device or circuit, there occurs a natural and orderly process of investigation. That analysis process involves a conceptual, if not a physical, breakdown of the device into its subsystems and constituent parts. The engineer analyzes the subject device and builds models of the device and how it operates. These models may be diagrams, notes, or just mental images and plans.

Reverse engineering is regularly applied to improve one's own products, as well as to analyze those of competitors. In applying reverse engineering concepts to software systems, the emphasis is to gain a basic understanding of a subject system and its structure. While the hardware objective traditionally involves duplicating the system, the software objective is most often to gain a sufficient design-level understanding of the system in place. This understanding is then used to facilitate maintenance, to strengthen enhancement, to support replacement, or to improve quality assurance.

There is a clear and pressing need for reverse engineering technologies to help understand and maintain existing systems, often labeled “legacy systems.” These systems are the lifeblood of business organizations that depend on them for success. Creating such an understanding of existing software assets is the principal objective of reverse engineering technology as applied to software systems. Reverse engineering is an analysis process intended to increase the overall comprehensibility of a system for both maintenance and new development.

There are seven key software objectives that reverse engineering helps to fulfill. Notably, reverse engineering shares many of these objectives and a sizable portion of its technology with other software engineering topic areas, including metrics, reuse, testing, and visualization.

The full text of this article hosted at iucr.org is unavailable due to technical difficulties.