白盒与黑盒测试解析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测试用例:
数据
C1
C2
C3
P1
P2
路径
{x=3, y=3} T
T
T
T
F
a-b-e-f
{x=-3, y=0}Biblioteka BaiduF
F
F
F
T
a-c-d-f
所有条件的可能取值都满足了一次,而且所有的判断本身 的判定结果也都满足了一次。
测试的充分性:
达到100%判定-条件覆盖标准一定能够达到100%条件 覆盖、100%判定覆盖和100%语句覆盖。
语句覆盖对于多分支的逻辑运算是无法全面反映的
测试用例:
◦ {x=3, y=3}可以执行到语句块1和语句块4,所走的路径:ab-e-f
◦ {x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的 路径:a-c-d-f 这样,通过两个测试用例即达到了语句覆盖的标准,当然, 测试用例(测试用例组)并不是唯一的
跟语句覆盖相比:由于可执行语句要不就在判定的真分支,要 不就在假分支上,所以,只要满足了判定覆盖标准就一定满足 语句覆盖标准,反之则不然。因此,判定覆盖比语句覆盖更强
条件覆盖是指设计足够多的测试用例,使得程序中 每个判定中包含的每一个条件的可能取值(真/假) 都至少被执行一次
条件覆盖与判定覆盖相比较,增加了对符合判定情 况的测试,增加了测试路径。要达到条件覆盖,需 要足够多的测试用例,但条件覆盖并不能保证判定 覆盖
一般做白盒测试不会直接根据 源代码,而是根据流程图来设 计测试用例和编写测试代码, 在没有设计文档时,要根据源 代码画出流程图:
测试用例:
数据 {x=3, y=3}
C1 C2 C3 P1
P2
路径
T
TTT
F
a-b-e-f
{x=-3, y=0}
F
FFF
T
a-c-d-f
三个条件的各种可能取值都满足了一次,因此,达到了100%条件覆盖的标准。 测试的充分性:
数据
P1
P2
路径
{x=3, y=3} T
F
a-b-e-f
{x=-3, y=0} F
T
a-c-d-f
两个判断的取真、假分支都已经被执行过,所以满足了判断覆 盖的标准
测试的充分性:
假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误 地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测 试用例来进行测试,仍然可以达到100%的语句覆盖,所以判断 覆盖无法发现上述的逻辑错误
设计足够多的测试用例,使得被测试程序中的每个 判断的所有可能条件取值的组合至少被满足一次
注意:
a、条件组合只针对同一个判断语句内存在多个条件的情况, 让这些条件的取值进行笛卡尔乘积组合。
白盒测试的主要方法
◦ 静态方法:
代码审查 静态结构分析法
◦ 动态方法:
逻辑覆盖方法 基本路径覆盖 域测试 符号测试、Z路径覆盖 程序变异
控制流测试(第4章)
是通过对程序逻辑结构的遍历实现程序的覆盖
从覆盖源代码的不同程度可以分为以下六个标准:
◦ 语句覆盖 ◦ 判定覆盖(又称为分支覆盖) ◦ 条件覆盖 ◦ 判定-条件覆盖(又称为分支-条件覆盖) ◦ 条件组合覆盖 ◦ 路径覆盖
软件工程学科研究生课程–—— 软件测试技术
软件测试基本概念 软件测试方法的分类 软件测试技术基础 软件测试流程 软件测试过程 性能
白盒测试/黑盒测试
什么是白盒测试
◦ 已知产品的详细设计过程,可以通过测试证明每种内部 操作是否符合设计规格要求,所有内部成分是否已经通 过检查。又称Structure Based Testing或Structural Testing
int logicExample(int x, int y) {
int magic=0; if(x>0 && y>0) {
magic = x+y+10; // 语句块1 } else {
magic = x+y-10; // 语句块2 }
if(magic < 0) {
magic = 0; } return magic; }
判定覆盖比语句覆盖要多几乎一倍的测试路径,当 然也就具有比语句覆盖更强的测试能力
同样判定覆盖也具有和语句覆盖一样的简单性,无 须细分每个判定就可以得到测试用例
一般做白盒测试不会直接根据 源代码,而是根据流程图来设 计测试用例和编写测试代码, 在没有设计文档时,要根据源 代码画出流程图:
测试用例:
测试的充分性:
假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误 地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测 试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句 覆盖无法发现上述的逻辑错误
在六种逻辑覆盖标准中,语句覆盖标准是最弱的。
判定覆盖也叫分支覆盖,即设计若干测试用例,使 得程序中的每个判定至少都获得一次“真”值和 “假”值,也就是使程序中的每个取“真”分支和 “假”分支至少均执行一次
// 语句块3 // 语句块4
一般做白盒测试不会直接根据 源代码,而是根据流程图来设 计测试用例和编写测试代码, 在没有设计文档时,要根据源 代码画出流程图:
语句覆盖是指选择足够多的测试用例,使得程序中 的每一条可执行语句至少被执行一次。它以程序中 每条可执行语句是否都执行到为测试终止的标准
语句覆盖可以很直观地从源代码得到测试用例,无 须细分每条判定表达式。由于这种测试方法仅仅针 对程序逻辑中显式存在的语句,对于隐藏的条件和 可能到达的隐式逻辑分支是无法测试的
设计足够多的测试用例,使得被测试程序中的每个
判断本身的判定结果(真假)至少满足一次,同时,
每个逻辑条件的可能值也至少被满足一次。即同时 满足100%判定覆盖和100%条件覆盖的标准
一般做白盒测试不会直接根据 源代码,而是根据流程图来设 计测试用例和编写测试代码, 在没有设计文档时,要根据源 代码画出流程图:
上面的测试用例同时也到达了100%判定覆盖的标准,但并不能保证达到100%条 件覆盖标准的测试用例(组)都能到达100%的判定覆盖标准,看下面的例子:
数据
C1 C2 C3 P1
P2
{x=3, y=0}
T
F
T
F
F
{x=-3, y=5} F
T
F
F
F
路径 a-c-e-f a-c-e-f
既然条件覆盖标准不能100%达到判定覆盖的标准,也就不一定能够达到100%的 语句覆盖标准