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