張新 焦豪



摘要 軟件應用于幾乎所有的科學技術領域。一款特定軟件的用戶類別取決于他們的認可以及軟件的質量。軟件開發人員有責任確保軟件沒有缺陷,并且可以執行所需要的功能。軟件測試是軟件開發生命周期階段的一項重要工作。各種研究分析表明軟件測試占了整個軟件開發工作的30%。所以測試對于提高軟件質量有至關重要的作用。軟件測試主要包括單元測試、集成測試和系統測試。單元測試基本有兩種測試方法:黑盒測試和白盒測試。本文分析了黑盒測試方法和相關問題。
【關鍵詞】軟件測試 黑盒測試 等價類劃分邊界值分析
1 引言
軟件測試是一項涉及到人類心理學和經濟學的技術性工作。一些測試人員對測試的誤解是這樣的:“軟件測試就是證明軟件不存在錯誤的過程”或者:“測試是確保開發的軟件能夠滿足其所有功能和非功能需求的過程”。雖然這兩個觀點理論上看起來是完美的,但是對于測試,更為合適的定義應該是:“測試是為發現錯誤而執行程序的過程”。這個定義包含以下兩點:
(1)這并不是要證明這個軟件是錯誤的;
(2)測試人員在測試之前應該假設程序存在錯誤。
軟件測試也可以被描述為確認和驗證軟件或應用程序是否符合指導其設計和開發的業務和技術功能需求的過程。確認和驗證是確保軟件滿足軟件需求規范文檔中提及的要求并且滿足其預期功能的過程。它可以被認為是確保軟件質量的一種方法。
為了分析各種測試方法,首先我們必須知道軟件測試中使用的基本術語。
測試用例(Test case):測試用例是為了特定的測試場景設計的一組測試輸入、執行條件以及預期結果,以確保是否符某個特定的功能需求。以在兩個輸入的整數中找出最大的程序來示例,然后可以設計出以下測試用例:
Integer l=2 and Integer 2=4
Integer l=4 and Integer 2=2
Integer l=-3 and Integer 2=-2
Integer l=-2 and Integer 2=0
Integer l=1 and Integer 2=1
測試套件( Test suit):在數學上是由所有的測試用例作為元素組成的集合。通過測試套件,將服務于同一個測試目的或同一運行環境下的一系列測試用例有機的組合起來。測試套件可能有無數個測試用例。一個好的測試套件涵蓋了大多數錯誤,包含最少的測試用例。對于上面提到的計算兩個整數中最大值的程序,測試套件可以有如下定義:
{(2,4), (4,2), (.3,.2), (.2,0), (1,1))
誤差(Error):誤差是實際結果和預期結果不匹配的程度,它代表了代碼開發人員所犯的錯誤。錯誤是測試人員發現的,當開發人員接收這個錯誤時,它就被稱為bug。
故障(Fault):故障是在計算機程序中使程序產生意想不到結果的不正確的指令、函數或數據解釋。故障會導致錯誤。
程序錯誤(Bug):Bug是代碼塊中產生意外結果的錯誤。這通常是開發人員接受的錯誤。
失?。?Failure):失敗是軟件系統無法執行其預期的功能和非功能要求。
缺陷( Defect):缺陷是程序員在編碼或者邏輯中犯的錯誤,它會導致程序產生錯誤或偏差。通常在發生故障時檢測到缺陷。
2 軟件測試方法
軟件測試工作包括四個階段:
(1)設計一個適當的測試套件來執行所有的代碼行。
(2)執行每個測試用例來查找代碼塊中的錯誤。
(3)通過檢查測試結果來確定錯誤的來源。
(4)修改程序來修復Bug。
軟件產品通常要經過三個層次的測試:單元測試、集成測試和系統測試。單元測試是指依據詳細的設計描述,對每一個功能相對獨立的程序模塊進行測試。單獨的單元測試模塊被組合或集成在一起形成軟件。在此級別的集成模塊上執行的測試成為集成測試。集成模塊可以是自下而上、自上而下或者混合的。集成后的軟件應具備所有所需求的功能,這可以通過執行系統測試來保證。
3 單元測試
我們使用合適的示例程序代碼來分析各種單元測試測試方法??紤]具有以下字段的特定網站的設置頁面:
姓名:char [50]
性別:char
系統時間:DD/MM/YYYY
可以認為這個設置頁面是軟件的一個單元模塊。因此,在開發這個模塊之后,我們必須通過執行其預期的功能來確保該單元成功執行。首先應用單元測試,其中包括黑盒測試和白盒測試。黑盒測試檢查軟件系統的功能方面,而白盒測試驗證軟件系統的邏輯方面。
黑盒測試人員不需要知道內部邏輯或程序結構,因為內部邏輯方面是不被測試人員所熟知的。就像測試人員用黑盒子遮擋了內部結構,不知道系統組建是如何在盒子內部構成。在黑盒測試中,測試人員關注的是軟件的功能而不是軟件怎么開發出來的。表1列出了黑盒測試和白盒測試策略之間的對比。
我們通過應用兩種黑盒測試方法來分析我們的測試模塊:等價類劃分法和邊界值分析法。
等價類劃分法就是把輸入劃為若干部分,從每個部分中選取少量的代表性數據,來對被測應用進行測試的黑盒測試方法。測試人員面臨的挑戰是設計一個最小的測試套件。在這個方法中,整個輸入集被劃分成不同的子集或類。每個類代表一組具有相似特征和規格的測試輸入。根據輸入約束條件,每個子集或者多個類可能是有效的也可能是無效的。在等價類劃分技術中,我們假設一個類中的所有條件都將以相同的方式處理,所以只需要從每個子集或者分區類中測試一個條件。如果分區類中的一個條件有效,我們假設該分區中的所有條件都可以工作,如果分區類中的某個條件不起作用,那么我們假設該分區中的任何條件都不起作用。
對于一個只接受兩位整數的應用程序,有效類等價是從10到99的整數。在這種情況下的無效分區是十進制數、小于10的整數、大于99的整數、非數字字符等。
可以對注冊頁面字段分析如下。
3.1 姓名
字符集表示一組字母和空格。讓字符集C={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,e g,h,I,j,k,1,m,n,.,p,q,r,s,t,u,v,w,x,y,z,‘)。那么將會有一個有效的等價類接受集合C的所有元素,而補集C是一個無效的等價類別。所以我們可以從兩個分區中選擇任意一個隨機元素來設計測試套件。
Test suite={C,4}
其中C是來自有效分區的元素,而4是來自無效分區的元素。
3.2 系統時間
系統時間字段的月份可以從1到12取值,但也會有一個有效的分區和兩個無效的分區。用“m”表示月份值:
有效類:l
無效類1:m
無效類2:m>12(值大于12)
所以代表每個分區的3個測試用例組成了最小的測試套件Test suite={-4,6,15)。在基于月份的各種組合中,可以應用于相同的日期字段。
3.3 性別
性別有三種可能的輸入。男(M),女(F)或其他(o)。設G={M,F,0)表示有效類,則G表示無效等價類。
大多數程序開發人員在編寫條件語句時會在邊界值上犯錯。邊界值分析基于在各子類或分區之間的邊界處的測試。在這里我們既有有效的邊界,也有無效的邊界。在輸入域邊界出現的錯誤數量比“中間”多。它在每個子類的邊緣選擇測試用例。測試人員在進行邊界值分析的時候應該注意兩點準則:
(1)如果輸入條件指定了m和n之間的值范圍,則測試用例應設計為值m和n以及剛好在m和n之外的值。測試套件={m,n,m-l,n+l}
(2)如果輸入條件指定了若干值,則測試用例應設計為最低和最高的數字。剛剛超過最低和最高的值也應該要測試。
以輸入字段在哪個月作為輸入數據,有效的輸入應該是從1到12的任何整數,因為一年只有12個月。如果用戶輸入數據為“20”,那么系統就不應該接受。因此這個輸入用例的各個分區是:
有效分區:從l到12的數字集合
第一個無效分區:小于1的數字集合
第二個無效分區:大于12的數字集合
在上述情況下,在邊界值分析中的邊界值是1和12。我們必須選擇剛好小于最小邊界值的值和剛好大于最大邊界值的值。因此,我們應該選擇剛好在l以下、剛好在12以上的數字以及l和12。
測試套件={0,1,5,12,13)
4 測試分析
如圖l所示,我們可以用下面的C語言程序分析這個單元測試方法,來驗證系統時間的月份字段。
在上面的案例中,如果我們采用等價劃分測試套件的方法,將會得到以下的測試結果。見表2。
因此,上述程序代碼完美使用于等價劃分測試套件?,F在我們使用邊界值分析測試套件來分析相同的代碼,測試報告如表3所示。
邊界值分析法可以識別出等價類劃分法中無法直接識別的錯誤。
性別字段表示為一組有效的輸入“M”和“F”,在這種情況下,輸入變量代表了一個集合而不是一個取值范圍。在這里邊界值劃分法無法使用,但是可以進行等價類劃分。
一個好的測試人員對一個模塊進行單元測試應該同時遵循等價類劃分和邊界值分析來確保它的可靠性,這兩種黑盒測試方法確保系統滿足其特定功能。
5 結果
從分析中可以推導出輸入值與測試用例數量之間的以下關系。在邊界值分析中,如果軟件有“N”個輸入變量,那么最小測試套件中將會有4N+1個測試用例。這可以通過一個變量的測試輸入示例來證明。那么測試套件可能如下:
Test suit={最小值,最小值-1,最大值,最大值+1}
對于單個的變量輸入,將會有上述四個測試用例。為了設計一個最小的測試套件,我們應該在中等范圍內包含一個值,所以最小的測試套件中將會有5個測試用例。如下所示:
最小測試套件={最小值,最小值-1,正常值,最大值,最大值+1}
在等價類劃分中,如果輸入集有“N”個分區,那么在最小測試機中將會有“N”個測試用例。
因此,黑盒測試策略的分析研究表明,邊界值分析比等價類劃分得到的測試用例相對較多。
我們用標準測試指標分析了我們的系統時間模塊。
(1)測試用例通過的百分比:該值表示執行測試的通過率。
在邊界值分析中,測試用例通過%=(3/3)100=100%
在等價類劃分中,測試用例通過%=(4/5)100=80%
(2)缺陷泄漏:缺陷泄漏是在測試進入下一階段之后未發現的缺陷數量。
等價類劃分法的缺陷泄漏=1;
邊界值分析法的缺陷泄漏=o。
(3)最小測試套件大小:測試套件中測試用例的數量。
對于我們的系統時間模塊:
等價類劃分法的最小測試套件大小=3;
邊界值分析大的最小測試套件大小=5。
(4)測試的時間:測試時間是根據測試套件的大小和覆蓋區域來估計的。
邊界值分析法的測試用例更多,所用的測試時間也更長。因此邊界值分析法的測試工作相對于等價類劃分法的測試工作更多。
(5)測試中發現缺陷的成本。
全部工作量=總功能點×每個功能點的權重
設定執行每個測試用例的工作量為1,
在邊界值分析中:缺陷發現成本=5/1=5:
在等價類劃分中:缺陷發現成本=3/0=0。
盡管圖2中的大多數參數都在彰顯邊界值分析法的優點,但是在有些情況下等效類劃分法比邊界值分析法更為適用。分析研究表明,bug數量在邊界值分析中有所增加。邊界值分析法中增加的測試用例提高了bug識別率,但是對輸入值的范圍有所限制。因此如果輸入變量是布爾值或者特定值,則采用等價類劃分法。與邊界值分析法相比,等價類劃分法具有更多的缺陷泄漏。結果如表4所示。
6 結論
在模塊化編程方法中,黑盒測試起著至關重要的作用。邊界值分析法所設計的測試用例只能從其特定的等價類分區中生成,邊界值分析法是對等價類劃分法進行補充的測試用例設計方法,每種方法都有其優點和缺點。雖然邊界值分析法比較費時,但是它的bug識別率也相對較高。兩種測試方法的應用提高了軟件的可靠性,同時也提升了軟件質量從而使客戶更加的滿意。
參考文獻
[1]B. Beizer, “Software TestingTechniques”.London: InternationalThompson Computer Press,1990.
[2] Glenford J.Myers.軟件測試藝術(原書第2版)[M].機械工業出版社,2005.
[3]徐芳,軟件測試技術[M].北京:機械工業出版社,2006.
[4]鄭人杰.軟件工程[M].北京:清華大學出版社,1999.
[5] Ron Patton.軟件測試[M].機械工業出版社.2006.