软件工程 |逆向工程
软件逆向工程是从分析产品的代码中恢复产品的设计、需求规格和功能的过程。它建立一个程序数据库并从中生成信息。
逆向工程的目的是通过提高系统的可理解性来促进维护工作,并为遗留系统生成必要的文档。
逆向工程目标:
- 应对复杂性。
- 恢复丢失的信息。
- 检测副作用。
- 合成更高的抽象。
- 促进重用。
软件逆向工程的步骤:
- 收藏信息:
此步骤的重点是收集有关软件的所有可能信息(即源设计文档等)。 - 检查资料:
为熟悉系统而学习在步骤 1 中收集的信息。 - 提取结构:
该步骤涉及以结构图的形式识别程序结构,其中每个节点对应于某个例程。 - 记录功能:
在这一步处理结构的每个模块的细节过程中,使用决策表等结构化语言记录图表。 - 记录数据流:
从步骤 3 和步骤 4 中提取的信息中,导出了一组数据流程图,以显示流程之间的数据流。 - 录制控制流程:
记录了软件的高级控制结构。 - 查看提取的设计:
提取的设计文件经过多次审查,以确保一致性和正确性。它还确保设计代表程序。 - 生成文档:
最后,在此步骤中,记录完整的文档,包括 SRS、设计文档、历史、概述等,以备将来使用。
逆向工程工具:
如果手动完成逆向工程将消耗大量时间和人力,因此必须由自动化工具支持。下面给出了一些工具:
- CIAO 和 CIA:软件和 Web 存储库的图形导航器以及一系列逆向工程工具。
- Rigi:一种可视化软件理解工具。
- Bunch:软件集群/模块化工具。
- GEN++:一个应用程序生成器,支持开发 C++ 语言的分析工具。
- PBS:用于提取和可视化程序架构的软件书架工具。