Back to Blog home

使用AI代码助手生成单元测试并实现代码覆盖率最大化

Published on 星期四 三月 12, 2026 by Otso Virtanen in Coco Generative AI | Comments

代码覆盖率衡量的是源代码中哪些部分已被测试用例执行过。使用的指标可以是已执行的函数、行或分支,也可以是更复杂的指标,如评估语句中的每个条件。根据代码覆盖率工具的不同,测试可以结合单元测试、功能测试甚至手动测试。高代码覆盖率是理想状态,因为这通常代表软件经过了良好的测试。然而,为实现高代码覆盖率而编写测试用例,可能既耗费时间又成本高昂。

本文通过示例演示了如何结合AI代码助手和代码覆盖率工具来生成单元测试,从而提高代码覆盖率。我们还为 AI 代码助手提供了方法,用于执行新生成的单元测试和分析代码覆盖率报告,以验证覆盖率指标是否得到提升。

本文示例在 Visual Studio Code 中将 Microsoft 的 GitHub Copilot 和 Coco(一款适用于 C/C++C#Tcl Qt QML 的代码覆盖率解决方案)相结合。 这种设置是通用的,可适配其他代码覆盖率工具和 AI 代码助手,如 Cursor 和 Claude Code。同样,虽然我们的示例生成的是CppUnit测试,但其他单元测试框架(如 GoogleTest 或 Catch2)也同样适用。

配置

我们以此处现有的 Coco 示例为基础。 这是一个简单计算器示例,使用了表达式解析器(parser),其中包含基线单元测试 。该示例详细说明了如何将 Coco 用于各种使用场景,从基本的代码覆盖到补丁分析等更高级的用法。从此处安装 Coco 和解析器(parser)示例源代码,更多信息可参阅开发文档 

刚接触代码覆盖率? 简而言之,你将使用 Coco 插桩构建,它就像一个计数器:记录执行的行数,并将这些行数与你的测试用例进行匹配。除此之外,应用程序的功能不会改变,您可以使用相同的插桩构建进行所有测试,包括手动测试和功能测试。就这么简单!

 

我们从 parser_v4 版本开始, 该版本包含 Copilot 和 Coco 的配置,能够编译和运行解析器(parser)示例及其附带的单元测试

下图展示了我们为改进单元测试搭建的配置:

Coco blog

组件及其说明如下(使用说明请参阅代码仓库 ):

  1. AI 代码助手的上下文说明,包括以下操作(上图所示的 "Coco setup"):
    1. 构建 Coco 插桩目标;
    2. 运行插桩构建的单元测试;
    3. 处理 Coco 代码覆盖率结果。
  2. 关联步骤1的提示词和改进单元测试的任务(对应 “Coco guidelines” 和 “Tasks”)。
  3. 根据步骤2生成单元测试,对于选定指标,验证代码覆盖率是否提升。在本例中,我们使用行覆盖率作为核心指标。

请注意,生成的单元测试和改进内容需要在流程结束时进行审核。

演示:生成单元测试

完成上述设置后,我们就可以开始使用了。下面是在 Visual Studio 中使用 Microsoft GitHub Copilot 配合 Gemini 2.5 Pro(Agent模式),对解析器示例进行操作的录屏:

 

从演示中可知

  • 最初,行覆盖率约为 65%(见录屏结尾)。

  • 分析最初的覆盖率可知,指令没有聚焦到数学函数上,这些函数没有经过任何测试,如对此进行改进,将可能显著提高项目的整体代码覆盖率。

  • 针对数学函数生成测试用例并运行后,项目的代码行覆盖率提高到了 78%。

本次演示中所用的提示词、Coco 配置指南,以及生成的单元测试优化方案,均可在代码仓库中获取。

结论与后续步骤

在这篇博客中,我们通过结合代码覆盖率工具和 AI 代码助手,了解哪些代码可以进行新的单元测试,以实现更高的覆盖率。使用代码覆盖率工具可以验证生成的测试是否有意义,所选的覆盖率指标是否得到了有效提升。

如果您从事的是安全认证领域的工作,并希望实现全面的测试覆盖率,这样的配置将特别有价值。例如,在汽车或航空航天领域,modified condition/decision coverage (MC/DC) 指标甚至要求100%的覆盖率。一种方法是将其与 Coco 的内置功能结合使用,利用遗传算法生成测试数据,以满足严苛的覆盖率要求。

还可以将其他指标与代码覆盖率结合起来,确定需要新增单元测试的区域。在此文章中,一位解决方案工程师使用了 "CRAP 评分"(结合McCabe复杂度指标与代码覆盖率的综合评分)来识别风险较高的区域,在此增加测试将获得更大收益。

我们没有利用模型上下文协议(MCP),而是直接通过 CLI 调用 Coco 工具。MCP 服务器则可以用于详细了解覆盖率报告,并为更大的代码库处理更长的报告,而不是依赖模型直接解析文本格式的 CSV 报告。该方案同样适用于持续集成(CI)场景。

想要了解更多信息?

有关 Coco 的更多信息, 请参阅我们的产品页面产品文档 。对于 Qt 开发人员,请参阅QML 示例Qt 说明

本文很好地概述了生成单元测试的方法,并提供了使用 Microsoft GitHub Copilot 的示例,还简要提到了单元测试生成中代码覆盖工具的使用。

如需联系作者 Otso Virtanen,请通过邮箱:@qt.io 进行联系——Otso Qt Group 质量保证事业部生成式 AI/AI 计划的产品负责人。 

Subscribe to Our Blog

Stay up to date with the latest marketing, sales and service tips and news.