Stay up to date with the latest marketing, sales and service tips and news.
代码覆盖率衡量的是源代码中哪些部分已被测试用例执行过。使用的指标可以是已执行的函数、行或分支,也可以是更复杂的指标,如评估语句中的每个条件。根据代码覆盖率工具的不同,测试可以结合单元测试、功能测试甚至手动测试。高代码覆盖率是理想状态,因为这通常代表软件经过了良好的测试。然而,为实现高代码覆盖率而编写测试用例,可能既耗费时间又成本高昂。
本文通过示例演示了如何结合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)示例及其附带的单元测试 。
下图展示了我们为改进单元测试搭建的配置:

组件及其说明如下(使用说明请参阅代码仓库 ):
请注意,生成的单元测试和改进内容需要在流程结束时进行审核。
完成上述设置后,我们就可以开始使用了。下面是在 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 计划的产品负责人。
Stay up to date with the latest marketing, sales and service tips and news.
Download the latest release here: www.qt.io/download.
Qt 6 was created to be the productivity platform for the future, with next-gen 2D & 3D UX and limitless scalability.
Find webinars, use cases, tutorials, videos & more at resources.qt.io
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.
Näytä tämä julkaisu Instagramissa.Henkilön Qt (@theqtcompany) jakama julkaisu