一、白盒测试的特点和概念
白盒测试又称为结构测试或逻辑驱动测试,它是把测试对象看成一个透明的盒子,它允许测试人员利用程序内部的逻辑结构设计测试用例,对程序所有逻辑路径进行测试。
白盒测试的优缺点
优点:代码覆盖率高
缺点:覆盖所有代码路径难度大,业务功能可能覆盖不全,测试开销大
二、白盒测试的方法
1,静态
(1)桌面检查
这是一种传统的检查方法,由程序员检查自己编写的程序。程序员在程序通过编译之后,对源程序代码进行分析、检查,并补充相关的文档,目的是发现程序中的错误。
(2)代码审查
代码审查是由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。具体过程如下:
第一步, 小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为审查的依据。小组成员在充分阅读这些材料后,进入审查的下一步。
第二步,召开程序审查会。 每个成员将所发材料作为审查依据,但是由程序员讲解程序的结构、逻辑和源程序。在此过程中,小组成员可以提出自己的疑问;程序员在讲解自己的程序时,也能发现自己原来没有注意到的问题。
注意: 在进行代码检查前应准备好需求文档、程序设计文档、程序的源代码清单、代码编码标准、代码缺陷检查表和流程图等。
(3)代码走查
走查与代码审查基本相同,其过程分为两步:
第一步: 把材料先发给走查小组每个成员,让他们认真研究程序。
第二步: 开会。
与代码审查不同的是,让审查小组成员“充当”计算机,即首先由测试组成员为所测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿着程序的逻辑运行一遍,随时记录程序的踪迹,提供给最后阶段的分析和讨论使用。
(4)代码扫描工具
2,动态
(1)逻辑覆盖法(语句覆盖、判断覆盖、条件覆盖、判断条件覆盖、条件组合覆盖、路径覆盖)
逻辑覆盖法:是通过对程序逻辑结构的遍历实现程序的覆盖。 覆盖率:是用来度量测试完整性的一个手段。
覆盖路计算公式:至少被执行一次的item数/item总数(其中item包括语句、判定、条件、判定条件、条件组合、路径)
将代码转话为流程图
语句覆盖
程序中语句一共有四个为语句块1-4
语句覆盖的局限性:不能准确判断运算中的逻辑关系错误。
例如判断条件1和2更改为(x>0||y>0)测试依旧通过
判定覆盖
判定覆盖:也叫分支覆盖,设计测试用例,使得程序中的每个判断的“真”和“假”都至少被执行一次。即:程序中的每个分支至少执行一次。
判定覆盖率:每个判定的真假值至少出现一次/判定结果的总数
例如:案例代码中有判定2个,判定结果4个 设计测试用例执行了3个分支,分支覆盖率为3/4=75%
判定条件的局限性:不能准确判断运算中的逻辑关系错误。
例如判断条件1和2更改为(x>0||y>0)测试依旧通过
条件覆盖
条件覆盖:设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。
条件覆盖率:每个条件真假值出现一次/条件结果的总数
案例代码中有判定2个,条件3个,条件结果6个设计测试用例执行了5个条件结果,条件覆盖率为5/6=83%
条件覆盖的局限性:条件覆盖不能保证判定完全覆盖,如p1中都为假没有完全覆盖
判定条件覆盖
判定条件覆盖:设计测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值(真假)也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。
判定条件覆盖率:每个判定真假值和每个条件真价值至少出现一次/(判定结果的总数+条件结果的总数)
案例代码中有判定2个,条件3个,判定结果4个,条件结果6个殳计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率
判定条件覆盖的缺陷:会忽略条件中的与和或的情况
条件组合覆盖
条件组合覆盖:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。
条件组合覆盖率:条件组合出现一次的数量/条件组合的总数
案例代码中有判定2个,条件3个(判定1有2个条件,判定2有1个条件)判定1的条件组合为4个,判定2的条件组合为2个设计测试用例执行了5个条件组合,条件组合覆盖率为5/(4+2)=83%
条件组合的局限:不能保证所有路径都被执行
路径覆盖
路径覆盖:设计测试用例,覆盖程序中所有可能的路径
路径覆盖率:至少被执行过一次的路径数/总的路径数
案例代码中共有4条路径设计测试用例执行了3条路径,路径覆盖率为3/4=75%
路径覆盖缺陷:路径全覆盖可能条件无法全覆盖
(2)基本路径测试法
基本路径测试法:在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例 基本路径测试法步骤:
1,根据代码画出程序控制流图
2,计算程序的环路复杂度
(1)画出控制流图
(2)计算程序的环路复杂度
方法有三种 流图中区域的数量对应于环型的复杂性。
给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中节点的数量。
右图:V(G)=10-8+2给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定节点的数量。右图:V(G)=3+1
3,导出可执行路径
4,设计测试用例