將Perforce QAC與CI/CD流水線集成實現代碼“品質門控”管理

創提信息-/twang
2025/08/26

分享到

一、引言

在敏捷開發與 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在開發人員日常的開發過程中及時、自動化地對代碼錯誤進行檢測、對提交或合併到代碼倉庫的代碼進行門控管理,並自動報告和通知檢測結果,最大程度地減少了工具對開發流程的干擾、降低了人為主觀因素造成的不確定風險,加快了軟體發佈流程,最終形成一整套完善的代碼品質自動化管理平臺方案。

 

如需瞭解更多相關資訊,歡迎聯繫我們或者申請試用