如何评估重构的收益?IEEE 软件工程期刊登的论文《30 Years of Software Refactoring Research: A Systematic Literature Review》分析了过去30年3183篇
关于重构的研究论文,对现有重构研究的最具可扩展性和最全面的文献综述。
论文研究的问题和结论
RQ1:重构生命周期是什么?
重构检测:
识别重构机会是实际重构过程之前的一个重要阶段。 它可以通过手动检查和分析系统的工件来识别重构机会来完成。 该领域的研究人员通常会提出全自动或半自动化技术来识别重构机会。 这些技术可能适用于不同的工件,应该根据经验进行评估。重构优先级:
重构机会的数量通常超过开发人员可以处理的问题数量,尤其是当可用于执行重构的工作量有限时。 此外,并非所有重构机会都与系统目标或其健康状况同等相关。 在此阶段,根据开发人员的需要,使用不同的标准(例如,最大限度地重构具有大量反模式或具有以前的错误历史等的类)对重构操作进行优先级排序。重构测试:
选择要应用的重构后,需要进行测试以确保工件转换的正确性并避免将来出现错误。 这是通过检查重构操作的前置条件和后置条件的满足以及系统行为的保存来完成的。重构文档:
应用和测试重构后,需要记录重构、它们的位置、应用它们的原因以及质量改进。预测:
对于开发人员来说,了解哪些位置可能需要在其软件产品的未来版本中进行重构是很有趣的。 这将帮助他们专注于将来会发生变化的相关工件,为进一步改进和扩展功能做好准备,并优化有限资源和时间的管理。 可以使用开发历史来预测未来重构的位置。
RQ2:在重构生命周期的每个步骤中重构的工件类型是什么?
- 重构不仅限于软件代码,它可以应用于任何类型的软件工件(例如,软件架构、数据库模式、模型、用户界面和代码)。
- 最受欢迎的重构工件是代码 (72.89%)。
- 模型重构也受到了相当大的关注,占比高达59.25%。
- 图形用户界面 (GUI) 和数据库重构受到的关注最少,分别只有 4.12% 和 2.58%。
RQ3:为什么软件从业者和研究人员要重构?
通过对主要研究的分析确定了五种范式:面向对象设计、云计算、移动应用程序、模型驱动和面向方面。
- 超过 34% 的与重构相关的研究集中在面向对象的设计上。
- 不到 5% 的论文研究了云计算和移动应用程序开发的重构。
对于分类法的重构目标分类,考虑了五个子类:
外部质量
:如正确性、可用性、效率、可靠性等,提高外部质量的论文占比22.68%;内部质量
:如可维护性、灵活性、可移植性、可重用性、可读性等,提高内部质量的论文占比41.63%;性能
:例如响应时间,错误率,请求率,内存使用等;迁移
:例如类层次结构中的分散,引用变量的数量,分配的变量数量等,安全性
:例如解决漏洞所需的时间,数量 被阻止的病毒和垃圾邮件数量、端口探测数量、应用的补丁数量、每个缺陷的成本、攻击面等。 只有 3.11% 的论文出于安全原因调查了重构。
RQ4:软件从业者和研究人员使用哪些不同的方法来执行重构?
重构技术分为四大类:
- 数据挖掘(例如聚类、分类、决策树、关联、神经网络等),17.59%的论文使用数据挖掘的技术来解决重构问题;
- 基于搜索的方法(例如遗传算法、爬山法、模拟退火法、多目标法) 进化算法等),超过 25% 的论文使用基于搜索的技术来解决重构问题;
- 形式化方法(B-Method、用于自动定理证明的规范语言、RAISE、Z 表示法、SPARK Ada 等)和
- 模糊逻辑。
RQ5:软件从业者和研究人员使用哪些类型的数据集来验证重构?
- 61.1% 的研究使用开源系统来验证他们的工作
- 38.9% 的研究使用工业项目来验证他们的工作