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