王楊,段寧璐,張耀鋒
(陜西汽車集團(tuán)有限責(zé)任公司技術(shù)中心,陜西西安,710200)
近些年來,嵌入式軟件的規(guī)模及復(fù)雜程度急劇增大,尤其在國防、軌道交通、汽車、民航以及工業(yè)控制等領(lǐng)域的用戶對(duì)嵌入式軟件質(zhì)量要求更加嚴(yán)格,使用過程中對(duì)嵌入式軟件缺陷的容忍度越來越低[1]。因此,如何有效提高嵌入式軟件的質(zhì)量成為目前迫切需要解決的問題。
眾所周知,軟件測試是保證高質(zhì)量、高可靠性軟件的重要手段,對(duì)嵌入式軟件來說更是如此。嵌入式軟件測試常使用的測試技術(shù)包括:黑盒測試技術(shù)與白盒測試技術(shù)。黑盒測試又稱為功能測試,這類測試方法根據(jù)軟件的用途和外部特征查找軟件缺陷;黑盒測試最大的優(yōu)勢在于不需要了解程序內(nèi)部結(jié)構(gòu),只需要根據(jù)需求設(shè)計(jì)相應(yīng)的測試用例;但是黑盒測試獲得的測試覆蓋率較低,從而無法有力保證被測軟件具有良好的可靠性與安全性。白盒測試又稱結(jié)構(gòu)測試,驗(yàn)證程序內(nèi)部邏輯結(jié)構(gòu)實(shí)現(xiàn)是否正確,測試人員必須了解軟件的內(nèi)部結(jié)構(gòu)和處理流程,根據(jù)程序的內(nèi)部結(jié)構(gòu)查找軟件的缺陷;白盒測試與軟件的覆蓋率有密切關(guān)系,能夠?qū)Τ绦騼?nèi)部特定部位進(jìn)行覆蓋測試,獲得較高的測試覆蓋率;但是單純使用白盒測試會(huì)出現(xiàn)對(duì)功能需求遺漏測試的現(xiàn)象并且測試效率低。
有鑒于此,本文提供基于灰盒測試技術(shù)的嵌入式軟件測試方法,以將黑白盒測試要素有機(jī)結(jié)合起來,應(yīng)用于面向?qū)ο笤O(shè)計(jì)的嵌入式軟件單元測試設(shè)計(jì)與實(shí)現(xiàn)。它綜合了白盒測試和黑盒測試的優(yōu)點(diǎn),克服了部分白盒測試和黑盒測試的缺點(diǎn),能夠較好地節(jié)約測試成本,提高測試效率[2]。
本文所闡述的基于灰盒測試技術(shù)的嵌入式軟件測試用例設(shè)計(jì)方法的基本流程(如圖1所示),具體實(shí)施過程的解釋說明如下:
圖1 基于灰盒測試技術(shù)的嵌入式軟件測試流程圖
(1)文擋測試與程序?qū)彶椋菏紫妊凶x擋位切換模塊的軟件需求與詳細(xì)設(shè)計(jì)文擋,熟悉被測對(duì)象需要實(shí)現(xiàn)的功能與內(nèi)部結(jié)構(gòu),然后對(duì)軟件需求與設(shè)計(jì)文擋進(jìn)行測試,并且進(jìn)行包括:整數(shù)溢出、死邏輯、數(shù)組訪問越界、被零除等內(nèi)容的單元模塊靜態(tài)審查。
(2)軟件單元測試需求分析與提?。旱谝徊酱_定本次測試進(jìn)行功能測試與結(jié)構(gòu)測試;其次采用灰盒測試思維同時(shí)分析和提取基于程序內(nèi)部邏輯的結(jié)構(gòu)測試需求和基于輸入輸出的功能測試需求,并編寫單元測試需求,最后制定測試覆蓋指標(biāo)。具體設(shè)計(jì)編寫過程分為以下階段(A、B階段不分先后,可同時(shí)進(jìn)行):
A.使用基于思維導(dǎo)圖的黑盒設(shè)計(jì)方法提取功能測試需求:首先根據(jù)設(shè)計(jì)文擋,確定“明確功能需求”;然后細(xì)化測試顆粒度較大的功能,提取“繼承的功能需求”;最后根據(jù)測試人員的測試經(jīng)驗(yàn)和行業(yè)標(biāo)準(zhǔn)分析出“隱含功能需求”。
B.使用基于邏輯結(jié)構(gòu)狀態(tài)跳轉(zhuǎn)圖的白盒設(shè)計(jì)方法提取結(jié)構(gòu)測試需求:通過研讀設(shè)計(jì)文擋、分析被測模塊的業(yè)務(wù)流程跳轉(zhuǎn)過程,了解被測試對(duì)象內(nèi)部的基本結(jié)構(gòu),繪制出相應(yīng)的狀態(tài)結(jié)構(gòu)跳轉(zhuǎn)圖;然后根據(jù)邏輯狀態(tài)跳轉(zhuǎn)圖分析出結(jié)構(gòu)測試路徑(測試場景),從而獲得基于邏輯的結(jié)構(gòu)測試需求。
(3)軟件測試需求評(píng)審:分析與提取完成測試需求后,還要進(jìn)行測試需求評(píng)審,也就是測試人員向設(shè)計(jì)人員反串講軟件的相關(guān)需求和詳細(xì)設(shè)計(jì),保證測試分析與功能設(shè)計(jì)之間的一致性,保證編寫的測試需求符合被測對(duì)象的業(yè)務(wù)邏輯。
(4)軟件單元測試用例設(shè)計(jì):使用灰盒測試思想設(shè)計(jì)單元測試用例;首先使用黑盒測試用例設(shè)計(jì)方法-等價(jià)類分析法劃分擋位切換模塊的輸入條件,將其分為有效子域和無效子域并選取有代表性的數(shù)值作為測試數(shù)據(jù);接下來使用黑盒測試用例設(shè)計(jì)方法-因果圖分析法梳理有效等價(jià)類或無效等價(jià)類之間相互依賴與制約關(guān)系(分析輸入條件之間的“與”、“或”、“非”關(guān)系),進(jìn)而得到基于某條測試路徑的因果關(guān)系圖;然后將因果圖轉(zhuǎn)換成包括輸入條件和測試結(jié)果的判定表格并根據(jù)生成的判定表設(shè)計(jì)對(duì)應(yīng)的測試用例;最后,使用基于MC/DC的白盒測試方法(該準(zhǔn)則要求代碼中所有可能輸入輸出取值一次,每個(gè)條件必須產(chǎn)生所有可能的輸出結(jié)果至少一次,并且每個(gè)判定中 的每個(gè)條件必須能夠獨(dú)立影響一個(gè)判定的輸出,即在其他條件不變的前提下僅改變這個(gè)條件的值,從而使判定結(jié)果改變[3]。)補(bǔ)充和篩選測試用例,進(jìn)一步得到擋位切換模塊單元測試用例最優(yōu)解(測試用例數(shù)量少且測試覆蓋率高)。
選取換擋保護(hù)模塊中空擋(N擋)掛入前進(jìn)擋(D擋)這一測試點(diǎn)(根據(jù)功能規(guī)范文擋分析得到空擋(N擋)換前進(jìn)擋(D擋)的輸入判定表達(dá)式為:踩剎車且車速小于2km/h且擋位由N擋變?yōu)镈擋);使用上述步驟所闡述的測試用例設(shè)計(jì)與優(yōu)化方法,設(shè)計(jì)得出如表1和表2所示的N擋切換D擋測試用例判定表和N擋切換D擋測試用例最優(yōu)解。表中A=踩剎車、B=車速小于2km/h、C=擋位由N擋變?yōu)镈擋,其中a表示制動(dòng)開關(guān)信號(hào),b表示制動(dòng)踏板開度,“0”表示條件不成立,“1”表示條件成立。
表1 N擋切換D擋測試用例判定表
表2 N擋切換D擋測試用例最優(yōu)解
表1為只使用黑盒測試技術(shù)設(shè)計(jì)出的N擋切換D擋測試用例,表2為使用黑白測試技術(shù)相結(jié)合的灰盒技術(shù)設(shè)計(jì)出的N擋切換D擋測試用例,通過對(duì)比表1與表2測試用例的數(shù)量,就可以看出使用灰盒技術(shù)設(shè)計(jì)出的測試用例數(shù)量明顯下降,并且在后續(xù)測試執(zhí)行中證明依照上述方法設(shè)計(jì)的測試用例,不僅數(shù)量少并且測試覆蓋率還能達(dá)到100%。故按照這一方法,可以逐步得到整個(gè)換擋保護(hù)模塊的測試用例最優(yōu)解(測試用例數(shù)量少且測試覆蓋率高)。
本文所闡述的基于灰盒測試技術(shù)的嵌入式軟件測試用例設(shè)計(jì)方法有以下創(chuàng)新優(yōu)勢:(1)提取單元測試需求時(shí),使用灰盒測試方法同時(shí)分析和提取功能測試需求和結(jié)構(gòu)測試需求,并使二者形成相互映射關(guān)系;從而將白盒測試與黑盒測試技術(shù)真正的有機(jī)融合在一起,而非簡單的組合疊加,保證了需求分析階段在整個(gè)嵌入式軟件測試生命周期內(nèi)的一致性和統(tǒng)一性,減少了在測試需求分析階段的損耗,提高了測試的整體效率并擁有更高的置信度。(2)使用灰盒測試思想設(shè)計(jì)單元測試用例,將黑盒測試用例設(shè)計(jì)方法和白盒測試用例設(shè)計(jì)方法有機(jī)融合起來,保證最終設(shè)計(jì)出既能夠滿足設(shè)計(jì)功能又擁有較高測試覆蓋率的測試用例和測試數(shù)據(jù),從而使所測試的產(chǎn)品具有更高的功能安全等級(jí)。