技術探索

自駕車系統之軟體可靠度技術

工研院 資通所 謝天元

近年來,大量的電子裝置除了運用在汽車上,自駕車也配備多樣感知設備,包含車內電子控制單元、車用資訊娛樂系統、先進駕駛輔助系統、以及車用電子通訊裝置,這對資通訊與汽車產業而言,有強大的市場與吸引力。踏入該產業鏈之前,應瞭解國際車廠所依循的車用電子安全與可靠度標準,其中ISO 26262是大家熟知的車用電子產品功能安全規範,為因應無人車與車聯網之應用蓬勃發展,車用軟體系統之安全性與可靠度規範──MISRA C/C++,也深受國際車廠重視,並納入 ISO26262 標準規範。

精彩內容

1. 新版ISO 26262熱騰騰登場
     ●  車用軟體重要規範 MISRA C/C++
     ●  程式碼最強爬蟲技術 靜態分析
2. 資通所發展之車用嵌入式軟體可靠度技術
3. 建置國內車用嵌入式軟體可靠度檢測技術能量

新版ISO 26262熱騰騰登場

ISO 26262 Road vehicles - Functional Safety新版ISO 26262 (第二版)於去年底2018年12月發表,稱為ISO 26262:2018,改版動機主要源於過去的經驗累積,發現許多可改進之處,包含隨著科技方法與技術的演進,需要有更良好的安全管理方法;在新版中,同時把卡車、公共汽車、摩托車也納入安全規範,過去從未考慮的車聯網、自駕車等應用情境,也一併納入規範;同時新增失效時可操作的系統說明,改善第一版僅注重失效的安全機制,第二版更一步強調主要系統損壞時,車輛仍可正常完成正確行為,保護駕駛與乘客安全,同時再延伸,失效安全機制在系統運作時需具有安全機制。

新版ISO 26262:2018的內容共包含12個部分,Part 1到Part 10為既有章節,內部多有修改,而新增部分為Part 11. 對半導體的應用指南、Part 12. 對二輪車的適應性。隨著無人車與車聯網之應用蓬勃發展,軟體產品開發之功能安全與可靠性變得越來越重要,ISO 26262之 Part 6. 軟體產品開發都遵循MISRA C/C++規範,為什麼MISRA C/C++有這樣大魔力,請見以下說明。

MISRA (The Motor Industry Software Reliability Association)是一個國際性汽車工業協會,成員包含歐洲、北美、日本汽車生產商,主要任務是為汽車工業提供安全服務和協助,協助汽車生產商製造安全且可靠性高的系統。

MISRA C是由MISRA提出的C語言開發標準,目的是在增進車用嵌入式軟體的安全性及可移植性。針對C++語言也有MISRA C++開發標準。起初,MISRA C/C++主要是針對汽車產業,隨後其他產業也逐漸開始使用,包括航太工業、電子通信、國防科技、醫療儀器、鐵路運輸等領域。最初是來自於對認證的要求,由於它有助於在開發複雜的軟體期間,減輕系統不確定風險,提高可靠度,現在MISRA C/C++已經被廣泛接受。

MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》是在1998年發行,一般稱為MISRA C:1998。MISRA C:1998有127項規則,其中93項是強制要求規則,其餘34項是建議使用規則。在2004年時發行第二版的MISRA C《Guidelines for the use of the C language in critical systems》(或稱MISRA C:2004),有許多重要建議變更,規則也重新編號,MISRA C:2004有141項規則,其中121項是強制要求規則,其餘20項是建議使用規則。

過去MISRA C:2004主要是以當時流行的C90語言為基礎;然而,其後C99和C11版本對C語言作了許多新功能擴展,其中動態分配記憶體是C語言的一大特色,執行期可依實際需求用malloc()分配記憶體,完成後用free()歸還記憶體,但也發現許多與未正確處理動態記憶體分配有關問題,而MISRA C:2004規定「不能使用動態記憶體分配」,大幅限制malloc()、free()等函式使用。因此,2012年再發行第三版MISRA C:2012進行修訂,並制定154項規則,16項是必要符合規則,108項是強制要求規則,30項建議使用規則。

而然MISRA C/C++標準規則其實具有程式碼靜態可執行性,使用程式靜態分析可容易檢查其程式碼潛在問題,接著介紹軟體程式碼靜態分析技術。

程式靜態分析是指在不執行程式的狀態下,運用字詞分析、語法分析、控制流程分析、資料演繹分析等技術對軟體程式碼進行掃描,驗證軟體程式碼是否滿足規範性、安全性、可靠性、可維護性…等的一種分析技術。目前程式靜態分析在模擬執行技術的發展上,已證明能夠發現更多傳統黑箱或白箱測試不能查覺的缺陷。

程式靜態分析可以幫助軟體開發工程師,追蹤找出程式碼中的結構性錯誤、安全漏洞等問題,進而保證軟體品質;此外也可幫助工程師在缺乏設計文件之大型軟體系統或隱藏系統執行背後,理解其抽象結果、邏輯演繹、資料進出等細微變化,對於大型軟體系統,靜態分析輔助工具能發揮極大作用,故總結軟體靜態分析有以下特性。

(1)不實際執行。對比動態分析技術是透過在實際執行程式而進行的分析方法,多用於效能測試、功能測試、整合測試等方面。相反,靜態分析技術則不執行程式,只是對程式碼掃描而進行的分析方法。
(2)執行速度快、效率高。目前程式靜態分析工具每秒可掃描上萬行程式碼,相對於動態分析工具,具有檢測速度快、效率高的特點。
(3)誤報率高。程式靜態分析是透過對程式掃描,找到匹配某規則的分析技術,進而發現程式碼中的問題,例如可以字串複製strcpy()可能存在記憶體漏洞的函數,這樣有時會造成將一些正確程式碼定義為有缺陷的問題,因此靜態分析存在誤報率的缺陷,但這可結合動態分析以降低誤報率。

