当前位置: 首页 > 专利查询>汪礼君专利>正文

一种基于控制流启发式搜索策略的软件测试方法及系统技术方案

技术编号:26375853 阅读:19 留言:0更新日期:2020-11-19 23:44
本发明专利技术涉及一种软件测试的技术领域,揭露了一种基于控制流启发式搜索策略的软件测试方法,包括:利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;计算循环模块中各程序节点的属性关联度和行为关联度;根据各程序节点的属性关联度和行为关联度对程序节点进行赋权;根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。本发明专利技术还提供了一种基于控制流启发式搜索策略的软件测试系统。本发明专利技术实现了软件的测试。

【技术实现步骤摘要】
一种基于控制流启发式搜索策略的软件测试方法及系统
本专利技术涉及软件测试的
,尤其涉及一种基于控制流启发式搜索策略的软件测试方法及系统。
技术介绍
随着科学技术的不断发展,人类进入第四次工业革命即″互联网+″时代,计算机技术在社会的各个领域都得到了广泛的应用和普及,并取得了较大的成绩,市面上也随之产生了多种计算机软件,因此如何对计算机软件进行高效测试将成为当前研究的热门话题。现有软件测试技术主要是使用符号执行进行软件测试,其中符号执行是一种经典程序分析技术,它将程序中的变量符号化来模拟程序的运行,收集程序路径,使用约束求解器对路径约束条件求解后得到测试案例。在实际应用中中,符号执行的应用受到路径爆炸和约束求解等问题的制约,被测程序中的循环结构是重要的影响因素,可能会导致程序路径规模成倍增长,为测试案例的生成增加困难,降低测试案例生成效率。鉴于此,如何求解最优的测试案例测试路径,从而高效进行软件测试,成为本领域技术人员亟待解决的问题。
技术实现思路
本专利技术提供一种基于控制流启发式搜索策略的软件测试方法,通过利用软件节点检测算法检测到控制流图中的所有节点,并分别计算控制流中各节点的属性关联度和行为关联度,对节点进行权重赋值,同时针对节点的循环结构,利用启发式搜索算法生成多个测试案例,通过求解启发式算法得到最优的测试案例测试路径。为实现上述目的,本专利技术提供的一种基于控制流启发式搜索策略的软件测试方法,包括:利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;计算循环模块中各程序节点的属性关联度;计算循环模块中各程序节点的行为关联度;根据各程序节点的属性关联度和行为关联度对程序节点进行赋权;根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。可选地,所述利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,包括:1)首先初始化关键关系dom,对于程序的入口节点映射到其本身,其它节点映射到整个节点集合;2)分析图中节点关系得到关键关系,具体步骤为遍历节点集合中除了入口节点以外的其它节点,当前节点为n,当图中存在有向边<np,n>,那么表示以n为关键节点的所有有向边起始节点np的关键节点的交集,如果其不在关键关系中,则更新关键关系,重复这个过程,直到关系不再发生变化;3)根据节点间的关键关系构建循环模块Ls,控制流图中的一条路径由一组连续的节点和有向边组成,当存在路径上的节点为:n1,...,ni,并且满足ni∈dom(nj),则将可以由节点ni及所有能够不经过ni到达nj的节点组成循环模块,将其加入Ls中。可选地,所述循环模块中各程序节点的属性关联度的计算过程为:对于程序节点i和邻居节点j的特征向量分别为Vi=(a1i,a2i,...,ani),Vj=(b1i,b2i,...,bni),使用两向量间的距离来表示两个节点i和j的属性关联度SimA(Vi,Vj):其中:|Δv|为两节点特征向量之间的欧式距离。可选地,所述各程序节点的行为关联度计算过程为:1)计算程序节点i与邻居节点j的历史通信次数所占节点i与邻居节点通信总次数比例,所述计算公式为:其中:m(i,j)为程序节点i与邻居节点j的历史通信次数;X(i,j)为程序节点i与邻居节点j的历史通信频率;x为随机较小的正数,本专利技术将其取为0.0001;2)计算程序节点i的邻居节点j的测试时间占节点i所有邻居节点测试时间的比例,所述计算公式为:其中:o(i,j)为程序节点i的邻居节点j的测试时间;x为随机较小的正数,本专利技术将其取为0.0001;Z(i,j)为程序节点i与邻居节点j的测试时间比例;3)计算程序节点i与邻居节点之间的关联度SimC(Vi,Vj):SimC(Vi,Vj)=X(i,j)+Z(i,j)其中:X(i,j)为程序节点i与邻居节点j的历史通信频率;Z(i,j)为程序节点i与邻居节点j的测试时间比例。可选地,所述根据各程序节点的属性关联度和行为关联度进行赋权,包括:根据各程序节点与邻居节点的属性关联度和行为关联度,为每个程序节点赋权,所述赋权公式为:其中:SimA(Vi,Vj)为程序节点i与邻居节点j之间的属性关联度;SimC(Vi,Vj)为程序节点i与邻居节点j之间的行为关联度。可选地,所述建立基于节点权重与距离的启发式搜索目标函数,包括:1)在循环模块中中,得到目标节点S的关键节点的集合,采用最短路径生成算法将关键节点到目标节点S对应的最短路径的长度保存;2)在循环结构中进行路径搜索时,得到路径P,用路径P上的节点集合NP和目标节点S的关键节点的集合NS得到交集NP∩NS,计算交集NP∩NS中每个程序节点与目标节点S的节点间距离,并为每个节点的距离赋权,得到每个程序节点到目标节点的距离3)选取最小的程序节点作为下一个目标节点,重复上述步骤,使得如下目标函数最小,此时得到的程序节点序列即为测试序列:其中:n为程序节点的总数;为程序节点到目标节点的距离。可选地,所述循环模块中不同的循环结构,包括:1)当目标节点S∈NL,L=(NL,EL,entryL,exitL)称为目标循环结构,记为Lin;2)当使用路径搜索策略去遍历时,遇到非目标循环L,若已得到的轨迹中覆盖目标节点,则该循环结构L是目标后循环结构,记为Llatter,否则是目标前循环结构,记为Lformer。可选地,所述利用基于路径搜索的启发式搜索策略对目标函数进行求解,包括:1)遍历循环模块,利用符号执行在程序的循环模块上进行路径搜索,当遇到一个循环结构时,此时的操作取决于此循环的类型,当循环类型为目标前循环结构Lformer则执行2),当循环类型为目标循环结构Lin则执行3),当循环类型为目标后循环结构Llatter则执行4);2)使用约朿求解器求解第二步搜集到的部分路径的约束条件生成多个测试案例,捕获这些测试案例在目标前循环Lformer中的相应执行轨迹,这些执行轨迹在程序入口到目标前循环Lformer之前的部分具有一样的路径前缀;按照节点与路径的距离的计算方法,得到目标节点S与执行轨迹的距离,按照距离排序,选择距离值最小的路径,即最靠近目标节点S的路径轨迹,将该路径中在目标前循环的部分截取出来作为路径前缀去继续路径搜索,继续使用符号执行在程序循环模块中进行路径搜索;3)在目标循环Lin中进行全路径搜索的符号执行;考虑存在嵌套循环的情况,本文档来自技高网...

