
導(dǎo)讀
汽車電子軟件開發(fā)中,編譯器是必備工具,功能安全是必守標(biāo)準(zhǔn),這兩個需求的綜合就是功能安全認(rèn)證版編譯器。
免費(fèi)的開源編譯器似乎也能編譯出實(shí)現(xiàn)功能的軟件,那么為何還需要購買功能安全認(rèn)證版編譯器呢?或者購買了功能安全認(rèn)證版編譯器且軟件能編譯出來運(yùn)行,是否就足夠了呢?
使用符合要求的編譯器重要,按照規(guī)則對其進(jìn)行正確配置和使用也同等重要。本文將詳細(xì)介紹在軟件開發(fā)中如何實(shí)踐這些要求。

作者 | 輝羲智能-戴興
HUIXI TECH
一、ISO 26262中對編譯器的要求
功能安全相關(guān)的產(chǎn)品開發(fā)需要保證開發(fā)過程中使用的工具鏈符合相應(yīng)的功能安全標(biāo)準(zhǔn)。如果工具在使用過程出現(xiàn)異常,就可能影響最終的安全目標(biāo)。例如,同樣一份C代碼,每次編譯的結(jié)果若產(chǎn)生差異,就完全無法保證這份代碼所定義的行為在項(xiàng)目開發(fā)過程中保持一致性了。
ISO 26262-8中定義了對工具的評估和鑒定的標(biāo)準(zhǔn)。編譯器作為可能影響安全目標(biāo)的工具之一,需要通過相關(guān)的工具鑒定。ISO 26262-8標(biāo)準(zhǔn)要求為工具鑒定過程編寫兩個工作產(chǎn)品:

關(guān)于“軟件工具的評估”
軟件工具標(biāo)準(zhǔn)評估包括對于軟件工具的“使用規(guī)劃”和確定該工具的“置信度級別”。“使用規(guī)劃”目的就是確定軟件工具使用場景的邊界。例如編譯C語言和C++就是完全不同的使用場景。而“置信度”決定了工具的鑒定方式,以證明該工具適合用于安全相關(guān)的開發(fā)項(xiàng)目。
ISO 26262中對使用規(guī)劃的定義為:
1. 制定軟件工具的識別碼和版本號;
2. 制定軟件工具的配置;
3. 制定軟件工具的使用案例;
4. 制定軟件工具執(zhí)行的環(huán)境;
5. 制定當(dāng)軟件工具功能異常并產(chǎn)生相應(yīng)的錯誤輸出時,會直接違背分配給相關(guān)項(xiàng)或要素的全部安全要求的最高ASIL等級;
6. 如需要,制定基于確定的置信度水平和ASIL等級的軟件工具的鑒定方法;
ISO 26262要求對使用需求進(jìn)行規(guī)范描述,包括:
1.?軟件工具的特征、功能和技術(shù)屬性的描述;
2.?如果適用,用戶手冊或其他使用指南;
3. 工具運(yùn)行要求的環(huán)境描述;
4.?如果適用,對異常運(yùn)行條件下期望的軟件工具表現(xiàn)的描述;
5.?如果適用,對已知軟件工具功能異常,及恰當(dāng)?shù)陌踩Wo(hù)、避免或應(yīng)急措施的描述;
6.?在制定軟件工具要求的置信度水平過程中,識別出的對軟件工具功能異常和相應(yīng)錯誤輸出的預(yù)防或探測措施;
確定軟件工具的規(guī)劃使用后,還需要描述軟件工具的使用案例,每個使用案例的描述應(yīng)包括:
1.?預(yù)期的目的;
2. 輸入和期望的輸出;
3. 如果適用,使用過程、環(huán)境的和功能的約束。
關(guān)于“軟件工具的鑒定”
確定完使用案例后,軟件工具資格鑒定過程就可以開始了。
首先確定每個使用案例下工具的工具置信度Tool Confidence Level(TCL)。
影響軟件工具置信度TCL的兩個因素是工具影響Tool Impart(TI)和工具錯誤檢測Tool Eroor Detection(TD)。
TI:特定軟件工具功能異常可引入或不能探測開發(fā)中安全相關(guān)項(xiàng)或要素中錯誤的可能性:
TI1:無影響? ?? ?TI2:有影響
TD:用于預(yù)防軟件工具功能異常并產(chǎn)生相應(yīng)錯誤輸出的措施的置信度,或用于探測軟件工具存在功能異常并已產(chǎn)生相應(yīng)錯誤輸出的措施的置信度:
TD1:高? ? ? ? ? ?TD2:中? ? ? ? ? TD3:低
確定完TI和TD后,根據(jù)下表得出TCL。其中TCL的值越大,就越可能影響功能安全。

畫重點(diǎn):
根據(jù)TI(工具影響)和TD(工具錯誤檢測)計(jì)算TCL(工具置信度)。
講案例:
如下案例1和案例2出現(xiàn)失效將會直接影響最終運(yùn)行的可執(zhí)行文件,從而影響最高的安全需求,TI值均為TI2。即:

TD的分析和使用環(huán)境,開發(fā)流程等均有關(guān),分析這部分是較為復(fù)雜的一部分,可通過如下方式進(jìn)行評估:

其中:
4分及以上,評為TD1;3分為TD2;0分到2分為TD3。
假設(shè)該編譯器的TD為TD3,那么總體的編譯器評估結(jié)果如下:

