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