呂宣姣
(中山大學南方學院,廣州 510970)
?
軟件測試之黑白盒策略的應用
呂宣姣
(中山大學南方學院,廣州510970)
摘要:軟件測試是試圖發現程序中錯誤的破壞性出過程,黑盒測試和白盒測試作為軟件測試常用的兩種策略,有利于設計成功的測試用例,盡可能多地發現程序中的缺陷,以下主要通過實例介紹這兩種測試策略的應用。
關鍵詞:黑盒測試;白盒測試;缺陷;軟件測試
隨著科技的發展,軟件產品已應用于社會的各個領域,從日常生活中的手機通話、銀行ATM機操作到機器人、航空航天,我們都可以感受到軟件帶來的方便與快捷。可以說,沒有軟件,我們的生活將不可想象。隨著軟件功能的增多與增強,軟件系統也變得越來越龐大,越來越復雜。眾所周知,世界上沒有完美的軟件,其原因大致可分為:輸入量太大、輸出結果太多、軟件實現途徑太多、軟件說明書沒有客觀標準等[1]。日常生活中,每天都有可能會發生一些由軟件缺陷引起的問題:手機無法正常通話、火星探測器在太空丟失、銀行系統重復扣款或取出異常數額的現金、操作系統異常重啟等。因此,對軟件進行充分的測試就顯得尤為重要。所謂軟件測試是指利用工程方法和測試工具對軟件產品進行功能、性能、可靠性等多方面的測試,最大限度找出產品存在的問題、缺陷或偏差。本文主要介紹軟件測試中常用的兩種工程方法或策略,即:黑盒測試與白盒測試。下文將通過實例詳細描述如何運用這兩種方法對系統軟件進行測試,以發現其可能存在的缺陷并解決之。
1.1黑盒測試
所謂黑盒測試,即測試人員可以無需關注軟件是如何實現和運行的,只需明確輸入和輸出即可。其中,最為常用的黑盒測試要算等價類劃分和邊界值分析法[1],等價類劃分[2]是一種典型的、重要的黑盒測試方法,它將程序所有可能的輸入數據(有效的和無效的)劃分成若干個等價類。然后從每個部分中選取具有代表性的數據當作測試用例進行合理的分類,測試用例由有效等價類和無效等價類的代表組成,從而保證測試用例具有完整性和代表性。邊界值分析法[2]就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類劃分法的補充,這種情況下,其測試用例通常來自等價類的邊界。
以某電子產品的指示燈為例,假設某接口函數的輸入參數為(整型數據),控制的是該電子產品的紅、黃、綠三盞燈,的定義為:
(1)當-10≤l<0時,紅燈亮;
(2)當0≤l<10時,綠燈亮;
(3)當10≤l<20時,黃燈亮;
(4)l為其他值時,任何一盞燈都不亮。
為了驗證輸入參數對顯示燈的控制結果,測試人員會設計不同的輸入參數來進行驗證。以等價類劃分為例,測試人員可能會用到-5,6,18這三個值來驗證(當然也可以使用滿足條件的其他數據進行驗證),期望得到的結果顯然分別是:紅燈亮、綠燈亮、黃燈亮。考慮到測試效果、測試成本以及交付進度,測試人員不可能對所有整數一一進行驗證,因為正常情況下(排除硬件環境異常),l取-5與[-10,5)∪(5,0)范圍內任何一個整型數據的結果都一致;取6與[0,6)∪(6,10)范圍內任何一個整型數據的結果都一致;取18與[10,18)∪(18,20)范圍內任何一個整型數據的結果都一致;這是使燈亮的一類數據,另外一類數據,如:-20和30,輸入后,任何一盞燈都不亮,此類驗證數據即屬于無效等價類的范圍。
作為等價類劃分的補充,測試人員會對數-11、-10、0、10、20進行驗證,結果應該為:
l=-11時,任何一盞都不燈亮;
l=-10時,紅燈亮;
l=0時,綠燈亮;
l=10時,黃燈亮;
l=20時,任何一盞都不燈亮。
這樣的取值思路使用的就是邊界值分析法。
1.2白盒測試
白盒測試,測試人員需要了解軟件具體的設計與實現原理。白盒測試分為靜態白盒測試和動態白盒測試。
(1)靜態白盒測試
靜態白盒測試,是在不執行程序的條件下有條理地仔細審查軟件設計與實現,從而找出軟件缺陷的過程[1]。測試人員需要有一定的編程基礎,并且了解產品的實現方案。測試重點是檢查需求,設計以及源碼:
①實現與需求/設計是否一致;
②代碼是否存在規范性問題;
③程序對異常或出錯分支是否有合理的解決方案;
④代碼的可讀性與易理解性。
(2)動態白盒測試
動態白盒測試,是指利用查看代碼功能和實現方法得到的信息來確認哪些需要測試,如何開展測試[1]。
例如,對于如下一段程序:
#define OK 1
#define ERROR -1
#define A 1000
#define B 3500
int Fun(int flag, long int address, long int offset)
{
if(0== flag) {
FunWirte(address, offset, A);
return OK;
}
else if(1== flag){
FunWirte(address, offset, B);
return OK;
}
else
printf(“輸入的flag不合理 ”);
return ERROR;
}
該函數實現的功能:
若flag的值為0,則通過函數FunWirte將1000寫入到地址address+offset處,返回1;
若flag的值為1,則通過函數FunWirte將3500寫入到地址address+offset處,返回1;
如果輸入參數flag為其它值,則輸出提示信息,然后返回-1。
對于測試人員來說,設計測試用例的思路(執行程序前,將地址address+offset處數據清零):
①輸入參數flag=0,執行程序后,查詢address+offset處的數值是否為1000。
②輸入參數flag=1,執行程序后,查詢address+offset處的數值是否為3500。
③輸入參數flag=2,執行程序后,查詢address+offset處的數值是否為0。
顯然這需要測試人員了解函數Fun的設計思路以及實現原理,并且有一定的編程基礎,實際上,設置flag分別等于0,1,2的測試用例,也滿足了邏輯覆蓋中的語句覆蓋,條件覆蓋,判定覆蓋[3]。
本文結合兩個實例分別介紹了軟件測試中常用的兩種測試策略(白盒測試和黑盒測試)的應用,這兩種方法也可以應用于其他任何系統或產品的軟件測試中。
參考文獻:
[1]周予濱,姚靜等.軟件測試[M].北京:機械工業出版社,2002,02.
[2]李龍,軟件測試實用技術與常用模板[M].機械工業出版社,2010,10.
[3]Glenford J.Myers, Tom Badgett, Todd M.Thomas. The Art of Software Testing[M]. John Wiley &Sons,Inc.,Hoboken,New Jersey,2004.
呂宣姣(1982-),女,山西靜樂人,碩士研究生,工程師,研究方向為冗余機器手臂的重復運動規劃、軟件測試
Application of Black-Box and White-Box Software Testing Tactics
LV Xuan-jiao
(Nanfang College,SUN YAT-SEN University, Guangzhou 510970)
Abstract:Software testing is an attempt to find a program error destructive of a process, black-box and white-box testing tactics are commonly used in software testing, which are conducive to design successful test cases, as much as possible defect discovery programs, as following describes the application of these two tactics by way of example.
Keywords:Black-Box Testing; White-Box Testing; Defect; Software Testing
收稿日期:2015-12-29修稿日期:2016-03-01
作者簡介:
文章編號:1007-1423(2016)09-0048-03
DOI:10.3969/j.issn.1007-1423.2016.09.012