论文部分内容阅读
软件在生命周期中经常被修改或增强以满足不同的功能需求。随着演化的推进,软件设计会变得越来越复杂,维护成本也越来越高。运用软件重构技术可以通过改变软件内部结构来修复软件设计,降低维护成本。为了对开发人员在软件重构过程中提供支持,研究人员提出了许多重构方法,但大多数都只考虑细粒度(如类级别)的重构操作。然而,对于规模较大的面向对象软件,包对系统设计起着重要的作用。它作为基本组织单元,对类进行管理以降低系统的复杂度。包的设计质量直接关系到整个软件的设计质量,仅考虑细粒度的软件重构不足以显著提高包的设计质量。因此,如果能通过重构改进包的设计质量,则可以更加有效地提高软件质量。在已有的重构方法中,基于搜索的软件重构方法近几年在研究领域引起了很大的关注,包括单目标优化软件重构方法和多目标优化软件重构方法。近期研究指出,单目标优化方法不足以权衡有冲突的质量属性(如内聚性和耦合性),而多目标优化方法能够更好地解决重构问题。然而,当前已有的多目标优化重构方法所采用的目标均没有直接对设计原则的遵循程度进行量化。直觉上,软件越遵循设计原则,其软件质量越高。若该假设成立,则直接以设计原则度量作为优化目标更有可能显著改进软件质量。更进一步,在众多面向对象设计原则中,”高内聚、低耦合”是最基本的设计原则。如何解决内聚性和耦合性之间的冲突、同时对两者进行改进,也是软件重构中常见的问题。以内聚性和耦合性相结合的度量作为优化目标,是解决两者冲突的一个尝试。根据是否考虑客户使用的耦合关系,内聚性度量可从不同角度对软件质量进行评价。而考虑耦合关系是否对内聚性度量评价软件质量的有效性有显著影响,还有待验证。若影响显著且正向,则选用考虑耦合关系的内聚性度量作为重构优化目标,可能更有利于对软件设计的优化。为解决上述问题,本文首先实证研究软件遵守设计原则的程度对软件质量的影响,然后进一步从面向对象设计原则中的高内聚低耦合设计原则出发,实证研究耦合关系对内聚性度量在评价软件质量时的影响。由于软件质量与缺陷倾向性显著相关,因此本文从缺陷倾向性的视角分析软件质量。本文首先研究设计原则度量(本文也称为模块化度量)与缺陷倾向性之间的关系,以及相应缺陷预测能力;进一步针对面向对象设计原则中的”高内聚低耦合”原则,研究内聚性度量与缺陷倾向性之间的关系是否受耦合关系影响;最后,基于前期实证研究的结论,本文从包级别的软件重构出发,提出了设计原则导向的多目标优化软件重构方法,旨在为开发者提供一个可以显著提高软件设计质量的重构方案。本文主要贡献总结如下:(1)本文研究设计原则度量(模块化度量)与软件质量的关系,分别分析设计原则度量与传统包级别度量的冗余关系、与缺陷倾向性之间的相关性,以及在面向对象系统中的缺陷预测能力。基于多个开源面向对象系统的实验结果表明:1)模块化度量可以捕获到传统包级别度量不能捕获的软件复杂性特征;2)大多数模块化度量与缺陷倾向性之间呈显著负相关;3)无论是在排序场景还是分类场景下,结合使用模块化度量和传统包级别度量,可以明显提升缺陷预测模型的预测有效性。以上实验结果验证了软件遵循设计原则利于提高软件质量并且减少缺陷。(2)本文基于是否考虑包的耦合关系,将包级别内聚性度量分为上下文内聚性度量和非上下文内聚性度量,实证研究客户使用耦合关系对包级内聚性度量评价软件质量的影响。实验结果表明:1)上下文内聚性度量和非上下文度量不冗余;2)大多数上下文内聚性度量和缺陷倾向性之间呈显著负相关;3)在交叉验证和跨版本验证设置下,无论是单独建模还是结合非上下文内聚性度量一起建模,上下文内聚性度量都能提高缺陷模型在工作量感知下的分类性能和排序性能。以上实验结果验证了客户使用耦合关系对内聚性度量评价软件质量的有效性存在显著的影响。(3)基于前期实证研究,为了提高软件遵循设计原则的程度,进而提高软件设计质量,本文提出了一个包级别的设计原则导向的多目标优化软件重构方法DP-MO-R。该方法的特点有:1)将遗传算法应用于软件重构推荐问题,将算法中的个体定义为一个重构方案;2)定义规则约束种群初始化,确保初始种群中个体中的操作可执行;3)首次使用设计原则度量作为优化目标来导向搜索。为了验证该方法的有效性,本文首先分析其是否能改进软件设计质量,然后重现了一个已有的多目标优化方法进行对比实验。实验结果表明,该方法能够显著提高软件遵循设计原则的程度,而且在对比实验中DP-MO-R在大多数质量指标上都表现出了显著的优势。本文提出的包级别重构推荐方法为避免软件设计质量随着软件演化而降低提供了有效的手段,帮助开发者实时增强软件遵循设计原则的程度,从而改进软件质量。本文的实证研究为设计原则导向的软件重构研究提供了前提保障,同时也有助于增加研究者或开发者更好地理解设计原则度量与软件质量之间关系,以及耦合关系对内聚性度量评价软件质量的影响。