[论文解读] Making refactoring decisions in large-scale Java systems: an empirical stance
本文提出一种基于度量的方法,用于识别大规模Java系统中适合重构的关键类,结合了继承和聚合耦合的潜在收益(PG)度量,以及方法数、属性数等类特征。研究发现,不同系统在关键类特征上存在显著差异,仅Ant系统与预期的关键类模式一致,同时表明其他领域(如网络搜索)的度量可被适配用于软件工程中的针对性重构决策。
Decisions on which classes to refactor are fraught with difficulty. The problem of identifying candidate classes becomes acute when confronted with large systems comprising hundreds or thousands of classes. In this paper, we describe a metric by which key classes, and hence candidates for refactoring, can be identified. Measures quantifying the usage of two forms of coupling, inheritance and aggregation, together with two other class features (number of methods and attributes) were extracted from the source code of three large Java systems. Our research shows that metrics from other research domains can be adapted to the software engineering process. Substantial differences were found between each of the systems in terms of the key classes identified and hence opportunities for refactoring those classes varied between those systems.
研究动机与目标
- 为解决大规模Java系统中缺乏系统性标准来选择重构类的问题。
- 识别在系统结构中居于核心位置的关键类,使其成为重构的优先候选。
- 评估其他领域(如网络搜索)的度量是否可被适配用于软件工程中的重构决策支持。
- 研究不同Java系统(包括类库和应用程序)中关键类特征的差异。
- 验证假设:关键类通常位于继承层次结构的底部。
提出的方法
- 将原本用于网络搜索的潜在收益(PG)度量——经调整后——用于基于UML类图中的继承和聚合耦合来衡量类的中心性。
- 从三个大型Java系统(JDK、Ant、Tomcat)中提取四类类级特征:方法数、属性数、继承耦合度和聚合耦合度。
- 通过继承和聚合关系的图分析计算每个类的PG得分,以对类的重要性进行排序。
- 将PG得分与方法数和属性数的原始数值相结合,识别出适合重构的候选关键类。
- 对Fowler的72种重构模式进行元分析,以证明选择核心重构模式(如“移动字段”、“移动方法”)的合理性,这些模式依赖于耦合度和类大小。
- 通过依赖分析识别核心重构模式,并证明将聚合、继承和类大小作为重构需求关键指标的合理性。
实验结果
研究问题
- RQ1在大规模Java系统中,哪些类最适于重构,以及可信赖的识别标准是什么?
- RQ2其他领域(特别是潜在收益度量)的度量在多大程度上可有效复用于类级别的重构决策?
- RQ3关键类是否如先前推测那样,始终位于继承层次结构的底部?
- RQ4关键类的特征(如方法数、属性数、构造函数数、耦合度)在不同类型系统(如应用系统与类库系统)之间有何差异?
- RQ5核心重构模式(如“移动字段”、“移动方法”)与关键类的结构特征之间存在何种关系?
主要发现
- 潜在收益度量在所有三个系统中均成功识别出关键类,证明其他领域的度量可有效适配于软件工程中的重构优先级判断。
- 系统间存在显著差异:JDK的平均构造函数数(1.242)显著高于Ant(1.073)和Tomcat(1.069),表明其结构模式存在本质不同。
- 仅Ant系统表现出推测C1所定义的关键类的预期特征,表明关键类并非始终位于继承层次结构的底部。
- 元分析表明,“移动字段”和“移动方法”是依赖于聚合和耦合的核心重构模式,支持将其作为重构需求指标的合理性。
- “大类”和“原始数据类型过度使用”代码异味在关键类中普遍存在,支持将高方法数和高属性数作为重构紧迫性的指标。
- 本研究支持软件设计中幂律关系的既有发现,表明接口通常作为多重继承的替代方案,尤其在复杂系统中。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。