大多数团队都会测量代码覆盖率,却很少用它做决策。
覆盖率数字只能说明哪些代码被"触达"过,却无法说明哪些代码存在危险的测试盲区、哪些改动未经验证,也无法指出哪一个测试能最大程度降低风险。Coco 让这些盲区变得可见、可处理,使发布决策基于证据,而非直觉。
在受监管行业,这些证据必须经得起推敲 —— 审核人员要求达到 MC/DC 级别的结构化覆盖,并可追溯至具体标准。多数工具止步于分支级别,Coco 则不止于此。
代码覆盖率带来的可能
精确定位从未被测试的代码
覆盖率测量告诉你哪些代码被测试过。有了这些证据,接下来便是一系列决策、讨论与成果:
可见性
精确掌握测试的覆盖范围。Coco 的 CoverageBrowser 对每一行代码、每个分支和条件进行颜色标注,清晰呈现哪些代码已被执行、哪些从未被触达。
风险优先级排序
识别哪些未测试代码风险最高。Coco 的 CRAP(变更风险反模式)指标按复杂度与覆盖率缺口对每个函数排序,确保测试投入用在最可能引发故障的代码上。
补丁覆盖率
无需重新运行全部测试,即可查看哪些测试覆盖了本次补丁。补丁分析将差异内容与现有覆盖率数据进行比对,显示改动中的哪些代码行已被现有测试覆盖,以及具体由哪些测试执行。
嵌入式系统
可同时从真实硬件与模拟器采集覆盖率数据。运行时插桩适用于实际嵌入式目标设备,包括基于 RTOS 的系统。Coco 反映的是生产环境下的真实行为,而非仿真环境下的表现。
分布式团队协作
可分发测试任务,而无需分发源代码:借助 Coco,可将已插桩的二进制文件分享给外包团队,收集测试结果,并合并为统一的覆盖率报告。
CRAP 指标与补丁分析,正在改变团队的测试方式
精确掌握哪些现有测试覆盖了刚改动的代码
当开发者提交补丁时,Coco 会结合差异内容与现有覆盖率数据,生成一份精确报告:补丁中的哪些代码行已被现有测试覆盖、哪些尚未覆盖,以及具体由哪些测试执行了这些代码路径——全程无需重新运行完整测试套件。
- 导入统一格式的差异文件,Coco 将其与现有覆盖率执行数据进行比对
- 补丁中的每一行代码均标注为"已覆盖"、"未覆盖"或"未知",并附带每行的测试执行次数
- 生成 HTML 或 CSV 报告,用于代码评审、发布把关与认证证据
CRAP 指标指出下一个该测试的目标
知道覆盖率达到 80%,并不能说明剩下未覆盖的 20% 究竟无关紧要还是至关重要。CRAP(变更风险反模式)指标将圈复杂度与覆盖率数据结合,为每个函数计算出一个风险分数:复杂度越高、覆盖率越低,分数就越高。
- 分数超过 30 的函数会被标记为高风险,并在 CoverageBrowser 的排行榜中置顶显示
- 无需审查整个代码库,工程师即可精确知道新增哪个测试能最大程度降低风险
- 结果可排序、可导出,用于迭代规划、QA 评审与管理层汇报
通过最严苛的安全标准认证

