论文部分内容阅读
由于需求的改变导致软件在其生命周期内不断演化。随着程序员不断的增加或删减代码,软件原先的设计构架被打破,结构变得不再清晰,代码变得越来越难理解,软件的扩展和维护也变得越来越困难。软件重构是改善软件质量的一种重要手段。它在不改变软件外部行为特性的情况下通过调整软件内部结构以提高软件的可理解性、可维护性和可扩展性。自1992年Opdyke首次提出了软件重构的概念以来,软件重构迅速成为研究的热点,在工业界和学术界获得广泛的认可。研究人员针对软件重构开展了大量的研究工作,也设计实现了许多重构工具。软件重构是一项复杂的代码调整活动,它要求程序员不断做出各种复杂的决策。例如,在何处重构、何时应重构、以及如何重构等等。利用自动推荐技术以降低各种复杂重构决策的难度既是降低重构成本提高重构效果的一个重要途径,也是推广软件重构技术的一个重要技术基础。为此,本文面向软件重构研究相应的推荐方法以辅助程序员进行重构决策,从而降低重构难度并提高重构效果。本文的主要工作和贡献体现在以下几个方面:(1)基于代码库和特征匹配的函数名称推荐重命名是最常见的软件重构操作之一。程序员通过重命名操作给相关的软件实体赋予更有意义的名称。然而如何选择合适的名称就需要人来决定。对于缺乏经验的初学者或是母语并非英语的程序员,为函数拟定一个合适的名字并不容易。为此,本文提出一种基于代码库和特征匹配的函数名称推荐方法以辅助程序员为函数确定合适的名字。首先,该方法使用词性标注技术对代码库中的函数名称进行解析获取用于命名的候选词条。然后通过特征抽取技术将函数中代表函数特征的代码抽取出来,并在特征代码与候选词条之间建立关联关系。最后,将特征代码与待推荐函数相匹配筛选候选词条并按照规则为程序员推荐命名方案。实验的结果表明本文提出的方法具有较高的推荐成功率。(2)基于测试用例变化的软件重构推荐方法许多初学者往往缺乏软件重构的经验,对软件重构工具也不熟悉,因此很少使用工具实施重构。然而手工实施重构耗时易错。如果能够从代码的变化中及时发现重构的意图,就能提醒或指导程序员使用重构工具,进而减少人为的错误并降低软件重构的难度。为此,本文针对测试驱动开发(Test-Driven Development)提出一种基于测试用例变化的软件重构推荐方法。该方法通过在线监控的方式对测试代码进行动态监控,将测试代码的变化情况与预先定义的基于重构的测试代码变化模式的启发规则相匹配,从而为用户推荐重构。实验的结果表明该方法具有较高的推荐准确率。(3)基于优先级的代码坏味处理顺序推荐软件重构是消除代码坏味的一种有效手段。然而软件重构活动也需要耗费一定的人力资源。因此,在资源受限条件下可能无法通过重构消除所有的代码坏味。此时,我们应该优先选择和处理那些对软件危害较大的坏味类型才能最大限度地提高软件的质量。为此,本文,从代码坏味危害发生的概率、影响范围、是否对系统安全性构成威胁、是否影响软件的复用、是否影响软件的可理解性等几个方面分析了10种典型的代码坏味。依据分析的结果划分了代码坏味处理的优先级,明确了每个级别的特征(如安全性威胁,影响范围等)。通过实验表明,在资源受限情况下,按照本文推荐的基于优先级的代码坏味处理顺序实施重构能够有效的提高软件重构的整体效果。