Reverse engineering differs fundamentally from reengineering because reverse…
2026
Reverse engineering differs fundamentally from reengineering because reverse engineering
- A.
Modifies the internal design while preserving external functionality
- B.
Converts conceptual designs into operational code
- C.
Generates higher-level abstractions from existing lower-level artifacts
- D.
Replaces obsolete modules with optimized versions
Show answer & explanation
Correct answer: C
Concept
In the Chikofsky-Cross software-reengineering taxonomy, reverse engineering is the process of analysing an existing system to identify its components and their relationships and to produce a representation of that system in another form or at a higher level of abstraction, without altering the subject system itself. Reengineering, by contrast, is the examination and alteration of a subject system to reconstitute it in a new form, so it always changes the system (typically by combining reverse engineering with restructuring and forward engineering).
Application
Applying this to the question: the activity unique to reverse engineering is producing a higher-level abstraction (such as a design or specification) starting from an existing lower-level artifact (such as source code) — and doing so without touching the running system. Reengineering necessarily changes the system, so any activity that modifies, replaces, or forward-implements the system belongs to reengineering or a related activity, not to reverse engineering.
Cross-check
"Modifies the internal design while preserving external functionality" describes restructuring — an internal-only change with the same external interface, which is a reengineering-family activity, not abstraction extraction.
"Converts conceptual designs into operational code" describes forward engineering — the traditional design-to-implementation direction, the opposite of what reverse engineering does.
"Replaces obsolete modules with optimized versions" describes a system-alteration/optimisation activity — again a change to the system rather than production of an abstract representation.
Hence, the option describing the generation of higher-level abstractions from existing lower-level artifacts is the one that uniquely defines reverse engineering as distinct from reengineering.