CN111949534A - 一种基于控制流启发式搜索策略的软件测试方法及系统 - Google Patents
一种基于控制流启发式搜索策略的软件测试方法及系统 Download PDFInfo
- Publication number
- CN111949534A CN111949534A CN202010808066.9A CN202010808066A CN111949534A CN 111949534 A CN111949534 A CN 111949534A CN 202010808066 A CN202010808066 A CN 202010808066A CN 111949534 A CN111949534 A CN 111949534A
- Authority
- CN
- China
- Prior art keywords
- node
- program
- target
- nodes
- path
- 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.)
- Withdrawn
Links
Images
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
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)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种软件测试的技术领域,揭露了一种基于控制流启发式搜索策略的软件测试方法,包括:利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;计算循环模块中各程序节点的属性关联度和行为关联度;根据各程序节点的属性关联度和行为关联度对程序节点进行赋权;根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。本发明还提供了一种基于控制流启发式搜索策略的软件测试系统。本发明实现了软件的测试。
Description
技术领域
本发明涉及软件测试的技术领域,尤其涉及一种基于控制流启发式搜索策略的软件测试方法及系统。
背景技术
随着科学技术的不断发展,人类进入第四次工业革命即″互联网+″时代,计算机技术在社会的各个领域都得到了广泛的应用和普及,并取得了较大的成绩,市面上也随之产生了多种计算机软件,因此如何对计算机软件进行高效测试将成为当前研究的热门话题。
现有软件测试技术主要是使用符号执行进行软件测试,其中符号执行是一种经典程序分析技术,它将程序中的变量符号化来模拟程序的运行,收集程序路径,使用约束求解器对路径约束条件求解后得到测试案例。在实际应用中中,符号执行的应用受到路径爆炸和约束求解等问题的制约,被测程序中的循环结构是重要的影响因素,可能会导致程序路径规模成倍增长,为测试案例的生成增加困难,降低测试案例生成效率。
鉴于此,如何求解最优的测试案例测试路径,从而高效进行软件测试,成为本领域技术人员亟待解决的问题。
发明内容
本发明提供一种基于控制流启发式搜索策略的软件测试方法,通过利用软件节点检测算法检测到控制流图中的所有节点,并分别计算控制流中各节点的属性关联度和行为关联度,对节点进行权重赋值,同时针对节点的循环结构,利用启发式搜索算法生成多个测试案例,通过求解启发式算法得到最优的测试案例测试路径。
为实现上述目的,本发明提供的一种基于控制流启发式搜索策略的软件测试方法,包括:
利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;
计算循环模块中各程序节点的属性关联度;
计算循环模块中各程序节点的行为关联度;
根据各程序节点的属性关联度和行为关联度对程序节点进行赋权;
根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;
利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
可选地,所述利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,包括:
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的节点间距离,并为每个节点的距离赋权,得到每个程序节点到目标节点的距离
其中:
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中进行全路径搜索的符号执行;考虑存在嵌套循环的情况,当在目标循环中遇到目标前循环Lformer,那么执行2);若此循环是目标循环Lin,则在目标循环Lin中递归地执行3);
4)当搜索过程遇到Llatter时,已经得到包含S的部分路径,此时利用这条部分路径约束生成测试案例进行动态执行,能够得到完整的包含目标节点S的路径,这条路径的目标函数达到最小,根据所求解路径,进行测试案例的执行。
此外,为实现上述目的,本发明还提供一种基于控制流启发式搜索策略的软件测试系统,所述系统包括:
程序获取装置,用于获取待测试的程序;
程序处理器,用于计算循环模块中各节点的属性关联度和行为关联度,并根据计算结果对程序节点进行赋权;
软件装置,用于利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有软件测试程序指令,所述软件测试程序指令可被一个或者多个处理器执行,以实现如上所述的基于控制流启发式搜索策略的软件测试的实现方法的步骤。
相对于现有技术,本发明提出一种基于控制流启发式搜索策略的软件测试方法,该技术具有以下优势:
首先,本发明采用一种基于关键节点的循环检测算法获取控制流图中的所有程序节点,通过遍历节点集合中除了入口节点以外的其它节点,当图中存在有向边<np,n>,那么表示以n为关键节点的所有有向边起始节点np的关键节点的交集,如果其不在关键关系中,则更新关键关系,重复这个过程,直到关系不再发生变化,其中n为当前程序节点;同时,当控制流图存在路径上的节点为:n1,...,ni,并且满足ni∈dom(nj),则将可以由节点ni及所有能够不经过ni到达nj的节点组成循环模块,从而将控制流图中的所有程序节点基于节点之间的关键关系转存到循环模块中,并基于各程序节点之间的循环结构进行启发式搜索,而搜索得到的路径即为软件测试的执行路径。
现有符号执行方法为能够尽可能覆盖程序的路径空间,但该方法导致程序从循环不执行到循环执行次数的上界都需要遍历,每一个出口状态在后续分析过程中如果遇到嵌套循环,那么路径的数量将会呈现指数级的增长。因此本发明提出一种基于路径搜索的启发式搜索策略,针对存在不同的循环结构,本发明采用不同的路径搜索方法进行程序路径的搜索,首先针对目标循环结构,由于目标节点在目标循环内部,目标循环与目标节点密切相关,具有直接关系,因此本发明选择在目标循环中使用符号执行技术,进行全路径的搜索,以确保能够得到到达目标节点的路径;针对目标前循环结构,由于展开每一个循环可能会造成大量的路径,搜索每一条路径是不现实的,无法判定目标前循环结构对得到最终可达路径的具体的影响,因此本发明利用目标函数,求解目标前循环的前置路径约束条件,利用以循环结构中距离和权重为打分函数的启发式搜索算法,对得到的轨迹进行排序选择出最靠近目标的路径,截取执行获得的轨迹中的部分作为路径片段继续进行路径搜索,相较于现有技术,本发明通过对不同的循环结构采取不同的执行策略,避免了软件测试中存在的嵌套循环,极大提高了软件测试的效率,同时采用基于控制流图的启发式策略对路径进行打分,判定路径优先级,找到最靠近目标节点的那一条路径,进行后续的执行。
附图说明
图1为本发明一实施例提供的一种基于控制流启发式搜索策略的软件测试方法的流程示意图;
图2为本发明一实施例提供的一种基于控制流启发式搜索策略的软件测试系统的结构示意图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
通过利用软件节点检测算法检测到控制流图中的所有节点,并分别计算控制流中各节点的属性关联度和行为关联度,对节点进行权重赋值,同时针对节点的循环结构,利用启发式搜索算法生成多个测试案例,通过求解启发式算法得到最优的测试案例测试路径。参照图1所示,为本发明一实施例提供的基于控制流启发式搜索策略的软件测试方法示意图。
在本实施例中,基于控制流启发式搜索策略的软件测试方法包括:
S1、利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中。
首先,本发明利用基于关键节点的循环检测算法,获取软件测试控制流图中的所有程序节点,在所述控制流图中,程序节点m是程序节点n的关键节点,当且仅当从图的入口节点至节点n的所有路径都经过节点m,用dom表示一种关键关系,所述基于关键节点的循环检测算法的检测流程为:
1)首先初始化关键关系dom,对于程序的入口节点映射到其本身,其它节点映射到整个节点集合;
2)分析图中节点关系得到关键关系,具体步骤为遍历节点集合中除了入口节点以外的其它节点,当前节点为n,当图中存在有向边<np,n>,那么表示以n为关键节点的所有有向边起始节点np的关键节点的交集,如果其不在关键关系中,则更新关键关系,重复这个过程,直到关系不再发生变化;
在本发明一个具体实施例中,以节点集合C为基准,该集合初始化为空集,迭代的过程中有节点的关键关系发生变化,那么该节点就会加入C中,重复迭代过程直到C不再发生变化;
3)根据节点间的关键关系构建循环模块Ls,控制流图中的一条路径由一组连续的节点和有向边组成,当存在路径上的节点为:n1,...,ni,并且满足ni∈dom(nj),则将可以由节点ni及所有能够不经过ni到达nj的节点组成循环模块,将其加入Ls中。
S2、计算循环模块中各节点的属性关联度和行为关联度,并根据计算结果对程序节点进行赋权。
进一步地,本发明分别计算循环模块中各节点的属性关联度和行为关联度,并根据计算结果对循环模块中的程序节点进行赋值;
所述各程序节点的属性关联度的计算过程为:
对于程序节点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之间的行为关联度。
S3、根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数。
进一步地,根据不同程序节点的权重,本发明建立基于节点权重与距离的启发式搜索目标函数,所述基于节点权重与距离的启发式搜索目标函数的建立步骤为:
1)在循环模块中中,得到目标节点S的关键节点的集合,采用最短路径生成算法将关键节点到目标节点S对应的最短路径的长度保存;
2)在循环结构中进行路径搜索时,得到路径P,用路径P上的节点集合NP和目标节点S的关键节点的集合NS得到交集NP∩NS,计算交集NP∩NS中每个程序节点与目标节点S的节点间距离,并为每个节点的距离赋权,得到每个程序节点到目标节点的距离
其中:
n为程序节点的总数;
S4、利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
进一步地,本发明识别出循环模块中所有的循环结构,所述循环结构表示为L=(NL,EL,entryL,exitL),循环的入口节点表示entryL,循环的出口节点表示exitL,具体地,循环结构分为如下三种:
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中进行全路径搜索的符号执行;考虑存在嵌套循环的情况,当在目标循环中遇到目标前循环Lformer,那么执行2);若此循环是目标循环Lin,则在目标循环Lin中递归地执行3);
4)当搜索过程遇到Llatter时,已经得到包含S的部分路径,此时利用这条部分路径约束生成测试案例进行动态执行,能够得到完整的包含目标节点S的路径,这条路径的目标函数达到最小,根据所求解路径,进行测试案例的执行。
下面通过一个算法实验来说明本发明的具体实施方式,并对发明的处理方法进行测试。本发明基于64位的windows10操作系统,处理器为Intel(R)Core(TM)i7-7700 CPU@3.60GHZ 3.60GHZ,内存为8GB;对比算法为贪婪最佳优先搜索算法、局部搜索算法、变邻域搜索算法和禁忌搜索算法。
在本发明所述算法实验中,被测程序是含有不同串联循环数目的九组程序,其中循环结构均为输入无关的循环,随机设定每个循环次数是五次,每个输入无关的循环中有一句if语句。程序组中共有九个被测程序,第一个被测程序中含有一个循环结构,第二个被测程序中含有两个串联循环结构,以此类推,第九个被测程序中含有九个串联循环结构。本发明利用对比算法和所提出的软件测试方法对被测程序进行测试,测试所花费时间即为算法的效率。
根据实验结果,贪婪最佳优先搜索算法所花费的测试时间为18s,局部搜索算法所花费的测试时间为16.5s,变邻域搜索算法所花费的测试时间为19.2s,禁忌搜索算法所花费的测试时间为14.6s,本发明所提出的软件测试方法所花费的测试时间为10.16s,相较于对比算法,本发明所提出的基于控制流启发式搜索策略的软件测试方法能更快完成软件的测试。
发明还提供一种基于控制流启发式搜索策略的软件测试系统。参照图2所示,为本发明一实施例提供的基于控制流启发式搜索策略的软件测试系统的内部结构示意图。
在本实施例中,所述基于控制流启发式搜索策略的软件测试系统1至少包括视程序获取装置11、程序处理器12、软件测试装置13,通信总线14,以及网络接口15。
其中,程序获取装置11可以是PC(Personal Computer,个人电脑),或者是智能手机、平板电脑、便携计算机等终端设备,也可以是一种服务器等。
程序处理器12至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。程序处理器12在一些实施例中可以是基于控制流启发式搜索策略的软件测试系统1的内部存储单元,例如该基于控制流启发式搜索策略的软件测试系统1的硬盘。程序处理器12在另一些实施例中也可以是基于控制流启发式搜索策略的软件测试系统1的外部存储设备,例如基于控制流启发式搜索策略的软件测试系统1上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,程序处理器12还可以既包括基于控制流启发式搜索策略的软件测试系统1的内部存储单元也包括外部存储设备。程序处理器12不仅可以用于存储安装于基于控制流启发式搜索策略的软件测试系统1的应用软件及各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。
软件测试装置13在一些实施例中可以是一中央处理器(Central ProcessingUnit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行程序处理器12中存储的程序代码或处理数据,例如软件测试程序指令等。
通信总线14用于实现这些组件之间的连接通信。
网络接口15可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该系统1与其他电子设备之间建立通信连接。
可选地,该系统1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在基于控制流启发式搜索策略的软件测试系统1中处理的信息以及用于显示可视化的用户界面。
图2仅示出了具有组件11-15以及基于控制流启发式搜索策略的软件测试系统1,本领域技术人员可以理解的是,图1示出的结构并不构成对基于控制流启发式搜索策略的软件测试系统1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在图2所示的装置1实施例中,程序处理器12中存储有基于控制流启发式搜索策略的软件测试程序指令;软件测试装置13执行程序处理器12中存储的软件测试程序指令的步骤,与基于控制流启发式搜索策略的软件测试方法的实现方法相同,在此不作类述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有基于控制流启发式搜索策略的软件测试程序指令,所述基于控制流启发式搜索策略的软件测试程序指令可被一个或多个处理器执行,以实现如下操作:
利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;
计算循环模块中各程序节点的属性关联度;
计算循环模块中各程序节点的行为关联度;
根据各程序节点的属性关联度和行为关联度对程序节点进行赋权;
根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;
利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述方法包括:
利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,并将检测到的程序节点加入循环模块中;
计算循环模块中各程序节点的属性关联度;
计算循环模块中各程序节点的行为关联度;
根据各程序节点的属性关联度和行为关联度对程序节点进行权重的赋权;
根据不同程序节点的权重,建立基于节点权重与距离的启发式搜索目标函数;
利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
2.如权利要求1所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述利用基于关键节点的循环检测算法获取控制流图中的所有程序节点,包括:
1)首先初始化关键关系dom,对于程序的入口节点映射到其本身,其它节点映射到整个节点集合;
2)分析图中节点关系得到关键关系,具体步骤为遍历节点集合中除了入口节点以外的其它节点,当前节点为n,当图中存在有向边<np,n>,那么表示以n为关键节点的所有有向边起始节点np的关键节点的交集,如果其不在关键关系中,则更新关键关系,重复这个过程,直到关系不再发生变化;
3)根据节点间的关键关系构建循环模块Ls,控制流图中的一条路径由一组连续的节点和有向边组成,当存在路径上的节点为:n1,...,ni,并且满足ni∈dom(nj),则将可以由节点ni及所有能够不经过ni到达nj的节点组成循环模块,将其加入Ls中。
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的测试时间比例。
6.如权利要求5所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述建立基于节点权重与距离的启发式搜索目标函数,包括:
1)在循环模块中中,得到目标节点S的关键节点的集合,采用最短路径生成算法将关键节点到目标节点S对应的最短路径的长度保存;
2)在循环结构中进行路径搜索时,得到路径P,用路径P上的节点集合NP和目标节点S的关键节点的集合NS得到交集NP∩NS,计算交集NP∩NS中每个程序节点与目标节点S的节点间距离,并为每个节点的距离赋权,得到每个程序节点到目标节点的距离
其中:
n为程序节点的总数;
7.如权利要求6所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述循环模块中不同的循环结构,包括:
1)当目标节点S∈NL,L=(NL,EL,entryL,exitL)称为目标循环结构,记为Lin;
2)当使用路径搜索策略去遍历时,遇到非目标循环L,若已得到的轨迹中覆盖目标节点,则该循环结构L是目标后循环结构,记为Llatter,否则是目标前循环结构,记为Lformer。
8.如权利要求7所述的一种基于控制流启发式搜索策略的软件测试方法,其特征在于,所述利用基于路径搜索的启发式搜索策略对目标函数进行求解,包括:
1)遍历循环模块,利用符号执行在程序的循环模块上进行路径搜索,当遇到一个循环结构时,此时的操作取决于此循环的类型,当循环类型为目标前循环结构Lformer则执行2),当循环类型为目标循环结构Lin则执行3),当循环类型为目标后循环结构Llatter则执行4);
2)使用约朿求解器求解第二步搜集到的部分路径的约束条件生成多个测试案例,捕获这些测试案例在目标前循环Lformer中的相应执行轨迹,这些执行轨迹在程序入口到目标前循环Lformer之前的部分具有一样的路径前缀;
按照节点与路径的距离的计算方法,得到目标节点S与执行轨迹的距离,按照距离排序,选择距离值最小的路径,即最靠近目标节点S的路径轨迹,将该路径中在目标前循环的部分截取出来作为路径前缀去继续路径搜索,继续使用符号执行在程序循环模块中进行路径搜索;
3)在目标循环Lin中进行全路径搜索的符号执行;考虑存在嵌套循环的情况,当在目标循环中遇到目标前循环Lformer,那么执行2);若此循环是目标循环Lin,则在目标循环Lin中递归地执行3);
4)当搜索过程遇到Llatter时,已经得到包含S的部分路径,此时利用这条部分路径约束生成测试案例进行动态执行,能够得到完整的包含目标节点S的路径,这条路径的目标函数达到最小,根据所求解路径,进行测试案例的执行。
9.一种基于控制流启发式搜索策略的软件测试系统,其特征在于,所述系统包括:
程序获取装置,用于获取待测试的程序;
程序处理器,用于计算循环模块中各节点的属性关联度和行为关联度,并根据计算结果对程序节点进行赋权;
软件装置,用于利用基于路径搜索的启发式搜索策略对目标函数进行求解,针对循环模块中不同的循环结构采取不同的搜索策略,并根据求解结果执行对应的软件测试。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有软件测试程序指令,所述软件测试程序指令可被一个或者多个处理器执行,以实现如权利要求1至7中任一项所述的一种基于控制流启发式搜索策略的软件测试的实现方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808066.9A CN111949534A (zh) | 2020-08-12 | 2020-08-12 | 一种基于控制流启发式搜索策略的软件测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010808066.9A CN111949534A (zh) | 2020-08-12 | 2020-08-12 | 一种基于控制流启发式搜索策略的软件测试方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111949534A true CN111949534A (zh) | 2020-11-17 |
Family
ID=73332545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010808066.9A Withdrawn CN111949534A (zh) | 2020-08-12 | 2020-08-12 | 一种基于控制流启发式搜索策略的软件测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949534A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028375A (zh) * | 2023-02-21 | 2023-04-28 | 深圳大数信科技术有限公司 | 基于图论的代码测试方法 |
-
2020
- 2020-08-12 CN CN202010808066.9A patent/CN111949534A/zh not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028375A (zh) * | 2023-02-21 | 2023-04-28 | 深圳大数信科技术有限公司 | 基于图论的代码测试方法 |
CN116028375B (zh) * | 2023-02-21 | 2023-06-16 | 深圳大数信科技术有限公司 | 基于图论的代码测试方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Jin et al. | GAIA: graph classification using evolutionary computation | |
CN108804516B (zh) | 相似用户查找装置、方法及计算机可读存储介质 | |
Li et al. | V-fuzz: Vulnerability prediction-assisted evolutionary fuzzing for binary programs | |
CN112101437A (zh) | 基于图像检测的细粒度分类模型处理方法、及其相关设备 | |
CN107885503B (zh) | 一种基于程序特征分析的迭代编译优化方法 | |
Bobek et al. | Introducing uncertainty into explainable ai methods | |
Skodawessely et al. | Finding attractors in asynchronous Boolean dynamics | |
Zaragoza et al. | A two-step method to learn multidimensional Bayesian network classifiers based on mutual information measures | |
Karnalim | IR-based technique for linearizing abstract method invocation in plagiarism-suspected source code pair | |
CN111949534A (zh) | 一种基于控制流启发式搜索策略的软件测试方法及系统 | |
Kim et al. | IDAR: Fast supergraph search using DAG integration | |
Lin et al. | Towards interpreting ML-based automated malware detection models: A survey | |
CN116663008A (zh) | 漏洞检测方法、装置、电子设备、存储介质及程序产品 | |
CN116227566A (zh) | 应用于ai芯片的计算图可视化方法、装置、设备及介质 | |
Zulkoski et al. | Learning-sensitive backdoors with restarts | |
Jiyoung Whang et al. | Scalable Anti-TrustRank with qualified site-level seeds for link-based web spam detection | |
CN114528552A (zh) | 基于漏洞的安全事件关联方法及相关设备 | |
JP7175148B2 (ja) | 判定装置及び判定方法 | |
Langenkämper et al. | Ake-the accelerated k-mer exploration web-tool for rapid taxonomic classification and visualization | |
KR101887664B1 (ko) | 그래프다발의 동적 분류 방법 및 장치 | |
Li et al. | Community Detection Using Revised Medoid-Shift Based on KNN | |
CN114357251B (zh) | 一种基于分治进化算法的大型图数据库查询方法 | |
CN116305127A (zh) | 病毒检测模型训练方法、装置及存储介质 | |
Čisar et al. | Optimization algorithms in function of binary character recognition | |
Yin et al. | Discovering Malicious Signatures in Software from Structural Interactions |
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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20201117 |