白盒测试
白盒测试的特点
优点
- 代码覆盖率高
缺点
- 覆盖所有代码路径难度大
- 业务功能可能覆盖不全
- 测试开销大
白盒测试设计方法
静态
-
桌面检查
交换检查对方的代码
-
代码审查
召开会议的方式,代码编写者讲解自己的代码,与会人员分析大体逻辑结构的问题
-
代码走查
召开会议的方式,与会人员提前准备好测试数据,会中执行测试用例,分析代码逻辑结构的问题
-
代码扫描工具
根据固定结构判定编写代码的逻辑结构问题
动态
- 逻辑覆盖法
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定条件覆盖
- 条件组合覆盖
- 路径覆盖
- 基本路径测试法
逻辑覆盖
通过对程序逻辑结构的遍历实现程序的覆盖
覆盖率
至少被执行一次的 item 数 / item 的总数
语句覆盖
设计测试用例,使得程序中每条语句至少被执行一次
语句覆盖率
至少被执行一次的语句数量 / 可执行的语句总数
局限性
- 在六种逻辑覆盖标准中,语句覆盖标准是最弱的
- 语句覆盖不能准确的判断运算中的逻辑关系错误
判定覆盖
也叫分支覆盖,设计测试用例,使得程序中的每个判断的“真”和“假”都至少被执行一次
即程序中的每个分支至少执行一次
判定覆盖率
每个判定的真假值至少出现一次 / 判定结果的总数
局限性
- 只要满足了判定覆盖标准就一定满足语句覆盖标准
- 判定覆盖会忽略条件中取或(or)的情况
条件覆盖
设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值
条件覆盖率
每个条件真假值至少出现一次 / 条件结果的总数
局限性
- 条件覆盖比判定覆盖增加了对判定中所有条件的测试
- 但条件覆盖并不能保证判定覆盖
判定条件覆盖
设计测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,
同时每个逻辑条件的可能值(真假)也至少被满足一次
即同时满足100%判定覆盖和100%条件覆盖的标准。
判断条件覆盖率
每个判定真假值和条件真假值至少出现一次 / 判定结果的总数 + 条件结果的总数
局限性
- 满足判定条件覆盖标准一定能够满足条件覆盖、判定覆盖和语句覆盖
- 判定条件覆盖会忽略条件中取或(or)的情况
条件组合覆盖
设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次
条件组合覆盖率
条件组合至少出现一次的数量 / 条件组合的总数
局限性
- 条件组合覆盖能满足判定覆盖、条件覆盖、判定条件覆盖,也就包括语句覆盖
- 条件组合覆盖不能保证所有路径被执行
路径覆盖
设计测试用例,覆盖程序中所有可能的路径
路径覆盖率
至少被执行过一次的路径数 / 总的路径数
局限性
- 路径覆盖可以对程序进行彻底的测试,比前面五种覆盖面都广
- 满足路径覆盖,并不一定能满足条件覆盖,也就不能满足条件组合覆盖
基本路径测试法
在程序控制流佟的基础上,通过分析程序的环路复杂性
导出基本可执行路径集合,从而设计测试用例
基本路径测试法步骤
- 根据代码画出程序控制流图
- 计算程序的环路复杂度
- 流图中区域的数量对应于环形的复杂性
- 圈复杂度 = 流图中边的数量 - 流图中节点的数量 + 2
- 圈复杂度 = 流图中判定节点的数量 + 1
- 导出可执行路径
- 复杂度为多少就有多少测试路径
- 设计测试用例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义