SDET / Frontend · Test Design

TikTok 测试覆盖率:发现空白、断言质量与风险盲区

区分行、分支和业务场景覆盖,解释高覆盖不能证明正确,用变异与缺陷反馈补足。

题目重点:区分行、分支和业务场景覆盖,解释高覆盖不能证明正确,用变异与缺陷反馈补足。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 讨论结构覆盖与测试设计,阈值由项目风险定,不声称公司指定百分比。

解题路线

  1. 行覆盖说明代码行被执行,分支覆盖更能显示条件两边是否到达;它们能找未测区域、比较变更影响和阻止覆盖突然下降,但没有证明输出正确。
  2. 没有断言的测试可以跑遍代码而不检查结果;只断言不抛异常会漏静默错误。关键业务不变量、异常副作用与持久化状态需要有针对性断言。
  3. 覆盖分母也会被配置影响,排除模块、生成代码或仅测小库能得到漂亮数字。看覆盖报告要同时看范围、关键路径和变更行,不能跨不同分母直接比较。
  4. 分支覆盖仍不覆盖所有条件组合、线程交错、生产数据分布或外部契约;100%对无穷输入和故障时机不等于穷尽测试,风险场景矩阵需要独立跟踪。
  5. 变异测试把条件/运算改坏,若测试仍过说明断言或case薄弱;但等价变异、运行成本与超时需解释,不把杀死率当新的唯一质量目标。
  6. 结合线上缺陷回溯:每个逃逸缺陷补复现和防回归,并分析为何指标没发现。用关键合同、mutation/缺陷趋势、flaky与反馈速度共同判断,不为凑覆盖写无效测试。

手动走一遍

函数把余额错误加成减,测试只调用并确认无异常仍覆盖所有行,却接受错误。检查总额守恒和具体余额能杀掉该变异;并发丢失更新还需独立竞争测试,行覆盖不区分调度。

规模与取舍

覆盖采集增加运行/存储成本;变异m个变体跑套件粗增m倍,可按变更与高风险区域选择。质量不由一个渐近复杂度或百分比决定。

易错点与追问

容易失分的边界

  • 100%覆盖等于没bug。
  • 无断言调用当充分验证。
  • 修改排除范围提高数字却不说明。

继续深挖

  • 分支和条件覆盖差别?
  • 变异存活如何定位测试缺口?
  • 覆盖下降何时应阻断发布?
✓已复制微信号!