開發(fā)安全或業(yè)務(wù)關(guān)鍵型軟件只需要更多的知識(shí)和努力,以確保以不犧牲質(zhì)量的方式使用工具和技術(shù)。
任何優(yōu)化軟件開發(fā)過程的嘗試都將不可避免地遇到質(zhì)量、資源和時(shí)間之間的古老權(quán)衡。這個(gè)三重約束對(duì)于項(xiàng)目經(jīng)理來說是眾所周知的,格言是只有三分之二才有可能成功。
當(dāng)然,沒有一家公司真的想在質(zhì)量上妥協(xié),但對(duì)于安全關(guān)鍵型或業(yè)務(wù)關(guān)鍵型軟件而言,風(fēng)險(xiǎn)更高,因?yàn)樵谫|(zhì)量上妥協(xié)可能會(huì)導(dǎo)致嚴(yán)重的財(cái)務(wù)或危及生命的后果,因此主要關(guān)注點(diǎn)必須放在質(zhì)量上對(duì)于此類項(xiàng)目。那么,當(dāng)項(xiàng)目的性質(zhì)要求軟件質(zhì)量必須是最重要的時(shí)候,您如何優(yōu)化嵌入式軟件開發(fā)呢?
培養(yǎng)質(zhì)量文化
質(zhì)量文化將減少實(shí)現(xiàn)優(yōu)質(zhì)產(chǎn)品的開銷,并意味著在生產(chǎn)高質(zhì)量軟件時(shí)需要更少的有意識(shí)的思考和努力。
幸運(yùn)的是,通過遵循一些簡單的原則,發(fā)展質(zhì)量文化相對(duì)容易。質(zhì)量文化傾向于促進(jìn)透明度和所有權(quán)。他們還將測試和質(zhì)量控制視為開發(fā)過程的重要組成部分,而不是最后的開發(fā)步驟。
有效的質(zhì)量文化的基石是良好的溝通。技術(shù)包括從每日例會(huì)到報(bào)告錯(cuò)誤時(shí)提高清晰度的所有內(nèi)容,以便在修復(fù)錯(cuò)誤時(shí)不太可能犯錯(cuò)誤。跨職能團(tuán)隊(duì)和團(tuán)隊(duì)之間的密切溝通也有助于促進(jìn)質(zhì)量文化,并確保所有利益相關(guān)者對(duì)質(zhì)量和安全目標(biāo)有很好的理解。
優(yōu)化您的軟件開發(fā)方法
現(xiàn)代軟件開發(fā)方法,如敏捷和 DevOps,被廣泛認(rèn)為比傳統(tǒng)的瀑布方法產(chǎn)生更快的結(jié)果。所有主要的軟件安全標(biāo)準(zhǔn)(例如,IEC 61508、ISO 26262 和 DO-178C)都將軟件開發(fā)定義為一個(gè)線性過程,v 模型在左側(cè)顯示需求定義,在右側(cè)顯示測試,如下圖所示:
這使得在開發(fā)安全關(guān)鍵軟件時(shí)很難擺脫線性瀑布方法。現(xiàn)代敏捷開發(fā)實(shí)踐側(cè)重于頻繁發(fā)布,這可能會(huì)給安全關(guān)鍵型軟件的開發(fā)帶來問題,因?yàn)槊總€(gè)發(fā)布都需要經(jīng)過正式的驗(yàn)證和/或認(rèn)證流程。同樣,DevOps 原則(例如持續(xù)部署)在涉及硬件時(shí)會(huì)變得更加復(fù)雜。
但是,仍然可以利用許多 DevOps 和敏捷原則來創(chuàng)建一種簡化的、更具迭代性的方法來開發(fā)安全關(guān)鍵型和業(yè)務(wù)關(guān)鍵型嵌入式項(xiàng)目。
Shift-left
在項(xiàng)目開發(fā)生命周期中較早(左)移動(dòng)工作量通常會(huì)導(dǎo)致整體工作量減少。花更多時(shí)間確保軟件需求和設(shè)計(jì)正確可減少生產(chǎn)問題并避免將時(shí)間花在浪費(fèi)性的開發(fā)活動(dòng)上。左移的測試方法的原理是,更早地發(fā)現(xiàn)錯(cuò)誤意味著可以更快、更容易、更便宜地修復(fù)它們。這主要是因?yàn)椋绻麥y試被延遲,依賴項(xiàng)變得難以解除。
Shift-left 可以增量地應(yīng)用于大型和復(fù)雜的系統(tǒng)。敏捷通過在敏捷方法中為每個(gè)沖刺或迭代使用迷你 v 模型來進(jìn)一步實(shí)現(xiàn)這一點(diǎn)。
編寫高質(zhì)量的需求
定義明確的需求需要正確、完整、分解、明確和邏輯一致。這將有助于避免昂貴的返工和受挫的利益相關(guān)者。
為確保完整性,根據(jù)實(shí)際用例驗(yàn)證需求或按照某些敏捷方法中的建議創(chuàng)建故事很有用。通過分解將需求定義到適當(dāng)?shù)脑敿?xì)程度也有助于確保低層次的需求集中在單一的概念上。一旦定義了一組需求,最好檢查它們的邏輯一致性。使用模板來鼓勵(lì)語法一致性有助于使這些檢查更容易,從而在需求重疊或沖突時(shí)變得明顯。
從硬件開始 在軟件設(shè)計(jì)過程的早期考慮硬件對(duì)于確保不浪費(fèi)精力至關(guān)重要。同樣,盡早修復(fù)應(yīng)用程序編程接口 (API) 功能等通信接口也是一個(gè)好主意。
在為安全或業(yè)務(wù)關(guān)鍵型項(xiàng)目選擇或設(shè)計(jì)硬件時(shí),還值得考慮用于測試的硬件可用性的時(shí)間范圍。當(dāng)然,最好讓選定的硬件可用于測試,但這并不總是可行的,因?yàn)橛袝r(shí)硬件是并行開發(fā)的。在這些情況下,主機(jī)然后目標(biāo)測試可能是一種可行的解決方案,或者在模擬器上進(jìn)行測試(如果有的話)。當(dāng)需要在這些不同的環(huán)境中執(zhí)行測試時(shí),可以使用條件編譯(例如,#ifdef 等 C 指令),從而避免重復(fù)測試的需要。
讓領(lǐng)域?qū)<覅⑴c需求定義
確保正確的人員正在審查需求并驗(yàn)證它們的正確性和完整性是至關(guān)重要的。領(lǐng)域?qū)<业氖纠I(yè)務(wù)分析師、技術(shù)專家、營銷和最終用戶。從廣泛的角度考慮需求有助于從一開始就正確地定義它們。
領(lǐng)域?qū)<覒?yīng)確保指定的需求真正捕捉到應(yīng)用程序或設(shè)備的目標(biāo)。他們還應(yīng)該檢查需求是否與編寫它們要實(shí)現(xiàn)的業(yè)務(wù)、功能和安全目標(biāo)相匹配。或者,對(duì)于較低級(jí)別的需求,將它們追溯到滿足這些目標(biāo)之一的較高級(jí)別的需求。
為確保優(yōu)化此流程,不同角色將需要不同級(jí)別的需求數(shù)據(jù);例如,業(yè)務(wù)分析師將驗(yàn)證的需求不會(huì)分解到與開發(fā)人員將驗(yàn)證的需求相同的級(jí)別。需求管理工具 (RMT) 可用于確保以清晰和有組織的方式向所有利益相關(guān)者提供他們所需的需求數(shù)據(jù)。將需求保留在 RMT 中還可以通過清楚地顯示更高級(jí)別和更低級(jí)別需求之間的可追溯性來幫助分解。
優(yōu)化項(xiàng)目范圍
在項(xiàng)目的設(shè)計(jì)階段,值得注意的是質(zhì)量和范圍的區(qū)別。產(chǎn)品的質(zhì)量是安全或業(yè)務(wù)關(guān)鍵項(xiàng)目中不能犧牲的東西;但是,可能有縮小范圍的空間。大多數(shù)安全標(biāo)準(zhǔn)都建議盡可能簡單地設(shè)計(jì)系統(tǒng),因?yàn)檫@使它們更容易測試,更不用說實(shí)施、維護(hù)和適應(yīng)了。
簡單的設(shè)計(jì)
應(yīng)用程序和固件/硬件之間的內(nèi)存管理和分層的必要性通常意味著代碼復(fù)雜性是嵌入式開發(fā)中的一個(gè)問題。但是,限制使用全局變量和避免嵌套 if 語句(超過兩個(gè)或三個(gè))等編碼實(shí)踐有助于限制代碼復(fù)雜性并提高可維護(hù)性。MISRA C/C++ 等語言子集可以提供一種有用的方法來提高程序的安全性和可移植性。
確保代碼是模塊化的有助于防止脆弱的設(shè)計(jì),避免具有過長實(shí)現(xiàn)的函數(shù),并旨在通過松散耦合使組件具有內(nèi)聚性。架構(gòu)分析矩陣是識(shí)別組件依賴關(guān)系的有用方法,并且可以使用工具來自動(dòng)生成它們。通過應(yīng)用分層等技術(shù)優(yōu)化交互也有助于保持嵌入式代碼的可管理性。
靜態(tài)分析
第一個(gè)驗(yàn)證階段很可能是靜態(tài)分析。此技術(shù)可用于在代碼執(zhí)行之前發(fā)現(xiàn)代碼問題。靜態(tài)分析工具提供有關(guān)代碼潛在問題的即時(shí)反饋。靜態(tài)分析解決方案應(yīng)提供有關(guān)影響可靠性、可維護(hù)性和可移植性的代碼的信息。靜態(tài)分析還可用于強(qiáng)制執(zhí)行 MISRA C/C++ 等編碼標(biāo)準(zhǔn)。
自動(dòng)化測試生成
驗(yàn)證的下一階段是在單元級(jí)別動(dòng)態(tài)測試代碼并執(zhí)行檢查以確保行為符合需求中的定義。創(chuàng)建這些詳細(xì)的測試很耗時(shí),但很有必要。現(xiàn)代測試工具可以自動(dòng)生成這些低級(jí)測試。這通常通過解析代碼和生成單元測試來實(shí)現(xiàn)所需的結(jié)構(gòu)代碼覆蓋率。
自動(dòng)生成的測試向量不僅可以驅(qū)動(dòng)代碼,還可以檢查函數(shù)之間傳遞的參數(shù)、可訪問的全局?jǐn)?shù)據(jù)的值、調(diào)用順序和返回值。此過程還將確保生成一套全面的測試,涵蓋已在代碼中實(shí)現(xiàn)的所有功能。這些生成的測試需要根據(jù)軟件單元設(shè)計(jì)需求進(jìn)行驗(yàn)證,以確保需求得到驗(yàn)證。
使用持續(xù)集成
一旦創(chuàng)建了一組通過的測試,它們就可以不斷地重新運(yùn)行,以識(shí)別在增強(qiáng)或重構(gòu)代碼時(shí)引入的任何回歸錯(cuò)誤。這個(gè)基線安全網(wǎng)減少了對(duì)耗時(shí)且昂貴的系統(tǒng)測試的依賴,并且更加徹底并準(zhǔn)確地識(shí)別錯(cuò)誤的位置。
持續(xù)集成可用于將代碼集成到具有自動(dòng)單元、集成以及系統(tǒng)級(jí)測試(如果可能)的共享存儲(chǔ)庫中。這可以大大加快開發(fā)速度,因?yàn)槊看螛?gòu)建代碼時(shí)運(yùn)行回歸測試提供了一個(gè)非常快速的反饋循環(huán)。它還使合并代碼分支更容易,從而減少破壞現(xiàn)有代碼的機(jī)會(huì)。
圖 3:持續(xù)集成過程(來源:QA Systems Ltd)
在設(shè)置持續(xù)集成環(huán)境時(shí),重要的是優(yōu)化運(yùn)行的測試,以確保您擁有一套全面但精簡的測試,這些測試運(yùn)行速度快,同時(shí)仍執(zhí)行必要的檢查。分析代碼更改的影響以識(shí)別并僅運(yùn)行受影響的測試有助于優(yōu)化此過程。自動(dòng)測試生成也可以是一個(gè)好方法,只需單擊一個(gè)按鈕即可創(chuàng)建一套初始的精益回歸測試。
保持硬件循環(huán)
持續(xù)集成的一個(gè)目標(biāo)是持續(xù)部署,當(dāng)涉及到硬件時(shí),這可能很難實(shí)現(xiàn)。嵌入式平臺(tái)上的測試引入了不同于本地主機(jī)測試的挑戰(zhàn),例如內(nèi)存不足、缺乏可用功能(例如文件 I/O)、中斷處理以及編程語言的非標(biāo)準(zhǔn)擴(kuò)展。盡管可以使用變通方法來解決這些問題中的許多問題,但如果可以通過事先計(jì)劃來避免它們,則效率會(huì)更高;例如,通過確保選擇具有“內(nèi)存蠕變”能力的目標(biāo)并確保硬件有足夠的準(zhǔn)備來測試軟件。
調(diào)用控制技術(shù),例如存根(有時(shí)稱為模擬),是一種標(biāo)準(zhǔn)且有用的方法來管理對(duì)不可用對(duì)象(例如,硬件)的調(diào)用。諸如“包裝”之類的高級(jí)技術(shù)可用于攔截呼叫。這對(duì)于集成測試檢查返回路徑并使用返回值或替換它非常有用。這允許在添加對(duì)象時(shí)驗(yàn)證對(duì)象之間的交互。該技術(shù)對(duì)于模擬無法實(shí)現(xiàn)的現(xiàn)實(shí)條件(例如硬件故障)也特別有用。
簡化需求可追溯性
所有安全標(biāo)準(zhǔn)都需要測試和需求之間的可追溯性證據(jù)。將需求與測試用例匹配的過程很難自動(dòng)化。對(duì)于以自然語言定義的需求,將需求翻譯成代碼的可靠解釋水平仍然遠(yuǎn)遠(yuǎn)超出當(dāng)前機(jī)器學(xué)習(xí) (ML) 的水平。但是,可以使用一些工具來提高記錄需求可追溯性的手動(dòng)過程的效率。
需求可追溯性經(jīng)常出現(xiàn)的一個(gè)問題是對(duì)不斷變化的需求的管理。在這里,使用工具來突出顯示更改以及與修改后的需求相關(guān)的測試用例是非常寶貴的。
編寫易于
維護(hù)的測試 在重構(gòu)代碼時(shí)維護(hù)測試也是一個(gè)重大問題,因?yàn)榧词故呛苄〉母囊矔?huì)破壞測試。單元和集成測試非常依賴源代碼結(jié)構(gòu),因此在更改代碼時(shí)它可能很脆弱(在某些情況下甚至沒有構(gòu)建),并且修復(fù)它們可能很耗時(shí)。在這里,測試工具可用于識(shí)別影響測試的代碼更改和自動(dòng)化測試維護(hù),包括根據(jù)對(duì)代碼所做的更改提供測試的自動(dòng)重構(gòu)。
明智地投資
通過以適合您項(xiàng)目的方式選擇上述技術(shù)的組合,優(yōu)化您的開發(fā)過程是可行的,即使在質(zhì)量上不可能妥協(xié)。但是,所有優(yōu)化都需要一定程度的投資,這可能涉及開發(fā)新流程、改進(jìn)工具或增加開發(fā)團(tuán)隊(duì)的規(guī)模。
可以有效地開發(fā)安全或業(yè)務(wù)關(guān)鍵型軟件,當(dāng)然也不能幸免于現(xiàn)代開發(fā)技術(shù)。只需要更多的知識(shí)和努力來確保以不犧牲質(zhì)量的方式使用工具和技術(shù)。
QA Systems是歐洲領(lǐng)先的安全關(guān)鍵市場軟件質(zhì)量解決方案提供商。我們的工具用于自動(dòng)化單元測試、代碼覆蓋、集成測試和靜態(tài)分析。所有工具均由 SGS TüV 獨(dú)立認(rèn)證,可用于所有主要安全標(biāo)準(zhǔn)(ISO 26262、IEC 61508、IEC 62304、EN 50128 和 IEC 60880)的安全相關(guān)軟件開發(fā)的最高完整性級(jí)別,并且符合 DO 等標(biāo)準(zhǔn)-178B/C。QA Systems 最近在馬薩諸塞州波士頓開設(shè)了第一家北美辦事處,以更好地幫助北美客戶加速開發(fā)符合安全標(biāo)準(zhǔn)的關(guān)鍵業(yè)務(wù)軟件。
審核編輯 黃昊宇
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19149瀏覽量
306206 -
軟件開發(fā)
+關(guān)注
關(guān)注
0文章
619瀏覽量
27383 -
安全
+關(guān)注
關(guān)注
1文章
340瀏覽量
35713
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論