首页/开发/软件测试速查/路径测试与基本路径法
用例设计方法62 条

路径测试与基本路径法

基于控制流图枚举独立路径:基本路径法(McCabe)先用圈复杂度确定路径数量下界,再选择线性无关路径集合。

软件测试速查开发更新于 2026-10-13

路径测试是什么

路径测试基于程序的控制流图,沿代码分支设计执行路径:语句覆盖要求每行都执行到,分支覆盖要求每个判断的真假都取到,路径覆盖要求走遍不同分支组合。工程上最常用的是独立路径覆盖——按圈复杂度算出最少需要几条路径,把线性无关的路径各走一遍。它是白盒测试里判断覆盖是否实在的基准线。

基本信息

覆盖梯度语句覆盖 弱于 分支覆盖 弱于 条件组合覆盖
圈复杂度V(G) = 判断节点数 + 1,也等于最少独立路径数
独立路径集每条路径至少引入一段新边,数量等于圈复杂度
执行依据控制流图:节点是语句块,边是控制转移
配套手段结合边界值与条件取反设计测试数据
常用工具JaCoCo、Istanbul 等覆盖率工具可在运行时统计

圈复杂度速算

圈复杂度速算
代码:
  if (a > 0 && b > 0)
    X();
  if (c)
    Y();
圈复杂度 = 判断数 3 个 + 1 = 4  # 至少 4 条独立路径
路径示例:# 设计时让每条路径引入一段新的分支
  1) a>0,b>0,c 真  -> X 与 Y 都执行
  2) a>0,b>0,c 假  -> 只执行 X
  3) a<=0,c 真     -> 只执行 Y
  4) a<=0,c 假     -> 两者都不执行

典型使用场景

  • 单元测试补全:按圈复杂度检查是否所有分支都有人测过。
  • 遗留代码摸底:先跑覆盖率工具看语句与分支覆盖,找到盲区。
  • 安全关键模块:对失败处理与兜底分支单独设计路径用例。
  • 评审辅助:分支密集的函数在评审单上标注路径设计要点。
  • 回归筛选:改动涉及的分支路径对应的用例优先进入回归。
语句覆盖会骗人:一行为真假两半的捷径常被分支覆盖拆穿,覆盖率门槛一般按分支定。
路径爆炸是常态:循环与多判断函数不可能穷举,工程上以独立路径集为准。
覆盖率是下限不是目标:为了数字而写无断言的用例,风险依旧存在。

易错点

  • 把语句覆盖当护身符:只执行代码不断言结果,缺陷照样漏。
  • 追求百分之百路径:循环与组合导致不可行路径,白费工期。
  • 只测正常路径:异常与兜底分支长期无人执行,故障时慌不择路。
  • 覆盖率与用例脱节:工具报覆盖率低却没人认领补测责任。
  • 忽略测试数据配合:路径设计对了但数据没取到边界值,分支实际并未触发。

数据来源与参考

  • McCabe 圈复杂度(公开资料)
  • ISTQB CTFL 4.0 大纲(白盒测试技术)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