在汽車應用領域,軟件開發變得越來越重要。隨著安全、環境以及便利性需求的增長,車輛中應用電子系統的數量也在急速增長。其中有90%的創新應用都是基于軟件驅動的電子組件。而這些組件的研發成本占車輛開發成本的40%,快速穩定的發展需要整合更多的功能和控制單元,這種情況對于汽車制造商是嚴重的挑戰。這篇白皮書簡要概述了新的AUTOSAR(汽車開放系統架構)編碼指南,并指出如何遵守該指南。
AUTOSAR是什么?
AUTOSAR(汽車開放系統架構)旨在規范和論證基本軟件單元、接口和總線系統,并且幫助汽車制造商更好地管理日益增長的復雜性系統,同時降低成本。它創建了汽車電子控制單元(ECU)標準化的開放式軟件架構。
作為超過180家汽車制造商的合作伙伴、汽車供應商、工具供應商和半導體供應商,AUTOSAR的核心成員包括:寶馬、博世、德國大陸、戴姆勒、福特、通用、標致雪鐵龍、豐田和大眾。
由AUTOSAR衍生的開放式架構“經典平臺”,它在基本微控制器上實現,適用于具有嚴格的實時和安全性要求的車輛功能。目前,AUTOSAR又開發了一個名為“自適應平臺”的新標準,用于汽車互聯和自動駕駛。這一標準旨在滿足快速增長的對于車輛互聯和高度自主駕駛技術的市場需求。驅動自適應平臺標準的技術示例包括:帶有外部存儲器的高性能32位/ 64位微處理器,并行處理和高帶寬通信。
依據自適應平臺標準開發的軟件可與依據AUTOSAR經典平臺標準建立的系統有效融合。
經典平臺允許使用C、C++和java語言實現,但通常以C語言為主。目前,自適應AUTOSAR平臺提供的應用編程接口(API)使用C++定義實現,這就意味著AUTOSAR在新的自適應平臺組件中將C++作為編程語言。
C和C++語言是汽車嵌入式系統的主要編程語言。這是因為這兩種語言可以實現對硬件系統直接、有效的控制,這給開發帶來極大靈活性,但同時也夾帶著風險。有可能出現編譯具有未定義行為代碼的情況,或者無法保證相同的代碼在不同目標硬件上編譯和運行時其行為正確性。即使是有經驗的開發人員也會不可避免引入缺陷。
AUTOSAR編碼指南是什么?
為了確保按照AUTOSAR標準編寫的代碼安全,AUTOSAR邀請PRQA公司成為合作伙伴,一起研究“安全苛求系統中C++14語言的使用指南”(《準則》)1。作為AUTOSAR靜態分析合作伙伴,PRQA公司貢獻出了過去30多年的C++語言編程專業知識、以及在大量的軟件開發實踐中所積累的豐富經驗。
AUTOSAR共有342條編碼規則。其中154條是直接復用MISRA C++標準;131條是基于其它常用編碼標準定義的規則,如PRQA公司的HIC++標準;57條是基于研究或其它資源。編程指南中允許一些以前標準中禁止的語言特征,如:動態內存、異常、模板、繼承和虛擬函數。該準則規范了這些語言特性在安全范圍內的應用。
AUTOSAR發展的一個原則就是驗證規范與標準化并行開展。自適應平臺使用C++語言編寫,通過AUTOSAR內部實現進行驗證。AUTOSAR使用PRQA公司(AUTOSAR靜態分析合作伙伴)先進的QA·C++分析工具,確保演示源碼的質量以及對于編碼準則的符合性。
為什么需要AUTOSAR編碼指南?
在AUTOSAR編碼指南形成之前,對于安全關鍵類軟件的C++標準(C++11和C++14)缺少合適的編碼標準約束。現有的針對傳統C++標準所制定的規范要么不完整,要么不適用于安全關鍵類軟件的應用。汽車行業廣泛使用的C++編碼標準MISRA C++:2008是基于C++03制定的,且已有14年之久。
由于C++03的介紹中缺少基于AUTOSAR工程的相關MISRA標準描述,目前存在如下改變:
1、C++的演變
2、編譯器的改進
3、測試、驗證及分析類工具的改進
4、ISO 26262車輛功能安全標準的制定
5、廣泛的安全類條目被列入其它標準中,如:
?HIC++(PRQA)2
?JSF AV C++(Lockheed Martin)3
?CERT C++ (Carnegie Mellon)4
?C++核心指南(Bjarne Stroustrup and ?Herb Sutter)5
針對AUTOSAR制定的編碼指南,可作為現有MISRA C++標準的一個擴展補充。它制定了新的規則,并更新了舊的MISRA規則。
誰將使用AUTOSAR編碼指南?
編碼指南中指明:“主要適用于汽車行業,但也同時適用于其它嵌入式應用部分...... AUTOSAR C++14編碼指南支持高端嵌入式微控制器,它提供高效、完整的C++14語言支持,同時適用于32位和64位微控制器,以及使用POSIX或類似操作系統的微控制器。”
如何確保代碼符合AUTOSAR編碼指南?
傳統上,工程師會采用繁復的人工代碼審查方式開展代碼審查,以確保代碼是否按照既定標準編寫。這個過程很容易出錯,并且不適用于當今大型、復雜的代碼量工程中。幸運的是,這些檢查現在可以使用工具實現自動化。“靜態分析器”就是為這個目的設計的工具。靜態分析器不僅報告違反編碼規則的情況,而且執行深度代碼檢查,以突出顯示任何未定義的、未指定的或與編譯器相關的行為。它分析程序中所有可能執行的路徑,標記潛在的運行時錯誤。通常,它可以發現測試中沒有發現的問題,因為測試中要達到覆蓋所有可能的執行路徑是很不實際的。靜態分析器在用于開發安全、可靠類軟件的工具鏈中,屬于一個重要組成部分。
就AUTOSAR而言,使用PRQA的靜態分析工具QA·C++,是為了保證其源代碼的質量,并在遵守編碼準則方面提供了寶貴的見解。結合PRQA在編碼指南方面的貢獻,這些建議推動了靜態分析解決方案的發展,且該方案符合AUTOSAR標準的軟件開發優化。
PRQA的AUTOSAR符合性模塊對QA·C++標準消息進行擴充,使其與AUTOSAR指南更為契合。對于中型或大型開發團隊,PRQA提供了質量管理控制系統QA·Verify,可實現對工程的有效管理。這保證了所有團隊成員除了在項目持續期間跟蹤和報告代碼質量外,還能夠始終應用編碼指南。
總結
AUTOSAR標準將作為一個基準平臺,通過最小化功能域之間的障礙有效應用于以后的汽車行業。該標準幾乎獨立于相關硬件,旨在實現將功能和功能網絡映射到系統中不同的控制節點這一目標。雖然該標準是由汽車行業發展而來,但這些準則同樣適用于使用C++ 14開發嵌入式軟件的其他行業。在應用中,PRQA靜態分析工具QA·C++可確保代碼沒有錯誤且符合編碼規范。
參考文獻
1. High Integrity C++:? http://www.codingstandard.com
2. Joint Strike Fighter Air Vehicle C++:? http://www.stroustrup.com/JSF-AV-rules.pdf
3. CERT C++:? https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637
4. C++ Core Guidelines:? https://github.com/isocpp/cppcoreguidelines
5. AUTOSAR Guidelines:? https://www.autosar.org/fileadmin/files/standards/adaptive/17_03/general/specs/AUTOSAR_RS_CPP14Guidelines.pdf