Skip to main content
Video Thumbnail

Squish_Logo_Secondary_White_small

假设的 测试质量 到实测的代码覆盖率

Coco 是一款面向开发桌面应用程序与嵌入式系统开发团队的现代化代码覆盖率工具。它能在构建过程中对代码进行插桩,精确记录测试执行了哪些语句、分支和条件,且无需改动编译器、构建系统或测试套件。 Coco 支持 C、C++、C#、QML、Python 和 Tcl,提供插桩与精确的测试覆盖率分析。借助 Coco,可生成满足审核要求、符合 ISO 26262、DO-330 等国际安全与合规标准的报告。

免费试用 Coco 联系我们 Coco MCP

Coco-interface-simplified-01

大多数团队都会测量代码覆盖率,却很少用它做决策。

覆盖率数字只能说明哪些代码被"触达"过,却无法说明哪些代码存在危险的测试盲区、哪些改动未经验证,也无法指出哪一个测试能最大程度降低风险。Coco 让这些盲区变得可见、可处理,使发布决策基于证据,而非直觉。

在受监管行业,这些证据必须经得起推敲 —— 审核人员要求达到 MC/DC 级别的结构化覆盖,并可追溯至具体标准。多数工具止步于分支级别,Coco 则不止于此。

Trusted by Siemens Bosch LG Metso PolyWorks SGS TÜV Saar Certified · ASIL D
代码覆盖率带来的可能

精确定位从未被测试的代码

覆盖率测量告诉你哪些代码被测试过。有了这些证据,接下来便是一系列决策、讨论与成果:

可见性

精确掌握测试的覆盖范围。Coco 的 CoverageBrowser 对每一行代码、每个分支和条件进行颜色标注,清晰呈现哪些代码已被执行、哪些从未被触达。

风险优先级排序

识别哪些未测试代码风险最高。Coco 的 CRAP(变更风险反模式)指标按复杂度与覆盖率缺口对每个函数排序,确保测试投入用在最可能引发故障的代码上。

补丁覆盖率

无需重新运行全部测试,即可查看哪些测试覆盖了本次补丁。补丁分析将差异内容与现有覆盖率数据进行比对,显示改动中的哪些代码行已被现有测试覆盖,以及具体由哪些测试执行。

嵌入式系统

可同时从真实硬件与模拟器采集覆盖率数据。运行时插桩适用于实际嵌入式目标设备,包括基于 RTOS 的系统。Coco 反映的是生产环境下的真实行为,而非仿真环境下的表现。

分布式团队协作

可分发测试任务,而无需分发源代码:借助 Coco,可将已插桩的二进制文件分享给外包团队,收集测试结果,并合并为统一的覆盖率报告。

CRAP 指标与补丁分析,正在改变团队的测试方式

精确掌握哪些现有测试覆盖了刚改动的代码

当开发者提交补丁时,Coco 会结合差异内容与现有覆盖率数据,生成一份精确报告:补丁中的哪些代码行已被现有测试覆盖、哪些尚未覆盖,以及具体由哪些测试执行了这些代码路径——全程无需重新运行完整测试套件。

  • 导入统一格式的差异文件,Coco 将其与现有覆盖率执行数据进行比对
  • 补丁中的每一行代码均标注为"已覆盖"、"未覆盖"或"未知",并附带每行的测试执行次数
  • 生成 HTML 或 CSV 报告,用于代码评审、发布把关与认证证据

CRAP 指标指出下一个该测试的目标

知道覆盖率达到 80%,并不能说明剩下未覆盖的 20% 究竟无关紧要还是至关重要。CRAP(变更风险反模式)指标将圈复杂度与覆盖率数据结合,为每个函数计算出一个风险分数:复杂度越高、覆盖率越低,分数就越高。

  • 分数超过 30 的函数会被标记为高风险,并在 CoverageBrowser 的排行榜中置顶显示
  • 无需审查整个代码库,工程师即可精确知道新增哪个测试能最大程度降低风险
  • 结果可排序、可导出,用于迭代规划、QA 评审与管理层汇报

