判定覆盖

判定覆盖(Decision Coverage)

目录

  • 1 什么是判定覆盖
  • 2 判定覆盖的判断过程

什么是判定覆盖

  判定覆盖是指设计若干个测试用例,运行被测程序,使得程序中每个判定条件的取真分支和取假分支至少评价一次。

  判定覆盖具有比语句覆盖更强的测试能力,而且具有和语句覆盖一样的简单性,无需细分每个判定就可以得到测试用例。但是大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

判定覆盖的判断过程

  判定覆盖

  CASE让判断1和2都分别能出现 true, false .

  CASE1:

  A=TRUE, B=TRUE——判断1= True;

  C=TRUE,D=TRUE——判断2=TRUE;

  CASE2:

  A=TRUE,B=TRUE——判断1=TRUE

  C=FALSE,D=FALSE——判断2=FALSE

  CASE3:

  A=FALSE,B=TRUE——判断1=FALSE

  判断2不执行,

  这里B=FALSE情况就没覆盖到。

  修订的条件/判定覆盖(Modified Condition/Decision Coverage)

  MC/DC(修订的条件/判定覆盖,Modified Condition/Decision Coverage)准则是一种实用的软件结构覆盖率测试准则, 已被广泛地应用于软件验证和测试过程中

  下举例来详细说明MC/DC下测试用例的设计准则:

  if(A( ) || B ( ) && C( )){

    do action1();

  }else{

    do action2( );

  }

  A( ),B( ),C( )都是一个条件,而(A( ) || B( ) && C( ))叫一个Decision,如果是判定覆盖的话只需两个case就能覆盖,就是让这个decision为true和false各一次

  如果是MC/DC的话就得四个case,而且只比条件数目多一个而已,怎么计算的呢?

  定义: 在每个判定中的每个条件都曾独立的影响判定的结果至少一次, (独立影响意思是在其他的条件不变的情况下,改变一个条件)

  那么就有如下测试用例(true和false的顺序就按照A( )、B( )、C( )来):

  A( )对结果独立影响,那么就要求"B( )"和"C( )"中至少一个为false,于是有:

  A( )独立影响且decision为true:

  true  false  false

  true  false  true

  true  true  false

  A( )独立影响且decision为false:

  false  false  false

  false  false  true

  false  true  false

  B( )对结果独立影响,那么就要求"A( )"为false,"C( )"为true,于是有:

  B( )独立影响且decision为true:

  false  true  true

  B( )独立影响且decision为false:

  false  false  true

  C( )对结果独立影响,那么就要求"A( )"为false,"B( )"为true,于是有:

  C( )独立影响且decision为true:

  false  true  true

  C( )独立影响且decision为false:

  false  true  false

  需要进一步补充说明的是,MC/DC测试的主要目的是为了防止在组合条件表达式中包含边际效应(side effect),如以下语句:

  if (A( )||B( )||C()){

    statements...;

  }

  当B( )函数或C( )函数具备边际效应时,MC/DC测试存在非常大的必要性;

  原则上不应在组合条件表达式中调用包含边际效应的函数。

阅读数:271