1.一种基于演化切片的演化影响集预测方法,其特征在于,包括如下步骤:
(1)识别演化元素;
(2)生成演化切片准则;
(3)构建演化数据依赖图;
(4)构建演化控制依赖图;
(5)构建演化切片;
(6)以步骤(5)中的演化切片作为预测演化影响集,度量其有效性;
所述步骤(1)~(5)具体描述如下:
(1)识别源程序P的演化程序PE中演化元素及其类型ctC、ctA、ctD,其中,ctC表示对P中元素的修改,ctD表示对P中元素的删除,ctA表示在P中增加了元素;
(2)基于源程序P和演化程序PE,生成演化切片准则ESC;
(3)基于源程序P和演化程序PE,构建演化数据依赖关系,根据所述的演化数据依赖关系构建演化数据依赖图,其中,图结点表示演化数据元素,边表示结点间存在数据依赖关系;
(4)基于源程序P和演化程序PE,构建演化控制依赖关系,根据所述的演化控制依赖关系构建演化控制依赖图,其中,图结点表示演化控制元素,边表示结点间存在控制依赖关系;
(5)基于步骤(2)中的演化切片准则、步骤(3)中演化数据依赖图和步骤(4)中的演化控制依赖图,构建演化切片;
(6)以步骤(5)中的演化切片作为预测演化影响集,度量其有效性;
其中,所述步骤(1)中使用两步比较法识别源程序P的演化程序PE中演化元素及其类型ctC、ctA、ctD,设定源程序P的良性演化为不宜变动源程序P中50%以上的代码,否则视为恶性演化,演化影响预测终止,具体步骤如下:(1-1)自顶向下遍历源程序P及其演化程序PE,初始时P.node指向P中第一条语句,PE.node指向PE中第一条语句;
(1-2)若P.node==PE.node,则P.node,PE.node分别指向下一条语句,即P.node=P.node->next,PE.node=PE.node->next,转(1-2),否则转(1-3);
(1-3)自顶向下匹配P.node结点和PE.node的后继结点PE.node1,若找到匹配结点,则设定演化类型为ctA,演化元素为PE.node1与PE.node之间部分,演化规模为|PE.node1-PE.node|,转(1-6),否则转(1-4);
(1-4)自顶向下匹配P.node的后继结点P.node1和PE.node的后继结点PE.node1,若找到匹配结点,则设定演化类型为ctC,演化元素为P.node1与P.node之间部分,演化后元素为PE.node1与PE.node之间部分,演化规模为|P.node1-P.node|,转(1-6),否则转(1-5);
(1-5)自顶向下匹配P.node的后继结点P.node1和PE.node结点,若找到匹配结点,则设定演化类型为ctD,演化元素为P.node1与P.node之间部分,演化后元素为P.node1与P.node之间部分,演化规模为|P.node1-P.node|,转(1-6);
(1-6)若未跳转过(1-3)、(1-4)、(1-5),交换(1-3),(1-4),(1-5)步骤中P和PE,ctA和ctC,执行(1-3),(1-4),(1-5),记录下演化类型Etype,演化规模Esize,演化元素集E;
(1-7)从初次执行(1-3)、(1-4)、(1-5)所得演化类型与Etype中选取演化规模小的演化类型作为最终的演化类型,并将相应的演化元素作为最终的识别元素。
2.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(2)中生成的演化切片准则ESC是一个三元组
3.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(3)中,演化数据依赖关系的定义如下:令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中eck(k=1,…p)、edl(l=1,…q)、eas(s=1,…r)分别表示演化后修改的元素、演化中删除的元素和演化后新增的元素,其修改类型依次为ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分别为ec1’,ec2’…,ecp’,则:演化元素e1演化数据依赖于e2,当且仅当:a、存在v∈USE(e1)∩DEF(e2),且e2可达e1,任意e’∈PATH(e2,e1), b、若e2∈{ec1,ec2,…,ecp},v∈USE(e1)∩DEF(e2’),且e2’可达e1,任意e’∈PATH(e2’,e1), 记作:其中,e1,e2,e2’,e’为演化元素。
4.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(3)中,演化数据依赖图的构造步骤如下:(3-1)初始时,演化元素集E={e1,e2,…,em},演化数据依赖结点集合EDNode t={e1,e2,…,em},演化数据依赖边集合EDEdge=Φ并创建源程序P的代码分析树ASTree;
(3-2)对于每个E中元素,如果其演化类型为ctC或ctD,定位ei在ASTree相应演化前结点B(ei),对每个ASTree上B(ei)可达结点ej,如果 则EDNode=EDNode∪{ei,ej},EDEdge=EDEdge∪{
(3-3)对于每个E中元素,如果其演化类型为ctC或ctA,定位ei在ASTree相应结点,对每个ASTree上ei可达结点ej,如果 则EDNode=EDNode∪{ei,ej},EDEdge=EDEdge∪{
5.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(4)中,演化控制依赖关系的定义如下:令演化元素集合E={ec1,ec2,…,ecp}∪{ed1,ed2,…,edq}∪{ea1,ea2,…,ear},其中eck(k=1,…p)、edl(l=1,…q)、eas(s=1,…r)分别表示演化后修改的元素、演化中删除的元素和演化后新增的元素,其修改类型依次为ctC、ctD、ctA,且ec1,ec2,…,ecp演化前的元素分别为ec1’,ec2’…,ecp’,则:演化元素e1演化控制依赖于e2,当且仅当:a、e2为谓词结点,存在PATH(e2,e1),任意e’∈PATH(e2,e1),e1∈MUSTPASS(e’);b、若e2∈{ec1,ec2,…,ecp},e2’为谓词结点,存在PATH(e2’,e1), 任意e’∈PATH(e2’,e1),e1∈MUSTPASS(e’),记作: 其中,e1,e2,e2’,e’为演化元素。
6.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(4)中,演化元素结点e的演化控制依赖图的步骤如下:(4-1)初始时,演化元素结点为e,演化分析树为ASTree,演化控制依赖图G为
(4-2)如果e的结点类型非谓词结点,转(4-6);
(4-3)在ASTree上对每一个e的可达演化元素结点ei,如果ei是e的后必经结点,转(4-
6);
(4-4)若演化元素e’为e到达ei的路径上的任一结点,且e’不是e的后必经结点,转(4-
6);
(4-5)更新演化控制依赖图G,加入演化结点和相应边,即ECNode=ECNode∪{e,ei},ECEdge=ECEdge∪{
(4-6)返回演化控制依赖图G。
7.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(5)中的演化切片是根据演化元素提取的程序片段,记录了演化元素的影响部分,其定义如下:P为源程序,
8.根据权利要求1所述的基于演化切片的演化影响集预测方法,其特征在于,所述步骤(6)中,基于演化切片的演化影响集的有效性主要取决于预测的影响集的精度以及存伪度,通过查全率recall和查准率NPrecision来度量,而演化识别率从一定程度上影响了精度和存伪度,演化元素的识别通过识别率recognition_ratio和误判率fault_ratio进行度量,具体度量方法如下:recognition_ratio=ECrt/ECat 式(Ⅰ),fault_ratio=ECrf/ECra 式(Ⅱ),
式(Ⅰ)中,recognition_ratio为识别率,ECrt为识别出的实际演化元素数目,ECat为所有实际演化元素数目;式(Ⅱ)中,fault_ratio为误判率,ECrf为识别出的非实际演化元素数目,ECra为识别出的全部演化数目,即ECra=ECrt+ECrf,显然,recognition_ratio值越大,识别率越高,元素识别越准确,越有利于演化影响分析的进行;fault_ratio值越大,误判率越高,越影响后续的演化影响分析,理想情况下,ECrt=ECat,ECrf=0,即识别率recognition_ratio为百分之百,误判率fault_ratio为0,此时识别的元素集合与实际修改的元素集合相同;
recall=(ES∩RI)/RI 式(Ⅲ),
Nprecision=(ES-RI)/ES 式(Ⅳ),
式(Ⅲ)和(Ⅳ)中,ES是通过计算演化切片获得的预测演化影响集,RI是实际演化影响集,recall值越大,查全率越高,能够正确预测实际演化元素比例越多;当 时,recall达到理想值1,表示演化切片能够预测出全部的实际演化元素;Nprecision值越小,表示预测存伪情况越小,当RI=ES时,Nprecision达到理想值0。