馮濟(jì)舟 項(xiàng)利萍 劉夢飛
(中國電子科技集團(tuán)第三十八研究所,安徽 合肥 230088)
黑盒預(yù)處理功能可測試性的研究
馮濟(jì)舟 項(xiàng)利萍 劉夢飛
(中國電子科技集團(tuán)第三十八研究所,安徽 合肥 230088)
通過對(duì)黑盒預(yù)處理功能可測試性的數(shù)學(xué)建模和理論證明,總結(jié)出可測試性黑盒預(yù)處理功能的判定步驟和測試方法,并通過一個(gè)實(shí)例進(jìn)行詳述。
黑盒預(yù)處理功能;可測試性;數(shù)學(xué)建模;理論證明
軟件測試作為能力成熟度模型集成(CMMI,Capability Maturity Model Integration)驗(yàn)證(Verification,Ver)和確認(rèn)(Validation,Val)過程域的重要實(shí)現(xiàn)手段,是軟件生命周期模型中的重要階段,是保證軟件質(zhì)量的重要途徑。近年來,隨著軟件規(guī)模和復(fù)雜程度的不斷提高,軟件測試的難度也不斷提高。
預(yù)處理是軟件執(zhí)行流程中最早經(jīng)歷的處理過程,是軟件系統(tǒng)重要的組成部分。如果預(yù)處理功能出現(xiàn)問題,即使之后的業(yè)務(wù)功能均實(shí)現(xiàn)正確,最后也都會(huì)導(dǎo)致軟件運(yùn)行結(jié)果的失敗。但是當(dāng)出現(xiàn)測試結(jié)果失敗時(shí),由于沒有定位到問題的來源,軟件開發(fā)人員往往將排查問題的重心放在核心業(yè)務(wù)功能的實(shí)現(xiàn)上,如此造成了開發(fā)時(shí)間、開發(fā)資源和成本的浪費(fèi),進(jìn)而導(dǎo)致軟件項(xiàng)目進(jìn)度的延誤。
如圖1所示黑盒軟件基本流程圖,圖中的被測軟件通過對(duì)輸入進(jìn)行預(yù)處理后轉(zhuǎn)入實(shí)際功能模塊,通過實(shí)際功能的輸出判定軟件是否滿足用戶的需要。在此情況下,當(dāng)軟件輸出出現(xiàn)問題時(shí),我們無法斷定究竟是軟件預(yù)處理功能的錯(cuò)誤,還是軟件實(shí)際功能的錯(cuò)誤。然而在實(shí)際過程中,預(yù)處理功能往往是用戶重要的隱性需求,并且預(yù)處理功能的正確實(shí)現(xiàn)往往是整個(gè)系統(tǒng)能否正確實(shí)現(xiàn)的前提,在軟件結(jié)構(gòu)流程中起到至關(guān)重要的作用。那么既然黑盒測試是把軟件看成一個(gè)不可被打開的盒子,測試人員就不清楚黑盒內(nèi)部的代碼邏輯和處理過程,那么屬于黑盒部分的預(yù)處理功能,如何才能通過測試來得到驗(yàn)證呢?況且目前的資料、文獻(xiàn)中沒有關(guān)于黑盒預(yù)處理功能測試方法的介紹,那么黑盒預(yù)處理功能測試果真沒有什么方法可以實(shí)現(xiàn)嗎?
圖1 軟件基本流程圖
1.1 問題建模
根據(jù)圖1所示的軟件結(jié)構(gòu)流程,抽象出由功能A、功能B和功能C為元素表示的黑盒預(yù)處理功能可測性判定的數(shù)學(xué)模型,如圖2所示。其中預(yù)處理功能以A功能表示,業(yè)務(wù)功能以B功能表示,C功能是A功能、B功能的順次集成,即整個(gè)軟件的黑盒部分。給定輸入x,令輸入x經(jīng)過A功能處理后的預(yù)期輸出為A(x),經(jīng)過B功能處理后的預(yù)期輸出結(jié)果為B(A(x)),可知輸入x對(duì)于功能C的預(yù)期輸出為C(x)=B(A(x))。假設(shè)在測試過程中,輸入x對(duì)于功能C的實(shí)際輸出C'(x)≠C(x),其原因可能在于:
(1)輸入x對(duì)于功能A的實(shí)際輸出A'(x)≠A(x),即軟件的預(yù)處理過程發(fā)生錯(cuò)誤;
(2)輸入x對(duì)于功能A的實(shí)際輸出A'(x)=A(x),但是經(jīng)過B功能處理后的實(shí)際輸出B'(A'(x))≠B(A(x)),即軟件業(yè)務(wù)功能的實(shí)現(xiàn)存在問題。
由于黑盒測試中,我們無法獲得預(yù)處理功能的實(shí)際輸出A'(x),從而導(dǎo)致對(duì)軟件故障無法進(jìn)行準(zhǔn)確定位。在下節(jié)中,我們提出了一種典型的預(yù)處理測試方法,該方法通過對(duì)輸入數(shù)據(jù)的設(shè)計(jì),對(duì)所得測試結(jié)果進(jìn)行逆向反推,從而得到預(yù)處理功能實(shí)現(xiàn)正確性的判斷。
圖2 被測軟件黑盒部分基本流程建模
1.2 測試方法
在圖2中,考慮兩組不同的輸入x和y,且x和y滿足A(x)=A(y),也即輸入x和y經(jīng)過預(yù)處理后的預(yù)期輸出完全相同。又由于A(x)=A(y),可知B(A(x))=B(A(y))。對(duì)于輸入x和y有以下引理1成立。
引理1:對(duì)于兩組不同的輸入x和y,且x和y滿足A(x)=A(y)。在測試過程中,如果輸入x和y對(duì)于功能C的實(shí)際輸出B'(A'(x))≠B'(A'(y)),那么x和y對(duì)于預(yù)處理A的實(shí)際輸出A'(x)≠A'(y)。
證明:采用反證法進(jìn)行證明。假設(shè)B'(A(x))≠B'(A(y))時(shí),A'(x)=A'(y)。按照命題假設(shè)A'(x)=A'(y),則A'(x)、A'(y)對(duì)于功能C的實(shí)際輸出B'(A(x))=B'(A(y)),這與已知條件B(A(x))≠B(A(y))相矛盾,所以假設(shè)命題情況不成立。因此對(duì)于輸入x和y,如果B'(A'(x))≠B'(A'(y)),那么A'(x)≠A'(y)。
根據(jù)引理1可知,如果輸入x對(duì)于功能C的實(shí)際輸出等于預(yù)期輸出,也即B'(A'(x))=B(A(x)),則軟件的預(yù)處理過程發(fā)生錯(cuò)誤,也即以下定理1成立。
定理1:對(duì)于兩組不同的輸入x和y,且x和y滿足A(x)=A(y)。在測試過程中,如果輸入x和y對(duì)于功能C的實(shí)際輸出B'(A'(x))≠B'(A'(y))、且B'(A'(x))=B(A(x)),那么可判斷軟件的預(yù)處理功能A存在錯(cuò)誤。
證明:由B'(A'(x))=B(A(x)),可知A'(x)= A(x)。根據(jù)引理1,B'(A'(x))≠B'(A'(y))時(shí),A'(x)≠A'(y),可知A'(y)≠A(x),也即A'(y)≠A(y)。從而可得輸入y對(duì)于預(yù)處理功能A的實(shí)際輸出A'(y)與預(yù)期輸出A(y)不同。也即軟件的預(yù)處理功能A存在錯(cuò)誤。
根據(jù)定理1我們給出判定此種黑盒預(yù)處理測試典型方法的算法,其具體判定步驟如下:
步驟1,從軟件需求中找出可以得到相等預(yù)期結(jié)果的不同輸入;
步驟2,將這些不同輸入錄入到被測軟件得出實(shí)際結(jié)果;
步驟3,若可以找出兩組輸入,其中一組不等于預(yù)期結(jié)果,另一組與預(yù)期結(jié)果相同,則可判斷此軟件預(yù)處理功能存在問題;若不相等的輸入得到的實(shí)際輸出結(jié)果都相同或都不同時(shí),則不可判斷此軟件預(yù)處理功能存在問題。
2.1 問題描述
被測軟件按功能處理流程劃分可由預(yù)處理功能和處理備份件待機(jī)、備份件關(guān)機(jī)、主件待機(jī)和主件關(guān)機(jī)信號(hào)量功能組成。各功能處理過程描述如下。
2.1.1 預(yù)處理功能描述
備份件待機(jī)信號(hào)有4個(gè),通過這4個(gè)信號(hào)來確定一個(gè)最終備份件的待機(jī)信號(hào)fdj。其中qd表示啟動(dòng);fdji(i=1,2,3,4)表示備份件待機(jī);fgji(i=1,2)表示備份件關(guān)機(jī);dj表示主件待機(jī);gj表示主件關(guān)機(jī);fgj1表示備份件1、3關(guān)機(jī),fgj2表示備份件2、4關(guān)機(jī)。
2.1.1.1 確定最終的備份件待機(jī)信號(hào)的計(jì)算方法如下。1)置fdj初始值為157 300+qd;2)令N為提供的信號(hào)量個(gè)數(shù)。如果N≥3,將提供的fdji信號(hào)按從小到大排序,如果第一個(gè)數(shù)(也即最小的數(shù))大于等于141 000+qd,則找第三個(gè)數(shù)作為fdj;3)如果fdj>157 300+qd,則fdj=157 300+qd。備份件關(guān)機(jī)信號(hào)有兩個(gè),通過這兩個(gè)信號(hào)來確定一個(gè)最終的備份件關(guān)機(jī)信號(hào)fdj。
2.1.1.2 確定最終的備份件關(guān)機(jī)信號(hào)的計(jì)算方法如下。1)置fdj初始值為157 300+qd;2)令N為提供的信號(hào)量個(gè)數(shù)。如果N=2,且min{fdj1,fdj2}≥141 000+qd,那么fgj=max{fgj1,fgj2};3)如果fgj>157 300+qd,則fgj=157 300+qd。
2.1.2 處理備份件待機(jī)、備份件關(guān)機(jī)、主件待機(jī)和主件關(guān)機(jī)信號(hào)量功能描述。
如果備份件待機(jī)信號(hào)最先到達(dá)(fdj=min{fdj,fgj,gj,dj}),如果備份件待機(jī)信號(hào)先于備份件關(guān)機(jī)信號(hào)到來(不包括同時(shí)),則在fdj時(shí)刻轉(zhuǎn)B狀態(tài),否則在fgj+1 700時(shí)刻轉(zhuǎn)B狀態(tài)。
被測軟件處理流程圖如圖3所示。
圖3 被測軟件處理流程圖
2.2 可測性分析和判定
根據(jù)2.1.1.1的需求描述可知,本例中存在兩個(gè)不同的黑盒部分輸入fdj1=fdj2=fdj3=141 280,fgj1=fgj2=155 500,dj=171 200,gj=172 200,qd=200和fdj1=fdj2=141 280,fdj3=141 200,fgj1=fgj2=155 500,dj=171 200,gj =172 200,
qd=200,可以得出兩個(gè)相同的黑盒部分預(yù)期輸出結(jié)果。而實(shí)際輸出的結(jié)果中一個(gè)與預(yù)期結(jié)果相同,一個(gè)與預(yù)期結(jié)果不同,滿足了黑盒預(yù)處理功能可測性判定模型的條件,因此此例的黑盒預(yù)處理功能是可測的。被測軟件處理流程與軟件結(jié)構(gòu)流程的等效關(guān)系如圖4所示。
圖4 被測軟件處理流程與軟件結(jié)構(gòu)流程的等效關(guān)系圖
2.3 測試方法及分析
第一組輸入數(shù)據(jù):fdj1=fdj2=fdj3=141 280,fgj1=fgj2=155 500,dj=171 200,gj=172 200,qd=200。
預(yù)期結(jié)果:系統(tǒng)在預(yù)處理輸出值(即fgj=141 280) 時(shí)刻轉(zhuǎn)B狀態(tài)。
實(shí)際結(jié)果:系統(tǒng)在預(yù)處理輸出值(即fdj=141 280) 時(shí)刻轉(zhuǎn)B狀態(tài)。
可以證明當(dāng)A(x)=fdj=141 280時(shí),B(A(x))的結(jié)果是141 280時(shí)刻轉(zhuǎn)B狀態(tài)。
第二組輸入數(shù)據(jù):fdj1=fdj2=141 280,fdj3=141 200,fgj1=fgj2=155 500,dj=171 200,gj =172 200,qd=200。
預(yù)期結(jié)果:系統(tǒng)在預(yù)處理輸出值(即fdj=141 280) 時(shí)刻轉(zhuǎn)B狀態(tài)。
實(shí)際結(jié)果:系統(tǒng)在預(yù)處理輸出值(即fdj≠141 280) 時(shí)刻轉(zhuǎn)B狀態(tài)。
第二組輸入數(shù)據(jù)等效于B(A(x))的輸出結(jié)果是未在141 280時(shí)刻轉(zhuǎn)B狀態(tài),即A(x)的輸出結(jié)果fdj≠141 280,而根據(jù)軟件需求規(guī)格的描述,此時(shí)的fdj應(yīng)該等于141 280,因此說明等效于A(x)的被測軟件預(yù)處理功能出現(xiàn)問題。
本文通過建立問題的數(shù)學(xué)模型、理論證明的方法,論證了黑盒預(yù)處理功能的可測試性,提出了一種黑盒預(yù)處理功能的測試方法,并通過一個(gè)具體實(shí)例論述了此方法使用的全過程。本文開創(chuàng)性地提出了關(guān)于黑盒預(yù)處理功能測試的方法,在一定程度上填補(bǔ)了此類型測試方法的空白。
(編輯:勞邊)
TP306
C
1003–6660(2014)04–0046–03
10.13237/j.cnki.asq.2014.04.012
[收修訂稿日期] 2014-02-16