【软考每日一练030】软件维护:逆向工程与再工程的区别与联系

【软考每日一练030】软件维护:逆向工程与再工程的区别与联系

一、 题目回顾

6. ( ) 是在逆向工程所获取信息的基础上修改或重构已有的系统,产生系统的一个新版本。

A. 逆向分析 (Reverse Analysis)

B. 重组 (Restructuring)

C. 设计恢复 (Design Recovery)

D. 重构工程 (Re-engineering)


二、 正确答案

正确答案:D


三、 深度解析

本题考核的核心在于区分软件演化过程中的几个关键技术术语。我们可以通过以下逻辑链条来理解:

  1. 逆向工程(Reverse Engineering) :这是一个"自底向上"的过程。它通过分析已有的程序代码,推导出系统的设计规格、需求说明或更高层级的抽象表现。其核心目标是获取信息,而不是改变系统。
  2. 重组(Restructuring):指在同一抽象级别上转换系统的描述形式(例如,将非结构化的代码转换为结构化代码),但不改变系统的外部行为。
  3. 再工程(Re-engineering,题中称"重构工程")
  • 定义 :它不仅包含逆向工程,还包含了修改(Alteration)正向工程(Forward Engineering)
  • 过程 :首先通过逆向工程理解现有系统,随后根据新需求进行业务逻辑或架构的修改,最后通过正向工程重新实现,从而产生一个全新的版本
  • 结论:题目中明确提到"在逆向工程基础上修改"并"产生新版本",这完全符合再工程的定义。

四、 相关知识点总结

为了帮助读者彻底掌握该考点,我们需要理清以下四个核心概念的层级关系:

1. 逆向工程 (Reverse Engineering)

逆向工程是理解遗留系统(Legacy System)的关键。

  • 实现层级:从源代码中提取调用关系、数据结构。
  • 结构层级:恢复模块间的依赖关系图。
  • 功能层级:通过分析推测系统的业务逻辑。
2. 正向工程 (Forward Engineering)

这是传统的软件开发过程,即从用户需求出发,经历设计、编码到测试,最终生成目标系统的过程。在"再工程"循环中,正向工程用于实现修改后的新设计。

3. 再工程 (Re-engineering)

再工程是一个完整的循环过程,通常可以用公式表示:

它旨在对现有系统进行全面的、高层次的改进,通常用于系统迁移(如从单体架构迁移到微服务架构)或大规模的功能更新。

4. 设计恢复 (Design Recovery)

设计恢复是逆向工程的一个子集。它不仅仅是提取代码结构,还结合了外部知识(如领域专家经验、文档、现有库)来重建系统的抽象设计说明。


五、 核心对比表

术语 起点 终点 是否改变系统行为
逆向工程 低抽象(代码) 高抽象(设计/需求)
重组 现有系统 优化后的同功能系统
再工程 遗留系统 新版本系统 是(增强或演化)

希望这篇解析能帮助你理清思路。如果你在处理 C++ 结合 VTK 库 的项目重构中遇到了类似的架构设计问题,或者在准备软考过程中对其他工程化术语有疑问,欢迎随时提问。

相关推荐
王维同学4 小时前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
Scott9999HH4 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
脱胎换骨-军哥5 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
ttod_qzstudio6 小时前
【软考备考】软件工程详解:四大开发模型、黑盒白盒测试、McCabe 环路复杂度(附 10 道练习)
软件工程·软考·黑盒·白盒·mccabe 环路复杂度
旖-旎6 小时前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
胖大和尚8 小时前
C++ 多线程编程的实现方式
c++·thread
在水一缸9 小时前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
2401_841495649 小时前
【数据结构】B*树
数据结构·c++·b树·算法·删除·插入·三分分裂
斐夷所非9 小时前
在纷繁竞逐中稳步前行:C++ 2006–2020
c++
保持清醒54010 小时前
类和对象上
c++