gtest 行覆盖率、函数覆盖率、分支覆盖率 . 一般这3个要达到多少?算达标

GTest 代码覆盖率达标标准(行业通用+落地参考)

结合嵌入式、服务端、移动端、车载 等主流场景,分通用底线、合格标准、优秀标准 ,同时区分行/函数/分支三类指标。

一、核心指标定义(简要)

  1. 函数覆盖率:被调用测试的函数 / 总函数数
  2. 行覆盖率:被执行到的代码行 / 有效代码行(空行/注释不计)
  3. 分支覆盖率if/else/switch/for/while 等所有真假分支都被走到的比例

二、行业通用达标阈值(最常用)

1. 基础底线(项目准入/门禁红线,必须强制

适用于所有正式交付代码(业务代码、核心逻辑)

  • 函数覆盖率:≥90%
  • 行覆盖率:≥80%
  • 分支覆盖率:≥70%

低于此线:视为测试不充分,门禁拦截、禁止合入主干。

2. 合格标准(常规产品/迭代版本,推荐目标)

绝大多数互联网、后端、客户端、普通嵌入式项目

  • 函数覆盖率:95%+
  • 行覆盖率:85% ~ 90%
  • 分支覆盖率:75% ~ 80%

3. 优秀标准(核心模块/基础库/安全类/车载/工控/金融等高可靠场景)

核心逻辑、底层SDK、安全模块、车规、医疗、金融、操作系统组件

  • 函数覆盖率:98% ~ 100%
  • 行覆盖率:90% ~ 95%
  • 分支覆盖率:85% ~ 90%

4. 极致要求(安全关键代码、航空/军工/高等级车规 ASIL-D)

  • 函数/行覆盖率:100%
  • 分支覆盖率:≥90%,关键分支 100%

三、不同代码类型 差异化要求(实战落地)

1. 核心业务/底层库/公共组件(严格要求)

执行合格~优秀标准,不允许大面积低覆盖。

2. 入口层、胶水代码、简单封装、配置类代码

这类代码逻辑简单、分支少:

  • 行/函数尽量 95%+
  • 分支一般轻松 85%+

3. 异常分支、错误处理、边界条件(难点)

很多项目卡在这里:

  • 正常分支:要求 100%
  • 极端异常(内存失败、网络断连、硬件报错):可放宽 60%~70% ,但必须人工评审,不能直接放任。

4. 测试代码、工具脚本、废弃代码

不计入主覆盖率统计,单独排除,不参与门禁考核。


四、实战补充规则(避坑)

  1. 不要盲目追求 100% 覆盖率

    强行冲100%会写出大量无意义用例,维护成本暴增。行业共识:90%行覆盖、85%分支覆盖已是高质量

  2. 分支覆盖率 > 行覆盖率 更重要

    多行代码顺序执行,行覆盖很容易达标;分支漏测才是bug重灾区,门禁优先卡分支。

  3. 允许白名单豁免

    硬编码、平台兼容宏、永远走不到的兜底default、终止类代码(exit/abort),可单独配置豁免,不计入统计。

  4. 门禁配置建议(CI/CD 直接抄)

    • 红线(阻断提交):行<80% 或 分支<70%
    • 告警(提醒优化):行<85% 或 分支<75%

总结速查表

等级 函数覆盖率 行覆盖率 分支覆盖率 适用场景
底线(门禁) ≥90% ≥80% ≥70% 所有正式代码最低要求
合格(推荐) ≥95% 85%~90% 75%~80% 常规业务、客户端、后端
优秀(核心) 98%~100% 90%~95% 85%~90% 底层库、核心模块、车载/金融
极致(高安全) 100% 100% ≥90% 车规ASIL、工控、安全关键代码
相关推荐
事圆则缓4 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx5 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
Godikov6 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面6 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
终端安全笔记8 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
字节暗面8 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
传奇开心果编程9 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
2401_8332693011 小时前
RecyclerView多布局详解
android
v_348360876211 小时前
Android_8 zygote启动分析
android
消失的旧时光-194311 小时前
Android 系统层扫盲 11:JNI 到底是什么?Java / Kotlin 是怎么调用 C/C++ 的?
android·binder·zygote·system_server·aops