Software Reengineering

Software Reengineering


Software Reengineering is the process of discovering the technological principles of a human made device, object or system through analysis of its structure, function and operation. It often involves taking something apart and analyzing its workings in detail to be used in maintenance, or to try to make a new device or program that does the same thing without using or simply duplicating any part of the original.

In practice there are two main types of software reengineering:
  • In the first case, source code is already available for the software, but higher-level aspects of the program, perhaps poorly documented or documented but no longer valid, are discovered.
  • In the second case, there is no source code available for the software, and any efforts towards discovering one possible source code for the software are regarded as software reengineering.

The second usage of the term is the one most people are familiar with. Software reengineering of software can make use of the clean room design technique to avoid copyright infringement.

Software Reengineering has its origins in the analysis of hardware for commercial or military advantage.The purpose is to deduce design decisions from end products with little or no additional knowledge about the procedures involved in the original production. The same techniques are subsequently being researched for application to legacy software systems, not for industrial or defence ends, but rather to replace incorrect, incomplete, or otherwise unavailable documentation.Software anti-tamper technology is used to deter both reverse engineering and re-engineering of proprietary software and software-powered systems.