虞礪琨12王小麗12黃晨12
(1.北京控制工程研究所,北京 100190; 2.北京軒宇信息技術(shù)有限公司,北京 100190)
隨著航天器在軌設(shè)計壽命的不斷延長,可靠性要求越來越高,軟件設(shè)計在滿足航天器在軌運行基本功能需求基礎(chǔ)之上,還要承擔(dān)硬件的故障診斷與重構(gòu)功能,軟件規(guī)模不斷增大、復(fù)雜度不斷提高,對軟件質(zhì)量的要求也日益嚴峻。
軟件測試是保證軟件質(zhì)量的重要技術(shù)手段,按照是否運行被測軟件,分為靜態(tài)測試和動態(tài)測試,在航天工程實踐中,二者缺一不可、相輔相成。測試用例設(shè)計是動態(tài)測試有效性和充分性的根本保障。
針對測試用例設(shè)計,目前研究方向多集中于測試用例自動生成技術(shù)和測試用例集約簡技術(shù),主要包括基于遺傳算法的測試用例自動生成[1-3]、基于蟻群算法的測試用例自動生成[4]、基于組合測試算法的測試用例自動生成[5]、基于符號執(zhí)行的測試用例自動生成[6]、基于專家系統(tǒng)的測試用例自動生成[7]等等。測試用例集約簡技術(shù)[8-9]則主要著力于解決測試效率問題。
以上研究以及工程實踐中,通常以覆蓋率作為動態(tài)測試充分性的基本評價指標。但是,通過長期的工程實踐研究,發(fā)現(xiàn)部分測試用例雖然存在設(shè)計缺陷、導(dǎo)致軟件設(shè)計缺陷未檢出,但是并不妨礙覆蓋率統(tǒng)計結(jié)果,即,存在覆蓋率分析無法發(fā)現(xiàn)的測試用例設(shè)計缺陷,而業(yè)界對此卻鮮有研究。因此,針對覆蓋率分析無法發(fā)現(xiàn)的測試用例設(shè)計缺陷開展專題研究,具有非常重要的工程實用價值。
對本文用到的名詞解釋如下:
遙測:地面觀察航天器在軌運行狀態(tài)的一種手段。通過特定的天地通路,將航天器在軌運行狀態(tài)傳送回地面,供地面觀察、分析。
三取二:航天器常見的可靠性安全性設(shè)計手段。對重要數(shù)據(jù)分三區(qū)保存,使用前對三區(qū)內(nèi)容進行比對,任意兩區(qū)一致方可使用。
物理輸出:特指軟件的外部接口輸出,通常表現(xiàn)為指令碼、控制脈沖等等。
最小指令間隔:指相同指令或不同指令之間的間隔最小值。一般應(yīng)作為測試約束條件,并在測試用例設(shè)計時按照最小指令間隔設(shè)置指令輸入,從而驗證軟件對指令響應(yīng)的及時性。
測試步驟和預(yù)期結(jié)果是測試用例設(shè)計的兩大核心要素。測試步驟主要表現(xiàn)為軟件各種輸入及其組合,預(yù)期結(jié)果主要表現(xiàn)為軟件輸出。測試步驟和預(yù)期結(jié)果的設(shè)計缺陷,將對測試有效性和充分性造成不良影響。
以航天嵌入式軟件常見的RAM區(qū)自檢功能需求為例,對此項典型缺陷進行說明。
2.1.1 需求概述
采用寫入與讀出值比對的方式,對RAM區(qū)指定地址范圍進行自檢。
2.1.2 用例設(shè)計缺陷分析
用例設(shè)計時,考慮寫入與讀出值比對一致和不一致的情況,執(zhí)行測試,并通過觀察相應(yīng)的遙測來確認軟件實現(xiàn)的正確性。
用例執(zhí)行后,通過覆蓋率分析確認,自檢相關(guān)的語句和分支均已覆蓋。即,從覆蓋率分析的角度而言,用例設(shè)計不存在缺陷。
但是,進一步分析可以發(fā)現(xiàn),以上用例無法檢出如圖1所示的軟件設(shè)計缺陷。
圖1 讀寫比對未覆蓋指定地址范圍缺陷示例圖
圖中,X表示未做讀寫比對。
如圖2所示,該用例設(shè)計無法檢出以下兩個軟件設(shè)計缺陷:
1)對指定地址范圍未覆蓋完全,僅對其中的部分地址范圍進行了自檢。
2)自檢操作范圍超出指定地址范圍。
圖2 讀寫比對超出指定地址范圍缺陷示例圖
因此,該用例設(shè)計存在缺陷。
2.1.3 用例設(shè)計缺陷修正
針對上述用例設(shè)計缺陷,修正用例設(shè)計:考慮寫入與讀出值比對一致和不一致的情況,考慮比對不一致的地址為指定地址范圍的首地址-1、首地址、中間地址、尾地址、尾地址+1的情況,執(zhí)行測試,并通過觀察相應(yīng)的遙測來確認軟件實現(xiàn)的正確性。
用例修正后,圖1和圖2所示的軟件設(shè)計缺陷可以被檢出,證明用例修正有效。
2.1.4 應(yīng)用說明
此類用例設(shè)計缺陷,較易發(fā)生的測試場景如下:
1)指定地址范圍自檢功能測試。
2)區(qū)域性三取二測試。
以航天嵌入式軟件常見的寄存器校驗功能需求為例,其故障分支,一般只能通過故障注入的方式才能夠激勵運行。
2.2.1 需求概述
對指定寄存器進行校驗,若寄存器值不為指定值,則重置寄存器。
2.2.2 用例設(shè)計缺陷分析
測試用例設(shè)計中常見的設(shè)計缺陷如圖3所示。
圖3 故障注入用例設(shè)計缺陷示例圖
如圖3所示,用例設(shè)計時,通過修改局部變量值的方式實施故障注入,存在設(shè)計缺陷。此類故障注入手段將導(dǎo)致寄存器校驗功能驗證不充分,軟件是否校驗了指定寄存器,未驗證到。
另外,通過用例執(zhí)行后的覆蓋率分析確認,寄存器校驗相關(guān)的語句和分支均已覆蓋。即,覆蓋率分析無法發(fā)現(xiàn)此類用例設(shè)計缺陷。
2.2.3 用例設(shè)計缺陷修正
修正后的用例設(shè)計如圖4所示。
圖4 修正后的故障注入用例設(shè)計示例圖
如圖4所示,在軟件讀寄存器之前,通過修改寄存器值實施故障注入。修正后的用例設(shè)計可以檢出未讀指定寄存器(即,讀錯寄存器)的代碼設(shè)計缺陷。
2.2.4 應(yīng)用說明
當軟件中存在外部接口的正常、異常輸入均無法激勵運行的語句和分支,必須采取特殊的故障注入手段執(zhí)行測試時,較易發(fā)生此類用例設(shè)計缺陷。測試場景多見于:
1)寄存器校驗功能測試。
2)三取二測試。
3)指定地址范圍自檢測試。
2.2.5 故障注入注意事項
結(jié)合該典型缺陷分析,總結(jié)激勵故障分支運行的各種故障注入手段的優(yōu)先級依次如下:
1)外部接口輸入流。(最高優(yōu)先級)
2)修改外部RAM指定地址內(nèi)容、或寄存器值。
3)修改全局變量值。
4)修改局部變量值。(最低優(yōu)先級)
注意,通過修改局部變量值實施故障注入的優(yōu)先級最低!僅當排除所有高優(yōu)先級手段的可行性之后方可使用。
以航天嵌入式軟件常見的總線無通訊故障處理需求為例,對此項典型缺陷進行說明。
2.3.1 需求概述
連續(xù)16 s無CAN總線通訊,則重新初始化CAN總線。
2.3.2 用例設(shè)計缺陷分析
用例設(shè)計時,考慮連續(xù)20 s無CAN總線通訊的情況,執(zhí)行測試。測試結(jié)果表明,軟件在連續(xù)無通訊16 s時對CAN總線進行了重新初始化,測試通過。另外,覆蓋率分析確認,相關(guān)語句和分支均已覆蓋。
但是,如果軟件設(shè)計存在缺陷,將連續(xù)計時需求設(shè)計成累計計時,則用例運行結(jié)果如圖5所示。
圖5 考慮連續(xù)計時工況時的運行結(jié)果示例圖
如圖5所示,針對連續(xù)計時需求,用例設(shè)計時,如果僅考慮連續(xù)計時情況,則無法檢出將連續(xù)計時需求設(shè)計成累計計時的軟件設(shè)計缺陷。
2.3.3 用例設(shè)計缺陷修正
對缺陷用例進行修正,分別考慮連續(xù)16 s和累計16 s無通訊的情況。則累計無通訊情況下的運行結(jié)果如下:
如圖6所示,用例修正后,將連續(xù)計時需求設(shè)計成累計計時的軟件設(shè)計缺陷可以被檢出,證明修正有效。
圖6 考慮累計計時工況時的運行結(jié)果示例圖
2.3.4 應(yīng)用說明
在所有含連續(xù)計時需求的用例設(shè)計中,均應(yīng)排除此類用例設(shè)計缺陷。
錯誤格式指令測試,是軟件接口測試的基本測試要素。GJB2725A軍用軟件評測實驗室測評過程和技術(shù)能力要求5.1.2.9條款中明確規(guī)定:對每個外部輸入/輸出接口必須做正常和異常情況的測試[10]。
測試過程中,設(shè)置錯誤輸入,執(zhí)行錯誤格式指令測試,首先是為了驗證軟件對錯誤輸入的屏蔽情況,即,軟件不應(yīng)響應(yīng)錯誤輸入;其次是為了驗證軟件對錯誤輸入的處理是否會影響其后續(xù)對正確輸入的正常響應(yīng)處理。因此,必須執(zhí)行正確與錯誤輸入的穿插測試。
此類用例設(shè)計缺陷,一般表現(xiàn)為如下兩種形式:
1)連續(xù)執(zhí)行錯誤輸入步驟。
2)以錯誤輸入作為用例的最后一個測試步驟。
上述用例設(shè)計缺陷,均應(yīng)予以修正,以確保測試有效性。
當連續(xù)若干個測試步驟的預(yù)期結(jié)果(或其中部分關(guān)鍵輸出的預(yù)期結(jié)果)一樣時,無法確認連續(xù)步驟中第一個步驟之外的后續(xù)步驟是否正確執(zhí)行,因為同樣的執(zhí)行結(jié)果可能意味著軟件并未正確響應(yīng)后續(xù)測試步驟,而僅僅是維持著與之前測試步驟相同的執(zhí)行結(jié)果,從而導(dǎo)致軟件未能正確響應(yīng)后續(xù)測試步驟中指定輸入的缺陷無法檢出。
因此,在設(shè)計測試步驟時,應(yīng)使每個步驟的預(yù)期結(jié)果均不相同,以充分確認軟件對當前測試步驟響應(yīng)的正確性,從而確保測試驗證的有效性。
需要注意的是,初始運行狀態(tài),即,測試用例的初始設(shè)置,與測試步驟1之間,也屬于連續(xù)步驟,即,測試步驟1的預(yù)期結(jié)果應(yīng)與初始運行狀態(tài)有所不同。
執(zhí)行最小指令間隔測試,是為了驗證軟件對指令響應(yīng)及處理的及時性。最小指令間隔測試不足缺陷,含如下兩種情況:
1)測試步驟未考慮最小指令間隔情況。
2)預(yù)期結(jié)果僅觀察最后一條指令的執(zhí)行情況,或者僅觀察指令計數(shù)情況,未觀察每條指令的執(zhí)行結(jié)果。
最小指令間隔測試不足,將導(dǎo)致軟件響應(yīng)及處理不及時缺陷無法檢出。
針對最小指令間隔測試,測試步驟設(shè)計應(yīng)考慮如下兩種情況:
1)相同指令的最小間隔。
2)不同指令的最小間隔。
最小指令間隔測試的預(yù)期結(jié)果設(shè)計,務(wù)必包含每條指令的執(zhí)行結(jié)果,這是最小指令間隔測試的核心意義所在。
用例設(shè)計過程中,預(yù)期結(jié)果錯誤的原因有如下兩種:
1)測試人員疏忽,對預(yù)期結(jié)果未考慮清楚。
2)測試人員對需求的理解有誤。
預(yù)期結(jié)果錯誤,在用例執(zhí)行時將面臨如下兩種情況:
1)軟件設(shè)計正確,導(dǎo)致執(zhí)行結(jié)果與預(yù)期結(jié)果不一致。通過對結(jié)果的分析、確認,發(fā)現(xiàn)預(yù)期結(jié)果設(shè)計錯誤,更正預(yù)期結(jié)果后,用例執(zhí)行通過。
表1 測試用例典型設(shè)計缺陷匯總表
注:需求相關(guān)性,用于定義該項用例設(shè)計缺陷是否與特定需求相關(guān)。相關(guān)則說明該項缺陷僅當軟件有特定需求時才會發(fā)生。
2)軟件設(shè)計錯誤,導(dǎo)致執(zhí)行結(jié)果與預(yù)期結(jié)果一致,用例執(zhí)行通過,最終導(dǎo)致軟件缺陷未檢出。
可見,無論是何種原因所導(dǎo)致的預(yù)期結(jié)果錯誤,均應(yīng)及早予以修正。在確保預(yù)期結(jié)果正確的前提下,執(zhí)行測試用例,否則,可能因“負負得正”而導(dǎo)致軟件缺陷無法檢出。
針對航天嵌入式軟件而言,物理輸出才是其核心功能需求,是確保航天器在軌正常運行的根本,而遙測則是供地面觀察和分析航天器在軌運行狀態(tài)的記錄。預(yù)期結(jié)果設(shè)計時不能顧此失彼,應(yīng)同時確認物理輸出和遙測,既要確保航天器在軌運行狀態(tài)的正確性,又要確保地面可以準確獲知航天器在軌運行狀態(tài)。預(yù)期結(jié)果中任一方面的缺失,都可能導(dǎo)致軟件相關(guān)設(shè)計缺陷無法檢出。
軟件設(shè)計,在正確響應(yīng)外部輸入產(chǎn)生合法輸出的同時,可能也產(chǎn)生了非法輸出。如果預(yù)期結(jié)果中僅確認了軟件合法輸出,對是否產(chǎn)生了非法輸出未予確認,則導(dǎo)致軟件產(chǎn)生了非法輸出的缺陷無法檢出。
因此,預(yù)期結(jié)果中,不僅要確認軟件響應(yīng)當前測試步驟時所應(yīng)當有的輸出,還要確認軟件響應(yīng)當前測試步驟時不應(yīng)當有的輸出,即,確認軟件無非法輸出。例如,針對應(yīng)無計數(shù)累加、無控制輸出、無應(yīng)答等的測試步驟,預(yù)期結(jié)果中應(yīng)予以明確,以確保測試執(zhí)行時對非法輸出予以確認,確保測試有效性和充分性。
預(yù)期結(jié)果無依據(jù),指預(yù)期結(jié)果中含需求未明確規(guī)定的軟件輸出。針對這種情況,應(yīng)確認是預(yù)期結(jié)果設(shè)計缺陷,還是需求分析缺陷,并進行相應(yīng)的修正。
總之,不能以無依據(jù)的軟件輸出作為用例的預(yù)期結(jié)果。
作為動態(tài)測試充分性的通用評價指標,覆蓋率分析可以指出測試未覆蓋的語句和分支,供測試人員分析,從而找出測試用例中因輸入不足而導(dǎo)致的設(shè)計缺陷,并據(jù)此補充、完善測試用例設(shè)計,提高測試覆蓋率。但是,覆蓋率分析并非萬能,針對覆蓋率分析所指出的測試已覆蓋的部分,也并不能簡單地認定其測試充分性。真正的測試充分性,歸根結(jié)底,要通過完善的測試用例設(shè)計來保障。測試用例設(shè)計過程中,尤其要注意消除那些不影響覆蓋率分析結(jié)果的潛在缺陷。綜合上述研究,對具有潛在性(即,不影響覆蓋率分析結(jié)果)的測試用例典型設(shè)計缺陷匯總?cè)绫?所示。
針對上述測試用例典型設(shè)計缺陷,隨機抽取了3個測試項目開展同行評審,評審中發(fā)現(xiàn)的典型缺陷統(tǒng)計如表2所示。
表2 同行評審數(shù)據(jù)統(tǒng)計表
注:單元格中的“-”,表示缺陷條目在該項目中不涉及。
對統(tǒng)計數(shù)據(jù)分析如下:
1)通過對3個項目的同行評審,共發(fā)現(xiàn)并糾正測試用例典型設(shè)計缺陷58個,應(yīng)用效果顯著。
2)預(yù)期結(jié)果錯誤,發(fā)生次數(shù)最多,應(yīng)予以重點關(guān)注。
3)指定地址范圍操作覆蓋性缺乏驗證、修改局部變量值實施故障注入、連續(xù)和累計計時考慮不全面、預(yù)期結(jié)果錯誤、預(yù)期結(jié)果僅觀察遙測未觀察物理輸出、預(yù)期結(jié)果無依據(jù),上述缺陷在項目中的發(fā)生率為100%。
4)其余缺陷,在項目中的發(fā)生率約為70%。
應(yīng)用結(jié)果表明,上述測試用例典型設(shè)計缺陷的提出,對于確保測試充分性、提高測試質(zhì)量,是切實有效的。
工程實踐中,為了消除測試用例典型設(shè)計缺陷,可以根據(jù)表1(缺陷匯總表)建立檢查單,并通過三級質(zhì)量管控機制,實現(xiàn)測試用例典型設(shè)計缺陷的修正:
1)一級管控,測試人員自查修正。
2)二級管控,項目審核修正。
3)三級管控,同行評審修正。
消除上述覆蓋率分析無法修正的用例設(shè)計缺陷之后,再根據(jù)用例執(zhí)行后的覆蓋率統(tǒng)計數(shù)據(jù),進一步修正因輸入不足而導(dǎo)致的用例設(shè)計缺陷,通過兩種手段的互補,確保測試充分性。
測試用例設(shè)計缺陷,尤其是通過覆蓋率分析手段無法發(fā)現(xiàn)和修正的測試用例設(shè)計缺陷,不容忽視。目前對此所開展的專題研究較少,后續(xù)還需要進一步加強研究,完善缺陷庫。為提高測試效率,后續(xù)應(yīng)開展相關(guān)工具研究,通過工具自動化手段實現(xiàn)測試用例設(shè)計缺陷的自動化檢查與消除。其中,構(gòu)建由知識庫和推理機組成的專家系統(tǒng)是一個未來可探索方向。