论文部分内容阅读
代码异味是软件中由于设计缺陷或不良编码习惯而导致深层次质量问题的代码症状。与一般代码缺陷不同,代码异味不一定直接导致软件运行错误,但引起可读性、可理解性、效率等方面的质量问题,造成软件维护难度随之增加。因此,亟需对代码异味进行评估与检测,以改善软件质量、节约维护成本。目前,代码异味的研究面临着若干挑战。一方面,程序员对代码异味的识别偏于主观,缺乏有效的检测工具。另一方面,除程序结构方面的代码异味之外,现有研究工作缺乏对更多类别代码异味的研究。对此,本文通过挖掘开源软件的维护历史,评估和检测影响软件可维护性的代码异味。首先,本文实现了一种基于度量的代码异味检测技术,并评估了代码异味对软件可维护性的影响程度。其次,鉴于Python等动态类型语言的流行以及用户对软件性能的要求日益提高,本文提出了动态类型使用和性能表现两方面的代码异味,并分别对代码异味的检测技术和危害程度展开研究。本文主要贡献总结如下:(1)针对代码异味检测技术的有效性问题,结合三种阈值策略构建了基于度量的代码异味检测工具(Pysmell),根据软件维护历史评估了三种阈值策略的检测效果并衡量了代码异味对软件可维护性的影响程度。结果表明,该工具能有效检测10种程序结构代码异味,且代码异味与代码变更和缺陷显著相关。(2)针对动态类型使用的代码异味问题,提出了6种动态类型滥用的代码异味,实现了对动态类型代码异味的检测方法,结合定量和定性分析调查了动态类型代码异味的特征并评估了在软件维护历史中这些代码异味与缺陷的关联性。结果表明,程序员一般在软件的前期开发阶段就引入了动态类型代码异味,且绝大部分的动态类型代码异味可能导致软件缺陷。(3)针对影响软件性能表现的代码异味问题,实现了性能问题代码异味的定位方法(Speedoo),其目的是对软件中所有函数的优化优先级进行排序。本文基于开源软件的性能优化历史对该方法的有效性和效率进行评估。结果表明,Speedoo定位性能问题代码异味的有效性比基于剖析的定位工具YourKit高出2到3倍,且能适用于大规模的软件系统。