题目
测试覆盖率的基本概念与计算
信息
- 类型:问答
- 难度:⭐
考点
测试覆盖率的定义,覆盖率类型,简单计算
快速回答
测试覆盖率是衡量测试完整性的指标,表示被测代码被测试执行的程度。主要类型包括:
- 语句覆盖率:被执行的代码行比例
- 分支覆盖率:代码中逻辑分支被覆盖的比例
- 路径覆盖率:代码执行路径被覆盖的比例
计算公式:覆盖率 = (已覆盖的代码单元数 / 总代码单元数) × 100%
解析
1. 测试覆盖率原理
测试覆盖率量化测试用例对源代码的覆盖程度,是评估测试有效性的基础指标。核心目标是识别未被测试的代码区域,降低未测试代码带来的风险。
2. 主要覆盖率类型
- 语句覆盖率:最基础指标,计算被执行的代码行比例
示例:
若测试仅调用function sum(a, b) { if (a > 0) { // 分支1 return a + b; // 语句1 } return b; // 语句2 }sum(1,2),则:
- 语句覆盖率 = 2/3 ≈ 66.7%(未执行语句2) - 分支覆盖率:衡量逻辑分支(如if/else)的覆盖情况
上例中:
- 分支覆盖率 = 1/2 = 50%(未覆盖a≤0的分支) - 路径覆盖率:覆盖所有可能的执行路径(高阶指标,初级较少要求)
3. 计算示例
假设函数有:
- 总语句数:10行
- 测试执行了:7行
覆盖率 = (7/10) × 100% = 70%
4. 最佳实践
- 目标设定:根据项目风险设定合理阈值(如核心模块≥80%)
- 工具使用:结合JaCoCo(Java)、Coverage.py(Python)等自动化工具
- 关注重点:优先保证关键路径和复杂逻辑的覆盖
5. 常见错误
- 追求100%覆盖:高覆盖率≠高质量测试,可能包含无效断言
- 忽略分支覆盖:仅看语句覆盖会遗漏未测试的逻辑分支
- 工具误读:未排除配置文件和测试代码本身
6. 扩展知识
- 行覆盖 vs 分支覆盖:行覆盖更易达到,分支覆盖更能暴露逻辑缺陷
- 覆盖率陷阱:覆盖率高仍可能遗漏边界条件(如
sum(0,5)) - 进阶指标:条件覆盖、MC/DC覆盖(航空等高安全领域)