胡多海
(南京科瑞達電子裝備有限責任公司 江蘇省南京市 211100)
隨著信息化和電子對抗技術在戰場中的應用越來越廣泛,嵌入在各種武器裝備和系統中的計算機越來越多。由于軟件在設計、更改上比硬件更靈活和方便,越來越多的本由硬件來實現的功能改成由軟件完成,各武器裝備和系統的功能和性能變得越來越依賴于軟件。因此,軟件的質量已經成為影響系統質量的重要因素。
如何提高軟件的質量已經成為各研制單位和相關組織面臨的重要問題。隨著軟件工程在國內發展的幾十年過程中,政府組織和軟件企業開始意識到其根本問題是在于不能有效管理其軟件過程,在無序和混亂的項目狀態下,組織無法從先進的技術、方法和工具中獲益。面對軟件開發活動,首先需要解決的是無章可循、有章不循問題,其過程通常是隨意的、無序的。從而進行項目管理顯得尤為重要。
針對以上情況,中國人民解放軍總裝備部批準發布了GJB5000A-2008,軍標中將組織的軟件研制能力成熟度分為五個等級,初始級(1 級),已管理級(2 級),已定義級(3 級),已定量管理級(4 級),優化級(5 級)[1]。如圖 1 所示。
2 級中MA 過程域的目的是開發和保持測量能力,以支持管理信息的需要。MA 過程域必需實現的專用目標和專用實踐如圖 2,“SG”表示專用目標,“SP”表示專用實踐。
軟件測試,是驗證軟件及相關文檔是否滿足用戶或設計需求,并盡可能多的發現潛在的問題。以通過測試發現問題為手段,以提高軟件的質量為目的,更好的滿足用戶需求,提高軟件的可靠性。軍用軟件的研制過程中,各大軍用標準明確軟件測試是必不可少的一部分。軟件測試一般都需要進行測試策劃、測試設計和實現、測試執行以及測試總結4 個步驟[2,3]。
測試策劃,這個過程要求測試分析人員依據開發計劃和被測試軟件有關設計文檔對被測試軟件進行分析,以確定測試的要求和終止條件,并滿足軟件特性,獲取測試資源,必要時開發測試軟件等,并最終形成軟件測試計劃。
測試設計和實現,這個過程一般要求由開發人員輔助測試人員完成。一般根據軟件測試計劃、需求或其它開發文檔進行測試用例的設計、獲取測試數據、確定測試順序、獲取需要的測試資源、建立有效的測試環境以及需要時編寫測試程序,最終形成軟件測試說明。
測試執行,這個過程要求測試員按照已經編制的軟件測試計劃和軟件測試說明的要求進行測試。在執行過程中,測試員如實地記錄測試過程、發現的軟件或文檔的錯誤,并填寫完整測試結果,最終形成測試記錄。
測試總結,這個過程要求測試分析人員根據被測軟件的設計說明、測試計劃和說明、測試記錄和軟件問題記錄等,對軟件測試進行總結,最終形成軟件測試報告。

表1:MA 專用目標和專用實踐

圖1:軍用軟件研制能力成熟度的五個等級

圖2:MA 過程域
以上4 個測試過程形成的軟件測試計劃、軟件測試說明以及軟件測試報告3 份文檔,充分體現了測量分析的專用目標和專用實踐在軟件測試中的應用。
測量與分析的目的是開發和保持測量能力,以支持管理信息的需要。MA包含2個專用目標,共8個專用實踐。具體分布情況見表 1。

表2:SG1 的應用

圖3:函數覆蓋率

圖4:MC/DC 分析圖

