什么是白盒测试
是针对程序的逻辑结构进行测试,主要适用于单元测试阶段
与黑盒测试不同的是,黑盒测试是根据业务需求设计用例的输入输出,白盒测试是对程序系统的内部逻辑实现设计输入输出。
通常的流程是先静态测试,后动态测试,在动态测试中经常使用基本路径测试法,在重要模块或业务复杂的模块可能会使用多种测试法。
白盒测试的优缺点
优点:代码覆盖率高
缺点:测试开销大、业务功能可能覆盖不全
优化方案:与黑盒测试配合使用,黑盒测试是需要覆盖所有功能点的,白盒测试只对一些重点模块或业务逻辑比较复杂的模块进行白盒测试
白盒测试静态测试
桌面检查
开发人员写完代码后,由其他人进行检查,通常根据开发规范和编码要求进行检查。
代码审查
通常会开启会议,由代码的作者讲述自己代码的逻辑结构,其他参与会议的成员会根据公司的代码规范进行审查
代码走查
开启会议,由会议成员提前设计好一些测试用例,人工的查看代码的走向
代码扫描工具
通过工具自动的检查代码是否符合规范
白盒测试设计方法-逻辑覆盖法
语句覆盖
定义:设计测试用例,使得程序中的每条语句都被执行至少一次
覆盖率 = 覆盖的语句数量 / 语句总数量
局限性:不能准确的判断代码中的逻辑关系错误(如or、and)
判定覆盖
定义:设计测试用例,使得程序中的每个分支都至少执行一次(if的真、假都至少被执行一次)
且满足判定覆盖一定满足语句覆盖
覆盖率 = 每个分支的真假值至少执行一次 / 判定结果的总数
局限性:不能准确的判断代码中的逻辑关系错误(如or、and)
条件覆盖
定义:设计测试用例,使得判定中每个条件都能取“真”值和取“假”值
覆盖率 = 每个条件真假值至少出现一次 / 条件结果总数
局限性:条件覆盖不能覆盖判定覆盖
判定条件覆盖
定义:相当于判定覆盖+条件覆盖
满足判定条件覆盖就可以满足:语句覆盖、判定覆盖 和 条件覆盖
覆盖率 = 每个判定的真假值和条件的真假值都至少出现一次 / 判定结果的总数+条件结果的总数
局限性:不能准确判断代码中的逻辑关系错误(如if的or、and)
条件组合覆盖
定义:设计测试用例,使得每个判定中的,各个条件之间的组合结果至少执行一次
满足条件组合覆盖,可以满足:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖
覆盖率 = 条件组合至少出现一次的数量 / 条件组合的总数
局限性:不能保证所有的路径被覆盖到
路径覆盖
定义:设计测试用例,覆盖程序中所有可能的路径
覆盖率 = 至少执行过一次的路径数 / 路径总数
局限性:无法满足条件组合的100%覆盖率、也无法满足判定条件的100%覆盖率;如果代码逻辑较为复杂(如存在循环,存在多层逻辑判断),覆盖路径的的开销会很大
白盒测试设计方法-基本路径测试法
基本路径测试法
定义:在程序控制流程图的基础上,通过分析程序的环路复杂度,导出基本可执行的路径集合,从而设计测试用例
步骤一:根据代码画出程序控制流图
步骤二:计算程序的环路复杂度,下图的复杂度是3+1=4
步骤三:导出可执行路径
环路复杂度 = 导出可执行路径数
可执行路径中需要:满足所有的路径都走过、满足所有节点都走过
步骤四:根据可执行路径设计测试用例