一种图编辑距离的软件体系结构变化性度量方法及应用研究
2018-03-27钟林辉
钟林辉,夏 鲸,彭 云,谢 冰
1(江西师范大学 计算机信息工程学院,南昌 330022) 2(北京大学 软件工程研究所,北京 100008)
1 引 言
软件体系结构作为一类重要的软件制品,其变化会对软件的开发和维护产生较大的影响[1].通过比较不同版本软件体系结构的差异性,不仅可以判断软件体系结构变化是否与软件需求一致,而且可以度量、分析和预测软件演化的趋势.然而,目前已有的软件体系结构变化性度量方法(例如MoJoFM[2]和a2a[3])只考虑经过划分得到的“簇”中软件实体的变化,未考虑“簇”之间关系的变化;而有的方法(例如基于图核(Graph Kernel)理论的方法[4],基于图编辑或者树编辑距离的软件差异性比较方法[5,6])虽然考虑了软件实体之间的结构特征,但实际上针对的是面向对象模型或软件体系结构的实现,而非软件体系结构的设计.
因此,为了克服目前软件体系结构变化性度量方法的不足,本文在软件体系结构设计层次,既考虑构件本身的变化,也考虑软件体系结构在结构上的变化,提出了以软件体系结构为中心的软件演化分析框架,以及针对软件体系结构规约、基于图编辑距离的变化性度量方法,并基于上述方法对若干开源软件体系结构的演化历史进行了度量分析.本文组织安排如下:首先是相关研究的介绍,随后是以软件体系结构为中心的构件化软件演化分析框架,在第4及第5节分别介绍了软件体系结构变化性度量具体方案,以及在开源软件体系结构演化分析上的应用;第6节是工具支持,最后是结束语.
2 相关研究
本文相关研究涉及到跨版本的软件变化性研究,主要包括变化性建模以及变化性度量.
2.1 变化性建模
变化性建模是采用静态或者动态的方法将不同软件版本的差异性用逻辑、规则和契约等形式加以描述.
①采用静态方法:文献[7]提出了用谓词逻辑和本体表示程序不同版本抽象语法树的变化.文献[8]采用符号执行和代码总结的策略,能自动生成程序的差异性描述文档.文献[9]提出了用变化规则表示不同版本之间结构变化的策略.
②采用动态方法:文献[10]提出了变化契约的概念以及推理框架,通过捕获程序在运行时刻方法调用时进入、退出和异常等情况下的数据,进而归纳出变化契约.另外,国内研究者对软件的变化也进行了研究,比较典型的是文献[29]中提出了一种结合关键字检索和启发式规则,实现多层次演化信息之间追踪关系逆向的方法;以及文献[11]通过对代码变化进行分组和聚类以发现变化的轨迹模式.
2.2 变化性度量
本文的变化性度量包括面向对象的程序或模型的变化性度量和软件体系结构的变化性度量:
①面向对象的程序或模型的变化性度量:例如,JDiff工具将程序抽象为扩展的控制流图,通过提出的差异性算法比较不同版本在方法上的差异性[6],UMLDiff工具通过计算不同UML图之间的编辑距离代价判断面向对象模型的差异性[5].文献[12]通过计算不同软件版本所包含的类在大小、内聚和耦合等属性上数值大小变化,判断面向对象软件的演化稳定性.不同于计算语法树或者模型之间的变换来度量变化,在文献[13,14]中提出的语义差异性操作能识别不同类图、活动图等在语义上的差别.在文献[15-17]中则利用Kolmogorov复杂性的信息度量概念,计算不同软件版本的差异性.文献[30]提出采用层次分析法,试图构建功能模块、语法和文本等变化同演化率之间的函数关系.文献[18]通过度量面向对象程序在包、结构簇、语义簇三个视图上的差异性,判断软件设计质量是否存在偏差.文献[4]将面向对象风格的软件体系结构表示为标签图,基于随机行走算法获得的路径作为软件体系结构的特征向量并利用图核理论度量软件的差异性.
②软件体系结构的变化性度量:例如文献[19]基于软件体系结构视图复杂性度量和耦合性度量,分析了软件变化对软件体系结构的影响.文献[31]为了研究构件变化所引发的波动效应,提出了利用构件组合运算度量软件体系结构可演化性的方法.MoJoFM[2]将软件划分为若干簇,通过计算簇内节点的移动和簇的合并操作判断两个不同划分的变化程度.文献[20]将软件体系结构演化过程分解为若干原子操作,通过计算原子操作在多个视图上的质量属性的变化达到分析软件演化趋势的目的.文献[21]提出了体系结构债务(architectural debts)的概念,用以定量分析体系结构层次的文件变化同软件维护代价之间的关系.文献[22]则研究了跨体系结构模块和体系结构模块内部的协同变化,对软件质量的不同影响.有的研究采用多种视图相结合的方法研究软件体系结构的变化性度量,例如文献[3,23]提出了一种多层次软件体系结构度量方案,其中度量公式cvg反应软件体系结构在构件实现层次的变化,度量公式a2a反应软件体系结构在系统层次的变化.但是,这些方法建立在MoJoFM度量的基础上,没有考虑到节点之间关系,而仅仅考虑簇的换名和增加,节点的换名、增加和移动等5个操作,导致计算结果不够准确.
3 以软件体系结构为中心的软件演化分析框架
为了有效地支持构件化软件的开发和演化,在我们的早期研究中提出了扩充构件描述语言(xCDL)支持基于构件的系统组装与演化的策略[32],不仅可以有效的支持基于构件的系统构造定义,而且可以支持系统的演化以及系统的部署.其中的关键技术包括扩充了CDL以支持对构件及软件体系结构本身的演化的表示和跟踪,通过基于构件的软件配置管理模型CBSCM[33],实现对构件化软件演化数据的存储.基于上述思想和关键技术,本文进一步提出了以软件体系结构为中心的构件化软件演化分析框架,如图1所示.
图1 以SA为中心的软件演化分析框架Fig.1 Framework of architecture-centric software evolution analysis
整个框架分为3个部分,包括以软件体系结构为中心的正向工程、以软件体系结构为中心的逆向工程、以及软件演化分析过程.其中,以软件体系结构为中心的正向工程所产生的软件制品例如每个版本的软件体系结构描述、软件体系结构的实现等均存储在基于构件的软件配置管理系统中;而以软件体系结构为中心的逆向工程通过现有的逆向工程工具,对遗留系统的演化历史进行软件体系结构层次的重建,构造出带版本信息的软件体系结构描述,并将其存储在基于构件的软件配置管理系统中.软件演化分析则通过提取基于构件的软件配置管理系统中存储的带版本信息的软件体系结构描述,度量相邻版本之间的变化性,并实现对不同软件系统的演化变化性进行度量.
4 软件体系结构变化性度量
4.1 软件体系结构的属性图
软件体系结构可以用多种方法加以描述,例如软件体系结构描述语言或者图.为了实现基于图的软件体系结构变化性的度量,本文通过对软件体系结构描述语言进行解析,构造出其对应的属性图,属性图中刻画了软件体系结构元素之间的关系,相关定义如下:
定义1.软件体系结构属性图:G=
定义2.节点集合V:表示软件体系结构中的构件(包括复合构件与原子构件)、构件实例、每个构件对外提供的方法及实例、对外所需的方法及实例,以及版本信息例如版本号;其中,方法的实例是为了区分具有相同类型的不同构件实例中的方法,例如图2(b)中的节点S2是方法Semantize的实例.
定义3.边的集合E:表示节点之间的关系,根据构件、方法、版本之间的关系,可以区分为以下几种关系:方法之间的连接关系、方法之间的映射关系、复合构件和原子构件之间的组成关系,构件与版本之间的版本关系,以及构件与其实例之间的实例关系,构件和方法之间的对外所需的功能和对外提供的功能.
定义4.节点的标签函数LV:LV定义为LV:V→String,即节点到字符串的映射.字符串可以表示构件名称、方法名称、版本号等.
定义5.边的标签函数LE:将上述边的类型通过函数映射到具体的字符串,即:LE:E→{"connectTo","mapTo","composeOf","versionOf","instanceOf","requires","provides"}其中connectTo表示构件实例之间方法的连接关系,mapTo表示复合构件与成员构件之间方法的映射关系,composeOf表示复合构件与成员构件的包含关系,versionOf表示构件与版本的版本关系,instanceOf表示构件与构件实例的实例关系,requires和provides表示构件与方法需要和提供的关系.
例如,考虑一个编译系统的概念结构如图2(a)所示,相应的用xCDL描述的软件体系结构如下:
component Parser < Version = 1.0 > is
provides:
function Initialize();
function FileName() return String;
requires:
function Semantize(Tree);
function Generate(Tree);
end Parser;
component Semanticizer < Version = 1.2 > is
provides:
function Semantize(Tree);
function Incremental_Semantize(Context:Tree;
Addition:Tree);
requires:
function FileName() return String;
end Semanticizer;
component Code_Generator < Version = 1.2 > is
provides:
function Generate(Tree);
requires:
function Initialize_Parser();
function Semantize(Context:Tree;Addition:Tree);
end Code_Generator;
component Complier < Version=2.1>
PreLink:Complier < Version=1.8 >
Reference:
Parser,Semanticizer,Code_Generator;
Instance:
P:Parser < Version = 1.0 >;
S:Semanticizer < Version = 1.2 >;
G:Code_Generator < Version = 1.2 >
Connection:
P.Semantize to S.Semantize;
P.Generate to G.Generate;
S.FileName to P.FileName;
G.Initialize_Parser to P.Initialize;
G.Semantize to S.Incremental_Semantize;
End Complier
其经过解析后得到的软件体系结构属性图,如图2(b)所示.
图2 例子:编译系统概念图及其体系结构的属性图表示Fig.2 An example:compiler and its attribute-graph presentation
4.2 基于图编辑距离的变化性度量
基于上述软件体系结构属性图,本文采用图编辑距离的方法度量软件体系结构的变化性.图的编辑距离指的是使用节点的替换、增加和剔除操作,以及边的替换、增加和剔除操作,将图g1转换为图g2所需要的最小代价[24,25].存在多种计算图编辑距离的算法,其中二分图的编辑距离算法将图的编辑距离看作是二次分配问题,能有效计算图的编辑距离[26].
为了使用二分图编辑距离算法,需要定义节点和边关于插入、删除及替换操作的编辑代价,同时需要满足图编辑距离的三角不等式关系.在本文软件体系结构属性图中,节点的标签对应的是软件体系结构描述语言中元素的标识符,例如构件的名称、接口的名称、版本号(以字符串形式表示,例如"2.31")等;边的标签对应的是枚举类型.因此,节点之间和边之间的编辑代价定义如下:
定义6.节点之间的编辑代价Cij:Cij区分为替换代价、删除代价以及插入代价3种.即c(Vi→Vj)=stringEditDistance(LV(Vi),LV(Vj));c(Vi→ε)=c(ε→Vi)=strlen(Vi),其中,LV(Vi),LV(Vj)分别表示节点Vi和Vj的标签,即节点的替换操作代价c(Vi→Vj)为字符串LV(Vi)和LV(Vj)之间的编辑距离.插入操作代价c(ε→Vi)和删除编辑代价c(Vi→ε)为字符串LV(Vi)的长度.一般,取c(Vi→Vj) =min{(c(Vi→ε) +c(ε→Vj),c(Vi→Vj)}可以满足图编辑距离所需的三角不等式关系.显然,在以字符串的编辑距离作为编辑代价的前提下,可以证明c(Vi→Vj) =min{c(Vi→ε))+c(ε→Vj),c(Vi→Vj)}=c(Vj→Vi).
定义7.边之间的编辑代价:c(Ei→Ej) =if(LE(Ei)=LE(Ej)):0:1;c(Ei→ε)=c(ε→Ei)=1,即若Ei的标签LE(Ei)与Ej的标签LE(Ej)相同,则替换代价为0,否则为1.边的插入和删除操作代价定义为1.显然边的编辑代价亦满足三角不等式关系.
(1)
图3 两个版本的编译器体系结构(用属性图表示)Fig.3 Two compiler versions represented by attribute-graph
k1≤|V(gi-1)|,0 (2) 例如,考虑如下编译系统的演化历史如图3所示. 节点和边的编辑代价矩阵分别如下: 考虑边的关系,则新的代价矩阵如下,计算可得编辑路径为:p(1,2,3,7,8,9)={(Complier→Complier),(C1→C2),(1.0→1.2),(ε→2.1) ,(ε→Parser),(ε→P2) },对应的编辑代价为C*(p(1,2,3,7,8,9))=0+2+1+4+7+5=19. 此时,因此该编译器变化性度量值为编辑代价19. 为了对开源软件体系结构进行演化分析,本文在软件体系结构变化性度量EP(S,i)的基础上定义了2个度量指标LEP和EEP,其中: ①LEP衡量软件系统的近期变化,反映的是系统总的变化.该度量从系统全局的角度来分析,重点关注最新版本的变化,对每个版本的EP增加权重函数2i-maxRank(其中maxRank为参与度量最新版本对应的序列号),统计系统从初始版本生成最新版本所有的版本属性变化的加权总和,即系统S从第i个版本到第j个版本的EP加权求和,定义如公式(3): (3) ②EEP主要衡量软件系统的早期变化,同样反映的是系统总的变化.该度量从系统全局的角度分析,重点关注较早版本的变化,对每个版本的EP增加权重函数2minRank-i(其中minRank为参与度量早期版本对应的序列号),统计系统从初始版本到最新版本所有的版本属性变化的加权总和,即系统S从第i个版本到第j个版本的EP的加权求和,定义如公式(4): (4) 实验过程下载了4个开源软件系统的源代码以及第三方提供的实验数据[3]作为本文的实验基础,这四个系统分别为cassandra,hbase,hive,openjpa,其中cassandra和hive这两个系统各使用了8个版本,hbase和openjpa这两个系统各使用了12个版本,其中版本标签是github中设定的版本号,编制的版本号是按照提取的开源系统版本重新按序编排(从1开始).实验中首先计算系统每个版本的EP值,系统的总LEP值/EEP值;同时,为了度量每个系统内部的变化过程,分别计算每个系统的前i个版本的LEP值/EEP值,即LEP(1,i)和EEP(1,i).具体计算结果见表1-表4. 表1 cassandra变化数据Table 1 cassandra′s change data 表2 hbase变化数据Table 2 hbase′s change data 表3 hive变化数据Table 3 hive′s change data 表4 openjpa变化数据Table 4 openjpa′s change data 根据表1到表4中的EP值分别画出了各个系统演化的EP值的折线图(如图4),根据总LEP/EEP值画出了各个系统整体LEP/EEP值柱状图(如图5). 图4 四个开源系统的EP比较Fig.4 Comparison of EP among four open source systems 通过对图4和图5的分析,即对4个软件系统之间的变化进行分析,可以得出以下结论: 图4中每条折线的第一个点值的大小反应了该软件系统初始版本的体系结构的大小,从图4可以看出,casscandra,hbase,hive这三个系统的初始版本的体系结构相对来说比较小,其体系结构演化EP值都在10000以内,而openjpa的初始版本的体系结构相对来说要大得多,其体系结构演化EP值超过了35000.此外,cassandra中EP值大于第一个版本的EP值的一半的版本有2个,占版本总个数的25%;对应于hbase中有8个,占总个数的75%;hive中有3个,占总个数的37.5%;openjpa中有0个,占总个数的0%.从这个数据可以看出,这四个系统中,hbase变化最大,openjpa变化最小,cassandra和hive变化程度比较接近. 按照LEP和 EEP的定义,值越大表示软件变化越大.从图5中可以看出,hbase的LEP值最大,表示该系统的近期变化在这四个系统中是最大的;openjpa系统的LEP值最小,EEP值最大,表示该系统的近期变化在这四个系统中是最小的,早期变化是最大的.别外,cassandra和hive这两个系统的LEP值和EEP值都比较接近,说明这两个系统的近期和早期变化程度较为接近. 图5 四个开源系统的LEP/EEP比较Fig.5 Comparison of LEP/EEP among four open source systems 根据表1到表4中的每个系统的EP值画出对应的EP值折线和趋势线图(见图6). 按照LEP和 EEP的定义,值越大表示软件变化越大.从图5中可以看出,hbase的LEP值最大,表示该系统的近期变化在这四个系统中是最大的;openjpa系统的LEP值最小,EEP值最大,表示该系统的近期变化在这四个系统中是最小的,早期变化是最大的.别外,cassandra和hive这两个系统的LEP值和EEP值都比较接近,说明这两个系统的近期和早期变化程度较为接近. 根据表1到表4中的每个系统的EP值画出对应的EP值折线和趋势线图(见图6). 图6 四个开源软件的EP折线及趋势线图Fig 6 Line and trend chart of four open source system′s EP 对比分析这四个系统的EP值折线和趋势线,可以得出以下结论:cassandra,hive,openjpa这三个系统的趋势线呈下降的趋势,这说明这三个系统在演化过程中的变化越来越小,从趋势线下降的程度分析,这三个系统的趋势线下降的程度依次变大,这说明openjpa的变化最为稳定;而hbase这个系统的演化趋势线呈上升的趋势,说明该系统在演化的过程中变化程度越来越大. 小结:通过从EP、LEP及EEP三个方面对以上四个系统之间的演化分析可知,这四个系统中,hbase不仅变化程度是最大的,而且变化在持续增大;openjpa变化程度是最小的,且是稳定变化;cassandra和hive这两个系统相对于hbase和openjpa,变化程度较为不稳定. 根据表1到表4中的前i个版本的LEP值/EEP值,画出系统各自对应的LEP/EEP折线图(见图7). 图7 四个开源软件前i个版本LEP/EEP折线图Fig.7 Line chart of the first i versions of four open source system′s LEP/EEP 通过对前i个版本的软件系统LEP/EEP值的计算,可以分析版本增加对系统早期和近期变化程度的影响.LEP值变大说明近期版本的变化较大,反之;EEP变大说明该系统早期版本变化较大,反之.通过对图7的分析,可以得出以下结论: 从图7(a)可知,cassandra系统的LEP值呈上下波动趋势,说明该系统的演化处于不稳定趋势,但是LEP(1,4)值和LEP(1,6)的值突然增大,说明系统第4个版本和第6个版本变化较大.cassandra的EEP(1,1)到EEP(1,6)明显变大,随后变化不明显,说明该系统演化到第6个版本的时候早期变化较大,此后早期变化比较稳定. 从图7(b)可知,hbase系统的LEP值呈增长趋势,说明该系统的变化处于增长的趋势,但是LEP(1,3),LEP(1,6),LEP(1,8),LEP(1,9)和LEP(1,11)的值突然增大,说明这个系统的第3、6、8、9、11个版本变化较大;hbase的EEP(1,1)到EEP(1,7)值变化明显变大,特别是EEP(1,3)突然增大,随后的EEP值变化不明显,说明该系统演化到第3个版本的时候早期变化很大,从第4个版本到第7个版本的早期变化较大,此后早期变化比较稳定. 从图7(c)可知,hive系统的LEP值呈上下波动趋势,说明该系统的演化处于不稳定状态.但是LEP(1,2),LEP(1,5)和LEP(1,7)突然增大,说明该系统的第2、5、7个版本的变化较大;hive的EEP(1,2)突然增大,随后EEP(1,3)到EEP(1,5)值明显变大,然后变化不明显,说明该系统演化到第2个版本的时候早期变化很大,从第3个版本到第5个版本的演化过程中,早期变化较大,随后早期变化比较稳定. 从图7(d)可知,openjpa系统的LEP值呈下降的趋势,说明该系统的变化逐渐减少,只是第7个版本上出现较大变化.openjpa的EEP(1,1)到EEP(1,3)变化较为明显,随后变化不明显,说明该系统发展到第3个版本的时候早期变化较为明显,随后早期变化比较稳定. 根据对表1到表4中每个系统EP值的分析,可以得出如下结论:cassandra的这8个版本一共经历了3个变化减小和2个变化增大的过程;hbase的这12个版本一共经历了5个变化减小和4个变化增大的过程;hive的这8个版本一共经历了3个变化减小和3个变化增大的过程;openjpa的这12个版本一共经历了4个变化减小和4个变化增大的过程. 小结:通过从EP、LEP和EEP对以上四个开源系统进行演化度量可知,这四个系统中,cassandra的演化过程是不稳定变化的,在第4和第6个版本时变化大幅度增大;hbase的演化过程是变化持续增大的,其中在第3和第11个版本时变化大幅度增大;hive的演化过程是不稳定变化的,在第2和第7个版本时变化大幅度变大;openjpa的演化过程是稳定变化的,除了在第7个版本处有个小幅度的变化增大之外,其他版本的变化程度逐渐变小. 为了支持构件化软件的演化分析,本文开发了相应的支持工具,包括软件体系结构规约重建、xCDL图的属性图表示、编辑距离的计算、变化性度量等主要功能.其中, ①软件体系结构重建功能主要负责从源代码恢复用xCDL表示的软件体系结构.这部分功能主要借助现有的软件体系结构逆向工具例如ACDC[28]方法,或者借助已有的基于ACDC恢复的数据.在恢复时不仅是产生簇(构件),而且借助源程序构造体系结构中构件之间连接关系,以及版本信息. 图8 系统结构图Fig.8 System structure ②xCDL的属性图表示:通过解析xCDL或者在逆向生成xCDL时,构造软件体系结构的图结构. ③编辑距离的计算:通过分析属性图中的节点和边关系,构造节点的编辑代价矩阵和边的编辑代价矩阵,利用二分图匹配算法计算图之间的编辑距离. ④变化性度量:给定不同系统在软件演化过程中的一组软件体系结构规约,分别计算其相邻版本的软件体系结构编辑距离;并基于度量指标LEP和EEP比较软件内部或者不同系统之间的变化性. 对软件体系结构变化性进行度量,能够帮助软件开发人员在较高层次理解软件不同版本之间的差异性和理解系统内部或者系统之间的变化程度.为了克服传统软件体系结构变化性度量方法只考虑软件实体元素变化的不足,本文将软件体系结构映射为属性图,通过度量不同图之间结构上的差异性,达到实现软件体系结构差异性比较的目的.同时,基于上述方法,以4个开源软件作为实验对象,从软件版本变化、软件最新变化和软件早期变化等角度分别对4个系统内部变化程度,以及系统之间变化的程度进行了分析.实验效果表明,通过以上方法,可以分析开源软件在软件体系结构层次上的变化程度及其稳定性. [1] Medvidovic N,Taylor R N.Software architecture:foundations,theory,and practice[C].In:Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering,ACM,2010:471-472. [2] Wen Z,Tzerpos V.An effectiveness measure for software clustering algorithms[C].In:Proceedings of the 12th IEEE International Workshop on Program Comprehension,IEEE,2004:194-203. [3] Le D M,Behnamghader P,Garcia J,et al.An empirical study of architectural change in open-source software systems[C].In:Proceedings of the 12th Working Conference on Mining Software Repositories,IEEE Press,2015:235-245. [4] Nakamura T,Basili V R.Metrics of software architecture changes based on structural distance[C].In:The 11th IEEE International Symposium on Software Metrics,IEEE,2005:8-17. [5] Xing Z,Stroulia E.UMLDiff:an algorithm for object-oriented design differencing[C].In:Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering,ACM,2005:54-65. [6] Apiwattanapong T,Orso A,Harrold M J.JDiff:A differencing technique and tool for object-oriented programs [J].Automated Software Engineering,2007,14(1):3-36. [7] Hashimoto M,Mori A,Izumida T.A comprehensive and scalable method for analyzing fine-grained source code change patterns[C].In:The 22nd International Conference on Software Analysis,Evolution and Reengineering (SANER),IEEE,2015:351-360. [8] Buse R P L,Weimer W R.Automatically documenting program changes[C].In:Proceedings of the IEEE/ACM International Conference on Automated Software Engineering,ACM,2010:33-42. [9] Kim M,Notkin D,Grossman D.Automatic inference of structural changes for matching across program versions[C].In:Proceedings of the 29th International Conference on Software Engineering,2007:333-343. [10] Le T D B,Yi J,Lo D,et al.Dynamic inference of change contracts[C].In:The International Conference on Software Maintenance and Evolution (ICSME),IEEE,2014:451-455. [11] Jiang Q,Peng X,Wang H,et al.Summarizing evolutionary trajectory by grouping and aggregating relevant code changes[C].In:The 22nd International Conference on Software Analysis,Evolution,and Reengineering (SANER),IEEE,2015:361-370. [12] Almousa H,Alenezi M.Measuring software architecture stability evolution in object-oriented open source systems [J].Journal of Engineering and Applied Sciences,2017,12(2):353-362. [13] Maoz,Shahar,Jan Oliver Ringert,et al.CDDiff:semantic differencing for class diagrams[C].In:The European Conference on Object-Oriented Programming,Springer Berlin Heidelberg,2011:230-254. [14] Maoz S,Ringert J O,Rumpe B.ADDiff:semantic differencing for activity diagrams[C].In:Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering,ACM,2011:179-189. [15] Arbuckle T.Studying software evolution using artefacts′shared information content [J].Science of Computer Programming,2011,76(12):1078-1097. [16] Hayase Y,Kanda T,Ishio T.Estimating product evolution graph using Kolmogorov complexity[C].In:Proceedings of the 14th International Workshop on Principles of Software Evolution,ACM,2015:66-72. [17] Threm D,Yu L,Ramaswamy S,et al.Using normalized compression distance to measure the evolutionary stability of software systems[C].In:The 26th International Symposium on Software Reliability Engineering (ISSRE),IEEE,2015:112-120. [18] Zhu T,Wu Y,Peng X,et al.Monitoring software quality evolution by analyzing deviation trends of modularity views[C].In:The 18th Working Conference on Reverse Engineering,IEEE,2011:229-238. [19] Durisic D,Nilsson M,Staron M,et al.Measuring the impact of changes to the complexity and coupling properties of automotive software systems[J].Journal of Systems and Software,2013,86(5):1275-1293. [20] Li B,Liao L,Si J.A technique to evaluate software evolution based on architecture metric[C].In:The 14th International Conference on Software Engineering Research,Management and Applications (SERA),IEEE,2016:1-8. [21] Xiao L,Cai Y,Kazman R,et al.Identifying and quantifying architectural debt[C].In:Proceedings of the 38th International Conference on Software Engineering,ACM,2016:488-498. [22] Kouroshfar E,Mirakhorli M,Bagheri H,et al.A study on the role of software architecture in the evolution and quality of software[C].In:Proceedings of the 12th Working Conference on Mining Software Repositories,IEEE Press,2015:246-257. [23] Behnamghader P,Le D M,Garcia J,et al.A large-scale study of architectural evolution in open-source software systems [J].Empirical Software Engineering,2017,22(3):1146-1193. [24] Bunke H,Allermann G.Inexact graph matching for structural pattern recognition [J].Pattern Recognition Letters,1983,1(4):245-253. [25] Sanfeliu A,Fu K S.A distance measure between attributed relational graphs for pattern recognition [J].IEEE Transactions on Systems,Man,and Cybernetics,1983,13(3):353-362. [26] Riesen K,Neuhaus M,Bunke H.Bipartite graph matching for computing the edit distance of graphs [J].Graph-Based Representations in Pattern Recognition,2007,(4538):1-12. [27] Riesen K,Bunke H.Approximate graph edit distance computation by means of bipartite graph matching [J].Image and Vision Computing,2009,27(7):950-959. [28] Tzerpos V,Holt R C.ACDC:an algorithm for comprehension-driven clustering[C].In:The 7th Working Conference on Reverse Engineering,IEEE,2000:258-267. [29]Wang Jin-shui,Ai Wei, Peng Xin, et al.Recovering traceability links among multi-level software evolution information[J].Computer Science, 2012,39(7):135-139. [30]Li Jun-pu,Wang Jian-xin, Mo Qiao-chu.Software-evolution analysis model based on AHP[J].Computer Engineering and Design,2015,36(9):2416-2421. [31]Huang Wan-gen, Chen Song-qiao.Measuring software architecture evolution based on component combination operations[J].Computer Science,2007,34(9):245-261. [32]Zhong Lin-hui,Xie Bing,Shao Wei-zhong.Supporting component-based software development by extending the CDL with software configuration information[J].Journal of Computer Research and Development,2002,39(10):1361-1365. [33] Zhang Lu,Xie Bing, Mei Hong,et al.Study of component-based software configuration management technologies[J].Acta Electronica Sinica,2001,29(2):266-268. 附中文参考文献: [29] 王金水,艾 伟,彭 鑫,等.多层次的软件演化追踪关系逆向恢复[J].计算机科学,2012,39(7):135-139. [30] 李俊普,王建新,莫翘楚.基于AHP的软件演化分析模型[J].计算机工程与设计,2015,36(9):2416-2421. [31] 黄万艮,陈松乔.基于构件组合运算的SA可演化性度量[J].计算机科学,2007,34(9):245-261. [32] 钟林辉,谢 冰,邵维忠.扩充CDL支持基于构件的系统组装与演化[J].计算机研究与发展,2002,39(10):1361-1365. [33] 张 路,谢 冰,梅 宏,等.基于构件的软件配置管理技术研究[J].电子学报,2001,29(2):266-268.5 应用:开源软件体系结构演化分析
5.1 演化度量
5.2 系统间演化度量分析
5.3 系统内部演化度量分析
6 工具支持
7 结束语