工具置信度計(jì)算出來后,就可以進(jìn)行軟件工具資格鑒定了。
ISO 26262-8有多個工具鑒定的方法,軟件工具鑒定報告會包含使用所選方法的結(jié)果。
根據(jù)軟件工具評估得出的TCL,結(jié)合實(shí)際開發(fā)中的安全需求等級,即可確定鑒定方法。其中評估為TCL1的軟件工具不需要進(jìn)行鑒定。具體如下:

1a:使用中積累信任度
要求證明該工具已經(jīng)用于相同目的下可比較的使用案例、可比較的操作環(huán)境和配置,而且工具配置規(guī)格等均一樣。且在之前的使用過程中發(fā)生的故障和相應(yīng)的錯誤輸出,都存有系統(tǒng)完備的記錄。該方法還規(guī)定,使用過程中積累的信賴需要建立在充足與合適的數(shù)據(jù)之上。
1b:工具開發(fā)流程評估
需要國內(nèi)外認(rèn)證機(jī)構(gòu)來基于工具供應(yīng)商內(nèi)部開發(fā)流程進(jìn)行評估。
1c:軟件工具確認(rèn)
驗(yàn)證工具能否實(shí)現(xiàn)其設(shè)計(jì)需求。可以通過測試來提供證據(jù)表明工具錯誤不會發(fā)生或者能夠被檢測。需要考慮所有的可能性。
1d:按照安全標(biāo)準(zhǔn)開發(fā)
參照ISO 26262標(biāo)準(zhǔn)中的規(guī)定進(jìn)行開發(fā)。
在完成編譯器評估和鑒定后,對整個過程的需要進(jìn)行記錄存檔,并需要對其過程輸出產(chǎn)品評估報告和鑒定報告進(jìn)行審查,保證過程的質(zhì)量。對評估報告、鑒定報告、評估審查報告和鑒定審查報告進(jìn)行存檔維護(hù),整個編譯器的評估和鑒定就完成了。
HUIXI TECH
二、開發(fā)過程中進(jìn)行正確的配置和使用
如果走到了“1d 按照安全標(biāo)準(zhǔn)進(jìn)行開發(fā)”,那么需要向編譯器廠商索取,確認(rèn)及保留相關(guān)信息即可。這時就看出功能安全認(rèn)證版編譯器的不同之處了。以某編譯器供應(yīng)商的safety manual為例,明確提到了如下3個方面對軟件開發(fā)的影響:
通用類
1. 對編譯器需進(jìn)行管理,確保統(tǒng)一項(xiàng)目開發(fā)人員使用的是相同版本的編譯器;
2. 對編譯器的獲取、安裝、維護(hù)等需要嚴(yán)格按照對應(yīng)的用戶指南進(jìn)行,且需要保證文件夾不被損壞;
3. 不可將編譯器功能用于其他工具功能擴(kuò)展的輸入;
4. 浮點(diǎn)運(yùn)算需要用戶非常了解對應(yīng)處理器的浮點(diǎn)特性,以便對編譯器做出合適配置;
5. 編譯器編譯的輸出必須運(yùn)行在硬件或RTOS上······
等12條通用約束,與軟件開發(fā)管理強(qiáng)相關(guān)。
功能限制類
1. 如果沒有硬件浮點(diǎn)運(yùn)算單元,軟件編碼過程實(shí)現(xiàn)浮點(diǎn)運(yùn)行算;
2. 如果系統(tǒng)僅支持單精度浮點(diǎn),軟件需確保避免使用雙浮點(diǎn);
3. 用戶僅可使用-std=c90或-std=c99用于安全開發(fā);
4. 不要使用動態(tài)鏈接;
5. 不要使用自動overlay支持選項(xiàng)······
等11條功能約束,與makefile與編程規(guī)則設(shè)置強(qiáng)相關(guān)。
診斷類
1. 不可降低編譯器的診斷嚴(yán)重度;
2. 需要確保對于內(nèi)存訪問的對齊配置與要訪問的內(nèi)存的對齊規(guī)則一致;
3. 用戶需開啟-mfloat-abi 來診斷浮點(diǎn)運(yùn)算前后調(diào)用的一致性;
4. 需要使用配置-g選項(xiàng)確保調(diào)試階段和生產(chǎn)階段出現(xiàn)不一樣;
5. 需要使用-fno-builtin選項(xiàng),當(dāng)使用庫時······
等9條診斷約束,與makefile設(shè)置強(qiáng)相關(guān)。
以上限制,將直接影響編譯器選項(xiàng)的確定、coding standard以及內(nèi)部開發(fā)管理。每個細(xì)節(jié)都需要小心檢查,并不是編譯通過就能高枕無憂的了。
HUIXI TECH
三、總結(jié)
ISO 26262提出了對軟件開發(fā)工具的要求,并定義了進(jìn)行工具標(biāo)準(zhǔn)評估和工具資格鑒定的一系列注意事項(xiàng)。編譯器作為最典型的軟件開發(fā)工具,大部分場景下需要通過“1d 按照安全標(biāo)準(zhǔn)進(jìn)行開發(fā)”來進(jìn)行鑒定。而1d類型的鑒定就需要編譯器供應(yīng)商的大量支持,這是功能安全認(rèn)證版編譯器才能帶來的。
選擇了功能安全認(rèn)證版編譯器后,同樣需要在編譯器選項(xiàng)、編碼規(guī)則、開發(fā)管理等多個維度對其進(jìn)行正確配置和使用,才能最終滿足ISO 26262要求。

