兩類(lèi)經(jīng)典的軟件測(cè)試方法:

  傳統(tǒng)上認(rèn)為軟件測(cè)試的方法從總體上分為兩類(lèi)。第一類(lèi)測(cè)試方法是試圖驗(yàn)證軟件是“工作的”,所謂“工作的”是指軟件的功能是按照預(yù)先的設(shè)計(jì)執(zhí)行的;而第二類(lèi)測(cè)試方法則是設(shè)法證明軟件是“不工作的”。

  提出第一類(lèi)方法的代表人物是軟件測(cè)試領(lǐng)域的先驅(qū)Dr. Bill Hetzel(代表論著《The Complete Guide to Software Testing》),他曾于1972年6月在美國(guó)的北卡羅來(lái)納大學(xué)組織了歷史上第一次正式的關(guān)于軟件測(cè)試的論壇。他首先在1973年給軟件測(cè)試一個(gè)這樣的定義:“是建立一種信心,認(rèn)為程序能夠按預(yù)期的設(shè)想運(yùn)行。Establish confidence that a program does what it is supposed to do. ”后來(lái)在1983年他又將定義修訂為:“評(píng)價(jià)一個(gè)程序和系統(tǒng)的特性或能力,并確定它是否達(dá)到預(yù)期的結(jié)果。軟件測(cè)試是以此為目的的任何行為。 Any activities aimed at evaluating an attribute or capability of a program or system. ”在他的定義中的“設(shè)想”和“預(yù)期的結(jié)果”其實(shí)是我們現(xiàn)在所說(shuō)的用戶(hù)需求或功能設(shè)計(jì)。他還把軟件的質(zhì)量定義為“符合要求”。

  第一類(lèi)測(cè)試可以簡(jiǎn)單抽象地描述為這樣的過(guò)程:在設(shè)計(jì)規(guī)定的環(huán)境下運(yùn)行軟件的功能,將其結(jié)果與用戶(hù)需求或設(shè)計(jì)結(jié)果相比較,如果相符則測(cè)試通過(guò),如果不相符則視為Bug。這一過(guò)程的目標(biāo)是將軟件的所有功能在所有設(shè)計(jì)規(guī)定的環(huán)境全部運(yùn)行,并通過(guò)。

  在軟件行業(yè)中一般把第一類(lèi)方法奉為主流和行業(yè)標(biāo)準(zhǔn)。1990年的IEEE/ANSI標(biāo)準(zhǔn)將軟件測(cè)試進(jìn)行了這樣的定義:“是在既定的狀況條件下,運(yùn)行一個(gè)系統(tǒng)或組建,觀察記錄結(jié)果,并對(duì)其某些方面進(jìn)行評(píng)價(jià)的過(guò)程。The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component (IEEE/ANSI, 1990 [Std 610.12-1990]”這里所謂“既定的狀況”也可理解為需求或設(shè)計(jì)。

  盡管如此,這一方法還是受到很多業(yè)界權(quán)威的質(zhì)疑和挑戰(zhàn)。代表人物是Glenford J. Myers(代表論著《The Art of Software Testing》)。他認(rèn)為測(cè)試不應(yīng)該著眼于驗(yàn)證軟件是工作的,相反應(yīng)該首先認(rèn)定軟件是有錯(cuò)誤的,然后去發(fā)現(xiàn)盡可能多的錯(cuò)誤。他還從人的心理學(xué)的角度論證,將 “驗(yàn)證軟件是工作的”作為測(cè)試的目的,非常不利于測(cè)試人員發(fā)現(xiàn)軟件的錯(cuò)誤。于是他于1979年提出了他對(duì)軟件測(cè)試的定義:“是以發(fā)現(xiàn)錯(cuò)誤為目的而運(yùn)行程序的過(guò)程。The process of executing a program or system with the intent of finding errors.” 這是軟件測(cè)試的第二類(lèi)方法,簡(jiǎn)單地說(shuō)是驗(yàn)證軟件是“不工作的”,或者說(shuō)是有錯(cuò)誤的。他甚至極端地認(rèn)為,一個(gè)成功的測(cè)試必須是發(fā)現(xiàn)Bug的測(cè)試,不然沒(méi)有價(jià)值。這如同一個(gè)病人(假定此人確有病),到醫(yī)院做一項(xiàng)醫(yī)療檢查,結(jié)果各項(xiàng)指標(biāo)都正常,那說(shuō)明該項(xiàng)醫(yī)療檢查對(duì)于診斷該病人的病情是沒(méi)有價(jià)值的,是失敗的。我并不完全同意這一看法。

  第二類(lèi)軟件測(cè)試方法在業(yè)界也很流行,受到很多學(xué)術(shù)界專(zhuān)家的支持。大家熟悉的Ron Patton在《軟件測(cè)試》( 中文版由機(jī)械工業(yè)出版社出版,具說(shuō)此書(shū)是目前國(guó)內(nèi)測(cè)試新手入門(mén)的經(jīng)典教材)一書(shū)的第10頁(yè),有一個(gè)明確而簡(jiǎn)潔的定義:“軟件測(cè)試員的目標(biāo)是找到軟件缺陷,盡可能早一些,并確保其得以修復(fù)。”有些軟件企業(yè)以Bug數(shù)量來(lái)作為考核測(cè)試人員業(yè)績(jī)的一項(xiàng)指標(biāo),其實(shí)是接受了這樣的方法。

  兩類(lèi)方法的優(yōu)劣對(duì)比

  雖然軟件測(cè)試總的目的是為了軟件產(chǎn)品的質(zhì)量,但很明顯這兩類(lèi)測(cè)試方法在具體目標(biāo)、或指導(dǎo)思想上截然相反。由此也決定了它們?cè)谒悸贰⑦^(guò)程和測(cè)重點(diǎn)上有很大的差別,并各有利弊的。

  第一類(lèi)測(cè)試方法以需求和設(shè)計(jì)為本,因此有利于界定測(cè)試工作的范疇,更便于部署測(cè)試的側(cè)重點(diǎn),加強(qiáng)針對(duì)性。這一點(diǎn)對(duì)于大型軟件的測(cè)試,尤其是在有限的時(shí)間和人力資源情況下顯得格外重要。而第二類(lèi)測(cè)試方法與需求和設(shè)計(jì)沒(méi)有必然的關(guān)聯(lián),如果計(jì)劃管理不當(dāng),測(cè)試活動(dòng)很容易丟失重點(diǎn),走入歧途。

  第一類(lèi)測(cè)試方法可以與軟件的架構(gòu)和軟件開(kāi)發(fā)的計(jì)劃相配合,使軟件測(cè)試活動(dòng)逐層次的展開(kāi),從而使軟件的功能和質(zhì)量有計(jì)劃地逐步完善和提高(關(guān)于測(cè)試的層次問(wèn)題,我會(huì)在今后的討論中專(zhuān)門(mén)介紹)。第二類(lèi)測(cè)試方法不具備這種過(guò)程的漸進(jìn)性。

  第一類(lèi)測(cè)試方法的缺點(diǎn)是缺乏靈活性,不利于測(cè)試人員主觀能動(dòng)性的發(fā)揮,正像Myers先生所說(shuō),不容易找到軟件的錯(cuò)誤(Bug)。而這方面正是第二類(lèi)測(cè)試方法的長(zhǎng)處。