本發(fā)明涉及軟件測試技術(shù)領(lǐng)域,特別是一種機電產(chǎn)品軟件環(huán)境故障注入測試設(shè)備。
背景技術(shù):
機電產(chǎn)品軟件是一種控制類軟件,廣泛應(yīng)用于航空航天、艦船等國防等安全關(guān)鍵系統(tǒng)中,其使用時通常面臨惡劣的外部環(huán)境,如輻射、電磁干擾、高溫、高壓等,這些外部環(huán)境的擾動一旦引起軟件失效,可能會導(dǎo)致生命和財產(chǎn)的重大損失,甚至影響戰(zhàn)爭的成敗。因此,采用環(huán)境故障注入工具對機電產(chǎn)品軟件進行測試,是保證機電產(chǎn)品軟件安全可靠的重要保證。
常規(guī)的軟件測試方法是利用現(xiàn)有測試工具構(gòu)建測試框架,如geste、loadrunner等工具,其測試方式是通過機電產(chǎn)品軟件的接口注入正?;虍惓5臄?shù)據(jù)或信號,以發(fā)現(xiàn)軟件本身的缺陷或檢測軟件的容錯能力。異常數(shù)據(jù)或信號是通過模擬異常外部環(huán)境信息,通過接口對軟件進行故障注入測試方式。實際上,外部環(huán)境擾動通常會引發(fā)機電產(chǎn)品軟件寄存器跳變、內(nèi)存數(shù)據(jù)位翻轉(zhuǎn)等,從而導(dǎo)致機電產(chǎn)品軟件出現(xiàn)失效,通過接口故障注入測試方式無法檢測寄存器跳變、內(nèi)存數(shù)據(jù)位翻轉(zhuǎn)導(dǎo)致的軟件失效。
現(xiàn)有的環(huán)境故障注入主要包括硬件方式和軟件方式實現(xiàn)的故障注入。硬件方式主要利用電磁輻射方法、電流干擾方法,或利用硬件電路管腳制造故障或干擾,物理方式雖最接近真實環(huán)境故障,但具有開銷巨大、重現(xiàn)率低、精準(zhǔn)性差,易對硬件造成損傷等問題。軟件方式包括兩種方式:一是采用程序變異方法植入故障,一是建立環(huán)境仿真故障模型注入故障。程序變異方法雖能提高測試覆蓋率,但會產(chǎn)生組合爆炸,具有時間成本高的問題;仿真故障模型方法具有費用低廉、精準(zhǔn)控制等優(yōu)點,且建立仿真故障模型一般非常困難,不能直接針對寄存器跳變、內(nèi)存數(shù)據(jù)位翻轉(zhuǎn)等進行故障注入,實用性較差。
綜上所述,針對外部環(huán)境擾動引起的軟件失效,現(xiàn)有的軟件環(huán)境故障注入測試中,還沒有一種直接對寄存器、內(nèi)存實施故障注入的輕量級、實用性的測試手段。
因此,提供一種實用的機電產(chǎn)品軟件環(huán)境故障注入設(shè)備成為本領(lǐng)域技術(shù)人員目前需要解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種實用的機電產(chǎn)品軟件環(huán)境故障注入設(shè)備,包括故障注入控制主機系統(tǒng)、故障注入代理系統(tǒng)和通信系統(tǒng),所述故障注入控制主機系統(tǒng)安裝于故障注入控制計算機內(nèi),所述故障注入代理系統(tǒng)安裝于機電產(chǎn)品軟件設(shè)備中;所述通信系統(tǒng)用于實現(xiàn)所述故障注入控制計算機和所述機電產(chǎn)品軟件設(shè)備的通信。
所述故障注入控制計算機和機電產(chǎn)品軟件設(shè)備采用雙絞線連接。
所述故障注入控制主機系統(tǒng)用于控制故障注入執(zhí)行,收集故障注入數(shù)據(jù)和和結(jié)果數(shù)據(jù)并進行分析,包括系統(tǒng)配置模塊、內(nèi)存和寄存器地址獲取模塊、故障注入算子生成模塊、故障注入腳本生成模塊、故障注入執(zhí)行模塊、故障注入數(shù)據(jù)收集及結(jié)果判定模塊。
所述故障注入代理系統(tǒng)用于獲取故障注入地址,驅(qū)動故障注入執(zhí)行,包括內(nèi)存地址獲取代理模塊、故障注入代理模塊。
所述通信系統(tǒng)包括網(wǎng)卡和串口卡、網(wǎng)卡和串口卡驅(qū)動和遠程控制軟件,所述遠程控制軟件安裝于所述故障注入控制計算機內(nèi),所述網(wǎng)卡和串口卡、網(wǎng)卡和串口卡驅(qū)動分別安裝于所述故障注入控制計算機和所述機電產(chǎn)品軟件設(shè)備上。
所述網(wǎng)卡和串口卡、網(wǎng)卡和串口卡驅(qū)動建立所述故障注入控制主機系統(tǒng)和所述故障注入代理系統(tǒng)的物理通信連接。
所述系統(tǒng)配置模塊配置網(wǎng)絡(luò)連接信息和機電產(chǎn)品軟件信息,用于建立網(wǎng)絡(luò)連接和識別機電產(chǎn)品軟件進程。
所述內(nèi)存和寄存器地址獲取模塊發(fā)送獲取指令至所述內(nèi)存地址獲取代理模塊,獲取機電產(chǎn)品軟件進程的內(nèi)存地址,寄存器地址通過名稱直接獲取。
所述故障注入算子生成模塊利用所述內(nèi)存和寄存器地址生成故障注入算子。
所述故障注入腳本生成模塊根據(jù)所述內(nèi)存和寄存器地址以及所述故障注入算子生成故障注入腳本。
所述故障注入執(zhí)行模塊將所述故障注入腳本發(fā)送至所述故障注入代理模塊,所述故障注入代理模塊驅(qū)動所述故障注入腳本執(zhí)行并收集故障注入數(shù)據(jù)和結(jié)果數(shù)據(jù),回傳至所述故障注入數(shù)據(jù)和結(jié)果判定模塊,所述故障注入數(shù)據(jù)收集及結(jié)果判定模塊進行結(jié)果判定。
所述系統(tǒng)設(shè)置模塊配置網(wǎng)絡(luò)連接信息的配置參數(shù)包括本地ip、目標(biāo)機ip、目標(biāo)機端口、目標(biāo)機用戶名、目標(biāo)機登錄密碼、目標(biāo)程序名稱、目標(biāo)程序路徑。
所述故障注入算子生成模塊根據(jù)所述內(nèi)存和寄存器地址數(shù)據(jù)位的“跳變”、“置0”、“置1”三種模式及其組合,設(shè)計并生成故障注入算子。
所述故障注入腳本生成模塊根據(jù)所述故障注入地址、故障注入算子,按照gdb語法,生成故障注入腳本,腳本指令包括故障注入指令、失效判定指令、故障注入收集指令。
所述內(nèi)存地址獲取代理模塊接收內(nèi)存和寄存器地址獲取模塊的指令,獲取機電產(chǎn)品軟件進程的內(nèi)存地址,通過所述配置內(nèi)存地址獲取代理模塊初始化文件,可獲取電產(chǎn)品軟件進程的數(shù)據(jù)段、棧、堆地址,并回傳給所述內(nèi)存和寄存器地址獲取模塊。
利用本發(fā)明所提供的機電產(chǎn)品軟件環(huán)境故障注入設(shè)備,采用非侵入式故障注入機制,故障注入軟件不需要與機電產(chǎn)品軟件運行在同一系統(tǒng),采用簡單的故障注入腳本和通信模式控制故障注入的執(zhí)行,解決了現(xiàn)有硬件和軟件環(huán)境故障注入方式開銷大、易造成硬件損傷等問題,提供了一種簡單實用的環(huán)境故障注入工具手段。
附圖說明
圖1為機電產(chǎn)品軟件環(huán)境故障注入設(shè)備的組成結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的具體實施方式進行詳細說明。
本發(fā)明提供一種機電產(chǎn)品軟件環(huán)境故障注入設(shè)備,采用非侵入式故障注入機制,將環(huán)境故障注入數(shù)據(jù)及指令轉(zhuǎn)換為可執(zhí)行的腳本,將腳本發(fā)送到被測機電產(chǎn)品軟件設(shè)備上的代理軟件實施故障注入,并進行故障注入數(shù)據(jù)及結(jié)果數(shù)據(jù)收集與分析,故障注入設(shè)備不需要與機電產(chǎn)品軟件運行在同一系統(tǒng),不受機電產(chǎn)品軟件所在設(shè)備運行環(huán)境的限制,只要故障注入代理系統(tǒng)軟件支持機電產(chǎn)品軟件的操作系統(tǒng),就能進行環(huán)境故障注入。
具體的,提供一種機電產(chǎn)品軟件環(huán)境故障注入設(shè)備,通過獲取機電產(chǎn)品軟件的內(nèi)存和寄存器地址,設(shè)計環(huán)境故障注入算子,生成gdb格式的故障注入腳本,采用gdb遠程調(diào)試的方法控制故障注入的執(zhí)行,同時采集故障注入數(shù)據(jù)和結(jié)果數(shù)據(jù),并進行結(jié)果判定。
圖1給出了機電產(chǎn)品軟件環(huán)境故障注入設(shè)備的組成結(jié)構(gòu)示意圖,本發(fā)明提供一種機電產(chǎn)品軟件環(huán)境故障自動化注入設(shè)備,包括故障注入控制主機系統(tǒng)、故障注入代理系統(tǒng)、通信系統(tǒng)。
故障注入控制主機系統(tǒng)包括系統(tǒng)設(shè)置模塊、內(nèi)存和寄存器地址獲取模塊、故障注入算子生成模塊、故障注入腳本生成模塊、故障注入執(zhí)行模塊、數(shù)據(jù)收集和結(jié)果判定模塊。
系統(tǒng)設(shè)置模塊配置網(wǎng)絡(luò)連接信息和機電產(chǎn)品軟件信息,用于建立網(wǎng)絡(luò)連接和識別機電產(chǎn)品軟件進程,配置參數(shù)包括本地ip、目標(biāo)機ip、目標(biāo)機端口、目標(biāo)機用戶名、目標(biāo)機登錄密碼、目標(biāo)程序名稱、目標(biāo)程序路徑。
內(nèi)存和寄存器地址獲取模塊用于獲取故障注入地址,啟動機電產(chǎn)品軟件設(shè)備上的內(nèi)存地址獲取代理模塊,獲取機電產(chǎn)品軟件進程的內(nèi)存地址,寄存器地址通過名稱直接獲取。
故障注入算子生成模塊根據(jù)內(nèi)存和寄存器地址數(shù)據(jù)位的“跳變”、“置0”、“置1”三種模式及其組合,設(shè)計并生成故障注入算子。
故障注入腳本生成模塊根據(jù)故障注入地址、故障注入算子,按照gdb語法,生成故障注入腳本,腳本指令包括故障注入指令、失效判定指令、故障注入收集指令。
故障注入執(zhí)行模塊設(shè)置gdb軟件,通過啟動gdb軟件以及機電產(chǎn)品軟件設(shè)備上故障注入代理軟件,利用gdb軟件的調(diào)試機制控制故障注入腳本執(zhí)行。數(shù)據(jù)收集和結(jié)果判定模塊接收障注入代理模塊的回傳的故障注入數(shù)據(jù)和結(jié)果數(shù)據(jù),進行結(jié)果判斷和分析。
故障注入代理系統(tǒng)包括內(nèi)存地址獲取代理模塊、故障注入代理模塊。內(nèi)存地址獲取代理模塊接收內(nèi)存和寄存器地址獲取模塊的指令,獲取機電產(chǎn)品軟件進程的內(nèi)存地址,通過配置內(nèi)存地址獲取代理模塊初始化文件,可獲取電產(chǎn)品軟件進程的數(shù)據(jù)段、棧、堆地址,并回傳給內(nèi)存和寄存器地址獲取模塊。故障注入代理模塊接收到故障注入執(zhí)行模塊的故障注入腳本指令后,驅(qū)動故障注入的執(zhí)行,同時收集故障注入數(shù)據(jù)和結(jié)果數(shù)據(jù),回傳給故障注入數(shù)據(jù)和結(jié)果判定模塊。
通信系統(tǒng)包括網(wǎng)卡和串口卡、網(wǎng)卡和串口卡驅(qū)動和遠程控制軟件,所述遠程控制軟件安裝于所述故障注入控制計算機內(nèi),所述網(wǎng)卡和串口卡、網(wǎng)卡和串口卡驅(qū)動分別安裝于所述故障注入控制計算機和所述機電產(chǎn)品軟件設(shè)備上。
用于連接故障注入控制計算機和機電產(chǎn)品軟件設(shè)備,在內(nèi)存地址獲取和故障注入過程中,傳輸控制指令和數(shù)據(jù),協(xié)助完成故障注入的過程。
優(yōu)選的,所述的故障注入執(zhí)行模塊為gdb軟件。
優(yōu)選的,所述的故障注入腳本生成模塊生成gdb格式的腳本。
優(yōu)選的,所述的內(nèi)存地址獲取代理模塊為cdb軟件。
優(yōu)選的,所述的遠程控制軟件為psexec軟件。
實施例1
本機電產(chǎn)品軟件環(huán)境故障注入設(shè)備包括故障注入控制計算機1臺,故障注入遠程代理模塊1個,以太網(wǎng)通信系統(tǒng)1套。故障注入控制計算機使用windowsxp系統(tǒng),部署mysql數(shù)據(jù)庫,mysql數(shù)據(jù)庫用于存儲系統(tǒng)配置信息、故障注入算子信息、故障注入腳本信息、故障注入數(shù)據(jù)及結(jié)果判定信息。本機電產(chǎn)品軟件環(huán)境故障注入設(shè)備還包括環(huán)境故障注入控制主機系統(tǒng)、環(huán)境故障注入代理系統(tǒng)、通信系統(tǒng)。環(huán)境故障注入控制主機系統(tǒng)安裝于故障注入控制計算機內(nèi),包括系統(tǒng)設(shè)置模塊、內(nèi)存和寄存器地址獲取模塊、故障注入算子生成模塊、故障注入腳本生成模塊、故障注入執(zhí)行模塊、數(shù)據(jù)收集和結(jié)果判定模塊,系統(tǒng)設(shè)置模塊配置本地ip、目標(biāo)機ip、目標(biāo)機端口、目標(biāo)機用戶名、目標(biāo)機登錄密碼、目標(biāo)程序名稱、目標(biāo)程序路徑,用于建立與機電產(chǎn)品軟件設(shè)備網(wǎng)絡(luò)連接和配置機電產(chǎn)品軟件的參數(shù)信息;內(nèi)存和寄存器地址獲取模塊利用遠程控制軟件(psexec)啟動機電產(chǎn)品軟件設(shè)備上的內(nèi)存地址獲取代理軟件(cdb),獲取機電產(chǎn)品軟件進程的內(nèi)存地址,寄存器地址可通過寄存器名稱直接獲取,提供環(huán)境故障注入的地址;故障注入算子生成模塊根據(jù)內(nèi)存和寄存器地址數(shù)據(jù)位“跳變”、“置0”、“置1”三種模式及其組合,設(shè)計并生成故障注入算子,提供故障注入的數(shù)據(jù);故障注入腳本生成模塊按照gdb語法,根據(jù)內(nèi)存和寄存器地址、故障注入算子,生成gdb故障注入腳本,gdb故障注入腳本主要包括故障注入指令、失效判定指令和故障注入數(shù)據(jù)收集指令;故障注入執(zhí)行模塊用于啟動本地gdb,利用psexec啟動機電產(chǎn)品軟件設(shè)備的故障注入代理模塊(gdbserver),利用gdb的調(diào)試功能,控制故障注入腳本執(zhí)行;數(shù)據(jù)收集和結(jié)果判定模塊利用gdbserver的回傳功能,收集故障注入數(shù)據(jù)和結(jié)果判定數(shù)據(jù)。環(huán)境故障注入代理系統(tǒng)安裝于機電產(chǎn)品軟件設(shè)備內(nèi),配置內(nèi)存地址獲取代理模塊、故障注入代理模塊,內(nèi)存地址獲取代理模塊利用系統(tǒng)api獲取內(nèi)存地址,利用psexec回傳給位于故障注入控制計算機內(nèi)內(nèi)存和寄存器地址獲取代理模塊;故障注入代理模塊利用gdbserver驅(qū)動故障注入執(zhí)行,收集故障注入數(shù)據(jù)和結(jié)果判定數(shù)據(jù),回傳位于故障注入控制計算機內(nèi)的數(shù)據(jù)收集和結(jié)果判定模塊,進行結(jié)果判定。通信系統(tǒng)包括網(wǎng)卡、網(wǎng)卡驅(qū)動、遠程控制軟件(psexec),用于啟動機電產(chǎn)品軟件上的內(nèi)存地址獲取代理模塊和故障注入代理模塊,實現(xiàn)故障注入控制計算機和機電產(chǎn)品軟件設(shè)備間管道通信。
本具體實施方式提供的環(huán)境故障注入設(shè)備工作過程如下:
1)環(huán)境故障注入環(huán)境搭建,使用雙絞線連接故障注入控制計算機和機電產(chǎn)品軟件設(shè)備,分別對故障注入控制計算機和遠程機電產(chǎn)品軟件設(shè)備配置ip地址,在機電產(chǎn)品軟件設(shè)備上使用netshare命令開啟“ipc$”、“admin$”資源共享。關(guān)閉遠程目標(biāo)機電產(chǎn)品軟件設(shè)備防火墻。
2)環(huán)境故障注入系統(tǒng)配置,故障注入控制計算機執(zhí)行環(huán)境配置模塊并保存環(huán)境配置信息,配置信息包括:本地ip、目標(biāo)機ip、目標(biāo)機端口、目標(biāo)機用戶名、目標(biāo)機登錄密碼、目標(biāo)程序名稱、目標(biāo)程序路徑。
3)機電產(chǎn)品軟件設(shè)備啟動目標(biāo)機電產(chǎn)品軟件。
4)內(nèi)存和寄存器地址獲取,故障注入控制計算機執(zhí)行內(nèi)存和寄存器地址獲取模塊。內(nèi)存地址獲取方式是通過遠程控制程序模塊啟動遠程內(nèi)存地址獲取模塊,獲取目標(biāo)機電產(chǎn)品軟件進程的內(nèi)存地址并回傳給故障注入控制計算機;寄存器地址獲取是通過寄存器名稱直接獲取。故障注入控制計算機保存獲取的內(nèi)存地址和寄存器地址。
5)環(huán)境故障注入算子生成,故障注入控制計算機執(zhí)行環(huán)境故障注入算子生成模塊,根據(jù)內(nèi)存和寄存器地址位跳變、置0、置1三種方式生成環(huán)境故障注入算子,并對故障注入算子進行管理。
6)環(huán)境故障注入腳本生成,故障注入控制計算機執(zhí)行環(huán)境故障注入腳本生成模塊,通過指定或隨機選擇注入地址、環(huán)境故障注入算子,生成gdb故障注入腳本,并對故障注入腳本進行管理。故障注入腳本指令包括:故障注入指令、失效判定指令、數(shù)據(jù)收集指令。
7)環(huán)境故障注入執(zhí)行,故障注入控制計算機執(zhí)行環(huán)境故障注入執(zhí)行模塊,首先啟動gdb,然后通過遠程控制程序模塊啟動遠程gdbserver,通過gdb和遠程gdbserver的通信功能,驅(qū)動故障注入腳本執(zhí)行。
8)環(huán)境故障注入數(shù)據(jù)收集及結(jié)果判定,環(huán)境故障注入執(zhí)行過程中,自動收集故障注入數(shù)據(jù)并進行結(jié)果判定,進行保存,故障注入控制計算機根據(jù)收集的數(shù)據(jù),并進行結(jié)果分析。