【技术保护点】
1.一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述方法包括:/n利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;/n计算循环模块中各程序节点的属性关联度;/n计算循环模块中各程序节点的行为关联度;/n根据各程序节点的属性关联度和行为关联度对程序节点进行权重的赋权;/n根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;/n利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。/n

【技术特征摘要】
1.一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述方法包括:
利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;
计算循环模块中各程序节点的属性关联度;
计算循环模块中各程序节点的行为关联度;
根据各程序节点的属性关联度和行为关联度对程序节点进行权重的赋权;
根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;
利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。


2.如权利要求1所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,包括:
1)首先初始化关键关系dom,对于程序的入口节点映射到其本身,其它节点映射到整个节点集合;
2)分析图中节点关系得到关键关系,具体步骤为遍历节点集合中除了入口节点以外的其它节点,当前节点为n,当图中存在有向边<np,n>,那么表示以n为关键节点的所有有向边起始节点np的关键节点的交集,如果其不在关键关系中,则更新关键关系,重复这个过程,直到关系不再发生变化;
3)根据节点间的关键关系构建循环模块Ls,控制流图中的一条路径由一组连续的节点和有向边组成,当存在路径上的节点为:n1,...,ni,并且满足ni∈dom(nj),则将可以由节点ni及所有能够不经过ni到达nj的节点组成循环模块,将其加入Ls中。


3.如权利要求2所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述循环模块中各程序节点的属性关联度的计算过程为:
对于程序节点i和邻居节点j的特征向量分别为Vi=(a1i,a2i,...,ani),Vj=(b1i,b2i,...,bni),使用两向量间的距离来表示两个节点i和j的属性关联度SimA(Vi,Vj):






其中:
|Δv|为两节点特征向量之间的欧式距离。


4.如权利要求3所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述各程序节点的行为关联度计算过程为:
1)计算程序节点i与邻居节点j的历史通信次数所占节点i与邻居节点通信总次数比例,所述计算公式为:



其中:
m(i,j)为程序节点i与邻居节点j的历史通信次数;
X(i,j)为程序节点i与邻居节点j的历史通信频率;
x为随机较小的正数,本发明将其取为0.0001;
2)计算程序节点i的邻居节点j的测试时间占节点i所有邻居节点测试时间的比例,所述计算公式为:



其中:
o(i,j)为程序节点i的邻居节点j的测试时间;
x为随机较小的正数,本发明将其取为0.0001;
Z(i,j)为程序节点i与邻居节点j的测试时间比例;
3)计算程序节点i与邻居节点之间的关联度SimC(Vi,Vj):
SimC(Vi,Vj)=X(i,j)+Z(i,j)
其中:
X(i,j)为程序节点i与邻居节点j的历史通信频率;
Z(i,j)为程序节点i与邻居节点j的测试时间比例。


5.如权利要求4所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述根据各程序节点的属性关联度和行为关联度进行赋权,包括:
根据各程序节点与邻居节点的属性关联度和行为关联度,为每个程序节点赋权,所述赋权公式为:



其中:
SimA(Vi,Vj)为程序节点i与邻居节点j之间的属性关联...

【专利技术属性】
技术研发人员:汪礼君
申请(专利权)人:汪礼君
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1