博客
希望我們能(néng)與您分享和探讨成(chéng)長(cháng)中的點點滴滴
AUTOSAR C++14編碼規範的前世今生
分享到
現如今,随著(zhe)汽車電子、新能(néng)源和自動駕駛等新技術的迅猛發(fā)展,軟件在車輛系統中的比重越來越大,軟件的可靠性對(duì)汽車電子系統和車輛的可靠性起(qǐ)到了至關重要的作用,嵌入式軟件的研發(fā)成(chéng)本也占到了汽車研發(fā)支出中的很大比重。本文將(jiāng)簡要概述AUTOSAR最新發(fā)布的C++14編碼規範的背景、現狀和解決方案。
什麼(me)是MISRA編碼規範?
1998年,位于英國(guó)的由福特、捷豹汽車和蓮花汽車等汽車企業組成(chéng)的汽車産業軟件可靠性協會(huì)(Motor Industry Software Reliability Association,簡稱爲'MISRA')發(fā)布了第一版C語言軟件編碼規範MISRA C:1998,包含了127條C語言編碼規範,其中93條爲嚴格要求,34爲建議遵循,正式開(kāi)啓了汽車電子軟件開(kāi)發(fā)标準的統一化之路。自此之後(hòu),MISRA集合了越來越多的汽車廠商和工具廠商,已先後(hòu)于2004, 2008, 2012發(fā)布了MISRA C:2004, MISRA C++: 2008, MISRA C: 2012,經(jīng)過(guò)二十餘載的發(fā)展,MISRA編碼規範不僅成(chéng)爲了汽車電子行業的最通行和最權威的開(kāi)發(fā)标準,也廣泛被(bèi)諸如航空航天、國(guó)防軍工、軌道(dào)交通、醫療器械和通信等高可靠性嵌入式軟件研發(fā)項目所采納,且以此衍生出這(zhè)些特定行業的規範。
什麼(me)是AUTOSAR?
以寶馬、博世、大陸、戴姆勒、福特、标志雪鐵龍、豐田和大衆爲何核心成(chéng)員的衆多汽車廠商于2003年組建了AUTOSAR開(kāi)發(fā)聯盟,發(fā)布了汽車開(kāi)放系統架構(Automotive Open Software Architecture, 簡稱'AUTOSAR')經(jīng)典平台(Classic Platform),以此作爲汽車電子控制單元ECU的标準開(kāi)放式軟件架構。AUTOSAR标準提供了一整套的标準用來描述基本軟件單元,定義應用接口和基于标準化的交換格式建立通行開(kāi)發(fā)的方法。基于AUTOSAR軟件架構開(kāi)發(fā)的軟件基本單元,可以用于不同的車廠的車輛和不同供應商的電子零部件中,從而降低研發(fā)支出并掌握汽車電子軟件架構日益增長(cháng)的複雜度。AUTOSAR發(fā)展至今,已經(jīng)形成(chéng)了集合超過(guò)180家車廠和供應商的開(kāi)發(fā)聯盟,在汽車軟件開(kāi)發(fā)領域有著(zhe)舉足輕重的地位。
爲了滿足高度自動駕駛和汽車互聯應用的快速發(fā)展,AUTOSAR于2017年3月發(fā)布了第一個版本的自适應平台(Adaptive Platform)。驅動自适應平台的技術包括:帶有外部存儲的高能(néng)32/64位處理器、并行處理和高帶寬通信等。自适應平台的API是使用C++語言實現的,也決定了C++將(jiāng)成(chéng)爲自适應平台軟件的主要開(kāi)發(fā)語言。
圖:AUTOSAR汽車開(kāi)放系統架構
AUTOSAR C++14編碼規範的誕生
爲了保證自适應平台上開(kāi)發(fā)的軟件的可靠性、安全和統一性,AUTOSAR邀請英國(guó)PRQA公司– 于2017年中被(bèi)Perforce Software公司收購-- 作爲唯一的工具合作廠商,一起(qǐ)研究和制定C++語言的開(kāi)發(fā)規範,旨在爲汽車開(kāi)發(fā)廠商安全地使用C++語言進(jìn)行軟件開(kāi)發(fā)提供指導和約束。AUTOSAR C++14編碼規範就(jiù)是在這(zhè)樣(yàng)的背景下,于2017年初随著(zhe)AUTOSAR自适應平台一起(qǐ)發(fā)布的:
• 基于C++14
• 共包含342條編碼規範
• 其中154條直接來自于MISRA C++标準
• 131條來自于PRQA公司的HICPP規範和其它廣泛使用的C++規則
• 57條是基于研究和其它資源
AUTOSAR爲什麼(me)不直接使用MISRA C++: 2008?
既然汽車行業已經(jīng)有廣泛使用的MISRA C++: 2008規範,爲什麼(me)AUTOSAR還(hái)要另行發(fā)布新的規範?這(zhè)也許是很多正在使用MISRA C++規範的開(kāi)發(fā)者首先想到的問題。因爲,
• MISRA C++: 2008是基于C++03語言發(fā)布的,已有將(jiāng)近15年之久
• C++語言本身也在進(jìn)化演變,比如:
o 編譯器的改進(jìn)
o 工具的進(jìn)化
o ISO 26262功能(néng)安全标準的發(fā)布和落地
o 知識庫的擴展
AUTOSAR C++14規範不是現有的MISRA C++标準的替代,而是MISRA C++标準的擴展,它增加了新的C++編碼規範、更新了現有規範,并删除了那些已經(jīng)過(guò)時(shí)的規範。比如AUTOSAR标準中允許使用一些在之前的标準中禁止使用的語言功能(néng),如動态内存、異常、模版、繼承和虛函數等。
如何滿足AUTOSAR C++14編碼規範?
如何高效地在軟件研發(fā)過(guò)程中遵循一套嚴格的編碼規範,主要取決于兩(liǎng)個方面(miàn)的實現方法:
1. 如何檢測出違規的代碼?人工代碼同行評審是一種(zhǒng)行之有效的方法,采用開(kāi)發(fā)人員之間一對(duì)一交換評審或者一對(duì)多由專門的人員評審都(dōu)在代碼提交前找出主要的代碼違規,主要缺點是效率比較低,缺乏可靠性。鑒于此,目前有條件的企業多數會(huì)利用自動化工具進(jìn)行自動掃描分析。
2. 檢測出的違規代碼如何及時(shí)被(bèi)修複?難點在于如何安排測試任務,下發(fā)測試結果和跟蹤管理進(jìn)度。對(duì)于少數人的小項目團隊,這(zhè)一點可能(néng)不是問題。但對(duì)于多人的項目團隊,要求每個人學(xué)會(huì)安裝、配置和使用軟件工具顯然不是最高效的。另外,修複進(jìn)度沒(méi)有統一的平台跟蹤管理,也無法保證修複任務被(bèi)及時(shí)有效地完成(chéng)。對(duì)于10人以上的開(kāi)發(fā)團隊,目前被(bèi)普遍證明的有效方式是“集中掃描 + 報告平台”的部署方式。
Perforce Software公司作爲AUTOSAR C++14編碼規範的唯一工具合作商,最先提供針對(duì)AUTOSAR C++14的完整的、權威的規則包,利用Helix QAC 代碼靜态分析工具,可以全自動地掃描代碼,檢查違規代碼,并詳細報告違規代碼信息。掃描的結果除了可以在Helix QAC桌面(miàn)軟件的界面(miàn)中查看,還(hái)可以自動上傳的基于Web的報告管理平台,開(kāi)發(fā)者隻需通過(guò)Web浏覽器登錄即可查看詳細的相關結果信息,并完成(chéng)修複工作。從而無縫集成(chéng)到開(kāi)發(fā)流程的代碼質量管理平台,覆蓋軟件開(kāi)發(fā)的全生命周期(SDLC)。
除了AUTOSAR C++14編碼規範以外,Helix QAC還(hái)支持對(duì)MISRA C/C++, HICPP, CERT C/C++, CWE, JSF等規範的自動檢查和編碼規範自定義,Helix QAC現已成(chéng)爲汽車OEM和汽車電子供應商研發(fā)過(guò)程中使用最普遍的代碼靜态測試解決方案。
總結
AUTOSAR C++14編碼規範作爲最新的汽車電子行業規範,自發(fā)布之初就(jiù)備受汽車制造和供應商的關注,除了開(kāi)發(fā)自動駕駛、ADAS、新能(néng)源和V2X等應用的企業以外,開(kāi)發(fā)高複雜軟件系統的汽車廠商都(dōu)值得推薦對(duì)其進(jìn)行了解。可以預見,随著(zhe)汽車軟件系統的日益複雜化,AUTOSAR C++14編碼規範將(jiāng)會(huì)迅速應用到越來越多的汽車系統的研發(fā)過(guò)程中。