1 简介

文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Coverage即MC/DC)的差异.软件测试是一项大型的软件工程中必不可少且非常重要的一部分,软件测试使用两种测试方法:静态测试和动态测试.静态测试是指不用执行程序的测试,它主要采取方案——代码走查、技术评审、代码审查的方法对软件产品进行测试;而动态测试是指实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术,它分为黑盒测试和白盒测试.黑盒测试是在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略;而白盒测试是一种在知道程序内部结构的情况下采用的测试技术或策略,就是要选取足够的测试用例,对源代码实现比较充分的覆盖,以便尽可能多地发现程序中的错误.它包括逻辑覆盖法和路径测试法的两种技术.C/DC和MC/DC就是白盒测试方法中的逻辑覆盖方法中的两个成员.目前这两种方法在软件测试中被广泛应用,尤其是MC/DC更是被很多大型软件测试(如飞行控制软件的测试)所应用

2 对C/DC和MC/DC的描述

2.1 C/DC的定义

C/DC是Condition/Decision Coverage的缩写,含义是条件判定覆盖.对它的定义为:

Condition/Decision Coverage——it combines the requirements for decision coverage with those for condition coverage.That is,there must be suficient test cases to toggle the decision outcome between true and false and to toggle each condition value between true and false.

例如:if A and (B or C) then⋯ else⋯ 测试这条语句使用C/DC方法可以从表l(具有3个条件的真值表)中选择它的测试集为{ TTF,FFT},分析如下:当 ,B和C的值依次分别取T,T,F时判定A and (B or C)的值为T;当将A,B和C的值依次分别取F,F,T时,判定A and (B or C)的值为F;在测试中,3个条件A,B,C的所有可能取值T、F,都被测试,而判定 A and (B or C)的所有可能取值T和F也都被执行了一次,由此说明此测试集满足C/DC方法的要求,是C/DC方法的其中一个测试集合.

2.2 MC/DC的定义

MC/DC是Modified Condition/Decision Coverage(MC/DC)的缩写,含义是修正条件判定覆盖.对它的定义为:

Condition —— a Boolean expression containing no Boolean operators:

Decision —— a Boolean expression composed of conditions and zero or more Boolean operators:

Modified Condition/Decision Coverage —— every point of entry and exit in the program has been invoked at least once,every condition in the program has taken all possible outcomes at least once,and each condition in a decision has been shown to independently affect a decision S outcome by varying just that condition while holding fixed all other possible conditions.

由上可知:在MC/DC这种测试方法中,条件表示不含有布尔操作符号的布尔表达式;判定表示由条件和零或者很多布尔操作符号所组成的一个布尔表达式;而修正条件判定覆盖方法要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变.

与上文同样的例子:if and (B or C) then⋯ else⋯ 这条语句,A and (B or C)是一个判定,A,B,C均为条件,使用MC/DC方法找出分别对应此3个条件的测试集中有4组元素为:{TTF, F,TFT,FFT}.方法如下:测试元素均从表1中选取,保持A和B的值不变测试元素TFF和TFT可以改变C条件的值和整个表达式的结果(F变成了T);而保持A和C的值不变测试元素TTF和TFT可以改变B条件的值和整个表达式的执行结果(T变成了F);而当保持B和C的值不变测试元素TFT和FFT可以改变A条件的值和整个表达式的执行结果(T变成了F).这个测试集完全满足MC/DC的要求即当锁定其它的条件保持不变,而改变判定中一项条件的值,必然引起整个表达式执行的变化.

3 C/DC和MC/DC之间的差异

3.1选取两种方法的条件不同

当以下的需求在程序测试中遇到时,需要考虑用MC/DC方法:每一个程序模块的输入和输出点都要考虑至少出现1次,每个程序的判定到所有可能的结果值要至少实现1次;程序的判定被分解为通过逻辑操作符(AND,OR,etc.)连接为BOOL条件,每一个条件对于判定的结果值是独立的,或者说单个条件的变化将导致判定的最后变化.

而对于C/DC方法而言,在程序需要测试时,由于它只要求“判定中每个条件的所有可能取值至少执行一次,同时每个判定的所有可能判定结果至少执行一次”,要求比较简单,所以它可以与其他覆盖方法一样适合于使用在绝大多数的程序的测试中.

3.2 两者的测试集不同