資通所發展之車用嵌入式軟體可靠度技術

有鑒於無人車與車聯網應用之軟體程式碼安全、品質、可靠度需求,工研院資通所於自駕車感知次系統四年期計畫中,同步發展軟體程式碼檢測分析技術,目前完成第一版MISRA C/C++規範檢測工具,其操作模式為使用者輸入被掃瞄的程式碼,檢測工具會產出HTML(HyperText Markup Language)格式的分析報告給使用者,其中configuration設定為使用者告知檢測工具,被勾選MISRA C/C++之規範與條文;檢測工具之軟體架構如圖1所示,其內包含五大模組,各模組的功能描述如下。

(1) Pre-processing模組:提供被掃瞄的原始程式碼,建立程式碼檔案之相依性和交互參照之關連性。
(2) Scan-build wrapper模組:提供被掃瞄的原始程式碼之編譯功能,建立原始程式碼的Abstract Syntax Tree以及相關檢測所需之資料結構。
(3) Single File Translation unit模組:提供被掃瞄的原始程式碼之初級檢測與分析功能,其內含有AST Visitors和Symbolic Execution兩種技術進行檢測與分析。
(4) Cross Files Translation unit模組:提供被掃瞄的原始程式碼之高級檢測與分析功能,其內含有AST Visitors、Symbolic Execution、PPCallBack三種技術進行檢測與分析。
(5) Post-processing模組:提供被掃瞄的原始程式碼之合成報告功能,針對程式碼分析結果,建立供使用者觀看的報告。

圖1  MISRA C/C++規範檢測工具之軟體架構圖圖1 MISRA C/C++規範檢測工具之軟體架構圖

從過去文獻記載,已經有許多程式碼分析技術被提出,但幾乎都掌握在國外廠商手中,國內僅有少數研究單位從事相關研究,在國內產業上,幾乎由代理商引進國外軟體檢測工具;故鑒於此,工研院資通所發展此檢測工具,目標厚實國內相關軟體技術能力,目前該第一版MISRA C/C++規範檢測工具已具備以下7種能力,並分別描述。

(1)字詞分析技術:從左至右一個字詞一個字詞的讀入,對原始程式碼的字詞進行掃描,使用正則表達匹配方法,將原始程式碼轉換為等價的符號詞,生成相關符號列表。
(2)語法分析技術:判斷原始程式碼結構上是否正確,使用上下文無關語法將相關符號整理為語法樹。
(3)抽象語法樹分析技術:分析語法樹之結構,判斷樹中節點是否違反某規則。(4)語意分析技術:對結構正確的程式碼進行上下文有關語意的分析與掃瞄。
(5)控制流程分析技術:先將程式碼生成有向控制流程圖,用節點表示基本程式區塊,節點間之有向箭頭代表控制流程,依此分析所有控制流程圖。
(6)資料演繹分析技術:對控制流程圖進行尋訪,記錄所有資料之變化,包含初始點和終點,並保存每一瞬間之相關數據,並因此進行分析。
(7)無效程式碼分析:根據控制流程圖進行尋訪,找出孤獨的節點之分析。

目前第一版MISRA C/C++規範檢測工具已實際運用在自駕車之感知次系統軟體上,具有視覺化圖形操作介面、統計分析功能,如圖2所示,界面左方專案框內,使用樹狀結構依字母順序排列的檔案、資料夾,界面右上程式碼框顯示違反規範之結果,在程式碼行號下方使用黃底標示,界面右下統計框顯示專案違反規範總數,各條文違反個數;然而該計畫仍持續開發中,預計不久後即發行第二版MISRA C/C++規範檢測工具,會支援更困難的靜態分析技術,使用者界面也同步進行優化。

圖2  MISRA C/C++規範檢測工具界面圖2 MISRA C/C++規範檢測工具界面

建置國內車用嵌入式軟體可靠度檢測技術能量

車用嵌入式軟體之可靠度是國際車廠最為重視的一部分,全球前十大車廠,如Mercedes-Benz、Toyota、BMW、Volkswagen、Honda、Renault-Nissan、GM、Ford、Fiat、Peugeot都要求其零組件、模組供應商其軟體系統需符合MISRA C/C++規範;因軟體因素而導致市售車輛招回維修,對於車商而言,是非常沉重的負擔,然而目前國內對於軟體品質安全與可靠度,幾乎依靠國外廠商,故工研院資通所努力在此,為國內建立檢測分析與可靠度技術能量。

參考文獻

[1] International Organization of Standardization, “ISO 26262 road vehicles – functional safety part 1-10,” November 2011

[2] International Organization of Standardization, “ISO 26262 road vehicles – functional safety part 1-12,” December 2018

[3] MISRA C:1998 - Guidelines for the use of the C language in vehicle based software

[4] MISRA C:2004 - Guides for the use of the C language in critical systems

[5] MISRA C++:2008 - Guides for the use of the C++ language in critical systems

[6] MISRA C:2012 - Guides for the use of the C language in critical systems

[7] Static Program Analysis. Available: https://cs.au.dk/~amoeller/spa/spa.pdf

[8] Static Analysis vs Dynamic Analysis in Software Testing. Available: https://www.testingexcellence.com/static-analysis-vs-dynamic-analysis-software-testing/