左蕓 沈雷 張楊
摘要:高安全性操作系統軟件單元測試是對操作系統基本組成進行單元測試。Cantata測試工具提供了基于Eclipse的完整測試開發環境,使用Cantata對操作系統軟件進行單元測試,可以自動化搭建測試環境,執行測試,評估測試結果并生成測試報告,能快速完成單元測試,提升操作系統軟件質量。
關鍵詞:Cantata;MCDC覆蓋;高安全;操作系統
中圖分類號:TP309 文獻標識碼:A 文章編號:1007-9416(2019)01-0202-03
0 引言
高安全領域,如航天、核電、軌道交通、醫療等對電子產品的安全性分析提出了具體的要求,開發高安全性操作系統軟件過程中,必須在測試過程中進行單元測試,不僅要求語句、分支達到100%,還要求MCDC覆蓋率達到100%。本文對源代碼主要使用標準C語言進行開發的高安全性操作系統軟件的Cantata單元測試進行了描述。
1 概述
使用Cantata進行高安全性操作系統軟件的單元測試,主要包括靜態分析、自動化用例生成、用例執行、代碼覆蓋分析、生成測試報告等。
Cantata的靜態分析能夠產生多種源代碼度量,這些度量值能夠輔助用戶進行單元測試。Cantata分析被測代碼后可以獲取被測代碼的參數、調用和數據信息,自動生成調用接口控制測試腳本,對于簡單的被測代碼,用戶無需手動編寫測試腳本就可以進行單元測試,用戶只需在GUI界面中自動生成的測試腳本中設定變量和返回值的期望值后,即可快速運行測試用例。Cantata的測試腳本管理器支持圖形化和文本化兩種格式去編輯和管理單元測試用例,而且保存為開源的測試腳本,并允許測試人員復用和修改這些測試腳本。
Cantata配置完成后自動生成測試用例運行需要的驅動函數、樁函數,自動比較實際結果和期望結果是否一致。配置Cantata生成詳細的測試信息文件,其中包括了全局變量、參數和返回值、調用順序等期望值與實際值的詳細信息。通過分析這個文件,測試人員快速找到測試失敗的位置,更加方便地找到測試失敗的根本原因。Cantata通過特殊的算法智能地分析被測代碼,掃描代碼的所有可能路徑,自動生成基于覆蓋度的測試用例,極大地節省測試人員的工作量,提高單元測試的效率。
Cantata支持生成詳細的測試報告,自動檢查測試用例的期望結果和真實結果是否一致,檢查內容包括:全局數據,參數和返回值,代碼覆蓋目標等。
2 單元測試過程
高安全性操作系統軟件開發環境為Code Warrior,編寫語言主要為標準C語言,單元測試直接在Cantata工具安裝的Windows平臺上進行,無需在目標板卡上運行,使用工具自帶的gcc(本次使用gcc版本為4.6.2)編譯器完成代碼編譯運行。
啟動Cantata服務器,在Cantata客戶端集成開發環境中導入被測代碼工程,設置工程為Debug模式,自動生成測試用例,測試用例生成完成后執行測試用例前,設置工程為Cantata模式,執行測試用例。對于參數不為指針且邏輯不復雜的函數,基本上可以直接生成全面的測試用例,達到MC/DC覆蓋100%。
下面以高安全性操作系統軟件isr_enter()函數為例,在Cantata中選中后進行編譯,自動生成測試用例,生成測試用例界面如圖1所示。
Cantata支持61508、50128、MISRA等多種標準,設置不同的覆蓋規則,生成符合規則的測試用例。一般情況下,設置的規則嚴格,則覆蓋率要求高,檢查點多,生成的測試用例個數多。設置規則后本項目使用自動生成測試用例功能為isr_enter()函數生成了2個測試用例。
對于復雜的函數,例如參數帶有指針項,單元測試時對于指針所指向的數據的值和其他屬性也有具體的要求,這時自動生成的測試用例的MC/DC覆蓋率并不高,但是可以在已經生成的測試用例的基礎上再復制添加測試用例,修改測試用例的相關輸入輸出參數和預期值就形成新的測試用例,可以節約可觀的時間。使用復制和修改參數值方法為c_memncpy()編寫的多個測試用例,顯示界面如圖2所示。
在Cantata中,對于每一個測試用例的描述有兩種形式,一種是代碼方式,另一種是圖形化的界面顯示,這兩者是相關聯的。當然這種關聯主要體現在測試用例中給被測試函數傳參和測試返回值的過程中,其中的關鍵是變量的管理,包括變量的建立和比較,這些操作都可以進行可視化的基于圖形界面的管理,也可以直接手動編寫測試代碼,兩者會自動同步,不會出現不一致的情況。圖形化管理測試用例如圖3 所示,代碼方式管理測試用例如圖4 所示。
以上兩圖反應了變量定義初始化階段兩者的同步效果。編輯變量并保存時,Cantata會根據圖形接口的變量配置信息生成相應的代碼,或者根據代碼中的變量手動進行修改,保存時將修改信息同步到圖形界面上。
3 覆蓋率查看
用例執行完成后,將覆蓋信息導出可以圖形化顯示用例的執行覆蓋信息。通過過濾設置可以查看單個測試用例的覆蓋信息。以isr_enter()函數為例,勾選全部的2個測試用例,顯示覆蓋信息如圖5 所示,覆蓋顯示中綠色表示的源碼為執行過的部分,如果已勾選的測試用例執行未覆蓋被測源代碼,則用紅色的字體顯示未執行的源代碼。測試人員根據需求配置顯示需要查看的覆蓋信息。
4 自動生成測試報告
Cantata工具配置XML報告生成總體和細節測試報告,視圖顯示執行通過情況,配置顯示各種覆蓋測試結果信息及測試運行耗時等。本項目中為isr_enter()函數配置單元測試報告模板,執行自動生成的測試用例形成單個函數的測試報告如圖6 所示:
5 結語
使用Cantata進行單元測試,具有較好的操作性。被測代碼的最終覆蓋率取決于測試用例的設計。為了達到MC/DC100%覆蓋要求,測試人員需要對代碼結構進行詳細分析,通過輸入參數的不同等價類組合,設計不同用例s以實現各條語句分支的覆蓋,最終各用例的組合達到MC/DC100%覆蓋。
由于操作系統源碼中存在大量結構體及指針(在安全軟件中不建議指針的使用,但對于操作系統軟件指針的使用難以避免),人工分析代碼耗時長,設計用例的效率低,Cantata工具自帶的用例生成功能顯得十分重要。經過具體試驗發現Cantata工具自動生成用例的覆蓋率較高,能夠加快單元測試工作進度。使用Cantata進行高安全性操作系統軟件全部函數進行單元覆蓋率測試,各函數的MC/DC覆蓋率都達到100%。
參考文獻
[1] 魏銀英,楊苗.一種基于cantata的單元測試用例設計方法[J].電子世界,2014,(7):119.
[2] QA Systems GmbH. Cantata Reference Manual V7.0,2015,9.
[3] 李建軍.國產化嵌入式實時操作系統軟件測試方法研究[J].微型機與應用,2016,35(24):22-24.
[4] 孫隴平.嵌入式軟件覆蓋率測試的研究與應用[J].現代電子技術,2014,37(18):67-69.
[5] 劉穎,王英,劉漫丹.嵌入式軟件測測試覆蓋[J].自動化儀表,2012,33(6):63-66.
[6] 喬文軍.嵌入式軟件測試平臺的研究與實現[D].南京航空航天大學,2007.
Abstract:High security operating system software unit test is a unit test of the basic components of the operating system. The Cantata test tool provides a complete test development environment based on Eclipse. Unit test using Cantata can build test environment automatically, execute testing, evaluate test results and generate test report, speed up unit testing, improve the quality of operating system software.
Key words:Cantata ; MCDC Coverage; high security; operating system