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