AUTOSAR C++14編碼規範的前世今生

創提科技
2021/10/19

分享到

AUTOSAR C++14编码规范的前世今生-1.1.png


AUTOSAR C++14编码规范的前世今生-1.2.png
 

現如今,隨著汽車電子、新能源和自動駕駛等新技術的迅猛發展,軟體在車輛系統中的比重越來越大,軟體的可靠性對汽車電子系統和車輛的可靠性起到了至關重要的作用,嵌入式軟體的研發成本也占到了汽車研發支出中的很大比重。本文將簡要概述AUTOSAR最新發佈的C++14編碼規範的背景、現狀和解決方案。
 
什麼是MISRA編碼規範?
 
1998年,位於英國的由福特、捷豹汽車和蓮花汽車等汽車企業組成的汽車產業軟體可靠性協會(Motor Industry Software Reliability Association,簡稱為'MISRA')發佈了第一版C語言軟體編碼規範MISRA C:1998,包含了127條C語言編碼規範,其中93條為嚴格要求,34為建議遵循,正式開啟了汽車電子軟體發展標準的統一化之路。自此之後,MISRA集合了越來越多的汽車廠商和工具廠商,已先後於2004, 2008, 2012發佈了MISRA C:2004, MISRA C++: 2008, MISRA C: 2012,經過二十餘載的發展,MISRA編碼規範不僅成為了汽車電子行業的最通行和最權威的開發標準,也廣泛被諸如航空航太、國防軍工、軌道交通、醫療器械和通信等高可靠性嵌入式軟體研發專案所採納,且以此衍生出這些特定行業的規範。


什麼是AUTOSAR?

 
以寶馬、博世、大陸、戴姆勒、福特、標誌雪鐵龍、豐田和大眾為何核心成員的眾多汽車廠商于2003年組建了AUTOSAR開發聯盟,發佈了汽車開放系統架構(Automotive Open Software Architecture, 簡稱'AUTOSAR')經典平臺(Classic Platform),以此作為汽車電子控制單元ECU的標準開放式軟體架構。AUTOSAR標準提供了一整套的標準用來描述基本軟體單元,定義應用介面和基於標準化的交換格式建立通行開發的方法。基於AUTOSAR軟體架構開發的軟體基本單元,可以用於不同的車廠的車輛和不同供應商的電子零部件中,從而降低研發支出並掌握汽車電子軟體架構日益增長的複雜度。AUTOSAR發展至今,已經形成了集合超過180家車廠和供應商的開發聯盟,在汽車軟體發展領域有著舉足輕重的地位。

 
為了滿足高度自動駕駛和汽車互聯應用的快速發展,AUTOSAR於2017年3月發佈了第一個版本的自我調整平臺(Adaptive Platform)。驅動自我調整平臺的技術包括:帶有外部存儲的高能32/64位處理器、並行處理和高頻寬通信等。自我調整平臺的API是使用C++語言實現的,也決定了C++將成為自我調整平臺軟體的主要開發語言。


AUTOSAR C++14编码规范的前世今生-2.jpg 
圖:AUTOSAR汽車開放系統架構

 
AUTOSAR C++14編碼規範的誕生

 
為了保證自我調整平臺上開發的軟體的可靠性、安全和統一性,AUTOSAR邀請英國PRQA公司– 於2017年中被Perforce Software公司收購-- 作為唯一的工具合作廠商,一起研究和制定C++語言的開發規範,旨在為汽車開發廠商安全地使用C++語言進行軟體發展提供指導和約束。AUTOSAR C++14編碼規範就是在這樣的背景下,於2017年初隨著AUTOSAR自我調整平臺一起發佈的:
      • 基於C++14
      • 共包含342條編碼規範
      • 其中154條直接來自於MISRA C++標準
      • 131條來自於PRQA公司的HICPP規範和其它廣泛使用的C++規則
      • 57條是基於研究和其它資源

 
AUTOSAR為什麼不直接使用MISRA C++: 2008?
 
既然汽車行業已經有廣泛使用的MISRA C++: 2008規範,為什麼AUTOSAR還要另行發佈新的規範?這也許是很多正在使用MISRA C++規範的開發者首先想到的問題。因為,

      • MISRA C++: 2008是基於C++03語言發佈的,已有將近15年之久
      • C++語言本身也在進化演變,比如:
          o 編譯器的改進
          o 工具的進化
          o ISO 26262功能安全標準的發佈和落地
          o 知識庫的擴展


AUTOSAR C++14規範不是現有的MISRA C++標準的替代,而是MISRA C++標準的擴展,它增加了新的C++編碼規範、更新了現有規範,並刪除了那些已經過時的規範。比如AUTOSAR標準中允許使用一些在之前的標準中禁止使用的語言功能,如動態記憶體、異常、模版、繼承和虛函數等。


如何滿足AUTOSAR C++14編碼規範?
 
如何高效地在軟體研發過程中遵循一套嚴格的編碼規範,主要取決於兩個方面的實現方法:
 
1. 如何檢測出違規的程式碼?人工程式碼同行評審是一種行之有效的方法,採用開發人員之間一對一交換評審或者一對多由專門的人員評審都在程式碼提交前找出主要的程式碼違規,主要缺點是效率比較低,缺乏可靠性。鑒於此,目前有條件的企業多數會利用自動化工具進行自動掃描分析。
 
2. 檢測出的違規程式碼如何及時被修復?難點在於如何安排測試任務,下發測試結果和跟蹤管理進度。對於少數人的小項目團隊,這一點可能不是問題。但對於多人的專案團隊,要求每個人學會安裝、配置和使用軟體工具顯然不是最高效的。另外,修復進度沒有統一的平臺跟蹤管理,也無法保證修復任務被及時有效地完成。對於10人以上的開發團隊,目前被普遍證明的有效方式是“集中掃描 + 報告平臺”的部署方式。
 
Perforce Software公司作為AUTOSAR C++14編碼規範的唯一工具合作商,最先提供針對AUTOSAR C++14的完整的、權威的規則包,利用Helix QAC程式碼靜態分析工具,可以全自動地掃描程式碼,檢查違規程式碼,並詳細報告違規程式碼資訊。掃描的結果除了可以在Helix QAC桌面軟體的介面中查看,還可以自動上傳的基於Web的報告管理平臺,開發者只需通過Web流覽器登錄即可查看詳細的相關結果資訊,並完成修復工作。從而無縫集成到開發流程的程式碼品質管制平臺,覆蓋軟體發展的全生命週期(SDLC)。
 
除了AUTOSAR C++14編碼規範以外,Helix QAC還支援對MISRA C/C++, HICPP, CERT C/C++, CWE,  JSF等規範的自動檢查和編碼規範自訂,Helix QAC現已成為汽車OEM和汽車電子供應商研發過程中使用最普遍的程式碼靜態測試解決方案。


總結
 
AUTOSAR C++14編碼規範作為最新的汽車電子行業規範,自發佈之初就備受汽車製造和供應商的關注,除了開發自動駕駛、ADAS、新能源和V2X等應用的企業以外,開發高複雜軟體系統的汽車廠商都值得推薦對其進行瞭解。可以預見,隨著汽車軟體系統的日益複雜化,AUTOSAR C++14編碼規範將會迅速應用到越來越多的汽車系統的研發過程中。