軟件測(cè)試是一種以觀察和實(shí)驗(yàn)為依據(jù)的調(diào)查過(guò)程,該過(guò)程以測(cè)試為手段,為干系人提供產(chǎn)品或服務(wù)的質(zhì)量信息。然而,這個(gè)定義并沒(méi)有提到人類智慧的應(yīng)用,而人類的智慧使得測(cè)試和檢查之間產(chǎn)生微妙區(qū)別。Michael Bolton談了兩者的區(qū)別及其產(chǎn)生原因。

  Michael認(rèn)為:

  檢查是指為了證實(shí)已經(jīng)存在的理念而去做的事情。檢查是一個(gè)證實(shí)、驗(yàn)證和確認(rèn)的過(guò)程。當(dāng)我們已經(jīng)相信某些東西是正確的,我們會(huì)通過(guò)檢查來(lái)核實(shí)這一點(diǎn)。當(dāng)我們修改了代碼又想確保一切功能照常運(yùn)行,我們需要檢查。

  測(cè)試是指我們?yōu)榱税l(fā)現(xiàn)新信息而去做的事情。測(cè)試是一個(gè)探索、發(fā)現(xiàn)、調(diào)查和學(xué)習(xí)的過(guò)程。當(dāng)我們想通過(guò)配置、操作或者觀察來(lái)評(píng)估一個(gè)產(chǎn)品時(shí),或者當(dāng)我們?cè)噲D去識(shí)別一個(gè)沒(méi)有預(yù)計(jì)到的問(wèn)題時(shí),我們是在測(cè)試。

  Michael認(rèn)為:檢查要依賴機(jī)器完成,因?yàn)樗鼈兛梢越o出非此即彼的兩個(gè)答案:通過(guò)或者失敗。測(cè)試卻需要智慧。測(cè)試是了解系統(tǒng)和解答問(wèn)題的探索之旅:“這里有問(wèn)題嗎?”這也引出了測(cè)試人員和檢查人員的區(qū)別。

  需要有新的、清晰、完整而且沒(méi)有歧義的規(guī)范說(shuō)明才能工作的人是檢查人員,不是測(cè)試人員。同樣,需要有測(cè)試腳本才能工作的只是檢查人員,而不是測(cè)試人員。而僅僅根據(jù)參考文檔來(lái)比較當(dāng)前程序的人也是檢查人員,不是測(cè)試人員。

  George Dinwiddie認(rèn)為檢查和測(cè)試都是需要智慧的。他覺(jué)得雖然Michael認(rèn)為“運(yùn)行和觀察結(jié)果”是檢查,但是這僅僅是腳本測(cè)試的一部分。一旦測(cè)試失敗了,需要測(cè)試人員的智慧來(lái)弄明白到底發(fā)生了什么。這可能包括通過(guò)查看日志文檔來(lái)獲得信息,讓其他人去看看別的系統(tǒng)是不是工作正常,以及很多其他探究性工作。所以這跟探索性測(cè)試沒(méi)有區(qū)別,除了發(fā)生的時(shí)間有點(diǎn)延時(shí)而已。

  Michael一定程度上也同意這個(gè)觀點(diǎn),他認(rèn)為僅僅檢查點(diǎn)本身是很微不足道的。往往檢查之前或者檢查之后,人類的智慧起到了很大作用。這也是一個(gè)檢查點(diǎn)和檢查的區(qū)別。

  所以核心問(wèn)題在于我們認(rèn)為哪一個(gè)更有價(jià)值,是檢查點(diǎn)(我們有50000個(gè)自動(dòng)化測(cè)試)還是檢查。只有檢查點(diǎn)是不重要的,但是檢查??涉及到構(gòu)建、維護(hù)和分析每個(gè)檢查點(diǎn)??卻是很重要的。參照艾森豪威爾那句話(譯者注:艾森豪威爾,二戰(zhàn)歐洲盟軍總司令,美國(guó)34任總統(tǒng)。他在諾曼底登陸以后有句名言:Plan is nothing, but planning is everything),檢查而言,檢查點(diǎn)什么都不是,與之相比,檢查這一系列過(guò)程才是王道 (with respect to checking, the checks are nothing; the checking is everything)。然而檢查也不是的,測(cè)試也是如此。

  Johanna Rothman 也發(fā)表了類似的看法,她認(rèn)為測(cè)試需要技能和智慧并存。

  敏捷項(xiàng)目需要真正的多面手來(lái)?yè)?dān)當(dāng)測(cè)試人員:擁有能讀懂需求、設(shè)計(jì)和代碼的技能的人。沒(méi)有這些技能,他們不能足夠深入地去思考開發(fā)中的產(chǎn)品,他們也有可能無(wú)法識(shí)別出足夠多的各類測(cè)試用例。如果他們能夠理解需求、設(shè)計(jì)和代碼,他們可以根據(jù)他們的理解設(shè)計(jì)出巧妙的測(cè)試用例。其中的一些測(cè)試是探索性的,甚至有些探索性的測(cè)試需要以自動(dòng)化方式實(shí)現(xiàn),以便以后重復(fù)運(yùn)行。我曾經(jīng)在敏捷項(xiàng)目中見過(guò)一些出色的測(cè)試人員,他們能夠很快地編寫出自動(dòng)測(cè)試腳本來(lái)做一些探索。

  Cem Kaner則不同意敏捷測(cè)試人員需要是多面手一說(shuō)。他認(rèn)為既然探索性測(cè)試既需要測(cè)試又需要探索,那么為了能探索得當(dāng),還是很有必要運(yùn)用些特定技能的。他說(shuō)道:

  程序員理解項(xiàng)目中很多的風(fēng)險(xiǎn)。相比非程序員出身的人,他們可能能更好地寫出深入的測(cè)試來(lái)探測(cè)那些風(fēng)險(xiǎn)。而其他人可以更加專注于當(dāng)前環(huán)境下的軟件集成。相類似地,我們熟知的一些系統(tǒng)性能或者安全評(píng)估方面的專家,也能在他們的領(lǐng)域更好地表現(xiàn)。他們中的一些人是程序員,一些則不是。所有這些人和系統(tǒng)級(jí)別的軟件測(cè)試人員一起,才能做好自動(dòng)腳本測(cè)試或者探索性測(cè)試。

  George認(rèn)為這兩種模型都有各自的利弊。檢查和測(cè)試都能滿足Cem Kaner關(guān)于測(cè)試的定義。關(guān)鍵不在于是不是測(cè)試腳本化,而是你做事的流程和方式。

  兩個(gè)都是測(cè)試,都在尋找新信息,都需要智慧。如果你不這么想,那么你的測(cè)試方式錯(cuò)了。