文章目录
- 软考系统分析师:逆向工程与重构工程(再工程)知识梳理
- 逆向工程到底在干嘛?
- 什么时候才需要逆向?(软考必考场景)
- 什么时候做【重构】?
- 什么时候做【再工程】?
-
- 重构
- 再工程
- 一、核心概念辨析(必背)
-
- [1. 逆向工程(Reverse Engineering)](#1. 逆向工程(Reverse Engineering))
- [2. 重构工程(Restructuring)](#2. 重构工程(Restructuring))
- [3. 再工程(Re-engineering,又称重构工程)](#3. 再工程(Re-engineering,又称重构工程))
- [4. 正向工程(Forward Engineering)](#4. 正向工程(Forward Engineering))
- 概念关系速记
- 二、逆向工程(核心考点)
-
- [1. 目标](#1. 目标)
- [2. 主要技术](#2. 主要技术)
- [3. 输出产物(不产生新系统)](#3. 输出产物(不产生新系统))
- [4. 典型应用场景](#4. 典型应用场景)
- 三、重构工程(再工程)(核心考点)
-
- [1. 再工程目标](#1. 再工程目标)
- [2. 三阶段标准流程](#2. 三阶段标准流程)
- [3. 重构原则(必背)](#3. 重构原则(必背))
- [4. 常见重构技术(代码级)](#4. 常见重构技术(代码级))
- [5. 再工程 vs 重构 vs 逆向工程](#5. 再工程 vs 重构 vs 逆向工程)
- 四、易混概念澄清(高频考点)
- 五、软考应试要点
- 六、总结
软考系统分析师:逆向工程与重构工程(再工程)知识梳理
逆向工程与重构工程(再工程)是系统分析师考试中软件工程维护、系统演化板块的核心考点,常以概念辨析、流程判断、场景应用题出现,需精准区分定义、过程、产物与应用场景。
我用最直白、不绕弯的方式给你讲清楚,完全贴合软考+实际工作:
逆向工程到底在干嘛?
一句话:
把"黑盒子"变成"白盒子",把看不懂的旧系统,还原出它的设计图纸。
更通俗:
- 正向工程:需求 → 设计 → 代码(正常开发)
- 逆向工程:代码 → 设计 → 需求(反着推)
它只做一件事 :
分析、理解、还原,不修改代码,不改系统,不升级,不修复。
就像:
- 你拿到一辆旧车,没有图纸
- 逆向工程 = 把车拆开,画出发动机、底盘、线路图
- 但你不会去修它、换零件、改装它
什么时候才需要逆向?(软考必考场景)
只要出现下面任意一种,就要逆向:
-
旧系统还在跑,但没有文档、没人懂
代码是前人写的,文档丢了,人走了,业务还在用。
→ 逆向 = 把逻辑挖出来,方便以后维护。
-
要迁移、改造、升级,但不敢乱改
比如 COBOL 转 Java,老系统转微服务。
必须先逆向搞懂逻辑,不然一改就崩。
-
要查漏洞、查恶意代码、查侵权
看别人软件怎么实现的,有没有抄代码。
-
遗留系统太复杂,不敢直接重构
先逆向画出架构,再动手改。
逆向工程的触发条件只有一个:
我们看不懂这个系统,但又必须懂它。
什么时候做【重构】?
满足下面 3 条,就是重构:
- 系统现在能用、没坏、业务正常跑
- 不想加新功能,也不想改功能
- 只是代码烂、结构乱、维护痛苦
重构的典型场景:
- 代码重复太多,改一处要改 N 处
- 函数太长、类太臃肿、逻辑绕
- 接手别人烂代码,不敢加功能
- 想让后续开发更快、更安全
重构的结果:
用户完全感觉不到变化,
只有程序员觉得代码清爽了。
什么时候做【再工程】?
满足下面任意一条,就是再工程:
- 系统太老,技术栈彻底过时
比如:COBOL、Delphi、老 ASP、VB 系统 - 架构扛不住,必须大改
单体拆微服务、数据库迁移、平台迁移 - 要加大量新需求,旧系统根本改不动
- 系统性能、安全、扩展性严重不够
- 想把旧系统"翻新成一个新系统"
再工程 = 逆向工程(重新读懂系统) + 重构(改造) + 正向开发(重新建)
它是一次系统级别的重生。
重构
- 范围:代码级、局部
- 功能:完全不变
- 抽象级别:同一层(代码→更好的代码)
- 目的:好维护
- 关键词:优化、整理、结构调整、不改变行为
再工程
-
范围:整个系统、全局
-
功能:可以变、可以加、可以增强
-
抽象级别:跨层(代码→设计→新代码)
-
目的:系统升级、延寿、现代化
-
关键词:改造、翻新、迁移、重实现、新版本
-
题干说:优化结构、不改功能、代码整理
→ 重构
-
题干说:逆向分析后改造、升级换代、技术迁移、生成新版本
→ 再工程
小整理、不改功能 → 重构
大改造、换技术、做新系统 → 再工程
一、核心概念辨析(必背)
1. 逆向工程(Reverse Engineering)
- 定义 :分析现有软件系统(源代码/二进制/运行态),自底向上反推更高抽象层次的设计、需求与业务逻辑,不修改原系统的过程。
- 核心 :理解、恢复、建模(只"读"不"改")。
- 等价表述:设计恢复、软件考古、系统解剖。
- 抽象层级(由低到高)
- 实现级:代码、算法、数据结构
- 结构级:模块、类、调用/依赖关系
- 功能级:系统功能、服务接口
- 领域级:业务规则、领域模型、业务流程
2. 重构工程(Restructuring)
- 定义 :在同一抽象级别上转换系统描述形式,保持外部功能完全不变,仅优化内部结构。
- 核心 :结构优化、消除坏味、不增删功能、不改外部行为。
- 典型场景:代码重构、数据结构重构、模块重组(如非结构化→结构化代码)。
3. 再工程(Re-engineering,又称重构工程)
- 定义 :在逆向工程基础上,结合新需求,对系统重构、重写、升级,生成新版本的全流程。
- 核心 :改造、升级、延寿、适配新环境(先读懂再改造)。
- 三阶段 :逆向工程 → 重构/改造 → 正向工程。
4. 正向工程(Forward Engineering)
- 定义:从高抽象层次(设计/需求)到低抽象层次(代码/实现)的常规开发过程。
- 再工程中的正向工程:基于逆向恢复的设计,按新需求重新实现、生成新系统。
概念关系速记
- 逆向工程:理解系统(输入:旧系统;输出:设计模型)
- 重构:同级优化(不改功能、不改抽象级)
- 再工程:全链路升级(逆向+重构+正向=新版本)
二、逆向工程(核心考点)
1. 目标
- 恢复系统架构、数据设计、业务逻辑、控制流/数据流
- 补全缺失文档、理解遗留系统、支撑维护与迁移
- 安全审计、漏洞分析、知识产权鉴定
2. 主要技术
- 静态分析 (不运行)
- 代码扫描、调用图、依赖分析、UML类图/时序图恢复
- 控制流/数据流分析、变量追踪、污点分析
- 工具:Understand、Sourcetrail、Enterprise Architect
- 动态分析 (运行时)
- 函数调用追踪、IO记录、内存快照、行为监控
- 工具:DTrace、strace、WinDbg、Valgrind
- 混合分析
- 符号执行、约束求解、路径探索
- 工具:KLEE、Angr
3. 输出产物(不产生新系统)
- 架构文档、UML模型、数据字典、ER图
- 业务规则说明书、模块接口清单、数据流图
4. 典型应用场景
- 遗留系统维护(无文档旧代码)
- 技术迁移(COBOL→Java、Oracle→PG)
- 安全漏洞挖掘、恶意代码分析
- 软件侵权鉴定
三、重构工程(再工程)(核心考点)
1. 再工程目标
- 提升可维护性、扩展性、性能、安全性
- 降低维护成本(40--70%)、延长系统寿命(5--8年)
- 技术债务清零、适配新平台/新需求
2. 三阶段标准流程
(1)逆向工程阶段(分析理解)
- 代码分析:调用关系、依赖、坏味检测
- 架构恢复:组件边界、分层结构、UML建模
- 业务提取:算法、规则、流程还原
(2)重构阶段(优化改造)
- 代码重构:提取方法、重命名、消除重复、简化逻辑
- 数据重构:表规范化、冗余清理、数据模型优化
- 架构重构:单体拆微服务、分层优化、技术栈升级
- 界面重构:UI现代化、交互优化
(3)正向工程阶段(重新实现)
- 按新设计编码、模块替换、系统集成
- 测试(功能/性能/回归)、部署、数据迁移
- 输出:新版本系统
3. 重构原则(必背)
- 功能守恒:外部行为不变,用户无感知
- 小步快跑:频繁重构、每次少量修改
- 测试先行:重构前保证测试用例完备
- 不新增功能:重构与新需求开发分离
4. 常见重构技术(代码级)
- 提炼函数、内联函数
- 变量重命名、引入解释性变量
- 分解临时变量、移除参数赋值
- 替换算法、提取类、移动方法
5. 再工程 vs 重构 vs 逆向工程
| 维度 | 逆向工程 | 重构 | 再工程(重构工程) |
|---|---|---|---|
| 核心目的 | 理解、恢复设计 | 同级结构优化 | 全面升级、生成新版本 |
| 修改系统 | 不修改 | 仅内部结构 | 深度修改/重写 |
| 抽象级别 | 低→高(升层) | 同级不变 | 可跨级、可重实现 |
| 输出产物 | 设计文档/模型 | 优化后同版本 | 全新系统版本 |
| 范围 | 分析建模 | 局部/代码级 | 全系统全链路 |
四、易混概念澄清(高频考点)
-
设计恢复 vs 逆向工程
- 设计恢复:侧重从代码抽设计信息(数据、结构、过程)
- 逆向工程:完整自底向上抽象全过程(含设计恢复)
-
再工程 vs 重构
- 重构:同级、不改功能、小范围、不生成新版本
- 再工程:跨级、可加需求、全系统、输出新版本
-
维护 vs 再工程
- 维护:纠错、适配、完善(小改)
- 再工程:系统性重构、技术换代、架构重塑(大改)
五、软考应试要点
-
题干关键词判断
- "分析、反推、理解、恢复文档" → 逆向工程
- "优化结构、不改功能、消除坏味" → 重构
- "升级、迁移、重写、新版本、全流程" → 再工程
-
典型考题形式
- 概念定义单选:"( )是逆向基础上修改生成新版本" → 再工程
- 流程排序:逆向→重构→正向
- 场景判断:遗留系统无文档→先逆向;代码混乱→重构;技术过时→再工程
-
记忆口诀
- 逆向:只看不改,还原设计
- 重构:不改功能,只换结构
- 再工程:先逆后构再正向,新版系统更健壮
六、总结
- 逆向工程是**"读懂"**系统的分析过程,输出蓝图。
- 重构是**"优化"**内部结构、功能不变的同级改造。
- 再工程(重构工程)是 "读懂+改造+重建"的全流程,目标是系统现代化与延寿。