圖5:MC/DC 覆蓋率圖
(1)確定測量目標:根據已標識的信息需要和目標,建立和維護測量目標[1,4]。
從產品研制過程和項目管理角度,掌握產品質量狀況和減少總的生存周期成本為已標識的信息需要。那么建立改進先前的質量水平為測量目標,并進行維護,才可以滿足已標識的信息需要。并且,盡早發現代碼中的缺陷,避免后期問題追蹤的復雜性,從而能有效縮短軟件生存周期。
至于如何達到改進先前的質量水平這個測量目標,就需要指明測量項。通過測量項來統計分析是否滿足測量目標。
(2)指明測量項:指明涉及測量目標的測量項[1,4]。
測量項一般包括基本測量項和導出測量項。注釋率、缺陷數這些數據由直接測量獲得,為基本測量項。語句覆蓋率、分支覆蓋率、缺陷密度,這些均是通過兩個或更多基本測量項組合而成,為導出測量項。
(3)指明數據采集和存儲規程:指明將如何獲得和存儲測量數據[1,4]。
確保恰當地采集到正確的數據就要明確采集方法,明確了采集方法才能幫助進一步澄清信息需要和測量目標。并規定通過何種手段獲得和存儲數據。
(4)指明分析規程:指明如何對測量數據進行分析和報告[1,4]。
事先指明分析規程,確保能按文檔化的測量目標進行合格的分析和報告。這個方法也是對實際上是否采集了必要數據的一種查驗。
綜合以上情況,假若當前有兩個信息需要:掌握產品質量狀況和減少總的生存周期成本,那么專用目標1 的4 個專用實踐在軟件測試中的應用情況可見表 2。
(1)采集測量數據:獲得規定的測量數據[1,4]。
首先,獲得基本測量項的數據。如缺陷數,執行測試用例通過數和不通過數,執行不通過的測試用例要分析是軟件缺陷還是測試用例設計錯誤。當確定為缺陷后方可參與統計,避免數據統計出現差錯。其次,生成導出測量項數據,導出測量項的數據值都是新計算得到的。比如缺陷密度是從基本測量項缺陷數和有效代碼行數通過計算衍生出的導出測量項。
(2)分析測量數據:分析并解釋測量數據[1,4]。
對發現的缺陷從嚴重等級角度分析。嚴重等級從高到低分別是致命、嚴重、一般和輕微。若致命和嚴重缺陷占比較高,需要與利益相關方一起評審結果,并給出附加分析。如表3 是某型產品在配置項測試中問題等級統計情況。
對表3 中數據可進行以下分析;
1.從行數據分析,功能測試出現的問題最多,占比高達69.17%,性能測試出現的問題最少,占比僅4.5%。這說明,開發人員以后要注意對功能的實現情況,同時軟件測試人員需要更多關注功能,問題越多的地方越需要更充分的測試,以發現更多潛在的問題。
2.從列數據分析,致命問題出現2 個,一般問題有107 個,占比高達80.45%。致命問題也就是導致軟件直接退出或卡死,無法繼續使用。需要同軟件開發人員一同分析原因,舉一反三,避免類似問題再次發生。一般問題多數屬于開發人員容易忽略的部分,一般常見的有輸入數據的有效性未判斷,長度、字符類型、特殊字符等未進行校驗。
從缺陷類型角度分析,分別有設計缺陷、代碼缺陷、文檔缺陷及其它。一般情況代碼缺陷居多,若出現過多的設計缺陷,需要進行分析并引起重視。如表4 是某產品在配置項測試中問題類型統計情況。

表3:某型產品配置項測試問題等級統計

表4:某產品配置項測試問題類型統計

表5:某產品部分源代碼
對表4 中數據可進行以下分析:
1.從行數據比較,此處分析可參考表3 的分析1。
2.從列數據分析,代碼問題113 個,占比84.96%,而設計問題3 個,無其他問題。這說明該軟件從設計上,基本滿足要求,是可信的。從設計到代碼實現過程,代碼問題嚴重影響軟件的質量,直接導致功能未實現或性能未達到指標要求。需要開發人員自身提高對代碼的質量審查和調試,讓問題盡量暴露,節約開發成本和周期,從而提高軟件質量。
(3)存儲數據和結果:管理和存儲測量數據、測量規格說明和分析結果[1,4]。
目前可進行軟件測試數據管理的相關軟件比較多。比如開源的禪道集成運行環境軟件可以實現對測試用例、執行情況、缺陷等進行管理。這些重要的測試數據均可在測試報告上進行存儲和展示。
(4)交流結果:向所有利益相關方報告測量與分析活動的結果[1,4]。
實現該專用實踐可通過評審測試報告方式,在一份有效的測試報告已存儲足夠的測試數據,應及時、有效的向利益相關方通報測量與分析過程的結果,以支持決策并幫助采取糾正措施。
綜上所述,對任何測量數據需要經過采集、分析、存儲和交流4 個過程。下面以覆蓋率為例,通過LDRA Testbed 測試工具進行分析。表5 為某產品部分源代碼。
通過盡可能多的設計測試用例,可實現源代碼的語句覆蓋(Statement Coverage)、分支覆蓋或判定覆蓋(Brach/Decision Coverage)以及修正條件判定覆蓋(Modifiеd Condition/Dеcision Coverage,簡稱MC/DC)均達到100%的覆蓋率,如圖3 所示。
本案例中有邏輯判斷語句while((val1 < 0.0) && (val2 > 0.0)),存在MC/DC 覆蓋率。若記(val1 < 0.0)為條件C1,(val2 > 0.0)為條件C2。該邏輯判斷語句共存在4 種真值情況,要實現MC/DC 的覆蓋率100%的要求,只需滿足C1 和C2 條件。從圖中可看出滿足條件C1 需要設計1 和3 兩種情形,滿足條件C2 需要設計1 和2,綜合兩個條件,只需設計3 個用例分別滿足1、2 和3 的邏輯取值情況即能實現該語句的MC/DC 覆蓋率100%。
按照以上分析設計用例并執行,通過查看動態覆蓋分析報告,即可看到如圖5 實現情況,表明已滿足條件C1 和條件C2。
通過以上方法,設計用例實現對所有被測函數的覆蓋率。若存在無法達到100%的應給出合理說明,最后統計所有文件的每一個函數的覆蓋率情況,形成軟件測試報告。
本文首先介紹了GJB5000A 的相關背景及軟件測試的一般過程。然后對MA 過程域的各專用目標和專用實踐如何在軟件測試中的實施展開了詳細討論。對軟件工程化在軟件測試中的推進工作有指導作用,為提高組織的測量和分析能力提供依據。