Skip to content

测试覆盖率

自测题

完成以下 3 道题目,检验你的学习成果

问题 1

代码覆盖率高就说明测试质量好吗?

问题 2

如何设定合理的覆盖率目标?

问题 3

完整的覆盖率体系应该包含哪些维度?

基础入门

测试覆盖率(Test Coverage)是衡量测试完整性的关键指标,用于评估测试对被测对象的覆盖程度。测试覆盖率不是单一指标,而是包含多个维度:代码覆盖率(Code Coverage)衡量测试代码执行了多少业务代码,包括语句覆盖、分支覆盖、条件覆盖等,可通过工具(如 Jest、JaCoCo、Coverage.py)自动统计。功能覆盖率(Function Coverage)衡量测试覆盖了多少需求/功能点,需要人工统计功能清单并映射测试用例。场景覆盖率(Scenario Coverage)衡量测试覆盖了多少业务流程/用户路径,需要人工梳理用户场景并验证覆盖情况。测试覆盖率的核心价值是量化测试完整性,帮助识别测试盲区。但覆盖率不是越高越好,要结合风险成本平衡,追求「关键路径高覆盖、次要路径适度覆盖」。面试时能区分各类型覆盖率并讲清覆盖率策略,体现你有度量思维和质量意识。

为什么重要

  • 面试必问的质量指标:面试官常问「你们的覆盖率是多少,怎么衡量」,能区分各类型覆盖率并讲清覆盖率策略才算有度量思维。
  • 量化测试完整性:覆盖率把抽象的「测试是否充分」量化成具体数字,帮助识别测试盲区、评估测试风险。
  • 指导测试投入:覆盖率低的模块说明测试不足,需要补充用例。覆盖率高的模块说明测试充分,可以放心发布。
  • 质量门禁的依据:覆盖率可以作为发布门禁的指标,如核心模块覆盖率低于 80% 阻断发布,保证发布质量。
  • 测试策略的参考:覆盖率数据帮助优化测试策略,如代码覆盖率高但功能覆盖率低说明需要补充功能测试。

相关术语对比

代码覆盖率与功能覆盖率有什么区别?

代码覆盖率衡量测试代码执行了多少业务代码,通过工具自动统计(如 Jest、JaCoCo),反映「代码路径被执行」。功能覆盖率衡量测试覆盖了多少需求/功能点,需要人工统计功能清单,反映「业务功能被测试」。代码覆盖率容易统计但意义有限,功能覆盖率更能反映业务覆盖程度。

语句覆盖率与分支覆盖率有什么区别?

语句覆盖率衡量有多少代码行被执行,分支覆盖率衡量有多少条件分支被执行(如 if/else 的两个分支)。语句覆盖率容易达到但覆盖浅,分支覆盖率更难但覆盖深。\n\n比如 if-else 语句,语句覆盖率只要执行其中一个分支就达标,分支覆盖率需要执行两个分支才达标。

覆盖率高就说明测试质量好吗?

不一定。覆盖率只反映「代码被执行」,不反映「执行结果被验证」。测试可能覆盖了代码路径但没有有效断言,或者只测试了正常场景没有测试边界场景。覆盖率是参考指标,不是质量指标,要配合「有效断言」「深度测试」「关键路径覆盖」才有意义。

实操案例

  • 电商项目覆盖率实践:代码覆盖率用 Jest 统计,核心模块(订单、支付、用户)覆盖率要求 80%+,辅助模块(日志、工具)覆盖率要求 50%+。功能覆盖率用需求清单统计,关键功能(下单、支付、退款)覆盖率 100%,次要功能(辅助操作)覆盖率 80%。场景覆盖率用用户路径统计,核心场景(登录→浏览→下单→支付)覆盖率 100%,边缘场景(退货、换货)覆盖率 60%。三个维度结合完整衡量测试覆盖。
  • 金融项目覆盖率实践:代码覆盖率用 JaCoCo 统计,高风险模块(金额计算、风控规则、对账逻辑)覆盖率要求 90%+,中风险模块(查询、统计)覆盖率要求 70%+。功能覆盖率用监管要求清单统计,强制功能(合规检查、反洗钱、报送)覆盖率 100%。场景覆盖率用业务流程统计,核心流程(开户→充值→交易→提现)覆盖率 100%。覆盖率作为发布门禁,低于目标值阻断发布。
  • 从低覆盖到高覆盖:原项目代码覆盖率只有 30%,大量模块没有测试覆盖。提升策略:

第一步,识别核心模块(订单、支付、用户),优先补充单元测试。

