黑盒测试,就是不考虑内部实现细节,知道它的功能,相应地测试它的功能,也叫功能测试。 白盒测试,看得到内部实现细节,针对性地测试。
单元测试、集成测试、系统测试、性能测试,这些是根据测试标准的来分的: 以代码单元为测试标准的的是单元测试; 以模块接口为测试标准的是集成测试; 以整个系统为测试标准的的是系统测试; 以系统性能为测试标准的是性能测试。 单元测试应该黑盒白盒测试相结合,测试员必须了解程序设计功能:不了解被测程序的设计功能,纯粹根据代码来设计用例,这种测试几乎没有意义。 int func(int a, int b) { return a - b; } 加法函数是返回两个数的和,但将“+”误写成了“-”,如果输入两个1,并判断输出是不是等于2,马上就会发现错误。如果测试员不了解代码功能,通过阅读代码来了解,以为这是一个减法函数,输入两个1,将输出设定0,这种用例再多也无济于事。
如果文档比较模糊,通过阅读代码来确认设计功能,是可行的,但决不能完全依赖阅读代码来设计用例。单元测试要么由程序员进行,要么必须有代码文档,使测试员可以了解代码的设计功能,别无选择。 语句覆盖、判断覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修正条件覆盖 代码的逻辑单位主要有:语句,条件、判定、分支、路径。示例: int WhiteBox(int A, int B, int X) { /*判定1*/ if( A>1/*条件1*/ && B==0/*条件2*/ ) { /*分支1*/ /*语句1*/ X = X/A; /*语句2*/ A+1; } /*分支2:省略的else分支,这是一个空分支*/
return X; /*语句3*/ } int function(bool a,bool b,bool c){ int x; x=0; if(a&&(b||c)){ x=1; return x; } } 1、语句覆盖(SC) 选择足够多的测试数据,使得被测程序中的每条语句至少执行一次。 2、判断覆盖(DC) 设计足够的测试用例,使得程序中的每个判定至少都获得一次真值或假值。或者使得程序中的每一个取真分支和取假分支至少经历一次,因此判定覆盖又称为分支覆盖。 不足是:假如这一程序段中判定的逻辑运算有问题。判定的第一个运算符 && 错写成运算符 || 。或者第二个运算符 || 错写成运算符 &&,这时使用上面的测试用例可以达到100%的判定覆盖,仍然无法发现上述的逻辑问题。 3、条件覆盖(CC) 构造一组测试用例,使得每一判定语句中,每个逻辑条件的可能是至少满足一次。 用例一: a=F,b=T,c=F a=T,b=F,c=T 用例一在满足条件覆盖的同时,把判定的两个分支也覆盖了。但条件覆盖并没有实现判定覆盖。条件覆盖最后得出相同的判定结果。 用例二: a=F,b=T,c=T a=T,b=F,c=F 用例二覆盖了条件的测试用例并没有覆盖分支。 4、条件判定组合覆盖(CDC) 也就是条件和判定组合形式的覆盖用例。 使得判定中的每个条件的所有可能真或假,至少出现一次; 并且每个判定本身的判定结果真或假也至少出现一次。 也就是既使得条件覆盖达到,同时也使得判定覆盖时,构造的测试用例。 如 a = T b = T c = T 和 a = F b = F c = F 5、多条件覆盖(MCC) 设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足多条件覆盖的测试用例是一定满足,判定覆盖、条件覆盖、条件判定组合覆盖的。 但导致测试用例呈现指数级增加 6、修正条件覆盖(MCDC) 它要求满足两个条件,首先,每一个程序模块的入口和出口都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次程序的判定被分解为通过逻辑操作符(and、or)连接的bool条件,每个条件对于判定的结果值是独立的。 满足MC/DC的用例数下界为条件数+1,上界为条件数的两倍,例如,判定中有三个条件,条件组合覆盖需要8个用例,而MC/DC需要的用例数为4至6个。如果判定中条件很多,用例数的差别将非常大,例如,判定中有10个条件,条件组合覆盖需要1024个用例,而MC/DC只需要11至20个用例。 |