一、白盒测试基础概念

1. 定义与核心目标
- 定义:基于程序内部逻辑结构(如代码语句、控制流、数据流)设计测试用例,关注代码执行路径。
- 核心目标:验证代码逻辑正确性、覆盖代码分支与路径、发现代码层面的缺陷(如逻辑错误、条件遗漏)。
2. 适用场景
- 单元测试阶段(测试函数、方法)、集成测试阶段(模块间接口逻辑)。
- 测试对象:代码语句执行、条件判断、循环结构、分支逻辑。
二、白盒测试核心技术:逻辑覆盖法(必考)
模块1:六大覆盖标准(需对比强度)
1. 语句覆盖(最弱覆盖)
2. 判定覆盖(分支覆盖)
3. 条件覆盖
- 定义:覆盖所有条件的真假情况(每个条件的true/false至少一次)。
- 示例:
if (x>0 && y<10) { ... }
4. 判定-条件覆盖
- 定义:同时满足判定覆盖和条件覆盖(每个判定的真假分支+每个条件的真假至少一次)。
- 特点:比前三者更强,但可能遗漏条件组合。
5. 条件组合覆盖(最强覆盖之一)
6. 路径覆盖(最强覆盖)
- 定义:覆盖程序中所有可能的执行路径(从入口到出口的每条路径至少一次)。
- 示例:含循环的程序,需覆盖循环0次、1次、多次的路径。
模块2:覆盖强度对比与选择
覆盖类型 | 强度 | 特点 |
---|
语句覆盖 | 低 | 仅覆盖语句,可能遗漏分支和条件 |
判定覆盖 | 中 | 覆盖分支,但可能忽略条件细节(如多个条件组合中的单个条件) |
条件覆盖 | 中 | 覆盖条件,但可能不覆盖完整分支 |
判定-条件覆盖 | 中高 | 综合判定和条件,但仍可能遗漏条件组合 |
条件组合覆盖 | 高 | 覆盖所有条件组合,用例数随条件数指数增长,2ⁿ |
路径覆盖 | 最高 | 覆盖所有路径,适用于复杂逻辑,但用例数可能极多 |
三、白盒测试核心技术:控制流图与圈复杂度(必考)
1. 控制流图绘制
2. 圈复杂度V(G)计算(3种方法)
- 公式法:V(G) = e - n + 2(e为边数,n为节点数)。
- 判定节点法:V(G) = 判定节点数 + 1(判定节点指if/while/for等)。
- 区域法:V(G) = 区域数(包括外部区域)。
- 示例:上述Sort函数中,判定节点为while(iRecordNum>0)和if(iType0)/else if(iType1),共2个判定节点,故V(G)=2+1=3。
3. 独立路径确定
- 定义:从入口到出口的路径,且至少包含一条新边(未被其他路径覆盖的边)。
- 示例:V(G)=3时,独立路径数为3,如:
- while条件为假,直接退出。
- while条件为真,iType==0,执行x=y+2。
- while条件为真,iType==1,执行x=y+10。
- while条件为真,iType==2,执行x=y+20。(注:实际路径数可能因循环次数调整)
四、白盒测试综合实践(必考题型)
1. 代码分析与覆盖测试用例设计
例题:根据代码设计满足不同覆盖的用例(作业手册单元3简答题)
void Sort(int iRecordNum, int iType) {int x=0, y=0;while(iRecordNum>0) {if(iType==0) x=y+2;else if(iType==1) x=y+10;else x=y+20;iRecordNum--;}
}
(1)语句覆盖用例
- 输入:iRecordNum=0, iType=任意值(跳过while循环,覆盖x=0,y=0语句)。
(2)判定覆盖用例
- while真分支:iRecordNum=1, iType=0(执行while内逻辑)。
- while假分支:iRecordNum=0, iType=0(不执行while)。
(3)路径覆盖用例
- 路径1:while假(iRecordNum=0)。
- 路径2:while真→iType=0→x=y+2(iRecordNum=1, iType=0)。
- 路径3:while真→iType=1→x=y+10(iRecordNum=1, iType=1)。
- 路径4:while真→iType=2→x=y+20(iRecordNum=1, iType=2)。