【准则化的思想】测试充分准则的选用策略

工业界和学术界提出过的测试充分准则数不胜数。那么,我们在实际测试的时候,到底应该用哪一种呢?

实际上就是看两方面:一,看这个准则所能实现的充分性目标,是不是高于我们自己的充分性目标;二,看实施这个准则所需的资源,是不是低于我们可用资源的上限。如果两方面都满足,那这就是一个可用的准则。

我们以民航机载软件为例来进一步说明。美国航空无线电技术委员会(RTCA)发布的DO-178标准,是美国联邦航空局(FAA)、欧洲航空安全局(EASA)和中国民航局(CAAC)都认可的民机机载软件适航认证标准。所谓适航认证标准,意思就是满足这个标准的飞机,才有资格上天。DO-178这个标准定义了A/B/C/D四个质量等级,A级最高。对于A级的民航客机机载软件,明确要求测试必须满足“修改的条件/决策覆盖准则”。为什么DO-178要求用这个准则呢?

我们知道,飞机是一部非常复杂的机器,要控制这部机器的行为,需要飞行员设置大量的输入参数。

所以在机载软件的代码里,会出现非常复杂的决策,有的决策表达式里会包含十几个、甚至几十个条件。有人分析过某型号波音飞机用的电子仪表系统,这个系统的代码里,包含10个以上条件的决策表达式,多达77个。

条件越多,决策表达式的逻辑就越复杂,出错的可能性就越大。

机载软件必须保证飞行员的每一个操作都可以达到预期的控制效果,所以我们可以这样来设定测试的充分性目标:“覆盖每个条件的各种取值情况,并且要验证这些取值能否正确影响决策结果。”

在常用的布尔逻辑结构覆盖准则里面:

  ① “条件/决策覆盖准则”只要求覆盖每个条件的各种取值,并不关注每种取值和决策结果的关系,所以没有达到我们的目标;

  ② “条件组合/决策覆盖准则”要求覆盖所有可能的输入情况,这比我们的目标更高,但是这个准则存在组合爆炸问题,成本太高;

  ③ “修改的条件/决策覆盖准则”是对前面两个准则的折中。这个准则不仅要求覆盖每个条件的各种取值情况,还要求每个条件都能显示出对决策结果的独立影响,所以正好能满足我们的目标;而且,这个准则的成本问题也不像“条件组合/决策覆盖准则”那么突出。

这就是DO-178选择“修改的条件/决策覆盖准则”的原因。

有趣的是,虽然DO-178明确要求A级机载软件的测试要满足“修改的条件/决策覆盖准则”,但是它并不赞成我们只围绕这个准则来做测试选择。在DO-178的最新版本,即DO-178C里有这样一段话:“所有代码结构都应被基于规约的测试覆盖到。一旦找到了基于规约的测试尚未覆盖到的代码结构,正确的做法是对规约和代码进行对照分析,确定是基于规约的测试遗漏了某些用例,还是代码结构中有多余的实现。”

这段话的意思是,做测试选择,首先应该从规约、也就是期望入手,然后用“修改的条件/决策覆盖准则”这样基于结构覆盖的准则,来度量测试集的充分性,如果发现结构覆盖不充分,再返回去考察测试选择的问题。也就是说,我们应该综合利用来自被测对象期望和实现结构的信息,才能更好地完成测试选择

在讨论分割测试的时候,我们强调过类似的理念。分割测试的第一步是根据路径来划分子空间,第二步是根据期望来划分子空间,交叉之后,得到的才是真正的同质子空间,分割测试才有接近枚举测试的效果。如果只做第一步,分割测试就只是路径覆盖;如果只做第二步,分割测试就被阉割成了等价类划分法。

如果可用的准则不止一个,我们就需要做进一步的对比了。比如下面这种情况:

如果满足准则C1的任何测试集同时也满足准则C2,我们就说“C1包含C2”。​比方说,如果一个测试集能覆盖程序的所有路径,那就必然能覆盖所有分支,因此路径覆盖准则包含分支覆盖准则;如果能覆盖所有分支,那就必然能覆盖所有语句,因此分支覆盖准则包含语句覆盖准则。类似的,在3种决策逻辑准则之间、3种数据流准则之间,也存在这种包含关系:

“C1包含C2”,实质上意味着C1的充分性目标要高于C2。如果C1和C2都可用,为了让测试集的充分性更高,显然我们应该选用C1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值