大数跨境
0
0

组合测试引论

组合测试引论 关键科技
2019-03-30
2
导读:韩柯

作者|韩柯


软件故障有很多是“交互故障”,即只有当两个或更多输入值相互作用时才会发生故障。NASA应用出现的故障,67%是单要素故障,93%是二要素故障,98%是三要素故障。其他领域的应用,80%左右是二要素故障,90%作用是三要素故障。更多要素的交互故障占比很小,六要素以上的交互故障基本可以忽略。


组合测试可以在不考虑程序结构的情况下,评估测试用例设计的充分性,同时能够以最少的测试用例覆盖更多的交互故障发生空间。


组合测试覆盖度量指标


一、简单t要素组合覆盖,即给定一组n个变量测试用例集合,n个变量的t要素组合数,除以所有可能的变量-取值配置数。


举例:

对于a、b、c、d四个二值输入的软件,测试用例集合中4个测试用例:

a  b c  d

0  0 0  0

0  1 1  0

1  0 0  1

0  1 1  1

对于二要素,共有4个可能配置:00、01、10和11。在总共6个二要素组合中,ab、ac、ad和cd不能满足覆盖全部4个可能配置的要求,只有bd和cd满足。这样,这组测试用例集合的“简单2要素组合覆盖率”就是33%。


对于三要素,共有8个可能配置:000、001、010、011、100、101、110和111。在总共4个三要素组合中,abc、abd、acd和bcd都不能满足覆盖全部8个可能配置的要求,那么简单3要素组合覆盖率为0%。


2、简单(t+k)要素组合覆盖

满足t要素组合覆盖率的测试用例集合也会具有一定高阶要素组合覆盖率。

例如将前面的例子进行扩展,得到:

a  b  c  d

0  0 0  0

1  1 1  0

1  0 0  1

0  1 1  1

0  1 0  1

1  0 1  1

1  0 1  0

0  1 0  0

对这个测试用例集合,简单2要素组合覆盖率为100%,而3要素组合覆盖率也可以达到25%,4要素组合覆盖率为0%。这样这个测试用例集的简单(2+1)要素组合覆盖率是25%,简单(2+2)要素组合覆盖率为0%。


3、三元密度

将上面(t+k)中的k取1。三元密度就是t➕(t+1)元组覆盖值除以(t+1)元组所有的可能取值。

对于上例,既满足二要素的组合覆盖要求,同时还覆盖了4变量三要素全部24个可能配置中的10个,所以这个测试用例集的(2+1)元组密度=2+26/32=2.81


4、变量取值配置覆盖

即变量取值覆盖的百分比。对于第一个例子,对于4变量二要素的全部24种组合,19种被覆盖,只有ab=11、ac=11、ad=10、bc=01和bc=10没有被这个测试用例集合覆盖,其中只有bd和cd覆盖所有4种取值。那么该测试用例集合的配置覆盖率就是19/24=79%。


小结


1、组合测试对于发现交互故障非常重要

2、引起故障的参与变量数通常较少,一般2到3个,最多6个

3、组合测试既考虑了测试充分性,也兼顾可行性,一定程度上可缓解组合爆炸问题

4、通过算法可以用较少的测试用例数满足组合测试覆盖率要求

5、既满足低阶元素组合测试覆盖率,又尽可能多地覆盖高阶(通常为高1阶)元素组合,是更好的测试用例集

6、通过度量指标可以客观评价针对功能、接口、安装等关键常用测试类型的测试充分性,降低测试风险

7、组合测试覆盖针对黑盒测试,可一定程度弥补逻辑测试在程序规模、测试级别和程序设计语言、源程序可获得性等方面的限制,具有更好的适用性

8、组合测试不太适合时序问题等其他类型引起的故障。

【声明】内容源于网络
0
0
关键科技
提供GJB软件工程过程管理、软件测试、测试环境搭建、信息安全等方面的产品、技术服务、咨询和培训,欢迎各位专家批评指导。
内容 70
粉丝 0
关键科技 提供GJB软件工程过程管理、软件测试、测试环境搭建、信息安全等方面的产品、技术服务、咨询和培训,欢迎各位专家批评指导。
总阅读48
粉丝0
内容70