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

  Michael認(rèn)為:

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

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

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

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

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

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

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

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

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

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

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

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

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