软件测试
软件测试可以按测试范围、测试目的、测试对象、测试过程分类
按测试范围分类 | 按测试目的分类 |
按测试对象分类 | 按测试过程分类 |
其他测试技术 |
单元测试unit testing 组件测试component testing 集成测试integration testing,string testing 系统测试system testing 验收测试acceptance testing,beta testing 安装测试installation testing |
A、正确性测试correctness testing 白盒测试white-box 黑盒测试black-box B、性能测试performance testing C、可靠性测试reliability testing 强壮性测试robustness,strong testing 异常处理测试exception handing testing 负载测试stress,load testing D、安全性测试security testing |
单元测试unit testing 组件测试component testing 模块测试module testing 程序测试program testing 系统测试system testing 文档测试documentation testing |
需求阶段的测试requirements phase testing 设计阶段的测试design phase testing 程序阶段的测试program phase testing 测试结果的评估evaluating test results 安装测试installation phase testing 验收测试acceptance testing 测试变化:维护testing changes:maintenance |
回归测试regression testing 压力测试stress testing 恢复测试recovery testing 安全测试security testing 兼容性测试compatibility testing |
软件测试覆盖包括分支覆盖,语句覆盖以及条件覆盖,这是白盒测试中一个很基本的测试概念,但是最近和几位搞了多年测试的朋友谈及此事,大家都搞不大清楚。下面我通过一个例子来深入探讨一下这个问题:
我们首先来看一下这几些测试覆盖的定义:
定义一、语句覆盖:它要求被测程序的每一可执行语句在测试中尽可能都检验过;
定义二、分支覆盖:要求程序中所有判定的分支尽可能得到检验;
定义三、条件覆盖:当判定式中含有多个条件时,要求每个条件的取值均得到检验;
从这些定义我们可以很容易理解到语句覆盖是把程序中的所有的语句都给覆盖到;
分支覆盖是把程序中每个分支都给覆盖到;
条件覆盖是把判断条件中所有的条件都给覆盖到。
下面我们通过一个简单的例子来描述一下
以下是引用片段: 0: 1:if ((a<150)||(b<200)){ 2: for (i=a;i<100;i++) 3: { 4: println(“A”);} 5:}else{ 6:println (“B”); 7:} |
分支覆盖:
1)在0处设置a=120,b 任意
将执行1,2,5
2)在0处设置a=200,b=400
将执行1,5,6,7
这里所有的分支都走到,也就是说要达到分支覆盖率100%,要设计2组测试用例
a | b |
120 | 任意 |
200 | 400 |
语句覆盖:
1)在0处设置a=40,b 任意
将执行1,2,3,4,5
2)在0处设置a=200,b=400
将执行1,5,6,7
这里所有的语句都走到了,也就是说要达到语句覆盖率100%,要设计2组测试用例
a | b |
40 | 任意 |
200 | 400 |
而在分支覆盖中语句3,4没有走到
条件覆盖:
由于第一个条件是if ((a<150)||(b<200)) 所以需要设计测试用例
a | b | 备注 |
40 | 50 | 全部满足 |
160 | 150 | a不满足,b满足 |
40 | 250 | a满足,b不满足 |
150 | 250 | a,b都不满足 |
条件覆盖只要求把所有的条件都覆盖就可以了。
这样一来我们就把这几个概念搞得很清楚了。