嵌入式軟件系統(tǒng)測試中的仿真系統(tǒng)結(jié)構(gòu)設(shè)計
(4)樁模塊為嵌入式軟件提供各種必要的輸入數(shù)據(jù)。嵌入式軟件的正常運行需要必要的外界輸入數(shù)據(jù),以完成系統(tǒng)的正常運行和交互。無論這些輸入數(shù)據(jù)通過什么方式提供,樁模塊都應(yīng)該為嵌入式軟件模擬各種輸入數(shù)據(jù)。對于系統(tǒng)測試來說,輸入數(shù)據(jù)也應(yīng)該包括正常數(shù)據(jù)和非法數(shù)據(jù)兩種。
(5)分析模塊包括測試結(jié)果、預(yù)期結(jié)果和故障模型三部分。測試結(jié)果為執(zhí)行測試用例以后被測軟件執(zhí)行的結(jié)果;預(yù)期結(jié)果為測試開始之前,測試人員針對不同測試用例輸入的預(yù)期結(jié)果;故障模型中包括對各種故障的定位。故障模型在一個測試結(jié)束后,積累的錯誤定位模型可以通過外部接口導(dǎo)出,既可以用作其他測試系統(tǒng)的故障模型,也可以導(dǎo)出Word或Excel文件,用于開發(fā)人員進(jìn)行分析總結(jié)。
分析模塊在得到測試結(jié)果以后,首先與預(yù)期結(jié)果比較。如果相同,則測試通過;否則在故障模型中搜索相應(yīng)的故障,并定位故障。如果故障模型中沒有相應(yīng)的錯誤定位,分析模塊直接將未通過測試的測試結(jié)果和測試用例反饋給測試人員,由測試人員進(jìn)行定位。當(dāng)錯誤定位以后,測試人員根據(jù)測試實例修改故障模型,增加錯誤判斷事件。通過不斷循環(huán),故障模型部分的各種故障定位逐漸增加,仿真系統(tǒng)在不斷學(xué)習(xí)過程中實現(xiàn)錯誤定位。
(6)人機(jī)界面用于各種數(shù)據(jù)、結(jié)果的輸入和顯示,以及交互操作的人工輸入界面。
3 鐵路微機(jī)聯(lián)鎖系統(tǒng)測試
被測鐵路微機(jī)聯(lián)鎖2乘2取2系統(tǒng)運行在CPU(486DX)上,屬于典型的嵌入式軟件。邏輯圖如圖3所示。
被測嵌入式軟件運行在圖3中A系和B系的CPU中,通過以太網(wǎng)接收人工下達(dá)的聯(lián)鎖命令,經(jīng)過處理后通過DP協(xié)議網(wǎng)絡(luò)傳輸給輸出模塊,控制現(xiàn)場設(shè)備。A、B系中只能以一個系為主系,主從系的切換可以通過手動切換實現(xiàn),也可以自動切換。
3.1 測試實施
測試實施之前,首先編制測試用例,并針對每個測試用例給出預(yù)期結(jié)果和可能產(chǎn)生的錯誤以及相應(yīng)錯誤的故障定位。把這些數(shù)據(jù)輸入仿真系統(tǒng)的分析模型中,為即將進(jìn)行的測試工作做準(zhǔn)備。
在測試實施過程中,首先利用此仿真系統(tǒng)按照第一類測試方法進(jìn)行測試,驗證鐵路聯(lián)鎖2乘2取2系統(tǒng)被測軟件是'工作的',也就是軟件的功能是按照預(yù)先的設(shè)計執(zhí)行的。然后按照第二類測試方法進(jìn)行測試,驗證軟件是不工作的。
使用仿真系統(tǒng)設(shè)計并實施了很多在實際軟硬件環(huán)境中不可能實現(xiàn)的測試用例。舉例說明如下:
(1)非法數(shù)據(jù)的輸入。正常運行的系統(tǒng),操作人員不可能發(fā)送錯誤的聯(lián)鎖命令給被測軟件,輸入模塊也不可能產(chǎn)生測試需要的各種非法輸入數(shù)據(jù)。使用仿真系統(tǒng)的驅(qū)動模塊和樁模塊,可以很輕松地發(fā)送任何組合形式的非法數(shù)據(jù),以測試鐵路聯(lián)鎖2乘2取2系統(tǒng)被測軟件的安全性。結(jié)合分析模塊的使用,具體實施過程為:
通過人機(jī)界面輸入超長非法測試數(shù)據(jù)6,244,244,80,0,17,1,0,80,0,255,255,255,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0給被測軟件,預(yù)期結(jié)果為無測試結(jié)果數(shù)據(jù)返回,即嵌入式軟件將非法數(shù)據(jù)過濾掉,不進(jìn)行任何操作。仿真系統(tǒng)通過人機(jī)界面提示測試通過,實際情況也確實是微機(jī)聯(lián)鎖系統(tǒng)未進(jìn)行任何操作,便將超長的非法數(shù)據(jù)過濾了。通過人機(jī)界面輸入固定碼的非法測試數(shù)據(jù)170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,預(yù)期結(jié)果為無測試數(shù)據(jù)返回,即嵌入式軟件將非法數(shù)據(jù)過濾,不進(jìn)行任何操作。仿真系統(tǒng)通過人機(jī)界面提示測試通過,而實際情況是微機(jī)聯(lián)鎖單元出現(xiàn)了死機(jī)現(xiàn)象。針對這種情況,修改預(yù)期結(jié)果內(nèi)容為“無測試數(shù)據(jù)返回且與被測應(yīng)用軟件正常通訊”,而在故障模型中增加了“與被測應(yīng)用軟件無任何通訊”項,以修正仿真系統(tǒng)的錯誤定位為微機(jī)聯(lián)鎖單元死機(jī)。同理也要修改前面超長非法測試數(shù)據(jù)的預(yù)期結(jié)果和故障模型的內(nèi)容。如此反復(fù),仿真系統(tǒng)的分析模型也在不斷完善中。
(2)通信容量測試。鐵路聯(lián)鎖2乘2取2系統(tǒng)被測軟件中的基本功能包括系統(tǒng)通信最大I/O模塊總數(shù)為100。在正常測試過程中,一般無法為測試搭建如此大規(guī)模的硬件測試環(huán)境,即使可以搭建,也會因為性價比較低而不實施此項測試。使用仿真系統(tǒng),可以通過樁模塊和驅(qū)動模塊輕松實現(xiàn)100個I/O模塊的通信量,同時可以省去購置I/O硬件模塊的費用。
(3)鐵路聯(lián)鎖系統(tǒng)軟件需要滿足IEC61508標(biāo)準(zhǔn)[4]中SIL4的要求。通過仿真軟件驅(qū)動模塊重復(fù)發(fā)送聯(lián)鎖命令,可以很容易地測試鐵路聯(lián)鎖2乘2取2系統(tǒng)中的軟件是否滿足SIL4的要求,而這些測試如果單純用人工輸入進(jìn)行測試是不可能實現(xiàn)的。交互操作模塊則可以在測試過程中完成軟件與人必需的交互操作功能。
被測軟件第一次測試結(jié)束后,開發(fā)人員根據(jù)仿真系統(tǒng)的錯誤定位集中修改軟件中的BUG,然后提交進(jìn)行第一次回歸測試。經(jīng)過在第一次測試中人機(jī)交互的不斷完善,仿真系統(tǒng)的分析模型趨于成熟,在回歸測試過程中能很快定位錯誤,為測試及開發(fā)人員節(jié)省了大量時間,縮短了軟件開發(fā)周期。
3.2 測試結(jié)果
通過使用仿真系統(tǒng)對鐵路聯(lián)鎖2乘2取2系統(tǒng)被測軟件實施測試,共發(fā)現(xiàn)涉及軟件故障安全原則的致命問題和嚴(yán)重問題10個,涉及軟件漏洞安全的致命問題和嚴(yán)重問題5個,涉及功能未實現(xiàn)的致命問題和嚴(yán)重問題6個,涉及可靠性的致命問題1個,一般和提示問題30個。
針對嵌入式軟件的特點提出的具備交互式錯誤檢測定位功能的仿真系統(tǒng)架構(gòu)模型,實現(xiàn)了在系統(tǒng)測試過程中檢測定位軟件錯誤,解決了嵌入式軟件系統(tǒng)測試過程中,由于被測程序與嵌入式系統(tǒng)平臺和底層程序融合在一起,錯誤不容易定位的問題。通過在鐵路微機(jī)聯(lián)鎖測系統(tǒng)試項目中的應(yīng)用,發(fā)現(xiàn)了很多關(guān)鍵性問題,并且為測試人員和開發(fā)人員節(jié)省了大量時間,加快了測試進(jìn)度,在回歸測試階段表現(xiàn)尤為明顯。事實表明,此仿真系統(tǒng)架構(gòu)模型不僅可以應(yīng)用于嵌入式軟件的系統(tǒng)測試,也可以應(yīng)用于非嵌入式軟件的黑盒測試。在以后的研究中,將應(yīng)用人工智能學(xué)科的學(xué)習(xí)理論,實現(xiàn)仿真系統(tǒng)分析模塊的自動學(xué)習(xí)功能,以實現(xiàn)在測試過程中自動定位軟件錯誤,而無需人工干預(yù)。
評論