Software Reengineering
Definition
Software Reengineering is the process of examining and restructuring an existing legacy software system, to reconstitute it in a new, improved form — WITHOUT necessarily changing its overall functionality — typically to improve maintainability, performance, or move it to a new technology platform.
The Reengineering Process (Key Steps)
1. Inventory Analysis
- Catalog all existing systems/programs in the organization to decide which ones need reengineering (based on age, business value, quality)
2. Document Restructuring
- Recreate/update missing or outdated documentation for the existing system
3. Reverse Engineering
- Analyze the existing code to recover design/understanding (see previous topic)
4. Code Restructuring
- Rewrite/refactor the code to improve its structure, WITHOUT changing external functionality (e.g., converting spaghetti code into structured/modular code)
5. Data Restructuring
- Reorganize/clean up the underlying data structures/database schema
6. Forward Engineering
- Use the recovered/improved design to rebuild the system using modern tools, technologies, and practices
Existing Legacy System
│
Reverse Engineering (recover design)
│
Restructuring (code + data)
│
Forward Engineering (rebuild with modern approach)
│
Reengineered System
Reengineering vs. Related Concepts
| Concept | What It Does |
|---|---|
| Maintenance | Small, incremental fixes/enhancements to the existing system |
| Reverse Engineering | Understand/recover design from existing code (no changes made) |
| Reengineering | Systematically restructure/rebuild the existing system for improved quality |
| Rewrite (from scratch) | Completely new development, discarding the old system entirely |
Why Reengineer Instead of Rewrite from Scratch?
- Lower risk — preserves proven business logic instead of reimplementing it (risk of missing edge cases)
- Lower cost — often cheaper than a full rewrite
- Faster — reuses existing, working components where possible
When Reengineering Is Appropriate
- System still has high business value but poor internal quality (technical debt)
- System uses outdated technology that needs modernizing
- System is too risky/costly to fully rewrite from scratch
Exam tip: Draw the reengineering process diagram (Reverse Engineering → Restructuring → Forward Engineering) and be ready to distinguish Reengineering from Reverse Engineering and plain Maintenance — a classic compare/contrast question.