俗話說,“未能構(gòu)建正確的產(chǎn)品或構(gòu)建正確的產(chǎn)品”的成本會影響收入和聲譽。構(gòu)建“正確產(chǎn)品”的唯一方法是開發(fā)既有效又可追溯到軟件的需求。這使開發(fā)團隊、質(zhì)量保證 (QA) 和認(rèn)證機構(gòu)能夠檢查軟件中的任何功能,通過將其追溯到需求來確定其用途。
挑戰(zhàn)在于了解如何在當(dāng)今動態(tài)市場條件和更短的發(fā)布時間驅(qū)動的快速變化的軟件面前保持需求可追溯性。了解雙向可追溯性并知道如何維護它可確保產(chǎn)品功能是合理的,反之,沒有理由地構(gòu)建任何東西。
失敗的代價
如果客戶認(rèn)為產(chǎn)品功能受到損害,并且如果出現(xiàn)召回或安全漏洞,則不可避免地會造成災(zāi)難性的收入或聲譽損失。例如,特斯拉今年早些時候因與擋風(fēng)玻璃除霜相關(guān)的軟件錯誤而召回了汽車[1]。在特斯拉的其他召回中,許多與自動駕駛有關(guān),這說明了管理所有可能場景的復(fù)雜性,以及快速識別、修復(fù)和更新軟件以最大限度地降低成本和聲譽損害的需求。
Deepanshu Natani 在 Atlassian 社區(qū)發(fā)表的一篇文章“需求管理中的挑戰(zhàn)”寫道[2]:
“分析師報告說,多達(dá)71%的軟件項目失敗是因為需求管理不善,使其成為項目失敗的最大原因 - 比糟糕的技術(shù),錯過最后期限或變更管理慘敗更大。
從編寫良好的要求開始
每個軟件項目的基礎(chǔ)都是它的需求。它們應(yīng)該是精確和明確的,引導(dǎo)軟件開發(fā)朝著清晰、可測試且可追溯到特定目的的方向發(fā)展。
編寫要求有幾種方法,其中文本規(guī)范是最流行的方法。文本可以非常有效,包括使用通俗語言,以便更廣泛地理解更接近具體實施計劃的技術(shù)術(shù)語。
由于人類語言本質(zhì)上是不精確的,容易產(chǎn)生歧義,因此需要高度的嚴(yán)謹(jǐn)性來克服可能的陷阱。將經(jīng)過驗證的規(guī)則應(yīng)用于需求有助于避免問題 - MISRA 編碼標(biāo)準(zhǔn)提供了這些規(guī)則的示例[3]:
使用段落格式將要求文本與非要求文本區(qū)分開來
每個段落僅列出一個要求
使用動詞“應(yīng)”
避免在需求中使用“and”,并將重構(gòu)視為多個需求
避免使用“除非”或“僅當(dāng)”等條件,因為它們可能會導(dǎo)致模棱兩可的解釋
圖 1 列出了有效需求的十個屬性。
[圖1.有效要求的十個屬性。(資料來源:LDRA)]
確保適當(dāng)?shù)男枨罂勺匪菪?/strong>
必須實施所有要求。同樣,反之亦然——所有源代碼(和所有測試)都應(yīng)該可以追溯到設(shè)計,并最終追溯到需求(功能性或非功能性)。
當(dāng)需求開始發(fā)生變化時,挑戰(zhàn)就來了。若要快速有效地管理更改的影響,需要修改相關(guān)要求或添加新要求,請務(wù)必了解如何在代碼中反映更改以及驗證更新所需的測試中。
圖 2 說明了需求和測試之間的典型關(guān)系[4]。在這里,系統(tǒng)級需求 (SLR) 應(yīng)該可追溯到高級需求 (HLR),而高級需求又可追溯到低級需求 (LLR)。HLR 可追溯到高級測試 (HLT),LLR 可追溯到低級別測試 (LLT)。
這種雙向可追溯性使團隊能夠看到從需求規(guī)范到構(gòu)建、測試、更改和返回的可見性(圖 2)。
[圖2.不同類型需求之間的典型可追溯性結(jié)構(gòu)。(資料來源:LDRA)]
在不失去可追溯性的情況下管理變更意味著需求和測試的耦合必須自動化 - 這也使得了解測試和需求變更的上游和下游影響變得簡單。
驗證需求滿足情況
證明系統(tǒng)滿足要求有助于量化“構(gòu)建了正確的系統(tǒng)”。這有兩種風(fēng)格:
使用單元測試來證明應(yīng)用程序組件單獨滿足其各自的目的
使用集成測試來顯示應(yīng)用程序的各個部分作為一個整體協(xié)同工作
自動化和自動化工具通過將單元和集成測試與其適當(dāng)?shù)囊舐?lián)系起來并報告履行情況,而無需耗時的手動工作,從而提供幫助。圖 3 說明了需求管理平臺中的兩個場景[5]:
HLR_100 –綠點表示滿足要求,反映了已驗證關(guān)聯(lián)的高級測試 (TCI_HLT_100) 和低級別要求(LLR_104 到 LLR_109)的事實。
HLR_101 –紅點表示需求未滿足,反映低級別需求LLR_103由于低級別測試TCI_LLT_103失敗而未滿足的事實。
[圖3.使用自動化工具報告需求履行情況。(資料來源:LDRA)]
在后一種情況下,失敗的測試具有關(guān)聯(lián)的測試用例文件,可以使用單元測試工具和關(guān)聯(lián)的回歸報告進(jìn)行回歸,以幫助了解測試失敗的原因。
確定結(jié)構(gòu)覆蓋率
結(jié)構(gòu)覆蓋率是嵌入式軟件中的一個重要概念,因為它保證了整個代碼庫已得到一致和充分的執(zhí)行。作為 ISO 26262、DO-178B 和 IEC 62304 等標(biāo)準(zhǔn)的關(guān)鍵準(zhǔn)則,結(jié)構(gòu)覆蓋可幫助開發(fā)人員檢測和刪除死代碼,而質(zhì)量保證 (QA) 則使用它來確定缺失的測試用例。在這兩種情況下,將此覆蓋范圍追溯到需求有助于確保每個已實現(xiàn)的組件都有一個原因,并確定尚未實現(xiàn)的要求。
自動化有助于確定結(jié)構(gòu)覆蓋率,顯示隨著基于需求的測試完成而執(zhí)行代碼的哪些部分[6]。圖 4 展示了一個測試驗證報告,其中顯示了不同類型的覆蓋指標(biāo)的結(jié)果:
[圖4.使用自動化工具報告結(jié)構(gòu)覆蓋率(來源:LDRA)]
陳述–在執(zhí)行應(yīng)用程序時執(zhí)行的語句數(shù),占該應(yīng)用程序中語句總數(shù)的百分比。100% 覆蓋率意味著所有語句在測試期間至少執(zhí)行過一次。
分支/決策 –在執(zhí)行應(yīng)用程序時執(zhí)行的分支數(shù)占該應(yīng)用程序中語句總數(shù)的百分比。
單聲道/直流 –修改條件/決策覆蓋率 (MC/DC) 衡量決策陳述中的所有條件是否至少對所有可能的結(jié)果進(jìn)行一次評估,以及所有這些條件是否獨立地影響決策的結(jié)果。
圖 5 顯示了這些測試與其相關(guān)的低級需求之間的映射,以形成可追溯性矩陣。在此示例中,所有要求 (LLR_*) 均已使用測試 (TCI_LLT_*) 進(jìn)行驗證。這種類型的報告只能通過應(yīng)用此處討論的可追溯性原則來實現(xiàn)。
[圖5.一個可追溯性矩陣,顯示映射到測試用例的需求驗證。(資料來源:LDRA)]
可追溯性確保制造出“正確”的產(chǎn)品
團隊絕不能將系統(tǒng)和軟件要求降級到貨架軟件中。隨著產(chǎn)品變得越來越復(fù)雜,軟件更新的頻率越來越高,需求可追溯性對于最大限度地降低風(fēng)險仍然是相關(guān)性和必要的。
了解需求實施和測試的方式和位置可確保軟件適合用途。在軟件更改中保持這種意識可確保開發(fā)人員了解對代碼和測試的影響,而無需花時間搜索它們。
自動化是動態(tài)保持雙向需求可追溯性并確保產(chǎn)品“正確構(gòu)建”的唯一現(xiàn)實方法。沒有它,團隊將花費太多時間試圖手動解決,從而導(dǎo)致成本增加和下游的潛在問題。
審核編輯:郭婷
-
測試
+關(guān)注
關(guān)注
8文章
5099瀏覽量
126338 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
302062 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68234
發(fā)布評論請先 登錄
相關(guān)推薦
評論