白盒测试
01什么是白盒测试
白盒测试也称结构测试,透明盒测试。主要用于单元测试阶段,代码和逻辑的测试,重点复杂的测试,是一种测试用例设计方法。不同于黑盒和灰盒,白盒测试是可以看到内部代码如何运作的,但没有UI界面来观测,白盒测试的目标是通过测试代码逻辑来检测产品内部是否符合规定正常运行。
02白盒测试方法
白盒测试分为两种测试方法,一种是静态的另外一种是动态的。
静态测试方法
桌面审查,代码审查和代码走查等。
动态测试方法
逻辑覆盖法(重点)
概念:是通过对程序逻辑结构的遍历实现程序的覆盖。
覆盖率:是用来度量测试完整性的一个手段。其中的逻辑是指语句,判断,条件,判定条件,条件组合和路径等
流程:一般来说逻辑覆盖法的使用流程是先将流程图转换成代码(当然有的情况下是将代码转换成流程图)
图1
图2
图3
我这边是先将图1的流程图转换得到图2的代码(java在idea中编写)
语句覆盖
概念:设计测试用例,使得程序中每条语句至少被执行一次
语句覆盖率:至少被执行一次的语句数量/可执行的语句总数
局限性:判断中“&&”和“||”没法做出精准识别
语句覆盖的缺陷:在六种逻辑覆盖标准中,语句覆盖标准最弱。
判断覆盖
概念:在设计测试用例,使得程序中的每个判断的“真”和“假”都至少被执行一次。即:程序中的每一条分支语句都至少被执行一次。
判断覆盖率:每个判定的真假值至少出现一次/判断结果的总数
结论: 只要满足了判断覆盖标准就能满足语句覆盖标准。
(解释:满足了判断覆盖标准就满足了程序中的每个判断的“真”和“假”都至少被执行了一次,那么每个判断所包含的语句就都被执行了一次,而且剩下的语句是每次运行的时候都会执行的。)
条件覆盖
概念:设计测试用例,使得判断中的每个条件至少有一次去真值,有一次去假值。
条件覆盖率:每个条件的真假值至少出现一次/条件结果的总数
结论:条件覆盖比判断覆盖,增加了对判定中所有条件的测试
局限性:但条件覆盖并不能保证判断覆盖,(解释:在设计测试用例中,实现了对条件的覆盖,但是却不能确保实现对判断的覆盖。)
判断条件覆盖
概念:设计测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次 ,同时,每个逻辑条件的可能值(真假)也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。
判断条件覆盖率 :每个判断真假值和条件真假值至少出现一次/(判断结果的总数 + 条件结果的总数)
结论:满足判定条件覆盖标准就一定能够满足条件,判断和语句覆盖。(解释:判断条件覆盖满足了条件和判断覆盖,但判断覆盖满足就一定能满足语句覆盖。)
局限性:判断条件覆盖会忽视”&&“和”||“。
条件组合覆盖
概念:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。
条件组合覆盖率:条件组合至少出现一次的数量/条件组合的总数
结论:条件组合覆盖能满足判定覆盖,条件覆盖,判定条件覆盖当然也包括语句覆盖。
局限性:条件组合覆盖不难保证所有路径被执行
路径覆盖
概念:设计测试用例,覆盖程序中所有可能的路径
路径覆盖率:条件组合至少出现一次的数量/条件组合的总数
结论: 路径覆盖可以对程序进行彻底的测试,比前面五种覆盖面都广。
局限性:满足路径覆盖,并不一定能满足条件覆盖,也就不能满足条件组合覆盖。还有就是实际的工作中实现成本高。
基本路径测试法
概念:在程序控制流程图的基础上,通过分析程序的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
基本路径测试步骤:
第一步:参考流程图转换成控制流程图。
第二步:计算程序的环路复杂度。
第三步:导出可执行路径。
最后设计测试用例(环路复杂度的值是设计测试用例的条数)
public class 白盒测试第一套 {
@Test
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入a的值:");
int a = sc.nextInt();
System.out.println("请输入b的值:");
int b = sc.nextInt();
if(a>9&&b>5){
int x =a*a*b;
System.out.println("X的值为:"+ x);
}
if(a<0&&b<0){
int x =a-b;
System.out.println("X的值为:"+ x);
} else {
int x =a+b;
System.out.println("X的值为:"+ x);
}
}
}