资源描述:
《白盒黑盒测试的测试用例设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、.第5章白盒与黑盒测试的测试用例设计5.1覆盖率的概念l覆盖率是用来度量测试完整性的一个手段l逻辑覆盖和功能覆盖l覆盖率=(至少被执行一次的item数)/item总数5.2白盒测试的测试用例设计5.2.1逻辑覆盖逻辑覆盖是以程序内部的逻辑结构为基础的测试用例设计技术,属白盒测试。为了衡量测试的覆盖程度,需要建立一些作为测试彻底度的定量衡量标准。目前常用的覆盖标准是:语句覆盖;判定覆盖;条件覆盖;判定/条件覆盖;条件组合覆盖;路径覆盖一、语句覆盖语句覆盖就是设计若干个测试用例,运行所测的程序,使得每一可执行语句至少执行一次。二、判定覆盖判定覆盖就是设计若干个测试用例,使程序中的每个判断至少出现一
2、次“真值”和一次“假值”,即程序中的每个分支都至少执行一次。三、条件覆盖条件覆盖是指利用若干个测试用例,使被测试的程序中,对应每个判断中每个条件的所有可能情况均至少执行一次。四、判定/条件覆盖判定/条件覆盖就是设计足够多的测试用例,使得程序中每个判断条件的所有可能的结果至少取到一次,又使每次判断的每个分支至少通过一次。五、条件组合覆盖解决上述问题的新标准是条件组合覆盖。条件组合覆盖就是设计足够多的测试用例,使得每个判断的所有可能的条件取值组合至少执行一次。六、逻辑覆盖举例[例1]试用逻辑覆盖测试法为采用冒泡排序(bubblesorting)法进行数据排序的C程序设计测试用例。本例是一个对k个整
3、数进行升序排序的C程序,采用的算法是冒泡排序。基本步骤是:(1)从数组中取出第2个元素;(2)如果新取出的元素大于等于其前邻元素,则转向第(4)步;(3)如果新取出的元素小于其前邻元素,则与其前邻元素交换位置;(4)将新元素与新的前邻元素比较,若仍小于新的前邻元素,则重复第(3)步;(5)取下一个元素。如果数组中元素已取完则结束排序,否则转向第(2)步。下面将给出本例的C程序。图2则是排序部分的流程图。main(){inta[11],i,j,k,temp;scanf(“%d”,k);printf(“inputnumbers:”);for(i=1;i<=k;i++)scanf(“%d”,&a
4、[i]);printf(“”);for(i=2;i<=k;i++){if(a[i]>=a[i-1])continue;for(j=i;j<=2;j--)..{if(a[j]>=a[j-1]continue;temp=a[j];a[j]=a[j-1];a[j-1]=temp;}}printf(“thesortednumbers:”);for(i=1;i<=10;i++)printf(“%d”,a[i]);}设计方法:(1)采用语句覆盖设计测试用例对本例稍作分析就不难发现,只要向数组输入先大后小两个数,程序执行时就可以遍历流程图的所有框。因此,为引例设计满足语句覆盖的测试用例是:[a={1
5、0,6},k=2]由于语句覆盖是一个最弱的覆盖标准。虽然做到了所有语句的覆盖,但可能发现不了逻辑运算中出现的错误。(2)采用判定覆盖设计测试用例对本例,在语句覆盖的基础上,如果要使程序流程经过路径L1和L2,可设计两个满足要求的测试用例:排序开始i=2i>kYesi=i+1排序结束Noa[i]>=a[i-1]Yes(L1)Noj=ij<2Yesj=j-1Noa[j]>=a[j-1]Yes(L2)Noa[j]与a[j-1]交换图2冒泡排序法中排序部分的流程图[a={10,6,7},k=3][a={10,6,12},k=3]或合并成一组测试用例:..[a={10,6,12,7},k=4]上述测试用
6、例是在满足条件a[i]>=a[i-1]或a[j]>=a[j-1]的情况下经过路径L1和L2,而未检查另一个条件a[i]=a[i-1]或a[j]=a[j-1],即使在程序中将两处“>=”都误写成“>”,测试结果仍将显示“正常”,使这个错误被掩盖。因此可将上述测试用例改为:[a={10,6,10},k=3][a={10,6,6},k=3]或:[a={10,6,10,6},k=4]则程序将在满足a[i]=a[i-1]或a[j]=a[j-1]的条件下经过路径L1和L2,实现判定覆盖。但结果是将“>=”误写成“>”的错误被掩盖,从而造成更加严重的测试漏洞。因此需要更强的逻辑覆盖标准去检验判断内部条件。(
7、3)采用条件覆盖设计测试用例要实现条件覆盖,就必须使被测试的程序中,对应每个判断中每个条件的所有可能情况均至少执行一次。对本例可设计测试用例如下:[a={10,6,12,7},k=4][a={10,6,10,6},k=4](4)采用其它覆盖设计测试用例在本例中的两个复合条件,其组成条件都不是相互独立的。若其中一个条件(如a[i]>a[i-1])为真,则另一个条件(a[i]=a[i-1])必然为假。