原創(chuàng)|行業(yè)資訊|編輯:鄭恭琳|2020-12-24 14:07:51.640|閱讀 500 次
概述:重用舊代碼是現(xiàn)實(shí),但是在安全關(guān)鍵型軟件項(xiàng)目中重用舊代碼并實(shí)現(xiàn)MISRA C 2012的完全合規(guī)性是艱巨的任務(wù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
重用舊代碼是現(xiàn)實(shí),但是在安全關(guān)鍵型軟件項(xiàng)目中重用舊代碼并實(shí)現(xiàn)MISRA C 2012的完全合規(guī)性是艱巨的任務(wù)。
最初的MISRA原則是為了在開發(fā)代碼時(shí)應(yīng)用而創(chuàng)建的,即使文檔本身也有警告:
“……在項(xiàng)目周期的后期檢查MISRA C符合性的項(xiàng)目可能會(huì)花費(fèi)大量時(shí)間進(jìn)行重新編碼、重新審查和重新測(cè)試。因此,預(yù)計(jì)軟件開發(fā)過程將需要盡早應(yīng)用MISRA C原則。”
由于出于業(yè)務(wù)原因,許多組織確實(shí)需要重用其舊版代碼庫,因此針對(duì)這些挑戰(zhàn)創(chuàng)建了MISRA 2016合規(guī)指南文件。其中,在當(dāng)前項(xiàng)目范圍內(nèi)開發(fā)的新的本機(jī)代碼與在項(xiàng)目范圍之外開發(fā)的“已采用”代碼之間有明顯的區(qū)別。在這篇文章中,我解釋了一種處理遺留代碼和MISRA C合規(guī)性的實(shí)用方法。
盡管似乎很容易理解要處理的代碼類型,但在很多情況下情況并非如此。例如,將不遵循MISRA準(zhǔn)則開發(fā)的初始原型產(chǎn)品化,然后管理層意識(shí)到合規(guī)性是預(yù)期市場(chǎng)的要求。通常,遺留代碼庫的開發(fā)從來沒有考慮任何編碼準(zhǔn)則。因此,如果在新項(xiàng)目的上下文中需要更新,則無法將代碼庫自動(dòng)分類為“采用的代碼”。這會(huì)變得很復(fù)雜。
通常,通過啟用了所有MISRA C 2012規(guī)則(包括修訂1)的靜態(tài)分析工具對(duì)大型代碼庫進(jìn)行的初始掃描會(huì)產(chǎn)生數(shù)以萬計(jì)的違規(guī)行為。在最初的震驚之后,團(tuán)隊(duì)開始尋找解決沖突的“創(chuàng)造性”方法。重要的是,不要阻止開發(fā)團(tuán)隊(duì)——隧道盡頭有陽光。
隨著時(shí)間的流逝,我已經(jīng)收集并確定了開發(fā)團(tuán)隊(duì)用來使代碼合規(guī)而又不影響正在進(jìn)行的開發(fā)速度的最佳實(shí)踐和方法。在本文中,我將分享一些實(shí)用且平衡的方法,以使現(xiàn)有代碼庫符合MISRA。
MISRA C 2012是用于C編程語言的一組編碼準(zhǔn)則。該標(biāo)準(zhǔn)的重點(diǎn)是通過避免C語言中的已知問題構(gòu)造,通過防止編程人員犯錯(cuò)誤而導(dǎo)致運(yùn)行時(shí)失敗(以及可能的安全問題),從而提高軟件的安全性。多年來,許多嵌入式系統(tǒng)開發(fā)人員一直(并且仍然)抱怨MISRA C對(duì)標(biāo)準(zhǔn)過于嚴(yán)格,并且編寫完全兼容的代碼的成本難以證明。實(shí)際上,鑒于MISRA C已應(yīng)用在安全關(guān)鍵軟件中,因此將該標(biāo)準(zhǔn)應(yīng)用于項(xiàng)目的價(jià)值取決于以下因素:
由于軟件故障而導(dǎo)致系統(tǒng)故障的風(fēng)險(xiǎn)
系統(tǒng)故障給企業(yè)造成的損失
開發(fā)工具和目標(biāo)平臺(tái)
開發(fā)人員的專業(yè)知識(shí)水平
使用MISRA Compliance: 2016框架
因此,程序員必須找到一種符合標(biāo)準(zhǔn)精神的實(shí)用中間立場(chǎng),并且仍要聲稱自己符合MISRA,而不會(huì)浪費(fèi)精力在非增值活動(dòng)上。
在MISRA Compliance: 2016文件中,MISRA聯(lián)盟提供了社區(qū)所需的響應(yīng),并提供了一個(gè)合理定義良好的框架,說明“符合MISRA”一詞的真正含義。該文檔通過定義以下工件來幫助組織使用表達(dá)合規(guī)性要求的通用語言:
準(zhǔn)則執(zhí)行計(jì)劃——演示如何驗(yàn)證每個(gè)MISRA準(zhǔn)則。
準(zhǔn)則重新分類計(jì)劃——在準(zhǔn)則中傳達(dá)商定的各個(gè)規(guī)則的嚴(yán)重性,作為供應(yīng)商/客戶關(guān)系的一部分。
偏差報(bào)告——以合理的理由記錄違反準(zhǔn)則的情況。
準(zhǔn)則合規(guī)摘要——是總體項(xiàng)目合規(guī)性的主要記錄。
為了專注于處理遺留代碼庫,關(guān)鍵文檔是指南重新分類計(jì)劃。本文檔包含所有指令和規(guī)則,并確定已重新分類了哪些類別。例如,下圖顯示了重新分類計(jì)劃的一部分:
首先,對(duì)于“采用的”舊代碼,《MISRA 2016: Compliance》文檔建議不要從不太嚴(yán)格的分類到更嚴(yán)格的分類進(jìn)行重新分類。此外,在與小組一起審查違規(guī)類型之后,也可以一起取消應(yīng)用咨詢規(guī)則。
僅對(duì)于所有必需規(guī)則才需要記錄偏差。應(yīng)該對(duì)所采用的規(guī)范中的任何違規(guī)行為進(jìn)行審查,并且偏差必須清楚地表明違規(guī)行為不會(huì)損害安全性。不管重新分類如何,如果發(fā)現(xiàn)有損害系統(tǒng)安全性的問題,則必須解決此問題。同樣,對(duì)遺留代碼的修改可能會(huì)引入其他問題,這些問題是開發(fā)人員無法清楚看到的。
安全關(guān)鍵軟件開發(fā)人員遇到的關(guān)鍵問題是如何在項(xiàng)目結(jié)束時(shí)演示和證明合規(guī)性。如果評(píng)估標(biāo)準(zhǔn)基于各個(gè)利益相關(guān)者的主觀意見,那么這可能是一個(gè)有爭(zhēng)議的問題,導(dǎo)致浪費(fèi)時(shí)間和精力。在這種情況下,MISRA Compliance: 2016文檔得以解決。
建議的改進(jìn)對(duì)合規(guī)性準(zhǔn)備情況評(píng)估的方法是將現(xiàn)有模板用于最終合規(guī)性和工具合格性報(bào)告。還有一種趨勢(shì)是向報(bào)告中添加比所需更多的信息。如果標(biāo)準(zhǔn)不要求提供該信息,請(qǐng)避免點(diǎn)綴。添加額外的信息不僅浪費(fèi)時(shí)間,而且存在延遲審核過程的風(fēng)險(xiǎn)。
MISRA Compliance 2016提供了包含在最終報(bào)告中的必需信息:
準(zhǔn)則執(zhí)行計(jì)劃
準(zhǔn)則合規(guī)性摘要
所有批準(zhǔn)的偏差許可證的詳細(xì)信息
偏差記錄涵蓋了所有違反準(zhǔn)則的情況,已按要求重新分類。
以下來自Parasoft工具的示例顯示了HTML格式,并帶有指向相應(yīng)部分的鏈接:
除上述建議外,還需要考慮其他一些重要點(diǎn):
在項(xiàng)目開始時(shí)是否制定了GRP(指南重新分類計(jì)劃)?根據(jù)MISRA標(biāo)準(zhǔn),可以與收購方進(jìn)行協(xié)商,也可以為所采用的代碼創(chuàng)建多個(gè)GRP,這些代碼無需進(jìn)行任何修改就可以使用,而本機(jī)代碼則是項(xiàng)目期間主動(dòng)修改的。
對(duì)于每個(gè)增量更改,是否都存在要完全遵守法規(guī)的剩余工作量?這有助于相應(yīng)地計(jì)劃工作并與管理層建立正確的期望。
在項(xiàng)目開始時(shí),是否已與采購方一起審查了GPS(指南符合性摘要)報(bào)告模板,這些模板是否被接受并完整?
商業(yè)靜態(tài)分析工具供應(yīng)商(包括Parasoft)提供了這些文檔的模板,以幫助組織滿足MISRA 2016合規(guī)性框架。
盡管通過靜態(tài)分析工具對(duì)現(xiàn)有代碼進(jìn)行的初始掃描往往會(huì)產(chǎn)生數(shù)千個(gè)違規(guī)行為(尤其是在使用默認(rèn)規(guī)則集時(shí)),但停止新的開發(fā)工作來集中精力解決所有這些違規(guī)行為是不切實(shí)際的。實(shí)際上,我已經(jīng)看到在對(duì)代碼庫進(jìn)行重大更改以修復(fù)靜態(tài)分析違規(guī)時(shí)引入了回歸的情況。因此,重要的是建立一個(gè)工作流來解決隨時(shí)間推移的違規(guī)問題,而又不影響開發(fā)流程和軟件質(zhì)量。
下面列出了在項(xiàng)目中首次使用靜態(tài)分析工具時(shí)的一些關(guān)鍵建議:
基線。在對(duì)代碼進(jìn)行初始掃描之后,將所有初始違規(guī)標(biāo)記為“稍后處理”,并設(shè)置為基準(zhǔn)。從那時(shí)起,在更新現(xiàn)有代碼和/或開發(fā)新代碼時(shí),應(yīng)保持“不允許出現(xiàn)新的違規(guī)”政策。可以通過代碼檢查過程或Jenkins或Bamboo等持續(xù)集成(CI)工具來實(shí)施此策略。當(dāng)開發(fā)人員有幾個(gè)小時(shí)或幾天的空閑時(shí)間時(shí),他們可以解決從基線標(biāo)記的其余違規(guī)情況。組織可以根據(jù)當(dāng)前正在開發(fā)的代碼,代碼審查結(jié)果或依靠度量標(biāo)準(zhǔn)(例如復(fù)雜性)來建議下一個(gè)要解決的違規(guī)問題,從而優(yōu)先考慮此方法。
線在沙子里。開發(fā)確定了一個(gè)日期,即“界線”。在此日期之后,修改的每個(gè)翻譯單元(單個(gè)源文件)都必須解決所有違規(guī)問題。所有未修改的翻譯單元都會(huì)自動(dòng)歸入MISRA合規(guī)性文檔中真實(shí)的“采用”代碼定義之內(nèi)。
基于嚴(yán)重性的優(yōu)先級(jí)。開發(fā)人員會(huì)修復(fù)分配給他們的模塊的所有強(qiáng)制性發(fā)現(xiàn)。隨著時(shí)間的推移,他們會(huì)根據(jù)團(tuán)隊(duì)負(fù)責(zé)人選擇的優(yōu)先級(jí),在時(shí)間允許的情況下解決所有要求的違規(guī)行為。
對(duì)于上述任何一種方法,對(duì)于技術(shù)負(fù)責(zé)人和管理人員而言,通過集中式儀表板不斷監(jiān)視進(jìn)度和項(xiàng)目合規(guī)性狀態(tài)至關(guān)重要。例如,Parasoft的報(bào)告中心提供了以下預(yù)配置的合規(guī)性狀態(tài)儀表板:
MISRA合規(guī)性的一個(gè)不太明顯的組成部分(通常留到項(xiàng)目結(jié)束時(shí))是認(rèn)識(shí)到產(chǎn)品中使用的開發(fā)工具需要針對(duì)預(yù)期用途進(jìn)行資格驗(yàn)證(已證明適合目的)。如果工具需要鑒定,則需要執(zhí)行什么級(jí)別的鑒定?
盡管在許多情況下需要工具鑒定,但用于進(jìn)行工具鑒定的方法因與工具故障和軟件關(guān)鍵性等級(jí)相關(guān)的風(fēng)險(xiǎn)而異。Parasoft提供了針對(duì)特定安全標(biāo)準(zhǔn)及其要求的認(rèn)證套件和認(rèn)證。在缺少此高效工具包的情況下,軟件團(tuán)隊(duì)在評(píng)估商業(yè),免費(fèi)和開源工具時(shí)必須考慮工具認(rèn)證成本。
一些標(biāo)準(zhǔn)(例如ISO 26262和DO-178B/C)提供了有關(guān)工具鑒定要求的合理指導(dǎo)。無論采用哪種方法,工具鑒定過程的目標(biāo)都是聲明“工具對(duì)預(yù)期用途有效”,并提供團(tuán)隊(duì)如何得出此結(jié)論的證據(jù)和理由。
以下是一些建議的步驟,用于工具鑒定過程:
指定預(yù)期用途的工具要求
標(biāo)識(shí)產(chǎn)品中使用的功能的子集。將認(rèn)證過程簡(jiǎn)化為僅使用的功能
概述資格計(jì)劃
概述驗(yàn)證工具是否符合要求的一組資格驗(yàn)證步驟(可能包括團(tuán)隊(duì)執(zhí)行的測(cè)試)
自動(dòng)執(zhí)行可以自動(dòng)化的測(cè)試用例
提供一個(gè)框架來輸入手動(dòng)測(cè)試步驟的結(jié)果
報(bào)告模板以減少開發(fā)人員需要輸入的文本量。
與利益相關(guān)者一起審查報(bào)告并簽字。
從一開始就忽視工具資格可能會(huì)導(dǎo)致項(xiàng)目周期延遲。
開發(fā)人員的專業(yè)知識(shí)和培訓(xùn)是軟件組織忽視的另一個(gè)關(guān)鍵因素,在評(píng)估產(chǎn)品的就緒狀態(tài)時(shí),審計(jì)人員經(jīng)常將其視為首要問題。
根據(jù)《MISRA指南》,員工能力是MISRA合規(guī)性的重要組成部分。最好在項(xiàng)目開始時(shí)進(jìn)行培訓(xùn),并記錄培訓(xùn)日期,所有開發(fā)人員都應(yīng)簽字同意接受培訓(xùn)。在項(xiàng)目結(jié)束時(shí),開發(fā)團(tuán)隊(duì)?wèi)?yīng)該能夠證明:
批準(zhǔn)偏差的工作人員了解并接受過培訓(xùn),可以認(rèn)識(shí)到與違規(guī)有關(guān)的風(fēng)險(xiǎn)
人員經(jīng)過培訓(xùn),可以在使用前正確配置和使用靜態(tài)分析和開發(fā)工具。
實(shí)際上,對(duì)經(jīng)驗(yàn)豐富的團(tuán)隊(duì)的培訓(xùn)相對(duì)較短,但是在錯(cuò)過項(xiàng)目截止日期之后,在項(xiàng)目開始時(shí)投入幾天的時(shí)間就可以節(jié)省數(shù)周的返工。
沒有任何靈丹妙藥可以使對(duì)安全至關(guān)重要的項(xiàng)目輕松實(shí)現(xiàn)對(duì)遺留代碼的MISRA合規(guī)性。但是,正如本文所概述的那樣,隨著引入MISRA Compliance 2016框架,使用實(shí)用的分階段方法以及明確定義的終點(diǎn)(如本文所述),軟件開發(fā)團(tuán)隊(duì)可以在不嚴(yán)重破壞其開發(fā)流程的情況下實(shí)現(xiàn)合規(guī)性。最重要的是,要實(shí)現(xiàn)合規(guī)性還需要進(jìn)行大量工作,但是通過智能計(jì)劃和正確的方法,可以建立起最小和平衡的任務(wù)集,以確保舊代碼和新開發(fā)代碼的安全。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn