您好, 访客   登录/注册

判定覆盖和条件覆盖的比较研究

来源:用户上传      作者:

  摘要:判定覆盖和条件覆盖是白盒测试中常用的方法,分析并得出结论:在具有短路特性的计算机语言编写的程序中,满足条件覆盖的测试用例是满足判定覆盖的,反之则不然。
  关键词:白盒测试;逻辑覆盖法;判定覆盖;条件覆盖
  中图分类号:TP301文献标识码:A文章编号:1672-7800(2011)01-0071-02
  
  
  作者简介:王静(1975-),女,湖北武汉人,硕士,中南财经政法大学武汉学院信息系软件设计师,研究方向为现代农业装备设计与计算机测控。0引言
   逻辑覆盖法是传统的白盒测试方法之一。逻辑覆盖法又可以分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖。
   判定覆盖,也称为分支覆盖,它的基本思想是:设计若干测试用例,使被测程序中每个判定的取真分支和取假分支至少执行一次,即判断真假值均曾被满足。而条件覆盖的基本思想是:要编写足够的测试用例以确保将一个判断中的每个条件的可能结果至少执行一次。在梅尔斯的《软件测试的艺术》一文中提到“虽然条件覆盖准则乍看上去似乎满足了判定覆盖准则,但并不总是如此”。 并举例:“判断IF(A&B),覆盖准则将要求编写两个测试用例:A为真,B为假;A为假,B为真,但是这并不能使IF语句中的THEN被执行。”,但不同的计算机语言各自有不同的特点,在类C的语言中,运算符“&&”和“||”具有“短路性”,也就是说如果左边的操作数已足以确定整个运算的结果,那么右边的操作数就不会参与运算。在这种情况下来讨论判定覆盖测试和条件覆盖测试的强弱。
   当判定中只有一个条件时,判定覆盖和条件覆盖显然是等价的。
   当判定是多个条件的组合时,要分别讨论 ,例如A、B两个条件(当然也可以有更多的条件,但它们都可以被分解成两个条件的组合),它们的组合只有两种形式,两个条件相与及相或。我们分别讨论。
  1当复合条件是(A && B)时
   它们的结果如表1所示,可见只有在A、B皆为真时,结果才为真,所以在类C语言中,根据短路性,只要A为假,B就不会被执行,因为结果必为假,只有当A为真时,才会去执行B。
  表1A&&B01000101现在我们来讨论它的判定覆盖和条件覆盖。
  1.1判定覆盖测试
   用最少的测试用例来进行100%的判定覆盖,有如下两种情况:
  表2测试用例(1)表3测试用例(2)ABA && B111120-0ABA && B11112100当判定为真时,要求A、B都为真,当判定为假时,只要其中一个为假就行了,在表2中,是A为假的情况,因为A为假,那么B这个条件的无所谓真假,因为已经可以确定判定为假,程序根本不会去判断B,B的假没有执行,这组测试用例显然没有满足条件覆盖;表3中,要执行判断B为假,那么A就必须为真。这样,其中A的假没有执行。由此所见,用最少的测试用例实现判定覆盖时,无论哪一种情况,判定覆盖都是不满足条件覆盖的。除非再添加测试用例。
  1.2条件覆盖测试
   用最少的测试用例来进行100%的条件覆盖,若希望A、B的真假都真正执行的话,那么A,B只能如表4中所示,此时,可以看到判定的真假都覆盖了。
  由以上分析可得,当判定为两个条件相与的情况下,条件覆盖满足判定覆盖。
  2当复合条件是(A ||&& B)时
   它们的结果如表5所示,可见只有A、B都为假时,结果才为假,只要有任一个为真,结果就为真。在类C语言中,根据短路性,只要A为真,B就不会再去执行判断,因为此时结果定为真,只有当A为假时,结果不明确才会再去执行和判断B。
  表4测试用例(3)表5A||BABA && B1111210030-001001111
  2.1判定覆盖测试
   用最少的测试用例实现100%的判定覆盖,有如下两种情况
  表6测试用例(4)表7测试用例(5)ABA||B11-12000ABA||B10112000当判定为假时,要求A、B都为假,当判定为真时,只要其中任有一个为真就行了(事实上,根据短路性也不会出现同时执行A、B为真的情况),在表6中,是A为真的情况,那么B这个条件就不会去执行和判断,因为此时判定已可确定为真;B的假没有执行判断;表7中,要执行B为真,那么A就必须为假。A的真始终没有执行;由此所见,想要用最少的测试用例来实现判定覆盖,无论哪一种情况,判定覆盖都没有包含条件覆盖。除非再添加测试用例。
  2.2条件覆盖测试
   用最少的测试用例来进行100%的条件覆盖,若希望A、B的真假都真正执行的话,那么A,B只能如表8中所示,此时,判定的真假都覆盖了。
  表8测试用例(6)ABA||B1011200031-1 由以上分析可得,当判定为两个条件相或的情况下,条件覆盖满足判定覆盖。
   3结束语
   从上面的分析中,我们可以得出结论:在具有短路特性的编程语言编写的程序中,进行逻辑覆盖测试时,条件覆盖测试用例是满足判定覆盖测试的,反之则不然。在这种情况下条件覆盖的测试强度高于判定覆盖。
   虽然并非所有的编程语言都有这种短路的特性,可事实上许多的测试初学者在学习判定覆盖和条件覆盖,以及用这两种方法设计测试用例时往往忽略了部分语言的这种特性,而是以点就面地针对所有编程语言编写的程序,导致设计出来的测试用例质量不高。所以在测试中保持严谨的态度,具体问题具体分析才能设计出高效的测试用例。
  参考文献:
  [1][美]梅尔斯,等.软件测试的艺术[M].王峰,陈杰,译.北京:机械工业出版社,2006.
  [2]吴晓周.软件测试综述[J].软件导刊,2009(5).
  (责任编辑:余晓)
  
  
   Decision Coverage VS Condition coverage
  
  Abstract:Decision Coverage and condition coverage is white-box testing the commonly used method, analyzed and concluded: in with short circuit characteristics of computer language program, satisfy the conditions coverage of test cases is to satisfy decision Coverage , conversely otherwise.
  Key Words: White-Box Test; Logic-coverage Testing; Decision Coverage; Condition Coverage

转载注明来源:https://www.xzbu.com/8/view-9039786.htm