分析灰盒測試優(yōu)點(diǎn)和缺點(diǎn)
灰盒測試是一種綜合測試法,它將“黑盒”測試、“白盒”測試結(jié)合在一起,構(gòu)成一種無縫測試技術(shù)。“灰盒” 測試以程序的主要性能和主要功能為測試依據(jù),測試方法主要根據(jù)程序的程序圖、功能說明書以及測試者的實(shí)踐經(jīng)驗(yàn)來設(shè)計(jì)。下面從灰盒測試的優(yōu)缺點(diǎn)開始說起。
一、幾個(gè)基本概念
首先,把一些基本概念,簡單通俗地說一下。
1、黑盒測試
通俗來說:黑盒測試不關(guān)注軟件內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。他僅僅把被測試的軟件當(dāng)成一個(gè)整體來處理,只關(guān)注軟件的外在表現(xiàn),不關(guān)注內(nèi)部細(xì)節(jié)。典型的黑盒測試,就是光拿著鼠標(biāo)操作一下用戶界面,看看功能是否滿足要求。
2、白盒測試
白盒測試與黑盒測試相反,重點(diǎn)關(guān)注軟件內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)(比如代碼覆蓋率等)。
3、灰盒測試
如果你是從事開發(fā)或者測試的行當(dāng),應(yīng)該已經(jīng)聽過黑盒測試與白盒測試這2個(gè)概念。但對(duì)灰盒測試,或許比較耳生。單純從名稱上來看,灰盒測試是介于黑盒測試與白盒測試之間的一種測試方式。
這種測試方式,主要用于多模塊構(gòu)成的稍微復(fù)雜的軟件系統(tǒng)。在灰盒測試中,重點(diǎn)關(guān)注軟件系統(tǒng)內(nèi)部模塊的邊界(接口)。這里所說的“接口”是廣義的,包含有各種形式。對(duì)于進(jìn)程內(nèi)的模塊,其接口可能是動(dòng)態(tài)庫的導(dǎo)出函數(shù);對(duì)于進(jìn)程級(jí)的模塊,其接口可能是各種IPC(進(jìn)程間通訊)機(jī)制;對(duì)于涉及數(shù)據(jù)庫的軟件系統(tǒng),其接口可能是數(shù)據(jù)庫的表結(jié)構(gòu)。
4、灰盒測試與黑盒測試的區(qū)別
如果某軟件包含多個(gè)模塊,當(dāng)你使用黑盒測試時(shí),你只要關(guān)心整個(gè)軟件系統(tǒng)的邊界,無需關(guān)心軟件系統(tǒng)內(nèi)部各個(gè)模塊之間如何協(xié)作。而如果使用灰盒測試,你就需要關(guān)心模塊與模塊之間的交互。這是灰盒測試與黑盒測試的區(qū)別。
5、灰盒測試與白盒測試的區(qū)別
但是,在灰盒測試中,你還是無需關(guān)心模塊內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。對(duì)于軟件系統(tǒng)的內(nèi)部 模塊,灰盒測試依然把它當(dāng)成一個(gè)黑盒來看待。而白盒測試則不同,還需要再深入地了解內(nèi)部 模塊的實(shí)現(xiàn)細(xì)節(jié)。所以,這是灰盒測試與黑盒測試的區(qū)別。
6、灰盒測試與單元測試的區(qū)別
剛才看到有網(wǎng)友在評(píng)論中問到此問題,俺補(bǔ)充一下。
首先,在進(jìn)行單元測試時(shí),需要寫一些測試代碼(行話叫“樁代碼”,洋文叫stub)。一般來說,測試代碼與被測試代碼采用同種語言(比如Java的單元測試通常也用Java來寫),且測試代碼和被測試代碼之間的耦合很緊密。因此,單元測試通常由開發(fā)人員來完成的——測試人員的能力未必能勝任。
其次,單元測試的顆粒度會(huì)更細(xì)(會(huì)細(xì)到模塊內(nèi)部的類一級(jí)、函數(shù)一級(jí)),而灰盒測試僅僅到模塊一級(jí)。
#p#
二、相對(duì)于黑盒測試的優(yōu)點(diǎn)
灰盒測試相對(duì)黑盒測試的優(yōu)點(diǎn),其實(shí)有不少,俺挑幾個(gè)重要的來說說。
1、測試可以及早介入
由于黑盒測試把整個(gè)軟件系統(tǒng)當(dāng)成一個(gè)整體來測試。如果系統(tǒng)的某個(gè)關(guān)鍵模塊還沒有完工,那測試人員就無法對(duì)整個(gè)系統(tǒng)進(jìn)行測試,只好閑著沒事干。而灰盒測試是針對(duì)模塊的邊界進(jìn)行,模塊開發(fā)完一個(gè)就測試一個(gè)。
2、有助于測試人員理解系統(tǒng)結(jié)構(gòu)
為了進(jìn)行灰盒測試,測試人員首先要熟悉內(nèi)部模塊之間的協(xié)作機(jī)制。在熟悉的過程中,“順便”也就對(duì)整個(gè)系統(tǒng)(及其結(jié)構(gòu))有一個(gè)初步的、宏觀的認(rèn)識(shí)。這有助于測試人員發(fā)現(xiàn)一些系統(tǒng)結(jié)構(gòu)方面的Bug。
而對(duì)于黑盒測試來說,由于測試人員不清楚軟件系統(tǒng)的內(nèi)部結(jié)構(gòu),難以發(fā)現(xiàn)一些結(jié)構(gòu)性的缺陷。
3、有助于管理層了解真實(shí)的開發(fā)進(jìn)度
一些復(fù)雜的大系統(tǒng),經(jīng)常會(huì)發(fā)生開發(fā)進(jìn)度失控的情況。因?yàn)楹芏嚅_發(fā)人員有報(bào)喜不報(bào)憂的傾向。當(dāng)某個(gè)開發(fā)人員號(hào)稱自己的工作已經(jīng)完成了90%,往往意味著他/她還要花同樣多的時(shí)間來完成剩下的10%。這導(dǎo)致負(fù)責(zé)項(xiàng)目管理的人,無法了解開發(fā)的真實(shí)進(jìn)度。
由于灰盒測試針對(duì)對(duì)每一個(gè)模塊進(jìn)行,而且測試人員會(huì)從一個(gè)客觀的角度來反饋模塊的完成情況,這非常有利于管理層了解整個(gè)系統(tǒng)的真實(shí)完成情況。
4、可以構(gòu)造更好的測試用例
如果僅僅用黑盒的方式測試系統(tǒng)的外部邊界(通常是用戶界面),有很多軟件缺陷是不容易發(fā)現(xiàn)的。俺分別以B/S系統(tǒng)和C/S系統(tǒng)來舉例。
假設(shè)開發(fā)一個(gè)復(fù)雜的(Windows環(huán)境下的)C/S軟件。那么,這個(gè)軟件通常不會(huì)僅僅只有一個(gè)EXE文件。它可能會(huì)有若干個(gè)EXE文件以及若干個(gè) DLL文件。假如某個(gè)DLL提供的導(dǎo)出函數(shù),沒有按照約定對(duì)輸入?yún)?shù)進(jìn)行有效性判斷(比如指針是否為空),那你用黑盒測試的方式,難以暴露出這種缺陷。而灰盒測試就容易發(fā)現(xiàn)此類問題。
假如你開發(fā)的是一個(gè)Web應(yīng)用系統(tǒng),那么,這種系統(tǒng)的服務(wù)端多半會(huì)提供若干個(gè)Web接口用于被客戶端調(diào)用。假如某個(gè)Web接口存在安全性問題/并發(fā)性問題/健壯性問題/XX問題,你單純用黑盒測試的手段,同樣難以發(fā)現(xiàn),而灰盒測試就可以搞定。
5、利于提升測試人員能力
很多公司搞的黑盒測試,就是讓測試人員用鼠標(biāo)(鍵盤都難得用)操作用戶界面。在這種的環(huán)境里,測試人員干的活,很多都是重復(fù)性的體力勞動(dòng),技術(shù)能力難以得到提高。
而如果搞灰盒測試,測試人員就需要多懂一點(diǎn)技術(shù)背景知識(shí),必要時(shí)還得寫點(diǎn)測試腳本,對(duì)測試人員的能力提升很有好處。
#p#
三、相對(duì)于白盒測試的好處
灰盒測試相對(duì)白盒測試的好處,比較容易概括。簡單來說,就是白盒測試較費(fèi)錢(研發(fā)成本較高)。這多出來的研發(fā)成本,體現(xiàn)在如下幾個(gè)方面。
1、首先,招聘成本較高
在人才市場上,100個(gè)應(yīng)聘的測試人員中,未必能夠找到一個(gè)合適的白盒測試人員。至少從俺及周圍同事的面試經(jīng)歷來看,難得碰到具備白盒測試能力的人。所以,你可能要花很長時(shí)間才能找到合適的人,時(shí)間成本浪費(fèi)掉了。
2、其次,培訓(xùn)成本較高
可能有同學(xué)會(huì)說,招不到就內(nèi)部培養(yǎng)唄。這個(gè)說起來容易,但是培訓(xùn)也是有成本的。而且周期還不短,同樣要耗費(fèi)時(shí)間成本。
3、再其次,人力成本較高
物以稀為貴是一條普遍的經(jīng)濟(jì)學(xué)規(guī)律。由于能搞白盒測試的家伙是稀有動(dòng)物,你自然不能給他/她開太低的薪水。否則人家待不了多久就跑路了。薪水開得高了,人力成本自然也就提高了。
四、其它的一些好處
前面拿灰盒測試分別跟黑盒/白盒進(jìn)行了對(duì)比,列舉了一些優(yōu)點(diǎn)。還有另外一些優(yōu)點(diǎn),和黑盒/白盒沒啥關(guān)系,單獨(dú)列在這里。
1、順便強(qiáng)化開發(fā)文檔
對(duì)于一個(gè)復(fù)雜的軟件系統(tǒng),模塊之間的接口是很重要的,因此捏,接口文檔也是很重要滴。而開發(fā)人員不愛寫文檔/不愛更新文檔,(在軟件業(yè)內(nèi))已經(jīng)是臭名昭著了。很多軟件開發(fā)到后期,模塊之間的接口文檔要么沒有,要么和代碼實(shí)現(xiàn)嚴(yán)重脫節(jié)。
但是,如果引入測試人員對(duì)模塊之間的接口進(jìn)行測試,就可以有效防止此種弊端。因?yàn)闇y試人員在測試前,首先要看模塊間的接口文檔,然后再根據(jù)接口文檔設(shè)計(jì)測試用例,***再執(zhí)行用例。因此,一旦接口文檔和代碼實(shí)現(xiàn)不符,立馬就露餡了。
2、順便搞搞自動(dòng)化
灰盒測試如果落實(shí)到位,還可以跟自動(dòng)化測試相結(jié)合。從此可以大大提升測試的效率,進(jìn)而大大提升軟件的質(zhì)量。(如何進(jìn)行自動(dòng)化的灰盒測試,后面的帖子會(huì)細(xì)談)
五、灰盒測試有啥缺點(diǎn)?
當(dāng)然,凡事都有優(yōu)點(diǎn)和缺點(diǎn),灰盒測試自然也不例外。下面列舉它的主要缺點(diǎn)。
1、不適用于簡單的系統(tǒng)
所謂的簡單系統(tǒng),就是簡單到總共只有一個(gè)模塊。由于灰盒測試關(guān)注于系統(tǒng)內(nèi)部模塊之間的交互。如果某個(gè)系統(tǒng)簡單到只有一個(gè)模塊,那就沒必要進(jìn)行灰盒測試了。
2、對(duì)測試人員的要求比黑盒測試高
從上面的介紹來看,灰盒測試要求測試人員清楚系統(tǒng)內(nèi)部由哪些模塊構(gòu)成,模塊之間如何協(xié)作。因此,對(duì)測試的要求就提高了。
因此,會(huì)帶來一定的培訓(xùn)成本。不過捏,依照俺的經(jīng)驗(yàn),培訓(xùn)難度不大。稍微有點(diǎn)基礎(chǔ)的測試人員,都可以在短期培訓(xùn)之后勝任。
3、不如白盒測試深入
顯然,灰盒不如白盒那么深入。不過捏,考慮到灰盒測試相比白盒測試有顯著的成本優(yōu)勢,該缺點(diǎn)不是太明顯。
六、總結(jié)
總而言之,言而總之,灰盒測試是一個(gè)很不錯(cuò)的東東,其優(yōu)點(diǎn)明顯而缺點(diǎn)容易克服。另外,俺前后在兩家公司的研發(fā)部門推行過,效果不錯(cuò)的說。大伙兒值得去嘗試一下。今天光說了優(yōu)缺點(diǎn)對(duì)比,在本系列的下一個(gè)帖子 ,具體介紹一下,開展灰盒測試之前,管理上有哪些準(zhǔn)備工作。
本文地址:http://program-think.blogspot.com/2010/11/grey-box-testing-1.html
【編輯推薦】