并行测试和变异测试三篇文献总结(二)

A Path Coverage-Based Reduction of Test Cases and Execution Time Using Parallel Execution

基于路径覆盖的并行执行减少测试用例和执行时间

© Springer Nature Singapore Pte Ltd. 2019 M. N. Hoda et al. (eds.), Software Engineering, Advances in Intelligent Systems and Computing

在本文中,生成一组测试,每个测试遍历指定的路径。 目的是确保代码中没有任何路径不被覆盖。 对于这些路径,生成大量测试数据是非常繁琐的任务。 结果,应该应用某种策略来减少大量冗余的测试用例的数量,即重复的同一组测试用例。 通过应用策略来避免冲突,将超出测试路径生成以减少冗余并生成有效的测试用例以覆盖控制流图中的所有路径。

现有技术的潜在缺点是它们仅覆盖了一条单一路径。

算法的过程:

1.使用源代码(对于确定三个给定整数f,s和t 的中间值的程序),绘制问题的相应控制流图

2.然后,从图(流图)确定圈复杂度

3.之后,确定线性独立路径的基组。

4.然后,使用ReduceDomains算法减少每个输入变量的域。

5.在生成测试套件之后,通过使用代数条件将特定值分配给变量并检查覆盖标准,判断是否满足。

6.应用并行测试用例执行器,以减少大量冗余的测试用例。

控制流图的描述信息:

在这里插入图片描述

每一个状态由一个节点表示,每一个边表示状态的转移。圈复杂度用于确定来自流图的线性独立路径的数量,它是获得最大代码覆盖率所需的测试集总数的标志,随后的测试集提供了比语句和分支覆盖更深入的测试,

V (G)=e − n +2 p,e和n是控制流图中边的总数和节点总数,p是图的连接组件数目(图的组件数是相连节点的最大集合)。控制流图都是连通的,所以p=1。V(G)的值是程序中所有可能执行路径的标志,表示完全测试方法所需的测试用例数量的下界。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

由于每个独立的路径都是通过线程并行执行的,所以它包含了测试用例的所有组合。

圈复杂度详解:

https://www.jianshu.com/p/a21cc7579691

其他计算圈复杂度的方法:

计算公式2:V(G)=区域数=判定节点数+1。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数。

对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。

计算公式3:V(G)=R。其中R代表平面被控制流图划分成的区域数。

适用场景:

针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单;针对复杂的控制流图是,使用区域计算公式V(G)=R更为简单。

路径覆盖:

路径覆盖是指选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。路径覆盖是覆盖率最高的一种覆盖技术。

路径覆盖率的公式:路径覆盖率=被执行到的路径数/程序中总的路径数。

独立路径数的计算:

第一步,从流图中找出程序所有的必经节点(流图中任何独立路径都必定经过的节点叫做必经节点),记作IV(i),其中i为整数且。

第二步,从流图中找出从必经节点N(i)到必经节点N(i+1)的独立路径数W(i),其中i为整数且0 \le i<N

第三步,重复上一步,直到程序结尾。

第四步,根据乘法法则,独立路径数= W(i),其中i为整数且0 \le i < N,即独立路径数=W(0) * W(1) * ⋯ * W(N一1)。

完全路径是指所有独立路径的集合,非完全路径就是所有独立路径集合的真子集。由于程序中可能会包含有多个条件的判定,所以程序流程图可能包含有隐含路径,从而有程序流图转换成的对应流图可能包含有隐藏路径。

消除隐含路径的办法就是将含有多个条件的判定分为多个判定。

完全路径覆盖的具体步骤:

1、将判定语句的条件进行分离,细化程序流程图,使其不含隐含路径。

2、根据程序流程图画出流图,找出必经节点,必经节点数为N。

3、将程序流程图在必经节点处割断,将整个程序分解为N+1个程序片断。

4、找出程序片断i的完全路径,为程序片断i的每条独立路径设计用例,其中:1 \le i \le N+l

5、结合所设计的测试用例,将程序片断i的参数初始化,其中1 \le i \le N+1

6、将测试用例付诸测试,重复第四步至第六步,直到i=N+1。

Coverall algorithm覆盖算法

A path-aware approach to mutant reduction in mutation testing

Information and Software Technology

Chang-ai Sun ,Feifei Xue, Huai Liu ,Xiangyu Zhang

减少变异体的数量来减少测试代价。定义了两个path-aware启发式规则:分别名为模块深度和循环深度规则

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值