The MC/DC criterion enhances the condition/decision coverage criterion by requiring that each condition be shown to independently affect the outcome of the decision.MC/DC方法虽是在C/DC方法上的改进,但是两者在寻找测试集时是不同的,原因在于MC/DC方法要求对于判定中的所有条件当固定其他条件的值时每一个已选定的条件必须能够独立地影响一个判定的输出.

在以上的举例中:if A and (B or C) then⋯else⋯ 这条语句上文已找出用C/DC方法其一个测试集合为{TTF,FFT},同时如果采用MC/DC方法其测试集合可为{TTF,TFF,TFT,FFT}.对比两个测试集可发现测试集中的元素是不同的,而且元素组数也是不同(C/DC方法有2组,MC/DC方法有4组).原因是:对于C/DC方法来说,不管条件个数有多少,一个测试集中的元素组数最少可以为2个.推导如下:各个条件的取值只有两种T,F,从每个条件的取值中取出一个将它们组合起来形成一组元素,并使得这组元素分别一一对应相应条件而代人整个判定得出的最后结果值为T;然后从剩下的各个条件的取值中组合形成另一组元素并使得元素中的各个值分别对应相应条件代人整个判定后能使表达式的结果值为F(这两种情况是一定可以从真值表中找到的),这样就达到了C/DC取测试集的要求,即各个条件的可能取值T和F都必须取到,且判定结果的可能取值T,F也必须实现.而另外对于MC/DC方法来说如果在一个表达式中N个条件只出现一次,那么一个测试集中的元素组数为N+1个.这句话说明测试集中的元素组数与表达式中的条件个数有关.

3.3两者在测试中的覆盖面不同

对于MC/DC方法,它的覆盖面是要大于C/DC方法的,也就是指在测试一个程序或一个软件时,MC/DC能比C/DC找到更多的错误之处,原因就在于MC/DC的测试集检测出错误发生的概率比较高.再举一个很简单的例子:对于这条If A or B then⋯ else⋯语句,由文章的前部可知使用C/DC方法它的测试集可为{TT,FF};可是如果在这条语句中的操作符号是笔误(由and一时大意写成了or ),那么即使采用了{TT,FF}来测试仍然检测不到错误(因为T and T = T or T,且F and F = F or F,即无论将测试集中的哪组元素代人到两个判定中⋯ V ⋯ ,⋯ ^ ⋯ ,两者所得到的判定结果相同),由此可说明虽然使用了判定条件覆盖(C/DC)准则来测试语句,逻辑表达式中的有些错误仍然不能检测出来;可是如果大家用MC/DC方法,由它的规则可得测试集合为{FF,TF,FT },只需使用其中的一组数据TF,就可知道其中发生了错误.原因是:T or F值为T,而 T and F值为F,T and F语句的判定结果本来应该得到F却得到了T,由此可说明中间的操作符号发生了错误,这样就检测到了错误.所以这个例子说明MC/DC的测试集合的覆盖面要大于C/DC方法,若用户对于测试程序的质量要求较高,而不考虑其他因素,那么可以使用MC/DC的方法来测试自己的大型软件或单个程序.

3.4两者的用途不同

由于MC/DC在寻找测试集时的要求比C/DC要严格,所以相比较下在测试时为了寻找出测试集合所花费的时间多,由此而引起的人力、物力、财力三重开销也会直接攀升,但是MC/DC测试错误的准确率却是特别地高,因此MC/DC适合那些大型的并且要求测试非常精确的软件测试所用.为达到用户的目的和一个较高的信价比,近年来MC/DC方法主要应用于大型的航空航天软件程序的测试上.

对比而言C/DC方法要求较低,开销少,而覆盖率也低,所以比较适合对于例如C++,JAVA等小型的程序的}贝4试当中使用,这正是因为小型程序所拥有的项目经费较少、语句代码少则导致相应地寻找错误也比较容易.此时使用C/DC方法足以测试软件.

4总结

本文介绍了条件判定覆盖和修正条件判定覆盖两个测试方法的定义和使用,并且通过比较分析出两者之间所存在的差异.目前,在市场上,C/DC和MC/DC两种测试方法被社会广泛应用,但是由于两者的各个不同点,用户必须根据软件自身测试时能给出的条件及软件测试所需要达到的程度选择使用适当的测试方法.