第二步,按功能清单补充功能测试,确保关键功能 100% 覆盖。

第三步,按用户路径补充场景测试,确保核心流程 100% 覆盖。

6 个月后覆盖率提升到:代码 70%、功能 90%、场景 85%,生产缺陷率下降 50%。

常见误区

误区 1:只追求代码覆盖率数字

正确做法:覆盖率只是参考指标,更重要的是测试质量和关键路径覆盖。代码覆盖率高不代表测试质量好,可能只是执行了代码路径但没做有效断言。要配合「有效断言」「深度测试」「关键路径覆盖」才有意义。\n\n举例说明高覆盖率但低质量的场景(如测试只执行代码不做断言)。

误区 2:忽略功能覆盖率和场景覆盖率

正确做法:完整的覆盖率体系需要三者结合。

代码覆盖率只看代码执行,功能覆盖率看需求覆盖,场景覆盖率看业务流程覆盖。

不能只依赖代码覆盖率一个数字,要综合三个维度评估测试完整性。

面试时要说明你们项目的多维度覆盖率数据。

误区 3:覆盖率目标一刀切

正确做法:按风险分级设定覆盖目标。

核心业务模块(支付、订单、用户)风险高,设定高覆盖率目标(80%+ 或 90%+)。

次要业务模块(辅助功能、管理后台)风险中等,设定中等覆盖率目标(50%+ 或 60%+)。

边缘功能模块(日志工具、辅助脚本)风险低,设定低覆盖率目标(30%+ 或不强制要求)。

面试时要说明覆盖率目标要可落地,关键路径全覆盖比全部路径高覆盖更有价值。

面试问答

你们项目的覆盖率是多少,怎么衡量的?

我们项目的覆盖率从三个维度衡量:

第一是代码覆盖率,核心模块的代码覆盖率是 80%,辅助模块的代码覆盖率是 50%。代码覆盖率用工具自动统计(如 Jest、JaCoCo、Coverage.py),统计语句覆盖率、分支覆盖率。

第二是功能覆盖率,关键功能的覆盖率是 100%(所有功能点都有测试用例覆盖),次要功能的覆盖率是 80%。功能覆盖率用人工统计(把功能点列出来,每个功能点对应测试用例)。

第三是场景覆盖率,核心业务场景的覆盖率是 100%(登录→下单→支付完整流程),边缘场景覆盖率是 60%。场景覆盖率用人工统计(把用户场景列出来,每个场景对应测试用例)。

面试时要说明:覆盖率不只是代码覆盖率一个数字,而是「代码覆盖 + 功能覆盖 + 场景覆盖」三个维度。

代码覆盖率高就说明测试好吗?

不一定。代码覆盖率高不代表测试质量好,原因有三点:

第一,覆盖率只反映「代码被执行」,不反映「执行结果被验证」。测试可能覆盖了代码路径但没有有效断言。

第二,覆盖率不反映「测试深度」。测试可能只测试了正常场景没有测试边界场景、异常场景。

第三,覆盖率可能被「刷数据」行为扭曲。开发可能写测试只执行代码不做有效断言,覆盖率看起来高但测试没有实际价值。

面试时要强调:覆盖率是参考指标,不是质量指标。高覆盖率要配合「有效断言」「深度测试」「关键路径覆盖」才有意义。

你怎么设定覆盖率目标?

覆盖率目标的设定原则是「按风险分级设定」,不是一刀切全部同一标准。具体设定方法:

第一,按模块风险等级设定不同目标。核心业务模块(支付、订单、用户)风险高,设定高覆盖率目标(80%+ 或 90%+)。次要业务模块(辅助功能、管理后台)风险中等,设定中等覆盖率目标(50%+ 或 60%+)。边缘功能模块(日志工具、辅助脚本)风险低,设定低覆盖率目标(30%+ 或不强制要求)。

第二,按测试层级设定不同侧重。单元测试层重点覆盖代码覆盖率,集成测试层重点覆盖功能覆盖率,端到端测试层重点覆盖场景覆盖率。

第三,设定底线目标和努力目标。底线目标(必须达到,达不到阻断发布)用于核心模块,努力目标(期望达到,达不到不阻断)用于次要模块。面试时要说明:覆盖率目标不是追求越高越好,而是「风险高的高覆盖、风险低的适度覆盖」,投入产出比合理。

自测题

完成以下 3 道题目,检验你的学习成果

问题 1

代码覆盖率高就说明测试质量好吗?

问题 2

如何设定合理的覆盖率目标?

问题 3

完整的覆盖率体系应该包含哪些维度?