论文部分内容阅读
软件会随着时间变得越来越难以理解,越来越难以维护。重构是在保持程序外部可观察行为不变情况下,对软件的内部结构进行重新改造和组织的技术,是获得软件质量的一项关键技术。然而“在哪使用哪种重构方法”始终是重构技术需解决的主要问题之一。 重复代码是程序中最常见的代码“坏味道”,Kontogiannis度量是检测重复代码的一种量化方法。然而,由于该度量方法所用的McCabe度量技术不能区分IF语句与循环语句的控制流复杂性,另外此方法不对两个比较函数的返回类型进行判断,因而在度量重复代码时会产生错误匹配。通过引入两个新的度量变量对其进行改进,提高该检测方法的准确性,并减少匹配错误。并通过引入过程蓝图改进它的检测过程,避免了要将源代码转换为抽象语法树这一复杂费时的工作,提高检测过程的效率。同时给出一种基于过程蓝图的程序环路复杂性度量实现方法,简化度量过程和实现,提高度量处理的效率。 Kontogiannis度量方法主要从代码的结构相似性识别重复代码,能识别出方法级的重复代码。Baker提出的参数化匹配方法能检测出方法级以下的重复代码,但它的空间复杂度要求过高,限制其能解决问题的范围。为此,我们引入过程蓝图改进该方法,降低程序的空间复杂度,并避免将源代码变换为后缀树这一复杂过程。 将两种方法有机地统一在同一语境下,避免在传统方法中须将它们分开处理的过程,即对相同的代码既要构造抽象语法树又要构造后缀树的过程,这样能更有效和更精确地检测出重复代码这种“坏味道”,为重构的自动定位和软件的自动重构提供一定的实现技术。