判定覆盖白盒测试java_白盒测试--条件判定覆盖和修正条件判定覆盖的差异相关推荐

  1. 判定覆盖白盒测试java_白盒测试系列(四)条件判定覆盖

    条件判定覆盖 一.定义: 程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次, 且使得各判定中的每个条件获得各种可能的取值至少满足一次. 二.特点: 1.综合了条件覆盖和判定 ...

  2. 转贴一篇经典文章--条件判定覆盖和修正条件判定覆盖的差异

    1 简介 文章的目的在于通过比较发现条件判定覆盖(即Condition/Decision Coverage C/DC)和修正条件判定覆盖(Modified Condition/Decision Cov ...

  3. 软件测试实验三 修正条件/判定覆盖测试设计

    一.实验目的 1. 巩固所学的修正条件/判定覆盖测试方法: 2.提高运用语修正条件/判定覆盖测试方法的能力. 二.实验前提 1. 掌握逻辑覆盖的基本方法.概念: 2.熟悉程序语言的逻辑结构与基础知识: ...

  4. MC/DC(修正条件/判定覆盖):如何达到100%覆盖率?

    文章目录 MC/DC(修正条件/判定覆盖) 一个测试需求结构的成功方法 TPT与MC/DC MC/DC(修正条件/判定覆盖) MC/DC虽然是软件测试中的一个通用术语,但是它的正确用法以及安全相关的角 ...

  5. 判定的测试,语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,组合覆盖,修正的判定条件覆盖

    下面只是个人理解,可能有不准确之处! 1 语句覆盖 2 判定覆盖(分支覆盖) 3 条件覆盖 4 判定/条件覆盖 5 组合覆盖 6 修正的判定/条件覆盖 1 语句覆盖 每个可执行语句都走一遍,即测试用例 ...

  6. python 白盒测试_白盒测试教程 - 颜丽的个人空间 - OSCHINA - 中文开源技术交流社区...

    总共贴了39节,后续还有很长,共122节,文章名为'白盒测试教程' 1.白盒测试概念 2.测试覆盖标准 3.逻辑驱动测试 4.基本路径测试 白盒测试概念 1.白盒测试也称结构测试或逻辑驱动测试,是一种 ...

  7. python白盒测试_白盒测试方法

    白盒测试方法 一.前言 定义: 白盒测试又称结构测试.透明盒测试.逻辑驱动测试或基于代码的测试.白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及 ...

  8. 软件测试用例白盒测试,软件测试-白盒测试用例练习题

    <软件测试-白盒测试用例练习题>由会员分享,可在线阅读,更多相关<软件测试-白盒测试用例练习题(5页珍藏版)>请在人人文库网上搜索. 1.白盒测试用例练习一.为以下所示的程序段 ...

  9. 修正的判定条件覆盖例题_硬核:嵌入式代码覆盖率统计方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出.代码覆盖率可以有效避免包含未测试代码的程序被发布. 1. 问题背景 代码覆盖(Code coverage)是软 ...

最新文章

  1. Top 15 不起眼却有大作用的 .NET功能集
  2. Latex使用技巧01:改变数学公式字体的颜色
  3. OpenStack Newton发布,EasyStack核心代码贡献中国第一!
  4. go开源项目influxdb-relay源码分析(一)
  5. 毁掉云计算项目的三个“好办法”
  6. PHP json_encode 只支持utf8编码
  7. cesium的clock开始,结束,控制速率
  8. 一个账号,防止多设备登陆
  9. 影响力-你为什么说是
  10. 线程安全和线程不安全理解
  11. 国内搜索大哥iOS面试题
  12. 黄聪:基于jQuery+JSON的省市区三级地区联动
  13. JSONObject.fromObject() Maven依赖
  14. 安卓手机左右声道调节应用下载_闪电全能格式转换器下载_闪电全能格式转换器官方下载[转换工具]...
  15. Mac 安装JDK 8
  16. Spring AOP实现原理简介
  17. 【定量分析、量化金融与统计学】分类变量与多元非线性关系与子集的选择
  18. Foxmail登录各种邮箱方法汇总
  19. 日常开单送货VBA模块
  20. php断言什么意思,一起学习PHP中断言函数的使用

热门文章

  1. [连载]Java程序设计(01)---任务驱动方式:英制单位转换成公制单位
  2. 【转】手机佳软推荐:LBE隐私卫士
  3. Anniversary party (hdu1520) 没有上司的晚会
  4. php ast 抽象语法树,AST抽象语法树
  5. 如何写好一份工作报告(转)
  6. 旧稿--前阿里CEO卫哲的万字长文--B2B春天来了
  7. Android手机信号强度介绍
  8. Git仓库从零到熟练(图文超级详细)
  9. 2021/04/29 插件qrcodejs2将后端链接转换成二维码
  10. 测试方法——等价类划分基础测试方法