第3章 软件测试用例的设计2——白盒测试
- 格式:ppt
- 大小:1.67 MB
- 文档页数:44
测试⽤例设计--⿊盒测试、⽩盒测试测试⽤例设计设计数据库测试⽤例就是针对数据库的功能和性能⽽设计的测试⽅案,并编⼊测试计划中。
测试⽤例的设计既要考虑正常情况,也应考虑极限情况以及字段取最⼤值和最⼩值等边界情况。
因为测试的⽬的是暴露数据库中隐藏的错误和缺陷,所以在设计测试⽤例时要充分考虑那些易于发现错误和缺陷的测试⽤例。
好的测试⽤例应该有较⾼的发现错误和缺陷的概率。
⽩盒测试的测试⽤例设计逻辑覆盖法和基本路径测试法是计算机软件⽩盒测试⽤例设计的两个重要⽅法。
这两个⽅法也适合存储过程、触发器、嵌⼊式SQL等数据库程序的测试。
语句覆盖语句覆盖语句覆盖是设计⾜够多的测试⽤例,运⾏所测程序,使得程序中每条可执⾏语句⾄少被执⾏⼀次。
不过,每条可执⾏语句⾄少执⾏⼀次是最基本的要求,但是它不能保证发现逻辑运算和程序逻辑错误,且并不是所有的分⽀被执⾏过。
例6-1 考虑图6-2,语句覆盖的测试⽤例如表6-1所⽰。
注意,该组测试⽤例不能覆盖判断E为假的分⽀。
⽽且,如果判断C误写为X>2 or Y>3,该组测试⽤例仍能够实现语句覆盖,因此该组测试⽤例发现不了这个错误。
测试⽤例⼀般不是唯⼀的。
例如,表6-2的测试⽤例也可以实现语句覆盖。
判定覆盖判定覆盖⼜称分⽀覆盖,是设计⾜够多的测试⽤例,运⾏所测程序,使得程序中每个判断的取真分⽀和取假分⽀分别⾄少执⾏⼀次。
例6-2 考虑图6-2,其中C、E为判断。
判定覆盖的测试⽤例如表6-3所⽰。
虽然判定覆盖能够保证所有判断的取真分⽀和取假分⽀执⾏⾄少⼀次,但判定覆盖不能保证发现条件表达式错误。
例如,如果语句C误写为X>2 or Y>3,表6-3给出的测试⽤例仍能够实现判定覆盖,因此该组测试⽤例发现不了这个错误。
条件覆盖条件覆盖是设计⾜够多的测试⽤例,运⾏所测程序,使得每个判断的每个条件成分取真值和假值分别⾄少执⾏⼀次。
例6-3 考虑图6-2。
⾸先对所有判断的条件成分取值进⾏标记:v条件覆盖的测试⽤例如表6-4所⽰。
实验2 白盒测试一、实验目的与要求1、掌握白盒测试的语句覆盖和判定覆盖测试方法的原理及应用2、掌握条件覆盖、条件组合覆盖的方法,提高应用能力3、掌握路径法测试二、实验设备1、电脑PC三、实验原理白盒测试原理:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
它是把测试对象看作装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。
这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作,其又称为结构测试。
1、语句覆盖语句覆盖指代码中的所有语句都至少执行一遍,用于检查测试用例是否有遗漏,如果检查到没有执行到的语句时要补充测试用例。
无须细分每条判定表达式,该测试虽然覆盖了可执行语句,但是不能检查判断逻辑是否有问题。
2、判定覆盖又称判断覆盖、分支覆盖,指设计足够的测试用例,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假取值均曾被满足。
判定覆盖比语句覆盖强,但是对程序逻辑的覆盖度仍然不高,比如由多个逻辑条件组合而成的判定,仅判定整体结果而忽略了每个条件的取值情况。
3、条件覆盖、条件判定覆盖条件覆盖指程序中每个判断中的每个条件的所有可能的取值至少要执行一次,但是条件覆盖不能保证判定覆盖,条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
条件判定覆盖是条件覆盖和判定覆盖的组合,指设计足够的测试用例,使得判定中每个条件的所有可能的取值至少出现一次,并且每个判定取到的各种可能的结果也至少出现一次。
条件判定覆盖弥补了条件和判定覆盖的不足,但是未考虑条件的组合情况。
4、条件组合覆盖又称多条件覆盖,设计足够的测试用例,使得判定条件中每一个条件的可能组合至少出现一次。
线性地增加了测试用例的数量。
5、基本路径法在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行的路径集合,从而设计测试用例的方法。
《软件测试》第三章白盒测试方法一、填空题1、语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句。
2、判定覆盖的作用是使真假分支军被执行。
3、条件覆盖是指判定语句中的每个条件都要取真、假值各一次。
4、对于判定语句IF (a>1 AND c1、c1 AND c判断覆盖方法。
5、判定条件覆盖要求判定语句中所有条件取值的可能组合都至少出现一次。
6、在程序插桩法中,插入到程序中的代码称为探针。
二、判断题1、语句覆盖无法考虑分支组合情况。
(X )。
2、目标代码插桩需要重新编译、链接程序。
(√)。
3、语句覆盖可以测试程序中的逻辑错误。
(√)。
4、判定-条件覆盖没有考虑判定语句与条件判断的组合情况。
(X )。
5、对于源代码插桩,探针具有较好的通用性。
(√)。
三、单选题1、下列选项中,哪一项不属于逻辑覆盖?( D )。
A.语句覆盖B.条件覆盖C.判定覆盖D.判定-语句覆盖。
2、关于逻辑覆盖,下列说法中错误的是( C )。
A.语句覆盖的语句不包括空行、注释等。
B.相比于语句覆盖,判定覆盖考虑到了每个判定语句的取值情况。
C.条件覆盖考虑到了每个逻辑条件取值的所有组合情况。
— 1/2 —— 1/2 —D.在逻辑覆盖中,条件组合覆盖是覆盖率最大的测试方法。
3、关于程序插桩法,下列说法中错误的是( D )。
A.程序插桩法就是往被测程序中插入测试代码以达到测试目的的方法。
B. 程序插桩法可分为目标代码插桩法和源代码插桩。
C. 源代码插桩的程序需要重新编译、链接过程,单测试代码不参与编译、链接过程。
D. 目标代码插桩是往二进制程序中插入测试代码四、简答题1、请简述逻辑覆盖的几种方法及他们之间的区别。
答:6种。
语句覆盖(SC):设计足够多的测试用例,抄确保每条语句都被执行过。
判定覆盖(DC):设计足够多的测试用例,确保每个判定都分别取真值与假值。
条件覆盖(CC):设计足够多的测试用例,确保每个条件都分别取真值与假值。
实验2⽩盒测试实验2 ⽩盒测试⼀、实验⽬的1. 了解⽩盒测试的概念。
2. 掌握⽩盒测试的主要⽅法。
3. 掌握⽩盒测试⼯具JUnit的安装和使⽤⽅法。
4. 利⽤⽩盒测试⼯具JUnit,针对⼀个具体问题进⾏测试,掌握测试的基本过程、测试⽤例的编写和测试结果的分析⽅法。
⼆、实验内容1. ⽩盒测试⼯具JUnit的安装和使⽤⽅法。
2. 利⽤⽩盒测试⼯具JUnit测试某个Java类(⿎励测试⾃⼰编写的Java类)。
三、实验要求1. ⾃⼰编写测试⽤例。
2. 使⽤JUnit软件对测试⽤例进⾏测试。
3. 记录并分析测试结果。
四、操作⽅法与实验步骤0. 准备⼯作在Eclipse中新建项⽬Calculator,再创建类Calculator。
该类实现加、减、乘、除四则运算。
为了体验测试过程,故意给出某些错误。
代码如下:public class Calculator {private static int result;public void add(int n) {result=result+n;}public void substract(int n) {result=result-1; 正确的是result=result-n}public void multiply(int n) { 该⽅法待定义,预留接⼝}public void divide(int n) {result=result/1; 正确的是result=result/n }public int getResult() {return result;}}1. 步骤⼀:将JUnit4测试包引⼊Calculator项⽬2. 步骤⼆:⽣成JUnit4测试框架3. 步骤三:在前述⾃动⽣成的测试框架下,⾃⼰编写测试⽤例程序。
4. 步骤四:运⾏测试代码五、测试⽤例测试⽤例代码如下:import static org.junit.Assert.*;import org.junit.After;import org.junit.Before;import org.junit.Test;public class CalculatorTest {private static Calculator calculator=new Calculator();@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void testAdd() {calculator.add(2);calculator.add(3);assertEquals(5,calculator.getResult());}@Testpublic void testSubstract() {calculator.add(10);calculator.substract(3);assertEquals(7,calculator.getResult());}@Testpublic void testMultiply() {fail("Not yet implemented");}@Testpublic void testDivide() {calculator.add(6);calculator.divide(2);assertEquals(3,calculator.getResult());}}六、测试结果及分析测试运⾏结果如下图所⽰:图2.1 测试运⾏结果图根据报错信息将测试⽤例表补充完整:结合测试⽤例代码和测试结果,分析得错误原因为每⼀次运算调⽤的add()⽅法将输⼊的数据不断累加,⽽⾮初始化,因此对代码做出以下修正:①完善Calculator类中multiply⽅法:public void multiply(int n) {result=result*n;}②在每⼀项测试⽤例前增加语句:calculator.multiply(0);程序修正后测试运⾏结果如下图所⽰:图2.2 修正后的测试运⾏结果图。
⽩盒测试
语句覆盖:
代码中的所有语句都⾄少执⾏⼀遍。
判定覆盖:
使每个判断获得每种可能的结果⾄少⼀次,即对被测试模块中的每个判断要分别取真和假各⼀次进⾏测试。
条件覆盖:
每个判断中的每个条件的所有可能取值⾄少都执⾏⼀次。
条件判定覆盖:
使判定中的每个条件的所有可能取值⾄少出现⼀次,并且每个判定取到的各种可能的结果也⾄少出现⼀
次。
使判定条件中每个条件的可能组合⾄少出现⼀次。
路径覆盖:
考虑到所有可能的执⾏路径。
基本路径测试法:
各个覆盖之间的关系:
满⾜判定覆盖⼀定满⾜语句覆盖:可执⾏语句要么在判定的真分⽀,要么在假分⽀。
满⾜判定覆盖不⼀定满⾜条件覆盖,满⾜条件覆盖也不⼀定满⾜判定覆盖。
判定-条件覆盖是同时满⾜判定覆盖和条件覆盖。
满⾜判定-条件覆盖⼀定能够达到条件覆盖、判定覆盖和语句覆盖。
条件组合覆盖⼀定满⾜条件覆盖、判定覆盖、判定-条件覆盖;条件组合覆盖不⼀定满⾜路径覆盖;满⾜路径覆盖⼀定满⾜判定覆盖和语句覆盖。