[发明专利]一种基于代码圈复杂度度量的软件演化评估方法在审
申请号: | 201710330642.1 | 申请日: | 2017-05-11 |
公开(公告)号: | CN107239396A | 公开(公告)日: | 2017-10-10 |
发明(设计)人: | 廖力;李必信;何磊 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京苏高专利商标事务所(普通合伙)32204 | 代理人: | 柏尚春 |
地址: | 211189 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 代码 复杂度 度量 软件 演化 评估 方法 | ||
技术领域
本发明涉及一种基于代码圈复杂度度量的软件演化评估方法,属于软件演化与维护领域问题。
背景技术
代码复杂度是对代码复杂程度的一种度量,是理解和维护代码所需工作量的一种指征。代码复杂度会直接影响到诸如可读性、可维护性、可理解性等软件质量属性。通过评估代码复杂度,可以帮助开发人员及时了解、控制和调整代码的复杂程度。
圈复杂度是代码复杂度的一种,是用来衡量程序中判定结构的复杂程度的一种质量指标。通常,人们通过圈复杂度的度量与评估衡量软件模块判定结构的复杂程度,了解预防错误所需测试的最少路径条数,为测试人员设计测试案例提供指导。经验表明,程序的可能错误数和圈复杂度值的高低有很大关系:圈复杂度偏大的程序代码往往质量低,且难于测试和维护。
随着软件的演化,其源代码会产生一定的变更,会对软件的圈复杂度、软件质量及其后继演化产生影响。有些演化操作能降低代码的圈复杂度,提高代码的质量;而有些演化操作则会提高软件的圈复杂度。很多软件项目或者由于最初设计结构的不合理,或者由于版本演化过程中累积问题的增多,最终在软件复杂性得不到有效控制的情况下崩溃,导致软件生命的结束。因此,在现有软件开发环境下,自动化地对软件的代码圈复杂度进行演化分析对于软件的迭代开发与重构、提高软件质量、延长软件的生命周期具有重要意义,并能为软件的演化提供评价依据。
发明内容
技术问题:本发明的目的是提供一种自动化地对软件代码圈复杂度的演化进行评估和分析的方法,以解决软件演化过程中复杂度得不到有效控制的问题。较之其他软件演化度量和评估方法,该方法注重演化过程中软件圈复杂度的变化,实现对软件复杂度的控制。
技术方案:本发明方法,强调软件演化中的质量控制,引入代码圈复杂度度量方法、圈复杂度阈值等,从不同层次对演化前后的软件圈复杂度进行度量和评估,进而对代码圈复杂度变化的原因进行分析,为软件维护方案提供参考。
本发明的基于代码圈复杂度度量的软件演化评估方法,步骤如下:
步骤1)分别为待评估软件的当前待测目标版本V_current和历史版本V_last的程序源码构造抽象语法树;
步骤2)根据所述步骤1)获取的抽象语法树,分别从系统层、类层和方法层三个层次对待测软件版本的代码进行圈复杂度度量,所述待测软件版本包括当前待测目标版本V_current和历史版本V_last;
步骤3)从类层和方法层分别评估待测软件版本的圈复杂度度量结果,找出软件中圈复杂度度量结果超出阈值范围的类和方法;
步骤4)对待测软件的当前待测目标版本V_current和历史版本V_last的圈复杂度度量结果按层次进行分析比较,以确定变更发生的位置,具体为:先进行两个版本系统层圈复杂度的比较,确定两个版本间类的增删改;然后再进行类层次的分析,对前后版本中圈复杂度发生变化的类,确定其方法的增删改;最后进行方法层次的分析,考察同名方法的圈复杂度变化;
步骤5)对当前待测目标版本V_current和历史版本V_last的项目源码本身进行分析比较,找出两者在所述步骤4)确定的变更发生的位置的代码差异,输出到格式文件中;
步骤6)针对当前待测目标版本V_current和历史版本V_last,通过所述步骤4)得到的两个版本中圈复杂度发生增删改的类和方法,以及所述步骤5)得到的两个版本的代码差异,进行差异定位,即根据代码差异确定导致度量结果发生变化的原因,形成软件演化评估。
进一步的,本发明的方法中,步骤2)中通过统计代码解析所得的抽象语法树中判定节点的数量来进行代码圈复杂度度量,规则为:
判定节点是程序设计语言中表示条件判定的语句,通过条件判定来确定程序的控制流走向。
进一步的,本发明的方法中,对于Java语言,所述步骤2)中代码圈复杂度度量规则的判定节点存在于以下关键字所引导的语句中:If,for,while,do,case,catch,&&,||,:?,这些判定节点在抽象语法树AST中对应的节点如下表:
表1.圈复杂度中判定节点和ASTNode对应表
进一步的,本发明的方法中,步骤2)中分三个层次进行代码圈复杂度度量的具体方法是:
方法层:通过扫描方法的抽象语法树,统计方法中的判定节点个数,将该判定节点数加1即为方法层的圈复杂度;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710330642.1/2.html,转载请声明来源钻瓜专利网。