通过最严苛的安全标准认证

Untitled design-23 1

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 级别。每一级别都从不同角度呈现测试质量,具体采用哪一级别,取决于所遵循的标准、安全完整性等级,以及发布前所需的信心程度。

 

深入了解 Coco 支持的覆盖率级别

函数覆盖率

函数覆盖确认代码库中的每个函数(包括 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类

行业
汽车 航空航天 工业 轨道交通 医疗

MC/DC 文档 MCC 文档

测试耗时与性能指标

除覆盖率之外,Coco 还会追踪每个测试的运行耗时,以及代码各部分被执行的频次。这有助于团队识别运行缓慢的测试、发现被过度触发的代码,并优化 CI 流水线中测试的执行顺序。这并非覆盖率标准的强制要求,却是在不牺牲所需覆盖率的前提下,保持测试套件精简高效的实用工具。

标准
CI 与流水线优化——非覆盖率标准的强制要求

行业
适用于所有行业

文档

白皮书:安全关键程序的代码覆盖率的指南与注意事项(英文版)

立即阅读

Coco 为团队中的每个角色都提供真正所需的价值

QA 经理与测试负责人

价值旅程

获得可见性

规模化的一致性

投资回报最大化

  • 使用场景

  • Coco 相关功能

  • 实现效果

  • 起步阶段

    用客观的发布证据取代主观判断

  • CoverageBrowsercmreport 在从 语句块MC/DC 的每个级别上,为各个项目提供一致的测量结果

  • 掌握每次发布的真实测试状态,而非估算值

    带着数据而非主观意见走进发布评审

    为所有团队建立统一的"完成"标准

    查看覆盖率报告示例

  • 团队规模化

    让每个测试都发挥价值:聚焦重点,砍掉冗余

  • cmreport 在每次构建时自动生成报告;导出 Cobertura XML 与 SonarQube XML,接入外部看板;CoverageBrowser 支持构建间的并排对比

  • 覆盖率缺口成为可管理的待办事项,而非发布时的意外

    各团队、各平台采用统一的测量标准

    搭配 SonarQube 或 Codecov,构建趋势看板

    在团队代码库中全面运行 Coco

合规与安全负责人

价值旅程

通过审计

构建证据

完成工具鉴定

  • 使用场景

  • Coco 相关功能

  • 实现效果

  • 工具鉴定阶段

    数日内完成工具鉴定,而非数月

  • 工具鉴定套件(TQK) 提供分标准的文档、预置测试用例与安全手册;MCCMC/DC 覆盖最高安全完整性等级

  • 可直接提交的 ISO 26262、DO-178C、IEC 61508、EN 50128 工具鉴定文档

    测试与代码之间的完整可追溯性

    无需从零开展内部工具鉴定工作

    咨询适合所遵循标准的工具鉴定套件

开发者与工程团队

价值旅程

看清风险

放心交付

提速交付

  • 使用场景

  • Coco 相关功能

  • 实现效果

  • 起步阶段

    在提交之前,先弄清楚你的测试覆盖了哪些代码

  • CoverageBrowser 基于 语句块判定覆盖 ,直接在源码中用颜色标注已测试与未测试的代码

  • 直接在源码中查看哪些代码已覆盖、哪些尚未覆盖

    依据数据而非直觉,做出明智的重构决策

    为第一个项目完成插桩

  • 合并前信心

    合并前掌握每次改动的影响

  • 补丁覆盖率分析 将差异内容与现有覆盖率数据比对,显示哪些代码行已覆盖、哪些未覆盖,以及具体由哪些测试执行了这些路径——无需重新运行完整测试套件

  • 评审前即可精确掌握改动中哪些代码行已被覆盖

    无需重新运行全部测试,即可识别覆盖本次补丁的现有测试

    面对复杂逻辑, MC/DC 可验证每个条件是否均已被充分执行

    观看 Coco 的实际运行效果

DevOps 与 CI 工程师

价值旅程

接入流水线

全面自动化

落实标准

  • 使用场景

  • Coco 相关功能

  • 实现效果

  • 起步阶段

    即刻将覆盖率数据接入流水线

  • cmreport 可输出 Cobertura XML、SonarQube XML、JUnit 与 EMMA-XML 等格式,与现有 CI 系统直接兼容

  • 从第一天起,覆盖率数据即以 CI 兼容格式呈现

    无需重构现有流水线

    在下一次构建中接入 Coco

  • 全面自动化

    消除人工步骤,自动落实标准

  • CoverageScanner 在构建期间完成插桩;cmreport 通过命令行生成报告;补丁覆盖率分析针对每次差异自动运行;CI 系统读取输出结果并强制执行阈值

  • 每次构建自动采集并生成覆盖率报告,无需人工介入

    Coco 提供数据,由 CI 系统落实发布关卡

    搭配 SonarQube 或 Codecov,构建可视化覆盖率趋势看板

    了解 Coco 如何融入 CI 流水线

工程管理者与技术管理层

嵌入式与 MCU 工程师

价值旅程

目标设备插桩

采集真实数据

跨构建规模化

  • 使用场景

  • Coco 相关功能

  • 实现效果

  • 数据采集

    从任意目标设备获取覆盖率数据,并合并为单一报告

  • CoverageScanner 的自定义 IO 函数支持 GDB、串口、TCP/IP、CAN 总线以及 ARM semihosting

    针对 Qt for MCUs, cmcsexeimport 配合 --qul-port 参数可一键导入 Qt for MCUs 目标设备的数据;

    cmmergecocoqmlscanner 可将 C++ 与 QML 数据合并至同一数据库

  • 无需局限于单一传输方式,可直接使用硬件已具备的通道

    所有目标设备与测试运行统一汇总为一份报告

    从构建到报告的全流程均可脚本化

    了解安全关键团队如何完成嵌入式软件认证

发现此前未曾察觉的覆盖率盲区


观看 Qt Group 高级软件工程师 James Vance 演示 Coco 代码覆盖率界面,讲解如何测量覆盖率并识别未测试代码。

“对我们来说,Coco 的代码覆盖率是一款很实用的工具,因为在了解代码覆盖率和测试覆盖情况之前,你根本没法判断软件质量到底好不好。”

Metso 数字技术开发总监 Jaakko Palokangas

契合现有环境的代码覆盖率工具

Coco 可接入现有的 CI/CD、IDE 与质量工具,让覆盖率洞察在日常工作中即刻可用,简化从测试数据到质量提升的路径。

 

随处部署

可原生运行 Coco,或交叉编译至任意目标平台,覆盖从桌面到裸机嵌入式系统的全部场景

原生兼容性
运行于团队现有系统;
Linux、Windows(32/64 位)、macOS 64 位 —— 通过 Rosetta 2 支持 Intel 与 ARM 架构
UNIX 变体:Solaris、AIX(企业版,按需提供)
交叉编译
面向嵌入式与资源受限环境;
嵌入式 Linux/Windows——工业与汽车领域;
实时操作系统(RTOS):QNX、VxWorks、FreeRTOS
面向安全关键设备的裸机微控制器
支持的编译器
主流及专用工具链*
GCC、Clang、MS Visual Studio、Intel、Mono
QNX、ARM(Keil)、Green Hills、HighTec、Diab、TI 等
*部分工具链需使用 Coco 交叉编译附加模块
目标硬件:
在真实生产硬件上完成工具鉴定;
Intel x86/x64、ARM、PowerPC、MIPS、SPARC、AURIX™ 等
从通用 CPU 到安全级微控制器

加速开发与构建

无需更换工具或重构代码即可接入构建系统,Coco 可无缝融入现有环境

报告输出与合规保障

以团队与审核人员熟悉的格式导出

兼容现有测试框架

Coco 可直接搭配现有测试框架使用:GoogleTest、Boost.Test、NUnit

自动化与发布

在 CI/CD 流水线中获取自动化的覆盖率反馈

面向嵌入式系统与 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 函数,可按硬件情况自行实现。支持的传输方式包括:

GDB 变量导出 任意目标设备;
串行/COM 口 常见方式;
TCP/IP 联网目标设备
CAN总线 汽车领域;
ARM semihosting ARM Cortex-M/R;
Qt for MCUs DeviceLink Qt MCU 项目
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 Kit

Coco 有哪些新特性?最新版本——Coco 7.5

  • CRAP 指标:将圈复杂度与代码覆盖率结合为单一风险分数,生成最可能存在缺陷的 C++ 函数优先级列表,让团队不再一味追逐百分比,而是聚焦真正重要的问题。
  • cmimport:将 Python coverage.py 报告转换为 Coco 格式,把 Python 与 C++ 的覆盖率合并为统一报告,无需在技术栈中同时维护两套独立工具。
  • Coco Setup:自动识别编译器工具链并生成覆盖率扫描器封装,将原本需要数天的配置工作,缩短为五分钟的引导式设置。
  • Qt for MCUs:对运行于嵌入式目标设备上的 C++ 与 QML 同时插桩,通过 Device Link 协议自动传输覆盖率数据,从真实硬件生成前后端完整的覆盖率报告,无需编写调试器脚本。

 

阅读最新版本发布说明

Coco Tool Qualification Kit

一套定制化、全面的工具鉴定方案,帮助确认测试流程符合安全标准所需的信心。

了解更多

文档

深入了解 Coco 的技术细节。

了解更多

Coco 评估指南

评估指南贯穿从下载工具到安装、开始使用的整个评估流程,提供全程支持。

了解更多

博客

70%、80%、90% 还是 100% 的代码覆盖率就够了吗?

70%、80%,甚至 100% 这样的数字并不能说明全部情况,有时反而会带来一种虚假的安全感。在深度解析文章《70%、80%、90% 还是 100% 的代码覆盖率就够了吗?》中,我们剖析了这些指标究竟能反映测试的哪些方面,以及为什么 100% 的语句覆盖率仍可能留下危险的盲区。

教程

借助 AI 代码助手生成单元测试、最大化覆盖率

了解如何结合 GitHub Copilot 与 Coco Code Coverage ,将测试覆盖率从 65% 提升至 至 78%,以及该方法如何适配其他框架与行业,包括安全关键领域。

软件开发质量保证完全指南

阅读完整指南

常见问题解答

如何测量嵌入式 C/C++ 系统的代码覆盖率?

测量嵌入式 C/C++ 系统的代码覆盖率,需要一款能够对交叉编译目标进行插桩、并从真实硬件采集执行数据的工具。Coco 采用编译器级插桩:封装编译器(GCC、Clang、IAR、ARM/Keil、Green Hills 等),在构建过程中插入测量点。覆盖率数据在实际嵌入式目标设备上采集——包括运行 QNX、VxWorks、FreeRTOS 的 RTOS 系统,以及裸机微控制器——随后在 CoverageBrowser 中完成分析。来自多个目标设备与配置的结果可合并为单一覆盖率报告。

MC/DC 与分支覆盖之间有什么区别?

分支覆盖(又称判定覆盖)验证每个判定(如 if 语句)是否都取到过真、假两种结果。修正条件/判定覆盖(MC/DC)则更进一步:要求判定中的每个独立条件都能单独影响判定结果,即每个条件都需被证明具备独立改变结果的能力。相较分支覆盖,MC/DC 需要更多测试用例,但能提供显著更强的保证,这也是 ISO 26262 在 ASIL D 等级下期望达到 MC/DC、DO-178C 在 DAL A 等级下强制要求 MC/DC 的原因。

有哪些适合 C++ 与嵌入式系统的优质代码覆盖率工具?

Coco 是一款专为桌面与嵌入式系统中的 C、C++ 开发设计的代码覆盖率分析工具,支持 GCC、Clang、IAR、ARM/Keil、Green Hills 等编译器的编译器级插桩,并适用于 QNX、VxWorks、FreeRTOS 及裸机微控制器等嵌入式目标设备。对于遵循 ISO 26262、DO-178C 或 IEC 62304 等安全标准的团队,Coco 已通过 SGS TÜV Saar 独立认证,最高达 ASIL D,并提供分标准的工具鉴定套件。

能否在无法访问源代码的情况下采集代码覆盖率?

可以。Coco 通过将插桩与源码访问相分离的功能支持黑盒测试。拥有源码的开发者可创建黑盒插桩数据库——即不包含源代码的已插桩二进制文件,并将其分发给 QA 工程师或外包团队运行测试、生成执行报告(.csexe 文件)。执行报告返回给开发者后,由开发者合并至主覆盖率数据库,全程 QA 团队都不会接触到源代码。这对分布式团队、外包测试以及涉及知识产权敏感信息的项目尤其适用。

如何在嵌入式 C 与 C++ 目标设备上测量代码覆盖率?

Coco 采用编译器级插桩:封装现有编译器,在构建过程中插入测量点。覆盖率数据在实际嵌入式目标设备上采集,包括运行 QNX、VxWorks、FreeRTOS 的 RTOS 系统,以及裸机微控制器。来自多个目标设备与配置的结果可在 CoverageBrowser 中合并为单一覆盖率报告,无需迁移工具链。

Coco 如何与 CI/CD 流水线集成?

Coco 可原生集成 Jenkins、GitHub Actions 与 GitLab CI。覆盖率数据在流水线执行期间自动采集,并以 Cobertura XML、SonarQube XML、JUnit、EMMA-XML 等 CI 兼容格式导出。可将覆盖率阈值设为质量关卡,当覆盖率低于设定水平时阻止合并。cmreport 命令行工具可在任意构建脚本中自动生成报告,无需图形界面。

软件测试中的代码覆盖率是什么?

代码覆盖率分析记录测试运行期间源代码中哪些语句、分支和条件被执行,以占全部可执行代码的百分比表示。它不同于测试覆盖率(衡量需求覆盖情况)和测试有效性(衡量测试是否能发现真实缺陷)。

ISO 26262 ASIL D 需要达到什么级别的代码覆盖率?

ISO 26262 第 6 部分表 14 按 ASIL 等级划分结构化覆盖要求。在 ASIL D 等级下,修正条件/判定覆盖(MC/DC)被列为强烈推荐(++),意味着认证机构期望达到该级别,若未达到则需提供论证说明;在 ASIL C 等级下,MC/DC 为推荐(+);ASIL A、B 等级则期望达到语句覆盖与分支覆盖。需要说明的是,ISO 26262 语境下的"强烈推荐"并非如 DO-178C 部分要求那样属于硬性强制,但在实践中,审核人员通常将其视为 ASIL D 等级下事实上的必要条件。Coco 已通过 SGS TÜV Saar 认证(证书编号 FS/71/220/26/2113),可用于最高达 ASIL D 的 ISO 26262 项目。

IEC 62304 Class C 需要什么级别的代码覆盖率?

IEC 62304 按安全风险等级对医疗器械软件进行分级。Class C 软件(失效可能导致死亡或严重伤害)需要进行全面的软件单元验证,并提供覆盖率报告,证明与风险控制措施相关的所有代码均已测试。Class C 设备的监管申报材料通常须包含结构化覆盖率证据。Coco 可生成符合 IEC 62304 要求、满足审核所需的覆盖率报告,并提供 IEC 62304 工具鉴定套件。

安全关键软件中的代码覆盖率工具是否需要进行工具鉴定?

需要。根据 ISO 26262、DO-178C、IEC 62304、IEC 61508 与 EN 50128 的要求,安全关键软件验证中使用的每一款工具,都必须针对目标安全完整性等级完成工具鉴定。若使用未经预先鉴定的工具,鉴定工作的全部负担将落在开发团队身上——通常需要数月时间产出工具行为文档、验证测试套件与鉴定报告。Coco 大幅减轻了这一负担:Coco 7.4.0 版本已通过 SGS TÜV Saar 依据 ISO 26262-8:2018 第 11 条款完成的独立认证(证书编号 FS/71/220/26/2113)。针对 ISO 26262、DO-178C、IEC 62304、EN 50128 的分标准工具鉴定套件,可补齐剩余文档、预置测试用例与安全手册,使工具鉴定工作在数日内即可完成,而非数月。

Coco 是否已获得用于 ISO 26262 安全关键开发的认证?

是的。Coco 7.4.0 版本已通过 SGS TÜV Saar 依据 ISO 26262-8:2018 第 11 条款的独立评估与认证(证书编号 FS/71/220/26/2113),确认适用于最高达 ASIL D(汽车领域最高安全完整性等级)的安全相关软件验证。ISO 26262、DO-178C、IEC 62304、EN 50128 均提供对应的分标准工具鉴定套件。

Coco 支持哪些覆盖率级别?

Coco 支持函数覆盖、行覆盖、语句块覆盖、判定/分支覆盖、条件覆盖、修正条件/判定覆盖(MC/DC)以及多重条件覆盖(MCC)。MC/DC 是 ISO 26262 在 ASIL C/D 等级、DO-178C 在 DAL A/B 等级下所要求的级别。所有级别均可在 CoverageBrowser 中以颜色标注的源码形式可视化呈现。

Coco 是否支持嵌入式系统与真实硬件目标设备?

支持。Coco 不仅支持从模拟器采集覆盖率数据,也支持从实际嵌入式目标设备采集,兼容 GCC、Clang、IAR、ARM/Keil、Green Hills 等嵌入式编译器,支持平台包括嵌入式 Linux、QNX、VxWorks、FreeRTOS 及裸机微控制器。来自真实硬件执行的覆盖率数据可与其他目标设备的结果合并,并在 CoverageBrowser 中统一分析。

Coco 中的 CRAP 指标是什么?

CRAP 是"变更风险反模式"(Change Risk Anti-Patterns)的缩写,将圈复杂度与覆盖率数据结合,为每个函数计算风险分数:复杂度越高、覆盖率越低,分数越高。分数超过 30 的函数会在 CoverageBrowser 中被标记为高风险。这让 QA 团队能够依据客观的风险排序、而非直觉来确定新测试的编写优先级,并可导出排序结果用于迭代规划与管理层汇报。

Coco 的补丁分析如何运作?

补丁分析读取 unified 格式的差异文件,并将其与测试套件现有的覆盖率执行数据(.csmes 与 .csexe 文件)进行比对,生成一份带标注的报告,显示补丁中哪些代码行已被现有测试覆盖、哪些未覆盖,以及具体由哪些测试执行了改动的代码路径——全程无需针对补丁后的版本重新运行测试套件。输出结果支持 HTML 或 CSV 格式,可用于代码评审、发布把关与认证证据。

安全关键项目中的代码覆盖率工具是否需要完成工具鉴定?

需要。根据 ISO 26262、DO-178C、IEC 62304、IEC 61508 与 EN 50128 的要求,安全关键软件验证中使用的每一款工具都必须针对目标安全完整性等级完成工具鉴定。若使用未经预先鉴定的工具,鉴定负担将完全落在开发团队身上,通常需要数月时间。Coco 的 TÜV Saar 认证消除了最初的鉴定负担,针对 ISO 26262、DO-178C、IEC 62304、EN 50128 的分标准工具鉴定套件,可在数日内完成剩余工作,而非数月。

Coco 是否支持 C、C++ 以外的编程语言?

支持。Coco 支持 C、C++、C#、QML、Tcl 以及 Python(通过与 coverage.py 集成处理 Python 模块,原生的 C/C++/C#/QML/Tcl 层则由 Coco 直接插桩)。Coco 并非仅限于 Qt 项目的工具,只要代码库使用这些语言,无论采用何种框架均可使用。所有支持语言的覆盖率结果均可合并至同一报告中统一分析。

当天即可看清测试遗漏了什么

Coco 的评估许可支持针对现有构建系统与测试套件对组件完成插桩,当天即可获得一份真实的覆盖率报告——不是演示、也不是示例数据,而是来自自身代码的真实执行结果,精确呈现测试的不足之处。