朱琦 林挺

摘 要 針對宇航飛行軟件對于軟件可靠性、安全性設計的要求,本文提出一種基于PYTHON語言實現的宇航飛行軟件缺陷檢測程序,通過對源代碼進行預處理和篩選,生成測試驅動文件,再對測試驅動文件傳輸到虛擬機系統,依托開源的KLEE生成并運行測試用例,將測試用例運行結果匯總到前端顯示,從而實現并驗證缺陷檢測程序。
關鍵詞 軟件缺陷;字典結構;求解器
引言
宇航飛行軟件運行環境相對于地面環境存在單粒子效應、高低溫、原子氧、空間碎片和電磁輻射等特殊情況[1],同時由于宇航飛行軟件的功能日趨復雜,可能存在不易檢測的固有設計缺陷,這些缺陷往往會在后期的系統聯試中才暴露,甚至在軌長期潛伏,由此帶來的損失很大,這要求對軟件設計缺陷提前發現和規避,依靠傳統測試方法發現顯然是比較困難的,而且時間成本較大,國外產品如LDRA Testbed,但是軟件版權在國外,源碼安全性不可控,因此,研究一套旨在提前發現并糾正缺陷的國產軟件缺陷檢測程序便提上了議事日程。
PYTHON是一種解釋型的腳本語言,具有格式嚴謹、語法簡練以及豐富的數值計算資源,適合開發針對大數據的數據分析和挖掘方面的智能化軟件,因此,這里選擇基于PYTHON語言實現缺陷檢測程序。
1軟件整體框架
PYTHON語言在數據提取中可以建立“{關鍵字:數值}”形式的字典結構,在存儲和處理數據中可以通過關鍵字快速查詢到關鍵字對應的數值,并支持字典嵌套的樹形結構,利用這個PYTHON特有的數據結構處理和存儲軟件代碼信息,對源程序工程進行文件遍歷,將函數及其所調用到的函數涉及的代碼段匯總寫入指定名稱的C文件中,生成測試該函數的驅動程序[2]。缺陷檢測程序的整體結構和框架如下:
圖1 宇航飛行軟件系統缺陷檢測程序的整體框架示意圖
如上圖所示,缺陷檢測程序首先對源程序工程進行文件遍歷,抽取出信息字典,匹配需要測試的函數,將函數及其所調用到的函數涉及的代碼段匯總寫入指定名稱的C文件中,生成測試該函數的測試驅動程序[3]。
2軟件實現
首先接收和解析用戶命令行傳入的參數,使用os庫的walk函數對參數SRC所指定的目錄下的文件進行兩次遍歷,第一次篩選所有的類型和宏定義,第二次分析函數和變量。
測試驅動文件生成后,將測試驅動文件按TCP協議打包,按順序發送給服務端程序,這里使用了PYTHON的socket包來實現文件傳輸,服務端按客戶端報文中指定要求,順序重組文件數據,生成與主機相同的測試驅動文件。
KLEE是一個運行在 Linux 操作系統上的開源動態符號執行工具,生成的測試用例達到很高的代碼覆蓋率,這里使用KLEE的STP求解器自動實現測試用例的生成[4]。經過KLEE求解,計算出合適的用例去覆蓋源程序的語句、分支和條件組合,生成測試用例,并模擬運行,輸出運行結果。
在代碼分析過程中,數據流分析、控制流分析、缺陷特征識別是關鍵步驟,特別是過程間的數據流和控制流分析的完備程度決定了編碼缺陷數據的分析能力。
3缺陷檢測實驗
缺陷檢測實驗選用的宿主機使用64位Windows10 系統,并安裝了與此系統兼容的PYTHON3.5版本,VMWARE9.0下安裝了Ubuntu14.04桌面版,分別在宿主機和部署宇航飛行軟件系統缺陷檢測程序的客戶端和服務端程序,檢測一段預先編制會導致堆棧溢出的程序。
軟件在子程序sc_cast所調用的子程序gioGetBit中發現了可能存在堆棧溢出的問題,并打印出相關位置信息。
4結束語
基于PYTHON的宇航飛行軟件系統缺陷檢測程序可用于在軟件原型開發前期,不具備實際計算機及外圍設備支持的情況下,依靠軟件靜態分析及自動化生成并運行動態測試用例,快速發現和定位宇航飛行軟件存在的設計和編碼缺陷,從而提升軟件可靠性和安全性。
參考文獻
[1] 佚名.中國在軌衛星故障實現自動檢測[ED/OL].http://tech.sina.com.cn/d/2005-09-08/1355715184.shtml,2005-9-8.
[2] 航天軟件產品ADA語言編碼規范:Q/RJ 633-2019[S].北京:中國標準出版社,2019.
[3] 航天型號軟件C語言安全子集:GJB5369-2005[S].北京:中國標準出版社,2019.
[4] Martins R,Manquinho V,Inês Lynce. An overview of parallel SAT solving[J]. Constraints,2012,17(3):304-347.