【技术实现步骤摘要】
本专利技术提出了一种采用演化故障分析模型对软件演化过程进行故障分析的方法,属于软件调试的
技术介绍
随着技术的发展和需求的提高,软件不断复杂化和大型化。在这类软件产品开发和维护过程中,时常伴随着迭代开发、需求变更、性能优化等软件程序演化修改行为,而演化的进行,增加了引入新的软件程序故障的风险。因此,软件在演化过程中,需要不断的建模分析,以尽早找到潜在的故障,将软件开发和维护费用降到最低。当软件程序中故障出现时,有以下几种方法:(1)最传统简单的方法在程序中插入输出语句。这建立在故障排除人员对程序极其熟悉,存在很大的主观性,且不适合现代大型复杂软件的故障排除。(2)借助调试工具,故障排除人员通常用的手法是设置断点来排除故障,这同样过于主观,效率不高,造成人员的极大浪费。(3)基于程序谱来发现软件中的故障是当前流行的故障定位方案,其缺点在于程序在演化修改过程中,历史程序谱存在破坏的可能,而且也无法保证Test oracle在修改后仍然有效。由于故障排除人员未必非常熟悉整个软件程序,他们也很难根据程序元素的可疑性排除错误的根源。(4)采用系统依赖图来进行故障分析。虽然系统依赖图提供了所有程序元素之间详细的依赖关系,然而在程序不断演化过程中,不断构建系统依赖图,其时间代价和空间代价是难以估量的,且其不具备演化故障分析能力。基于上述问题,设计高效精确的演化故障分析模型十分必要。如何根据演化修改高效 ...
【技术保护点】
一种软件演化过程故障分析方法,其特征在于,包括以下步骤:步骤1、使用AST分析器,构造演化修改程序的中间表示形式抽象语法树EFAGM_AST;步骤2、基于演化修改,确立EFAGM的关键修改节点集,依次构建修改节点集的前向和后向影响节点和路径;步骤3、根据计算EFAGM图节点的域,生成EFAGM的静态影响因子和动态影响因子,完成演化故障分析图模型EFAGM的构建;在故障发生时,采用EFAGM实现对程序演化修改引起的故障分析。
【技术特征摘要】
1.一种软件演化过程故障分析方法,其特征在于,包括以下步骤:
步骤1、使用AST分析器,构造演化修改程序的中间表示形式抽象语法树
EFAGM_AST;
步骤2、基于演化修改,确立EFAGM的关键修改节点集,依次构建修改节点集的前
向和后向影响节点和路径;
步骤3、根据计算EFAGM图节点的域,生成EFAGM的静态影响因子和动态影响因子,
完成演化故障分析图模型EFAGM的构建;在故障发生时,采用EFAGM实现对程序演化
修改引起的故障分析。
2.根据权利要求1所述的一种软件演化过程故障分析方法,其特征在于,步骤1所述
EFAGM是一个二元组<CINode,CDEdge>,其中,CINode为修改影响节点集,CDEdge为
修改依赖边集;
修改影响节点集CINode包括常见节点BlockNode、IfNode、SwitchNode、WhileNode、
DoNode、ForNode、BreakNode、ContinueNode、ReturnNode、InvocationNode、MethodNode;
修改依赖边集CDEdge=DCDEdge∪ICDEdge∪DDDEdge∪IDDEdge,其中,DCDEdge
是直接控制依赖边集,ICDEdge是间接控制依赖边集,DDDEdge是直接数据依赖边集,
IDDEdge是间接数据依赖边集;
EFAGM图节点的域,包括:
(1)ID域:用于演化修改影响的节点或边的标识,节点或边的ID标识是唯一的;
(2)Position域:对应图节点元素在程序中的位置;
(3)ParentNodeLink域:当前节点的父节点链域,用于链接当前节点的父节点,便于
EFAGM图的前向遍历;若当前节点若存在变量使用并受多个节点变量定义影响或同时受
到前向数据和控制影响,则将ParentNodeLink链接多个父节点,否则只链接一个父节点;
当前节点若存在变量使用并受多个节点变量定义影响或同时受到前向数据和控制影响,
ParentNodeLink链接多个父节点,否则链接一个节点;
(4)ChildNodeLink域:当前节点的孩子节点链域,用于链接当前节点的孩子节点,便
于EFAGM图的后向遍历;对于IfNode、SwitchNode、WhileNode、DoNode、ForNode、
MethodNode类型的条件判断语句的ChildNodeLink域,或者当前节点若存在变量定义或定
值并影响多个节点的使用,则链接多个孩子节点;否则只链接一个孩子节点;对于IfNode、
SwitchNode、WhileNode、DoNode、ForNode、MethodNode条件判断语句的ChildNodeLink
域链接多个孩子节点;当前节点若存在变量定义或定值并影响多个节点的使用,
ChildNodeLink域也链接多个孩子节点;否则,ChildNodeLink域只链接一个孩子节点;
(5)ChangeNum、AveDistance域:影响当前节点的修改节点的个数、与修改节点的最
小距离,令m1,m2...,mn为当前节点与程序中n个修改节点的距离,则
AveDistance=(m1+m2+…+mn)/n;
(6)StaticWeight域:静态分析得出的当前节点发生故障的概率,其计算公式为
StaticWeight=Σi=1m1i+1AveDistance+1;]]>其中m表示影响ActiveNode的ChangeNum域;
当演化修改引起故障时,当前节点的故障概率遵循:
a)与修改节点距离越近,发生故障的概率越高;
b)被影响的修改节点数目越多,发生故障的概率越高;
c)修改节点随着数目的增加,其影响力逐渐减小;
(7)DynamicWeight域:用于动态分析得出的当前节点发生故障的概率,其计算公式为:
DynamicWeight=Σi=1s1iγ/sΣi=1s1iγ/s+Σj=1t1jγ/t;]]>其中,s是根据测试历史信息与预言相冲突的测试数目,t是根据测试历史信息与预言
一致的测试数目,γ是调节因子;当演化修改引起故障时,当前节点的故障概率遵循:
a)经过当前节点的失效测试用例越多,发生故障的概率越高;
b)经过当前节点的成功测试用例越多,发生故障的概率越小;
c)随着失效测试用例数目的增多,失效测试用例对故障发生的概率分析影响越小;
d)随着失效测试用例数目的增多,成功测试用例对故障发生的概率分析影响越小。
3.根据权利要求2所述的一种软件演化过程故障分析方法,其特征在于,步骤2中
基于演化修改,确立关键修改节点集为:在初始时,EFAGM模型中只包括n个演化修改
节点cNode1,...,cNoden;EFAGM图中在加入一个节点的同时设置ID和Position域值,在
创建一条边的同时设置ParentNodeLink和ChildNodeLink域值;在实现时,调用方法
ast.creatAST(replace)生成源程序replace的EFAGM_AST代码树,并返回根节点。
4.根据权利要求3所述的一种软件演化过程故障分析方法,其特征在于,步骤2中
所述依次构建修改节点集的前向和后向影响节点和路径;具体为:
2.1)基于cNode1.getNodeType()方法判定cNode1的节点类型,构造cNode1的前向控
制节点、前向数据节点及相关依赖边;当前节点的修改会引起控制它的节点的更新,同时,
当前节点使用的变量修改会引起变量定义或定值节点的一致性检查;
2.2)构造cNode1的后向控制节点、后向数据节点及相关依赖边;当前节点若为控制
\t节点,它的修改会影响控制块中所有节点的执行;当前节点中若定义或定值了变量,则所
有使用定义或定值集中变量的节点都将会受到影响;
2.3)重复2.1)~2.2),创建其他修改节点cNode2到cNoden的前向影响节点和后向影
响节点,并将所有未加入到EFAGM中的节点加入其中,创建DCDEdge、ICDEdge、
DDDEdge、IDDEdge。
5.根据权利要求4所述的一种软件演化过程故障分析方法,其特征在于,步骤3具
体为:
3.1)更新EFAGM图中每个节点的ChangeNum域和AveDistance域;令当前节点为
ActiveNode,ChangeNum值为ActiveNode根据ParentNodeLink域或ChildNodeLink域可达
的修改节点个数;AveDistance的计算分两步:首先,计算ActiveNode到每个可达修改节
点i的最小距离mini,然后计算AveDistance,计算公式为其中,m
为ChangeNum值;
3.2)根据ChangeNum域和AveDistance域计算EFAGM图中每个节点的StaticWeight
值;令当前节点为ActiveNode,则计算公式为:其
中m表示影响ActiveNode的ChangeNum域,在EFAGM图上表现为正向或逆向可达,表示对ActiveNode的影响的修改节点越多,则影响力越大,且随着影响的修改节点增多,
影响力逐渐降低,表示AveDistance越大,演化修改节点对ActiveNode影
响越小,且由于AveDistance对ActiveNode影响力要小于修改节点个数的影响力,将
AveDistance的影响力限制在(0,1]之间,即根据计算公式,受影
响的修改节点数目越多,则StaticWeight越大,受影响的修改节点数目相同,而距离越近,
StaticWeight越大,当演化修改引起故障时,根据StaticWeight的大小顺序对故障进行排查;
3.3)根据测试历史信息计算DynamicWeight,如果演化修改后Test Oracle仍然有效,
通过测试运行的失效与否更加精确的计算演化故障的概率,其计算公式为:
DynamicWeight=Σi=1s1iγ/sΣi=1s1iγ/s+Σj=1t1jγ/t;]]>其中,s是根据测试历史信息与预言相冲突的测试数目,t是根据测试历史信息与预言<...
【专利技术属性】
技术研发人员:文万志,陈建平,陈翔,郑国平,蒋峥峥,顾卫江,彭志娟,
申请(专利权)人:南通大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。