将Perforce QAC与CI/CD流水线集成实现代码“质量门控”管理

创提信息
2025/08/25

分享到

一、引言

在敏捷开发与 DevOps 理念深度渗透的产业环境下,嵌入式与汽车电子软件开发面临更严苛的交付挑战。汽车电子系统代码规模已突破亿行级别,嵌入式设备固件更新频率提升至每月3-5次,传统瀑布式开发模式难以应对复杂功能迭代与功能安全要求。根据 AUTOSAR 联盟统计,车载 ECU 系统中78%的功能失效源于编码阶段的逻辑错误与内存泄漏,而 ISO 26262功能安全标准强制要求缺陷密度低于0.1个/千行代码。在自动驾驶、智能座舱等关键域控制器开发中,建立覆盖需求分析到 OTA 升级的全生命周期质量保障体系,通过静态代码分析与持续集成验证,成为满足 ASPICE 流程认证、降低召回风险的核心技术路径。

 

Perforce QAC软件作为业内领先的代码合规和缺陷静态分析软件,为了提供更完整企业化代码质量管理平台方案,自v2025.1版本起特别增强了其与CI/CD流水线集成的功能,本文旨通过实例分享如何将QAC与CI/CD流水线集成实现代码质量门控管理。

图片1.png

二、Perforce QAC和CI/CD简介

Perforce QAC是一款业内领先的专业级代码静态分析工具,专注于 C/C++ 代码质量保障,在软件开发流程中扮演着“代码质量守门人”的角色。在合规性检查方面,QAC严格遵循MISRA C/C++, AUTOSAR C++14, CERT, CWE等权威编码标准,自动检查不合规代码。在缺陷检测方面,QAC凭借强大的数据流分析能力,可以精准定位空指针、内存泄漏、数组越界和内存问题等隐患。QAC在质量度量方面,可以生成多种类型的报告,通过圈复杂度等量化指标,帮助用户评估代码的可维护性与扩展性。QAC现已广泛应用于各类嵌入式软件、汽车电子、航空航天、工业控制等高安全性要求领域。

CI/CD 是现代软件开发的核心支柱之一,它代表持续集成(Continuous Integration)和持续交付(Continuous Delivery)或持续部署(Continuous Deployment)。它们共同构成了一个自动化流程,旨在以更快速、更可靠的方式构建、测试和发布软件。常用的CI/CD系统有Jenkins、GitHub Actions、GitLab CI/CD、CircleCI、Gitee CI/CD等。CI/CD 是现代软件开发中实现高效交付的关键流程,通过自动化手段将开发、测试、部署等环节紧密串联,形成一个高效运转的闭环体系。

QAC和CI/CD二者结合,可以形成“质量门控”与“效率引擎”的双重驱动。通过自动化流水线,实现代码提交、构建、测试到部署的无缝衔接,帮助开发者实现“左移测试”,将代码错误扼杀在摇篮阶段。

三、将QAC与CI/CD 集成的基本步骤

1. 前置准备

需要准备一台符合QAC配置要求的服务器,并安装最新版本的QAC软件;安装并部署用于项目代码的编译工具链,确保代码可在该服务器上正常编译构建;预先搭建好CI/CD环境,本文将以GitLab CI/CD系统为例进行说明,其他用户可以基于自有的CI/CD系统实现。

2. 实施方法

首先将安装了QAC的服务器作为GitLab CI/CD流水线运行所需的独立Runner, 并将Runner和GitLab关联起来。如下图所示:

图片2.png


然后在CI/CD流水线编辑器中增加QAC的相关执行命令,包括被测工程的创建、代码及配置的同步、执行代码分析以及结果向 Validate 上传等。QAC支持各种命令行执行方式,用户可以按照需要添加执行命令,当流水线被触发时,QAC将按照预设脚本进行执行。

之后,根据需要在流水线编辑器设置门控触发条件,比如在代码提交给指定分支时触发,或在发起合并请求时触发,具体可依据实际情况进行配置。本示例中选择提交代码与发起合并请求时均会触发流水线。

图片3.png

四、代码提交时的质量门控

通过代码中的错误示例检验以上设置是否生效。

如本示例所示,在项目代码中,添加一段数组越界的示例代码:有一个包含 10 个元素的数组line,在循环过程中,将变量i同时用作循环的判断条件及数组line的下标。在代码文件第24行,当i的值等于10时,访问数组line会出现越界情况。


图片4.png

保存修改后的代码,并提交至代码仓库的 test 分支。代码提交后,GitLab CI/CD自动触发流水线进行构建,在构建过程中,QAC会按照预设命令执行。当QAC检测到代码中的违规或者质量错误时,流水线将自动终止并显示失败状态 --不符合质量要求的代码被禁止提交进代码仓库。如下图所示:

图片5.png

流水线执行完毕后,如果本次流水线执行失败,用户可以通过浏览器登录到Validate中央报告平台查看QAC检测出的代码问题的详细信息。

图片6.png

五、代码合并时的质量门控

在代码分支合并过程中,同样可触发CI/CD流水线。本示例中,用户发起代码合并时触发了QAC可对源分支代码进行分析,分析完成后,原分支代码被检测出存在代码错误,本次合并请求被自动阻止 --不符合质量要求的代码被禁止合并入代码主分支,起到了代码质量门控的作用。

图片7.png

结语

时至今日,代码静态分析已经成为大多数企业把控软件代码质量最常用的手段之一。当研发团队关注静态分析工具检测能力的同时,如何在企业内部形成自动化的管理体系已经成为有效发挥静态分析作用的关键问题。当多数传统的代码静态分析工具还停留在桌面端自发使用、手动触发或人工报告的模式时,Perforce QAC和Klocwork均已经可以无缝、无感地集成到软件全生命周期中。QAC在开发人员日常的开发过程中及时、自动化地对代码错误进行检测、对提交或合并到代码仓库的代码进行门控管理,并自动报告和通知检测结果,最大程度地减少了工具对开发流程的干扰、降低了人为主观因素造成的不确定风险,加快了软件发布流程,最终形成一整套完善的代码质量自动化管理平台方案。

 

如需了解更多相关信息,欢迎联系我们或者申请试用