Coco 已通过 SGS-TÜV Saar 独立认证,确认其适用于四大行业中最高安全完整性等级的安全相关软件验证:汽车(ISO 26262,ASIL D)、工业(IEC 61508,SIL 4)、医疗(IEC 62304,Class C)以及轨道交通(EN 50716,SIL 4)。该认证结果已通过外部审核确认。
覆盖汽车、工业、医疗、轨道交通四大行业的认证
SGS-TÜV Saar 已对 Coco 进行评估并颁发认证,确认其适用于以下四大行业中最高安全完整性等级的安全相关软件验证:
- 汽车:ISO 26262,最高达 ASIL D
- 工业与通用功能安全:IEC 61508,最高达 SIL 4
- 医疗器械软件:IEC 62304,最高达软件安全 Class C
- 轨道交通:EN 50716,最高达 SIL 4
当安全工程师需要在安全案例中为覆盖率工具的选用提供依据时,可以援引一个审核人员本就认可的认证机构颁发的证书,而不必仅凭自我声明。团队仍需针对自身项目对 Coco 进行工具鉴定,但起点是一款已获得独立认证的工具。
一份审核人员可验证的认证凭据
采购签核、供应商审核与认证里程碑,正是工具链的鉴定状态受到审视的关键节点。Coco 的 SGS-TÜV Saar 证书(编号 FS/71/220/26/2379)由外部机构签发、具名可查,合规团队可在汽车、工业、医疗、轨道交通各类项目的文档中直接引用。它是该工具适用性的独立证据,也为团队自身的工具鉴定工作提供支持。
减少工具鉴定投入,把更多时间留给产品本身
安全关键验证工具链中的每一款工具,都必须针对目标安全等级完成工具鉴定。Coco 的 SGS-TÜV Saar 认证,为这项工作提供了一个已获独立认证的起点。
对于需要按特定标准完成完整工具鉴定的项目,Coco Tool Qualification Kit(工具鉴定套件)提供该标准所要求的针对性文档、预置测试用例与安全手册,让团队从已有基础出发,而非从零开始。该套件覆盖汽车(ISO 26262)、工业(IEC 61508)、医疗(IEC 62304 与 ISO 13485)、轨道交通(EN 50128)以及航空航天(DO-330,适用于 DO-178C 与 DO-278A 项目)等多个行业。
为满足行业所需标准而设计
从函数覆盖到 MC/DC,标准所需的每个层级,团队所用的每个平台皆可覆盖
测量并提升代码覆盖率
Coco 支持的覆盖率级别
Coco 支持所有主要的结构化覆盖率指标,从基础的函数覆盖、行覆盖,到最严苛安全标准所要求的 MC/DC 级别。每一级别都从不同角度呈现测试质量,具体采用哪一级别,取决于所遵循的标准、安全完整性等级,以及发布前所需的信心程度。
函数覆盖率
函数覆盖确认代码库中的每个函数(包括 C++ 的成员函数)在测试期间至少被调用一次。这是最基础的第一道检查,用于判断关键逻辑单元是否被执行过。如果某个函数在测试套件运行期间从未被调用,那么按定义它就是未经测试的。Coco 会统计每个函数被调用的次数,从架构层面清晰呈现覆盖情况。
标准
IEC 61508 SIL 1–4
行业
汽车 航空航天 工业 轨道交通 医疗
语句块覆盖率
语句块覆盖检查程序中所有可执行语句在测试期间是否都被执行过。Coco 会将始终一起执行的语句归并为一个语句块,使该指标不受代码格式影响,保持一致。这使其成为衡量测试完整性的可靠基线,相较行覆盖,也更适合代码风格不统一的团队使用,结果更稳定。
标准
ISO 26262 ASIL A–B IEC 61508 SIL 1–4 EN 50128 SIL 0
行业
汽车 工业 轨道交通 医疗
行覆盖
行覆盖检查每一行代码在测试期间是否被执行,是发现测试盲区、快速了解代码执行深度的一种简单、常见方式。Coco 支持行覆盖,适合刚接触覆盖率分析或从事通用项目开发的团队作为起点。不过,Coco 不建议将行覆盖用于安全关键或受监管的开发场景:由于结果会因代码格式而变化,该指标的稳定性不足以满足 ISO 26262、IEC 61508 等标准的证据要求。在这类场景下,语句块覆盖能提供同样的可见性,且结果不受格式影响,更加稳定。
标准
不对应任何安全标准
行业
通用场景 非受监管项目
分支与判定覆盖
分支与判定覆盖在语句覆盖的基础上更进一步,检查代码中每个判定点是否产生了所有可能的结果。每个条件的真、假两种取值都会分别计入,使得只在特定输入下才会出现的边界情况能在测试阶段被发现,而不是流入生产环境。Coco 会对每个 if、while、for 和 switch 语句验证两种结果,便于发现测试遗漏的路径。
标准
ISO 26262 ASIL A–D DO-178C DAL A–B IEC 61508 SIL 1–4 EN 50128 SIL 1–4
行业
汽车 航空航天 工业 轨道交通 医疗
条件覆盖
条件覆盖在判定覆盖的基础上再进一步,将复杂的布尔表达式拆解为独立的子表达式,并对每个由 and 或 or 连接的子表达式分别验证真、假两种取值。这能发现仅靠判定覆盖无法捕捉的盲区,尤其是在包含多个条件的判定中,某些组合可能从未被测试过。在 Coco 中,条件覆盖是通向 MC/DC 的自然过渡,能在进入完全独立性要求之前,更深入地衡量逻辑测试的完整程度。
标准
MC/DC 的过渡阶段——本身并非独立的标准要求
行业
汽车 航空航天 工业 轨道交通 医疗
MC/DC 与 MCC 覆盖
修正条件/判定覆盖(MC/DC)要求判定中的每个条件都必须能独立影响结果:针对每个条件,必须存在两次测试执行,其中仅该条件发生变化,其余条件保持不变。这是安全审核人员在最高安全完整性等级下所期望的严格程度,也是 Coco 获得认证、可支持至 ASIL D 的覆盖级别。多重条件覆盖(MCC)要求更进一步,需覆盖每个判定中所有可能的真值组合,在 IEC 61508 与 EN 50128 的 SIL 3、SIL 4 等级下,可作为 MC/DC 的替代方案被接受。
MC/DC 标准
ISO 26262 ASIL A–D DO-178C DAL A IEC 61508 SIL 1–4 EN 50128 SIL 1–4
MCC 标准
IEC 61508 SIL 3–4(替代方案) EN 50128 SIL 3–4(替代方案)
认证套件
IEC 62304 C类
行业
汽车 航空航天 工业 轨道交通 医疗
测试耗时与性能指标
除覆盖率之外,Coco 还会追踪每个测试的运行耗时,以及代码各部分被执行的频次。这有助于团队识别运行缓慢的测试、发现被过度触发的代码,并优化 CI 流水线中测试的执行顺序。这并非覆盖率标准的强制要求,却是在不牺牲所需覆盖率的前提下,保持测试套件精简高效的实用工具。
标准
CI 与流水线优化——非覆盖率标准的强制要求
行业
适用于所有行业
Coco 为团队中的每个角色都提供真正所需的价值
QA 经理与测试负责人
价值旅程
获得可见性
规模化的一致性
投资回报最大化
-
使用场景
-
Coco 相关功能
-
实现效果
-
起步阶段
用客观的发布证据取代主观判断
-
CoverageBrowser 与 cmreport 在从 语句块 到 MC/DC 的每个级别上,为各个项目提供一致的测量结果
-
团队规模化
让每个测试都发挥价值:聚焦重点,砍掉冗余
-
cmreport 在每次构建时自动生成报告;导出 Cobertura XML 与 SonarQube XML,接入外部看板;CoverageBrowser 支持构建间的并排对比
合规与安全负责人
价值旅程
通过审计
构建证据
完成工具鉴定
-
使用场景
-
Coco 相关功能
-
实现效果
-
起步阶段
生成审核人员认可的覆盖率证据
-
MC/DC, 条件覆盖与判定覆盖均基于真实运行时执行数据测量;CoverageBrowser 可导出符合所遵循标准的 HTML、XML、CSV 报告
-
工具鉴定阶段
数日内完成工具鉴定,而非数月
-
工具鉴定套件(TQK) 提供分标准的文档、预置测试用例与安全手册;MCC 与 MC/DC 覆盖最高安全完整性等级
开发者与工程团队
价值旅程
看清风险
放心交付
提速交付
-
使用场景
-
Coco 相关功能
-
实现效果
-
起步阶段
在提交之前,先弄清楚你的测试覆盖了哪些代码
-
CoverageBrowser 基于 语句块与判定覆盖 ,直接在源码中用颜色标注已测试与未测试的代码
-
合并前信心
合并前掌握每次改动的影响
-
补丁覆盖率分析 将差异内容与现有覆盖率数据比对,显示哪些代码行已覆盖、哪些未覆盖,以及具体由哪些测试执行了这些路径——无需重新运行完整测试套件
DevOps 与 CI 工程师
价值旅程
接入流水线
全面自动化
落实标准
-
使用场景
-
Coco 相关功能
-
实现效果
-
起步阶段
即刻将覆盖率数据接入流水线
-
cmreport 可输出 Cobertura XML、SonarQube XML、JUnit 与 EMMA-XML 等格式,与现有 CI 系统直接兼容
-
全面自动化
消除人工步骤,自动落实标准
-
CoverageScanner 在构建期间完成插桩;cmreport 通过命令行生成报告;补丁覆盖率分析针对每次差异自动运行;CI 系统读取输出结果并强制执行阈值
-
每次构建自动采集并生成覆盖率报告,无需人工介入
Coco 提供数据,由 CI 系统落实发布关卡
搭配 SonarQube 或 Codecov,构建可视化覆盖率趋势看板
工程管理者与技术管理层
嵌入式与 MCU 工程师
价值旅程
目标设备插桩
采集真实数据
跨构建规模化
-
使用场景
-
Coco 相关功能
-
实现效果
-
起步阶段
获取来自真实硬件而非模拟器的覆盖率数据
-
CoverageScanner 封装现有编译器(ARM GCC、IAR、Green Hills、HighTec 等),无需迁移工具链;
在裸机与 RTOS 目标设备上提供语句块覆盖、 判定覆盖与函数覆盖
-
数据采集
从任意目标设备获取覆盖率数据,并合并为单一报告
-
CoverageScanner 的自定义 IO 函数支持 GDB、串口、TCP/IP、CAN 总线以及 ARM semihosting
针对 Qt for MCUs, cmcsexeimport 配合 --qul-port 参数可一键导入 Qt for MCUs 目标设备的数据;cmmerge 与 cocoqmlscanner 可将 C++ 与 QML 数据合并至同一数据库
“对我们来说,Coco 的代码覆盖率是一款很实用的工具,因为在了解代码覆盖率和测试覆盖情况之前,你根本没法判断软件质量到底好不好。”
Metso 数字技术开发总监 Jaakko Palokangas
契合现有环境的代码覆盖率工具
Coco 可接入现有的 CI/CD、IDE 与质量工具,让覆盖率洞察在日常工作中即刻可用,简化从测试数据到质量提升的路径。
随处部署
可原生运行 Coco,或交叉编译至任意目标平台,覆盖从桌面到裸机嵌入式系统的全部场景
加速开发与构建
无需更换工具或重构代码即可接入构建系统,Coco 可无缝融入现有环境
Visual Studio
日食
Qt
CMake
MSBuild
QML
C语言
Tcl/Tk
报告输出与合规保障
以团队与审核人员熟悉的格式导出
SonarQube
Cobretura
JUnit
HTML 5
兼容现有测试框架
Coco 可直接搭配现有测试框架使用:GoogleTest、Boost.Test、NUnit
增强
Nunit
谷歌
自动化与发布
在 CI/CD 流水线中获取自动化的覆盖率反馈
Jenkins
GitHub
GitLab
面向嵌入式系统与 MCU 的代码覆盖率
Coco for MCUs:
适用于任意微控制器项目的代码覆盖率
无论采用哪家芯片厂商、哪种 RTOS 或应用框架,Coco 均可用于任意 C 或 C++ MCU 项目。它在构建期间封装现有编译器,无需迁移工具链,也无需改动源代码。覆盖率数据在实际目标设备上采集,并在 CoverageBrowser 中完成分析。
多数 MCU 项目既无文件系统、也无操作系统可协助采集数据。为此,Coco 会在测试执行期间捕获覆盖率数据,并通过硬件已具备的任意通信通道进行回传。
-
若基于 Qt for MCUs 开发,可使用专用集成方案,支持完整的 C++ 与 QML 覆盖率、设备发现与一键数据导入
-
若未使用 Qt,同样可通过 GDB、串口、TCP/IP、CAN 总线或ARM semihosting实现相同的工作方式
NXP Infineon Renesas STM32 Microchip TI AURIX
ARM GCC IAR Green Hills HighTec Clang Diab
Bare-metal FreeRTOS QNX VxWorks Zephyr SafeRTOS
如何测量 MCU 的代码覆盖率
| 1 |
构建期插桩 Coco 封装现有编译器,插桩后的二进制文件按常规方式构建并烧录至目标设备。 |
||||||||||||
| 2 |
在真实硬件上执行测试 测试在实际 MCU 目标设备(裸机或 RTOS)上运行,覆盖率数据在执行期间于设备端采集。 |
||||||||||||
| 3 |
通过现有通信通道回传数据 Coco 提供自定义 IO 函数,可按硬件情况自行实现。支持的传输方式包括:
|
||||||||||||
| 4 |
合并、分析与报告 多次测试运行、多个目标设备的结果将合并为单一的 CoverageBrowser 报告,全流程可通过命令行脚本化,便于接入 CI。 |
Qt for MCUs 集成:
开箱即用的 C++ 与 QML 全面覆盖
针对基于 Qt for MCUs 开发的团队,Coco 提供专用集成方案,在同一工作流中同时覆盖 C++ 与 QML(Qt Quick Ultralite)。所支持的 Qt for MCUs 工具链均已内置编译器配置文件,无需手动设置。C++ 与 QML 的覆盖率结果会合并至同一数据库,呈现应用程序覆盖率的完整视图。
| ✓ | 在 CoverageBrowser 中直接从开发板完成设备发现与一键覆盖率导入 |
| ✓ | 调试输出控制台,用于在测试执行期间监控设备输出 |
| ✓ | 通过 --qul 参数完成 QML 插桩,自动处理项目集成 |
| ✓ | 数据回传无需调试器或自定义 IO 函数 |
兼容 Qt for MCUs 2.12.1 及以上版本。
受监管行业:
审核人员可验证的覆盖率证据
MCU 软件适用的安全标准要求特定级别的结构化覆盖率证据。Coco 支持这些标准所要求的每一个级别,从函数覆盖、语句覆盖,到分支覆盖、条件覆盖与 MC/DC 一应俱全。报告可直接满足审核要求,并与所遵循的标准对齐。对于需要完整工具鉴定的项目,另可单独获取针对 ISO 26262、DO-178C、IEC 62304、EN 50128 的分标准工具鉴定套件。
ISO 26262(最高达 ASIL D)· DO-178C · IEC 62304 · IEC 61508 · EN 50128
已通过 SGS TÜV Saar 独立认证,证书编号 FS/71/220/26/2113
“Coco 把代码和测试之间缺失的那一环连接了起来。一开始我们觉得它就是个普通的代码覆盖率工具,但真正用起来之后,发现里面藏着不少相当高级的功能。”
InnovMetric
面向受监管行业的工具鉴定
省去数月的人工投入
若需要为软件申请认证,就必须先完成工具鉴定。
Coco Tool Qualification Kit 提供证明 Coco 在安全关键开发中安全可靠所需的全部材料。无需从零搭建测试套件或撰写论证材料——这些工作已经完成。
-
预置测试用例与预期结果
-
工具分级与安全手册
-
覆盖 ISO 26262、DO-178C、IEC 62304、EN 50128 等标准
Coco 面向广泛的行业设计,通过提供可直接使用的验证报告、流程文档与认证模板,简化合规与质量保证工作。
了解 Coco Tool Qualification KitCoco 有哪些新特性?最新版本——Coco 7.5
- CRAP 指标:将圈复杂度与代码覆盖率结合为单一风险分数,生成最可能存在缺陷的 C++ 函数优先级列表,让团队不再一味追逐百分比,而是聚焦真正重要的问题。
- cmimport:将 Python coverage.py 报告转换为 Coco 格式,把 Python 与 C++ 的覆盖率合并为统一报告,无需在技术栈中同时维护两套独立工具。
- Coco Setup:自动识别编译器工具链并生成覆盖率扫描器封装,将原本需要数天的配置工作,缩短为五分钟的引导式设置。
- Qt for MCUs:对运行于嵌入式目标设备上的 C++ 与 QML 同时插桩,通过 Device Link 协议自动传输覆盖率数据,从真实硬件生成前后端完整的覆盖率报告,无需编写调试器脚本。
博客
70%、80%、90% 还是 100% 的代码覆盖率就够了吗?
70%、80%,甚至 100% 这样的数字并不能说明全部情况,有时反而会带来一种虚假的安全感。在深度解析文章《70%、80%、90% 还是 100% 的代码覆盖率就够了吗?》中,我们剖析了这些指标究竟能反映测试的哪些方面,以及为什么 100% 的语句覆盖率仍可能留下危险的盲区。
教程
借助 AI 代码助手生成单元测试、最大化覆盖率
了解如何结合 GitHub Copilot 与 Coco Code Coverage ,将测试覆盖率从 65% 提升至 至 78%,以及该方法如何适配其他框架与行业,包括安全关键领域。
