ABSTRACT

Executive summary: Reverse engineering, as it applies to software, may be defined as a process of analyzing an existing system to create representations of that system at a higher level of abstraction. For example, an effort to replicate the functionality of an existing system for which design documentation (and perhaps even source code) does not exist. In a sense, this involves going backwards through a software development life cycle to discover the design and perhaps even the requirements in order to create a faithful replica of the original, perhaps using more modern technology. The intent of a reverse engineering effort is simply to duplicate existing functionality, not necessarily to improve upon it—if the intent is to improve, the project may more properly be categorized as reengineering.