CN108509338A - 一种基于多层次变更分析的软件演化评估系统及方法 - Google Patents
一种基于多层次变更分析的软件演化评估系统及方法 Download PDFInfo
- Publication number
- CN108509338A CN108509338A CN201810221537.9A CN201810221537A CN108509338A CN 108509338 A CN108509338 A CN 108509338A CN 201810221537 A CN201810221537 A CN 201810221537A CN 108509338 A CN108509338 A CN 108509338A
- Authority
- CN
- China
- Prior art keywords
- evolution
- analysis
- entity
- module
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
为了提高软件演化评估的准确性和实用性,本发明提出一种基于多层次变更分析的软件演化评估系统和方法,所述评估系统包括代码解析模块、度量模块、变更检测模块、变更度量映射模块以及演化评估分析模块。该方案通过计算不同抽象层次的变更集,将其与度量指标的演化进行关联映射,计算每个变更操作对该指标演化的贡献度,基于贡献度的排序与筛选结果分析度量指标演化原因和确认后续演化需求。本发明提出的软件演化评估方法具有多层次特性,可以针对软件不同抽象层次进行演化评估分析;本发明提出贡献度的概念,量化了软件演化对度量指标变化的贡献程度,从而更准确地追踪度量指标变化的物理原因。
Description
技术领域
本发明提出了一种软件演化评估方法,主要是利用多层次变更分析和变更指标贡献度的思想来评估软件演化过程,属于软件维护和软件演化领域。
背景技术
软件变更是软件发生演化的直接原因,变更检测是软件演化评估分析的基础。保证软件演化过程中质量属性,确保不影响后续的可维护性,需要时刻关注软件的变更情况,对软件演化过程进行评估。根据不同的程序表示方式、匹配粒度以及匹配多样性需求,有不同软件变更检测方法。如Fluri利用树匹配思想开发了一款非常优秀的代码变更检测工具ChangeDistiller,该工具能够识别Java程序中高达47种代码变更类型。
目前出现了若干软件演化分析技术,其基本步骤都是首先获取各个版本的分析模型,然后确定不同版本模型中元素之间的对应关系,发现相互之间的基本差异,然后以此为基础追踪演化信息。根据分析对象以及分析目标的不同,软件演化分析技术主要可以分为基于模型变更的演化评估方法,以及基于代码变更的演化评估方法。本发明提出的方法属于基于代码变更的演化评估方法,其基本方案是提取演化过程中代码的变更信息,利用这些变更信息追踪度量指标演化的物理原因,基于分析结果评估演化过程。但目前多数研究者仅关注代码片段或某一抽象层次,无法根据实际需求获取不同抽象层次的软件演化评估结果,并且如何衡量特定变更操作对度量指标演化的影响程度也是一个亟待解决的问题。因此,需要对现有的基于代码变更的软件评估方法进行改进,完善上述不足。
发明内容
本发明的目的是提供一种基于多层次变更分析的软件演化评估方法,该方法可以根据实际需求获取不同抽象层次的软件演化评估结果,从粗粒度到细粒度,逐步追踪软件演化性度量指标的变化的物理原因。
为了实现上述目的,本发明的技术方案如下,一种基于多层次变更分析的软件演化评估系统及方法,所述评估系统包括代码解析模块、度量模块、变更检测模块、变更度量映射模块以及演化评估分析模块,所述代码解析模块将代码解析结果输入度量模块和变更检测模块,所述变更度量映射模块将不同抽象层次的变更检测模块结果和度量模块结果进行关联映射并计算贡献度,所述软件演化评估分析模块根据变更检测、度量结果以及变更度量映射的贡献度结果生成软件演化评估报告。
所述代码解析模块解析程序源代码文件,获取源代码各个实体的基本属性,并构造程序分析树;该模块的输出结果可以作为变更检测模块和度量模块的输入数据。所述代码解析模块选取JDT(Eclipse Java Development Tools)作为Java源代码的语法解析器。通过JDT可以将Java源程序转化为抽象语法树,并基于抽象语法树提取软件度量信息以及构造程序分析树。
所述度量模块的度量属性包括:代码规模LOC(Line Of Code)、圈复杂度CC(Cyclomatic Complexity)、实体间耦合度CBE(Coupling between Entities);选取这些度量指标,是因为它们都是评估软件演化可维护性的重要且常见的指标;另外,基于不同的抽象层次,这些度量指标均可以获得计算结果。基于这些指标进行软件演化评估分析,可以更好地指导开发人员进行软件演化。
从源代码文件解析结果中可获取如下度量所需数据:
TL:源代码实体的总代码行数;
CL:源代码实体中包含的注释行数;
BL:源代码实体中包含的空行数;
BN(m):方法m中包含的分支结点数;
I:调用该源代码实体的同层次实体数目;
O:源代码实体调用的同层次实体数目
N:源代码实体所属层次的实体数目(即父结点的所有子结点数目)
各度量指标的计算方式如下:
(1)代码规模LOC即为源代码中去除注释和无效空行的有效代码行数。
LOC=TL–CL–BL;
(2)方法级的圈复杂度即其对应的控制流图划分出的区域数目,其计算也可通过统计分支结点的数量加1进行计算;目录层、文件层、类层的圈复杂度通过下层圈复杂度叠加计算;方法m的圈复杂度计算公式如下:
CC(m)=BN(m)+1;
(3)实体间耦合度可以度量实体与其它实体交互的频繁程度,CBE越大的实体,其可维护性越差。实体间耦合度可以通过实体间依赖关系的出度和入度来计算;
CBE=(I+O)/N。
所述变更检测模块的功能是对同一项目的两个演化版本进行差异性分析,获取由前一版本演化至后一版本的变更内容。本发明实现的变更检测模块具有多层次特性,其层次包括目录结构层、文件层、类层、函数层、语句层,不同层次的变更实体间存在包含关系,使用者可以根据实际需求选取需要的抽象层次的变更检测分析结果。
所述变更检测模块采用Fluri的树匹配算法进行变更检测,其提出的算法可以对两段Java代码进行差异性分析,获取类层、方法层以及语句层的代码变更。本发明对该算法进行目录层及文件层扩展,使其可以获取目录结构层及文件层的变更。
基于树匹配的变更检测方法,其步骤包括:
(1)获取V_last和V_current对应的程序分析树T_last和T_current;
(2)构造T_last和T_current的匹配结点集合Smatch;
(3)根据匹配集Smatch,生成从程序分析树T1演进至T2的最小编辑操作集合Sedit;
(4)变更分类,即将Sedit中的树编辑操作映射为程序变更操作。
作为本发明的一种改进,所述变更度量映射模块,本模块的功能是将度量数据的变更映射到代码实体的变更,并引入贡献度的概念,通过计算每个变更操作的指标贡献度,量化各个变更操作对度量数据的影响程度。通过指标贡献度的筛选、排序操作,可以获取引起度量指标变化的主要原因。
贡献度的物理含义是某层次的变更操作在该层次的所有变更操作中对系统度量指标变化的贡献百分比。因此,同一抽象层次的所有变更操作的指标贡献度的和为1。贡献度的计算方法在方法流程的步骤4中详细介绍。
作为本发明的一种改进,演化评估分析模块的功能是生成软件演化评估报告,即基于贡献度排序与筛选结果进行度量指标变化原因分析及后续演化需求确认;开发者可以根据该演化评估分析报告中的度量指标变化原因分析功能来定位需要重构的代码部分,进而指导下一次版本演化。
一种基于多层次变更分析的软件演化评估方法,具体包括以下步骤:
步骤1)解析程序相邻版本V_last和V_current的源代码文件,构造程序分析树T_last和T_current;
步骤2)基于代码解析结果,计算V_last和V_current不同抽象层次实体的度量指标数据,包括代码规模LOC、圈复杂度CC、实体间耦合度CBE。
步骤3)检测T_last和T_current的不同抽象层次的匹配集和变更集;
步骤4)依据度量数据的变更映射结果,对于每一个变更操作,逐层计算变更操作的指标贡献度;
假设老版本的结点Nold演化至新版本的结点Nnew,对应变更操作记为Nold→Nnew(特别地,当Nold结点为NULL时,说明Nnew为新增的结点,而当Nnew结点为NULL时,说明Nold结点在演化的过程中已被删除),Nold的父结点为PNold,Nnew的父结点为PNnew,且PNold演化至PNnew,是由其子结点的变更引起的,记所有这些子结点的变更操作集合为S。贡献度C(Nold→Nnew)的计算公式的如下:
注:根结点变更的指标贡献度C(Nold→Nnew)=1;
其中metric_chg(Nold,Nnew)的含义是Nold演化Nnew至所引起的度量指标的变化数值,已知任一实体n度量指标计算函数为metric(n),metric_chg(Nold,Nnew)的计算公式为:
步骤5)基于贡献度排序与筛选结果进行度量指标变化原因分析及后续演化需求确认,生成演化评估报告。
本发明与现有技术相比,主要有以下一些优点,本发明方法通过计算不同抽象层次的变更实体关于演化指标的贡献度来帮助进行软件度量指标的演化评估分析,
(1)本发明提出的软件演化评估方法具有多层次特性,其层次包括目录结构层、文件层、类层、方法层。在不同的分析场景下,往往需要不同级别的分析粒度;实验证明,本发明提出基于多层次变更分析的软件演化评估方法可以根据实际需求获取不同抽象层次的软件演化评估结果,从粗粒度到细粒度,逐步追踪软件演化性度量指标的变化的物理原因。
(2)本发明提出贡献度的概念与计算方法,量化了变更实体对度量指标演化的贡献程度,进而可以根据贡献度结果进行筛选和排序,仅保留对度量指标演化影响较大的结果集。实验证明,通过指标贡献度的排序与筛选结果,可以更快速准确地定位度量指标变化的物理原因。
(3)本发明提出的的软件演化评估方法具有可扩展性,可评估的度量指标包括但不限于代码规模LOC、圈复杂度CC和实体间耦合度CBE。当某度量指标满足基于不同的抽象层次,有相应的计算方法,该度量指标就可扩展到所述软件演化评估系统中。
附图说明
图1是本法明所实现的基于多层次变更分析的软件演化评估工具的总体架构图;
图2是基于树匹配的变更检测方法实现流程图;
图3是基于多层次变更分析的软件演化评估方法的实现流程图。
具体实施方式
为了加深对本发明的认识和理解,下面结合附图对本方案进行详细的介绍和说明,
实施例1,参见图1,一种基于多层次变更分析的软件演化评估系统,所述评估系统包括代码解析模块、度量模块、变更检测模块、变更度量映射模块以及演化评估分析模块,所述代码解析模块将代码解析结果输入度量模块和变更检测模块,所述变更度量映射模块将不同抽象层次的变更检测模块结果和度量模块结果进行关联映射并计算贡献度,所述软件演化评估分析模块根据变更检测、度量结果以及变更度量映射的贡献度结果生成软件演化评估报告。
所述代码解析模块解析程序源代码文件,获取源代码各个实体的基本属性,并构造程序分析树;该模块的输出结果可以作为变更检测模块和度量模块的输入数据。所述代码解析模块选取JDT(Eclipse Java Development Tools)作为Java源代码的语法解析器。通过JDT可以将Java源程序转化为抽象语法树,并基于抽象语法树提取软件度量信息以及构造程序分析树。
所述度量模块的度量属性包括:代码规模LOC(Line Of Code)、圈复杂度CC(Cyclomatic Complexity)、实体间耦合度CBE(Coupling between Entities);选取这些度量指标,是因为它们都是评估软件演化可维护性的重要且常见的指标;另外,基于不同的抽象层次,这些度量指标均可以获得计算结果。基于这些指标进行软件演化评估分析,可以更好地指导开发人员进行软件演化。
从源代码文件解析结果中可获取如下度量所需数据:
TL:源代码实体的总代码行数;
CL:源代码实体中包含的注释行数;
BL:源代码实体中包含的空行数;
BN(m):方法m中包含的分支结点数;
I:调用该源代码实体的同层次实体数目;
O:源代码实体调用的同层次实体数目
N:源代码实体所属层次的实体数目(即父结点的所有子结点数目)
各度量指标的计算方式如下:
(1)代码规模LOC即为源代码中去除注释和无效空行的有效代码行数。
LOC=TL–CL–BL;
(2)方法级的圈复杂度即其对应的控制流图划分出的区域数目,其计算也可通过统计分支结点的数量加1进行计算;目录层、文件层、类层的圈复杂度通过下层圈复杂度叠加计算;方法m的圈复杂度计算公式如下:
CC(m)=BN(m)+1;
(3)实体间耦合度可以度量实体与其它实体交互的频繁程度,CBE越大的实体,其可维护性越差。实体间耦合度可以通过实体间依赖关系的出度和入度来计算;
CBE=(I+O)/N。
所述变更检测模块:本模块的功能是对同一项目的两个演化版本进行差异性分析,获取由前一版本演化至后一版本的变更内容。本发明实现的变更检测模块具有多层次特性,其层次包括目录结构层、文件层、类层、函数层、语句层,不同层次的变更实体间存在包含关系,使用者可以根据实际需求选取需要的抽象层次的变更检测分析结果。
所述变更检测模块采用Fluri的树匹配算法进行变更检测,其提出的算法可以对两段Java代码进行差异性分析,获取类层、方法层以及语句层的代码变更。本发明对该算法进行目录层及文件层扩展,使其可以获取目录结构层及文件层的变更。
基于树匹配的变更检测方法的流程图如图2所示,其步骤包括:
(1)获取V_last和V_current对应的程序分析树T_last和T_current;
(2)构造T_last和T_current的匹配结点集合Smatch;
(3)根据匹配集Smatch,生成从程序分析树T1演进至T2的最小编辑操作集合Sedit;
(4)变更分类,即将Sedit中的树编辑操作映射为程序变更操作。
作为本发明的一种改进,所述变更度量映射模块,本模块的功能是将度量数据的变更映射到代码实体的变更,并引入贡献度的概念,通过计算每个变更操作的指标贡献度,量化各个变更操作对度量数据的影响程度。通过指标贡献度的筛选、排序操作,可以获取引起度量指标变化的主要原因。
贡献度的物理含义是某层次的变更操作在该层次的所有变更操作中对系统度量指标变化的贡献百分比。因此,同一抽象层次的所有变更操作的指标贡献度的和为1,贡献度的计算方法在方法流程的步骤4中详细介绍。
演化评估分析模块的功能是生成软件演化评估报告,即基于贡献度排序与筛选结果进行度量指标变化原因分析及后续演化需求确认。开发者可以根据该演化评估分析报告中的度量指标变化原因分析功能来定位需要重构的代码部分,进而指导下一次版本演化。
实施例2:
以下,用commons-lang项目的3.1.0版本和3.2.0版本作为实施例,对本发明作更详细的描述。commons-lang项目是源代码量超过10万行的中型Java项目。对commons-lang的3.1.0至3.2.0的演化过程进行基于多层次变更分析的软件演化评估过程,包括以下步骤:
步骤1)解析程序commons-lang的3.1.0版本和3.2.0版本的所有源代码文件。借助解析工具JDT进行词法语法分析,将源程序转化为抽象语法树,并基于抽象语法树提取源代码实体元素信息。通过分析程序的目录结构信息和所有源代码文件的抽象语法树信息,构造具有多层次特性程序分析树T_last和T_current。程序分析树包含了源程序的所有源代码元素基本信息,是源程序的树形展示,其结点层次包括目录结构层、文件层、类层、函数层。3.1.0版本对应的T_last包含25个目录结点,218个文件结点,430个类结点和4679个方法结点;3.2.0版本对应的T_current包含25个目录结点,247个文件结点,501个类结点和5332个方法结点。
步骤2)基于步骤1中源程序解析结果,统计源代码中包含的度量基本信息,计算V_last和V_current的不同抽象层次实体的LOC、CC、CBE度量值。
由于数据量极大,下表仅节选包org.apache.commons.lang3中后续步骤涉及到的抽象实体的度量指标数据:
表1度量指标数据
步骤3)检测T_last和T_current的不同抽象层次的匹配集和变更集;
首先,找出T_last和T_current的匹配结点对,当两结点相似度超出阈值,则认为两结点匹配,如T_last的目录src\main\java\org\apache\commons\lang3对应的结点d1与T_current的目录src\main\java\org\apache\commons\lang3对应的结点d2,其目录名一致,且其子孙结点中含171个叶结点匹配对,计算<d1,d2>相似度为0.872,超出相似度阈值,将其加入匹配集。
然后根据匹配结果,获取T_last转化为T_current的最小编辑操作集合,并将树编辑操作分类为程序变更操作。经过计算,T_last转化为T_current,需经过204次修改操作,988次结点增加操作,135次结点删除操作,17次重命名操作。对应的树编辑操作均可分类为程序变更操作。
步骤4)依据度量数据的变更映射结果,对于每一个度量指标和变更操作,逐层计算变更操作的指标贡献度;
假设老版本的结点Nold演化至新版本的结点Nnew,对应变更操作记为Nold→Nnew(特别地,当Nold结点为NULL时,说明Nnew为新增的结点,而当Nnew结点为NULL时,说明Nold结点在演化的过程中已被删除),Nold的父结点为PNold,Nnew的父结点为PNnew,且PNold演化至PNnew,是由其子结点的变更引起的,记所有这些子结点的变更操作集合为S。贡献度C(Nold→Nnew)的计算公式的如下:
注:根结点变更的指标贡献度C(Nold→Nnew)=1;
其中metric_chg(Nold,Nnew)的含义是Nold演化Nnew至所引起的度量指标的变化数值,已知任一实体n度量指标计算函数为metric(n),metric_chg(Nold,Nnew)的计算公式为:
指标贡献度越大的变更操作对度量指标的影响程度越大。由于数据量极大,下表仅节选节选包org.apache.commons.lang3中贡献度较大且演化评估步骤涉及到的变更操作的贡献度计算结果,
表2变更操作的指标贡献度数据
步骤5)基于贡献度排序与筛选结果进行度量指标变化原因分析及后续演化需求确认,生成演化评估报告。
变更操作的指标贡献度越大,说明其对应的变更实体的演化过程对度量指标的影响程度越大。首先,基于贡献度对所有发生演化的变更实体进行排序与筛选。将每一层次的变更实体按照对应变更操作的贡献度从大到小的顺序进行排序,筛选出贡献度较大的数据。基于这些数据,开发者能够更容易地关注到哪些实体演化导致度量数据发生了较大幅度的变更。
在步骤4的表中显示的前两个目录层次变更操作的LOC指标贡献度C_LOC以及CC指标贡献度C_CC的和均超过0.5,也就是说,src\main\java\org\apache\commons\lang3和src\test\java\org\apache\commons\lang3两个目录下的变更操作是导致系统总体LOC和CC升高的主要因素。
进一步分析可知,src\main\java\org\apache\commons\lang3目录下的Conversion.java是3.2.0新添加的文件,其LOC值为1137,CC值为317,LOC指标贡献度为0.181,CC指标贡献度为0.177,相对于其它文件贡献度值较高;src\test\java\org\apache\commons\lang3目录下的ConversionTest.java是3.2.0新添加的文件,其LOC值为944,CC值为161,LOC指标贡献度为0.150,CC指标贡献度为0.135,相对于其它文件贡献度值较高。这两个文件是导致两个目录的LOC和CC指标贡献度过高的主要原因。同理,可进一步定位到LOC和CC度量指标变化的类层原因是Conversion.java文件下的Conversion类和ConversionTest.java文件下的ConversionTest类。方法层的指标贡献度较为平均,无异常大的情况。
通过分析耦合度指标贡献度C_CBE结果可知,C_CBE最大的变更操作为Update(src\main\java\org\apache\commons\lang3)操作结果较正常,说明此次演化无明显导致耦合度升高的修改。
根据度量演化原因定位结果可知,从3.1.0演化至3.2.0,添加了规模超过千行的超大类,导致度量结果异常。建议下一个版本对Conversion.java文件下的Conversion类和ConversionTest.java文件下的ConversionTest类进行拆分或删除无用代码,优化代码结构,确保度量指标的趋好性。
需要说明的是,上述实施例仅仅是本发明的较佳实施例,并没有用来限定本发明的保护范围,在上述基础上做出的等同替换或者替代均属于本发明的保护范围。
Claims (5)
1.一种基于多层次变更分析的软件演化评估系统及方法,其特征在于,所述评估系统包括代码解析模块、度量模块、变更检测模块、变更度量映射模块以及演化评估分析模块,所述代码解析模块将代码解析结果输入度量模块和变更检测模块,所述变更度量映射模块将不同抽象层次的变更检测模块结果和度量模块结果进行关联映射并计算贡献度,所述软件演化评估分析模块根据变更检测、度量结果以及变更度量映射的贡献度结果生成软件演化评估报告。
2.根据权利要求1所述的基于多层次变更分析的软件演化评估系统,其特征在于,所述代码解析模块解析程序源代码文件,获取源代码各个实体的基本属性,并构造具有多层次特性的程序分析树,其层次包括目录结构层、文件层、类层、方法层;
所述代码解析模块选取JDT(Eclipse Java Development Tools)作为Java源代码的语法解析器。
3.根据权利要求2所述的基于多层次变更分析的软件演化评估系统,其特征在于,所述度量模块的度量属性包括:代码规模LOC(Line Of Code)、圈复杂度CC(CyclomaticComplexity)、实体间耦合度CBE(Coupling between Entities);
从源代码文件解析结果中可获取如下度量所需数据:
TL:源代码实体的总代码行数;
CL:源代码实体中包含的注释行数;
BL:源代码实体中包含的空行数;
BN(m):方法m中包含的分支结点数;
I:调用该源代码实体的同层次实体数目;
O:源代码实体调用的同层次实体数目
N:源代码实体所属层次的实体数目(即父结点的所有子结点数目)
各度量指标的计算方式如下:
(1)代码规模LOC即为源代码中去除注释和无效空行的有效代码行数。
LOC=TL–CL–BL;
(2)方法级的圈复杂度即其对应的控制流图划分出的区域数目,其计算也可通过统计分支结点的数量加1进行计算;目录层、文件层、类层的圈复杂度通过下层圈复杂度叠加计算;方法m的圈复杂度计算公式如下:
CC(m)=BN(m)+1;
(3)实体间耦合度反映实体与其它实体交互的频繁程度,可以通过实体间依赖关系的出度和入度来计算;
CBE=(I+O)/N。
4.根据权利要求3所述的基于多层次变更分析的软件演化评估系统,其特征在于,所述变更检测模块具有多层次特性,其层次包括目录结构层、文件层、类层、函数层、语句层,不同层次的变更实体间存在包含关系;
所述变更检测模块采用Fluri的树匹配算法进行变更检测,其算法对两段Java代码进行差异性分析,获取类层、方法层以及语句层的代码变更;
基于树匹配的变更检测方法,其步骤包括:
(1)获取V_last和V_current对应的程序分析树T_last和T_current;
(2)构造T_last和T_current的匹配结点集合Smatch;
(3)根据匹配集Smatch,生成从程序分析树T1演进至T2的最小编辑操作集合Sedit;
(4)变更分类,即将Sedit中的树编辑操作映射为程序变更操作。
5.采用权利要求1-4任意一项软件演化评估系统的演化评估方法,其特征在于,所述方法包括以下步骤:
步骤1)解析程序相邻版本V_last和V_current的源代码文件,通过抽取不同抽象层次实体的元素信息和包含关系,构造程序分析树T_last和T_current;
步骤2)基于代码解析结果,根据权利要求3中所述的度量公式计算V_last和V_current不同抽象层次实体的度量指标数据,包括代码规模LOC、圈复杂度CC、实体间耦合度CBE;
步骤3)检测T_last和T_current的不同抽象层次的匹配集和变更集;
步骤4)依据度量数据的变更映射结果,对于每一个变更操作,逐层计算变更操作的指标贡献度;
假设老版本的结点Nold演化至新版本的结点Nnew,对应变更操作记为Nold→Nnew,Nold的父结点为PNold,Nnew的父结点为PNnew,且PNold演化至PNnew,是由其子结点的变更引起的,记所有这些子结点的变更操作集合为S。贡献度C(Nold→Nnew)的计算公式的如下:
注:根结点变更的指标贡献度C(Nold→Nnew)=1;
其中metric_chg(Nold,Nnew)的含义是Nold演化Nnew至所引起的度量指标的变化数值,已知任一实体n度量指标计算函数为metric(n),metric_chg(Nold,Nnew)的计算公式为:
步骤5)基于贡献度排序与筛选结果进行度量指标变化原因分析及后续演化需求确认,生成演化评估报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810221537.9A CN108509338A (zh) | 2018-03-17 | 2018-03-17 | 一种基于多层次变更分析的软件演化评估系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810221537.9A CN108509338A (zh) | 2018-03-17 | 2018-03-17 | 一种基于多层次变更分析的软件演化评估系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108509338A true CN108509338A (zh) | 2018-09-07 |
Family
ID=63377587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810221537.9A Pending CN108509338A (zh) | 2018-03-17 | 2018-03-17 | 一种基于多层次变更分析的软件演化评估系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108509338A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083514A (zh) * | 2019-03-19 | 2019-08-02 | 深圳壹账通智能科技有限公司 | 软件测试缺陷评估方法、装置、计算机设备及存储介质 |
CN113608770A (zh) * | 2021-08-26 | 2021-11-05 | 中国银行股份有限公司 | 一种基于虚拟节点的产品迭代方法及装置 |
CN115113921A (zh) * | 2022-08-29 | 2022-09-27 | 云账户技术(天津)有限公司 | 代码重构价值的评估方法、装置、电子设备及存储介质 |
CN115904980A (zh) * | 2022-11-25 | 2023-04-04 | 安徽工业大学 | 软件架构腐蚀修复成本预估方法、装置、设备和存储介质 |
CN115983719A (zh) * | 2023-03-16 | 2023-04-18 | 中国船舶集团有限公司第七一九研究所 | 一种软件综合质量评价模型的训练方法及系统 |
CN116756052A (zh) * | 2023-08-18 | 2023-09-15 | 建信金融科技有限责任公司 | 一种数据处理方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710304A (zh) * | 2009-11-27 | 2010-05-19 | 中国科学院软件研究所 | 一种软件过程实施质量评测方法 |
CN101963940A (zh) * | 2010-10-26 | 2011-02-02 | 合肥工业大学 | 面向软件演化的可信性动态评估方法 |
US20140096115A1 (en) * | 2012-09-26 | 2014-04-03 | International Business Machines Corporation | Method and apparatus for providing change-related information |
CN104461867A (zh) * | 2014-11-08 | 2015-03-25 | 南通大学 | 一种软件演化过程故障分析方法 |
CN105843614A (zh) * | 2016-03-22 | 2016-08-10 | 东南大学 | 一种面向软件演化的代码可兼容性评估方法 |
CN107239396A (zh) * | 2017-05-11 | 2017-10-10 | 东南大学 | 一种基于代码圈复杂度度量的软件演化评估方法 |
-
2018
- 2018-03-17 CN CN201810221537.9A patent/CN108509338A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710304A (zh) * | 2009-11-27 | 2010-05-19 | 中国科学院软件研究所 | 一种软件过程实施质量评测方法 |
CN101963940A (zh) * | 2010-10-26 | 2011-02-02 | 合肥工业大学 | 面向软件演化的可信性动态评估方法 |
US20140096115A1 (en) * | 2012-09-26 | 2014-04-03 | International Business Machines Corporation | Method and apparatus for providing change-related information |
CN104461867A (zh) * | 2014-11-08 | 2015-03-25 | 南通大学 | 一种软件演化过程故障分析方法 |
CN105843614A (zh) * | 2016-03-22 | 2016-08-10 | 东南大学 | 一种面向软件演化的代码可兼容性评估方法 |
CN107239396A (zh) * | 2017-05-11 | 2017-10-10 | 东南大学 | 一种基于代码圈复杂度度量的软件演化评估方法 |
Non-Patent Citations (2)
Title |
---|
姜璐: "一种改进的基于抽象语法树的软件演化分析技术研究", 《中国优秀硕士学位论文全文数据库》 * |
牛家浩,黄志球,张静,刘佳: "基于抽象语法树的软件度量工具的设计与实现", 《计算机应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110083514A (zh) * | 2019-03-19 | 2019-08-02 | 深圳壹账通智能科技有限公司 | 软件测试缺陷评估方法、装置、计算机设备及存储介质 |
CN113608770A (zh) * | 2021-08-26 | 2021-11-05 | 中国银行股份有限公司 | 一种基于虚拟节点的产品迭代方法及装置 |
CN115113921A (zh) * | 2022-08-29 | 2022-09-27 | 云账户技术(天津)有限公司 | 代码重构价值的评估方法、装置、电子设备及存储介质 |
CN115113921B (zh) * | 2022-08-29 | 2022-11-08 | 云账户技术(天津)有限公司 | 代码重构价值的评估方法、装置、电子设备及存储介质 |
CN115904980A (zh) * | 2022-11-25 | 2023-04-04 | 安徽工业大学 | 软件架构腐蚀修复成本预估方法、装置、设备和存储介质 |
CN115904980B (zh) * | 2022-11-25 | 2023-09-22 | 安徽工业大学 | 软件架构腐蚀修复成本预估方法、装置、设备和存储介质 |
CN115983719A (zh) * | 2023-03-16 | 2023-04-18 | 中国船舶集团有限公司第七一九研究所 | 一种软件综合质量评价模型的训练方法及系统 |
CN116756052A (zh) * | 2023-08-18 | 2023-09-15 | 建信金融科技有限责任公司 | 一种数据处理方法和装置 |
CN116756052B (zh) * | 2023-08-18 | 2023-11-14 | 建信金融科技有限责任公司 | 一种数据处理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108509338A (zh) | 一种基于多层次变更分析的软件演化评估系统及方法 | |
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
Kelter et al. | A generic difference algorithm for UML models | |
Kim et al. | Memories of bug fixes | |
Fluri et al. | Change distilling: Tree differencing for fine-grained source code change extraction | |
Roy | Detection and analysis of near-miss software clones | |
Roy et al. | NICAD: Accurate detection of near-miss intentional clones using flexible pretty-printing and code normalization | |
Gethers et al. | Integrated impact analysis for managing software changes | |
Kwiatkowska et al. | The PRISM benchmark suite | |
CA3060085A1 (en) | Method for determining defects and vulnerabilities in software code | |
CN108717470A (zh) | 一种具有高准确度的代码片段推荐方法 | |
Zanjani et al. | Impact analysis of change requests on source code based on interaction and commit histories | |
CN105159715A (zh) | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 | |
Pan et al. | Bug classification using program slicing metrics | |
Kagdi et al. | Who can help me with this change request? | |
CN107066384A (zh) | 基于Halstead复杂度度量的软件演化评估方法 | |
Bulychev et al. | Duplicate code detection using anti-unification | |
CN106843840A (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
Nguyen et al. | Filtering noise in mixed-purpose fixing commits to improve defect prediction and localization | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
Van Den Brink et al. | Quality assessment for embedded SQL | |
US11662998B2 (en) | Detecting duplicated code patterns in visual programming language code instances | |
Karus et al. | Code churn estimation using organisational and code metrics: An experimental comparison | |
Rathee et al. | Software remodularization by estimating structural and conceptual relations among classes and using hierarchical clustering | |
CN116301795B (zh) | 一种用于页面可视化配置及代码编写的开发平台 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180907 |
|
RJ01 | Rejection of invention patent application after publication |