岳曉東博士在中國(guó)版幸福課《幸福在我心》中,拿出一副達(dá)?芬奇的畫(huà)作《蒙娜麗莎》讓聽(tīng)眾觀察畫(huà)里面還有什么。有的看出畫(huà)里面有一只貓,有的看出畫(huà)里面還有一只狗,有的人除了蒙娜麗莎怎么也看不出來(lái)畫(huà)里面還有什么……如果你看不出有什么動(dòng)物,休息一會(huì)兒,再看這幅畫(huà)時(shí),也許能看到了。

  這在心理學(xué)上稱為“心理定勢(shì)”,指的是一個(gè)人看問(wèn)題一旦形成某種模式后,不再思考了;但是如果暮然回首再回頭看時(shí),會(huì)覺(jué)得原來(lái)不是沒(méi)得可為、不能再做什么事了,而是看待問(wèn)題又有了新的突破。這種心理現(xiàn)象在測(cè)試中是普遍存在的。

  前一段時(shí)間,我和另外幾個(gè)人對(duì)同一被測(cè)對(duì)象各自單獨(dú)進(jìn)行了探索性測(cè)試。被測(cè)對(duì)象是Word2007的插入頁(yè)碼功能。在1小時(shí)的探索中,我測(cè)試了插入頁(yè)碼在頁(yè)面頂端、底端、頁(yè)邊距、當(dāng)前位置,以及設(shè)置不同的頁(yè)碼格式、刪除頁(yè)碼功能,發(fā)現(xiàn)缺陷集中在“在頁(yè)面上編輯頁(yè)碼格式”( 比如放大頁(yè)碼格式的形狀、移動(dòng)其位置等等)以及對(duì)超大文件插入頁(yè)碼方面;由于頁(yè)碼刪除功能比較簡(jiǎn)單,只測(cè)試了少許時(shí)間,認(rèn)為其風(fēng)險(xiǎn)比較低?傮w而言,我對(duì)這次探索性測(cè)試比較滿意。

  可是,當(dāng)我觀察另外一個(gè)人的探索性測(cè)試時(shí),我驚奇地發(fā)現(xiàn),還有這樣一個(gè)重要的功能完全不在我的視線范圍之內(nèi):編輯某種頁(yè)碼格式的屬性。按如下的操作步驟:插入?頁(yè)碼?頁(yè)面頂端?普通數(shù)字1?右鍵點(diǎn)擊鼠標(biāo),選擇“編輯屬性……”,則彈出“修改構(gòu)建基塊”的對(duì)話框,用戶可以編輯修改此種頁(yè)碼格式相關(guān)的屬性。同時(shí)我發(fā)現(xiàn),她花費(fèi)了較多的時(shí)間測(cè)試“刪除頁(yè)碼”的功能,并且發(fā)現(xiàn)了一些問(wèn)題。為什么會(huì)出現(xiàn)如此的差異呢?這些功能和問(wèn)題為什么我沒(méi)有發(fā)現(xiàn)呢?一個(gè)直接的原因是,我把注意力集中在每種頁(yè)碼格式可能存在的問(wèn)題上,每次選擇一種頁(yè)碼后,直接點(diǎn)擊鼠標(biāo)左鍵,然后急于觀察這種頁(yè)碼格式顯示是否正確、當(dāng)我改變其形狀移動(dòng)其位置后表現(xiàn)是否正確,從來(lái)沒(méi)有想過(guò)點(diǎn)擊鼠標(biāo)右鍵。這么做,好的方面是,我找到一個(gè)點(diǎn)后,對(duì)這個(gè)點(diǎn)的測(cè)試會(huì)比較深入(Test in Depth);不好的方面是,測(cè)試寬度上(Test in Width)容易有所遺漏。

  這里面有幾個(gè)有趣的點(diǎn)值得深入探討一下。

  (1)心理定勢(shì)

  “總是直接點(diǎn)擊鼠標(biāo)左鍵、從來(lái)沒(méi)有想過(guò)點(diǎn)擊鼠標(biāo)右鍵”,這雖然描述的是我的動(dòng)作,但是一個(gè)人的行為取決于他/她(下文統(tǒng)一用“他”代替了)的思想和意識(shí)。

  我的心理定勢(shì)是:我認(rèn)為插入頁(yè)碼的主要功能是“插入各種格式的頁(yè)碼”,主要的風(fēng)險(xiǎn)也在這里,所以我的注意力也集中在“每種頁(yè)碼格式可能存在的問(wèn)題上”。當(dāng)我把這個(gè)集中的點(diǎn)進(jìn)行了較充分的測(cè)試,并且真的發(fā)現(xiàn)了其中的一些問(wèn)題,并且對(duì)這些問(wèn)題進(jìn)行了進(jìn)一步的調(diào)查后,我會(huì)認(rèn)為:這次測(cè)試還是有些收獲的、差不多可以結(jié)束了、主要的點(diǎn)基本都覆蓋過(guò)了、應(yīng)該沒(méi)有什么大問(wèn)題了,對(duì)那些可能被遺漏的點(diǎn)(比如“編輯屬性”功能)和那些未知的缺陷(刪除頁(yè)碼相關(guān)的缺陷)卻渾然不覺(jué)。

  當(dāng)然,如果我再進(jìn)行一輪測(cè)試,很有可能會(huì)突破前一輪測(cè)試的思維定勢(shì),找到新的測(cè)試點(diǎn)、找到新的缺陷。所以,從測(cè)試的心理定勢(shì)我想到的,為了保證更好的測(cè)試效果,使不同的測(cè)試人員對(duì)同一個(gè)被測(cè)對(duì)象展開(kāi)測(cè)試、或者同一個(gè)測(cè)試人員在不同時(shí)間對(duì)同一被測(cè)對(duì)象展開(kāi)不只一次的測(cè)試,是很有必要的。

  (2)深度測(cè)試與廣度測(cè)試

  注意,在上面的分析中,我把“并且真的發(fā)現(xiàn)了其中的一些問(wèn)題”重點(diǎn)強(qiáng)調(diào)了一下。如果我把注意力集中在“每種頁(yè)碼格式可能存在的問(wèn)題上”,卻什么問(wèn)題也沒(méi)有發(fā)現(xiàn),會(huì)怎么樣呢?也許,我會(huì)懷疑之前自己對(duì)風(fēng)險(xiǎn)的假設(shè),從而關(guān)注其他值得深入測(cè)試的點(diǎn),也許能發(fā)現(xiàn)上述的測(cè)試盲區(qū)。這說(shuō)明,發(fā)現(xiàn)的缺陷往往會(huì)阻止缺陷的發(fā)現(xiàn)。

  這句話的意思是,當(dāng)我發(fā)現(xiàn)了一個(gè)缺陷,我會(huì)花費(fèi)時(shí)間去調(diào)查這個(gè)缺陷,它真的是個(gè)缺陷嗎?還是我測(cè)試過(guò)程出現(xiàn)了問(wèn)題?這個(gè)缺陷有可能導(dǎo)致什么問(wèn)題?到底如何觸發(fā)這個(gè)缺陷的?有沒(méi)有其他值得進(jìn)一步挖掘的缺陷?對(duì)于一個(gè)的測(cè)試人員來(lái)講,解答這些問(wèn)題的過(guò)程才是真正有趣的測(cè)試過(guò)程,像一名獵手聞到獵物后開(kāi)始的一系列追蹤的過(guò)程,充滿希望和挑戰(zhàn)!但測(cè)試也是充滿矛盾的過(guò)程:測(cè)試需要這種深入的測(cè)試過(guò)程,深入的測(cè)試才能發(fā)現(xiàn)有價(jià)值的缺陷,可是發(fā)現(xiàn)了缺陷會(huì)占用你的測(cè)試時(shí)間、放緩你的測(cè)試腳步、“占用”你的測(cè)試思維,讓你沒(méi)有更多的時(shí)間、也無(wú)法避免地忽視其他的缺陷,從而導(dǎo)致測(cè)試的遺漏,所以總是要在深度測(cè)試和廣度測(cè)試之間把握一定的平衡。

  本文中提到的探索性測(cè)試的例子,我更偏向于深度測(cè)試,而另外一個(gè)人更偏向于廣度測(cè)試。如果用那個(gè)沿著一條路挖水井的例子做類比,我挖了很多坑,大部分都挖了100米,終找到了4口井;她挖了更多的坑,都不超過(guò)50米,找到了2口井。其實(shí),更好地平衡深度測(cè)試與廣度測(cè)試的話,我們都可以挖掘出更多的更有價(jià)值的井。

  由深度測(cè)試與廣度測(cè)試,還可以聯(lián)想到另外一個(gè)測(cè)試中的矛盾點(diǎn):你可以相信測(cè)試人員提供的對(duì)被測(cè)對(duì)象質(zhì)量的評(píng)價(jià),但你又不能完全相信這個(gè)評(píng)價(jià)。深度測(cè)試更多與降低風(fēng)險(xiǎn)相關(guān),廣度測(cè)試更多與增加覆蓋相關(guān)。無(wú)論測(cè)試人員做到怎樣的平衡,都不能同時(shí)做到的深度測(cè)試和的廣度測(cè)試,也是說(shuō),不可能既降低了所有的質(zhì)量風(fēng)險(xiǎn)、又覆蓋了所有應(yīng)該覆蓋的東西。我們知道,每個(gè)測(cè)試人員都是基于他的測(cè)試情況給出他對(duì)被測(cè)系統(tǒng)質(zhì)量的評(píng)價(jià)。比如,基于我的測(cè)試過(guò)程,我認(rèn)為Word2007的插入頁(yè)碼功能在頁(yè)數(shù)較多的大文件插入頁(yè)碼時(shí)存在質(zhì)量風(fēng)險(xiǎn)、系統(tǒng)對(duì)不同種類頁(yè)碼格式的處理有所不同(我的感覺(jué))因而需要分別測(cè)試、對(duì)頁(yè)碼形狀進(jìn)行編輯等操作容易引起問(wèn)題;而另外一名人員經(jīng)過(guò)他的測(cè)試過(guò)程,認(rèn)為Word2007的插入頁(yè)碼功能質(zhì)量不錯(cuò),只有一些小的GUI界面提示性問(wèn)題,沒(méi)有什么大的問(wèn)題,無(wú)需對(duì)每一種頁(yè)碼格式進(jìn)行單獨(dú)測(cè)試。作為測(cè)試管理者,你應(yīng)該相信每一位測(cè)試人員提供的質(zhì)量評(píng)價(jià),因?yàn)檫@個(gè)測(cè)試結(jié)論是測(cè)試人員基于他的測(cè)試過(guò)程對(duì)質(zhì)量的真實(shí)理解,但是你顯然不能盡信這個(gè)觀點(diǎn),因?yàn)檫@個(gè)真實(shí)的理解并不代表真實(shí)的質(zhì)量信息,只是目前測(cè)試人員能夠覺(jué)察到的質(zhì)量信息(Perceived Quality),你還要去了解這個(gè)觀點(diǎn)是在什么樣的測(cè)試深度和測(cè)試廣度下得出的結(jié)論。

  (3)交替思維

  怎么樣克服測(cè)試的心理定勢(shì)、避免測(cè)試的盲區(qū)呢?

  也許你會(huì)說(shuō),我不用探索性測(cè)試,我用腳本化測(cè)試(Scripted Testing,這里對(duì)腳本化測(cè)試的理解與Cem Kaner在http://www.kaner.com/pdfs/ValueOfChecklists.pdf里對(duì)Scripted Testing的描述是一致的)方法,測(cè)試前仔細(xì)閱讀需求規(guī)格說(shuō)明書(shū),這樣我可以事先知道一共有多少個(gè)點(diǎn)需要測(cè)試了,不會(huì)遺漏。這樣做其實(shí)并不能從根本上解決問(wèn)題。

  首先,需求一旦寫(xiě)成文檔,是不完整或不足夠細(xì)致的需求了。你并不能依賴需求文檔的完整性來(lái)避免漏測(cè)。而且,算在測(cè)試執(zhí)行之前,你已經(jīng)了解了所有的需求,測(cè)試的心理定勢(shì)以及其他一些因素仍然會(huì)致使你漏掉一些缺陷。

  其次,如果過(guò)于依賴腳本化測(cè)試方法,你的測(cè)試思路會(huì)不知不覺(jué)地受文檔描述的影響。我們有另外一個(gè)人對(duì)插入頁(yè)碼功能也進(jìn)行了測(cè)試。與我們的測(cè)試過(guò)程不同,他先閱讀插入頁(yè)碼的幫助,然后再開(kāi)展測(cè)試。結(jié)果,我發(fā)現(xiàn)他的測(cè)試過(guò)程有很多“受文檔影響的痕跡”。對(duì)于文檔中沒(méi)有提到的部分,他很少會(huì)關(guān)注。比如“對(duì)頁(yè)碼的形狀進(jìn)行編輯”、“對(duì)過(guò)大的文件”來(lái)測(cè)試等等這樣的操作”;而對(duì)于文檔中提到的部分,他會(huì)關(guān)注較多,比如幫助中有這么一句話:“您可以將頁(yè)碼添加到文檔的頂部、底部或頁(yè)邊距。保存在頁(yè)眉和頁(yè)腳或頁(yè)邊距中的信息顯示為灰色,并且不能與文檔正文信息同時(shí)進(jìn)行更改”,很顯然這句話給他留下了深刻的印象,所以他在測(cè)試中時(shí)不時(shí)地會(huì)驗(yàn)證一下頁(yè)碼信息和正文信息是否可以同時(shí)修改。是的,我這里用的詞是“驗(yàn)證”,也可以叫“檢查”,可以對(duì)應(yīng)到英文的checking,我是說(shuō)他的測(cè)試過(guò)程更偏向于checking,而不是testing。關(guān)于checking和testing的區(qū)別,可以參考Michael Bolton的博文,http://www.developsense.com/blog/2009/08/testing-vs-checking/。更偏重于checking的人,測(cè)試執(zhí)行時(shí)會(huì)更傾向于去驗(yàn)證一下他之前認(rèn)為的一個(gè)結(jié)果是否正確;而更偏重于testing的人,測(cè)試執(zhí)行時(shí)會(huì)更多地想發(fā)現(xiàn)一些之前沒(méi)有想到的情況、發(fā)現(xiàn)一些新的信息、獲得對(duì)真實(shí)的系統(tǒng)更深一些的理解。

  克服心理定勢(shì)、避免測(cè)試盲區(qū),可能有很多種方法,比如運(yùn)用系統(tǒng)性思維(Systems Thinking),散焦思維(Defocused Thinking),交替思維(Alternation Thinking)等,關(guān)于這些概念的更多信息,可以參考James Bach的書(shū)《Scerets of a Buccaneer-Scholar》,也可以參考這本書(shū)《經(jīng)典思維50法》,里面有不少有趣的例子。限于篇幅,這里只分享一下我對(duì)交替思維的理解。

  你在測(cè)試時(shí),是否有這樣的時(shí)候,絞盡腦汁也發(fā)現(xiàn)不了什么問(wèn)題、缺乏新的測(cè)試思路,或者感覺(jué)當(dāng)前有點(diǎn)混亂、測(cè)試效率很低;或者當(dāng)你讀一本書(shū)的時(shí)候,讀了一段時(shí)間,發(fā)現(xiàn)大腦反應(yīng)有點(diǎn)遲鈍、閱讀效果極差、感覺(jué)有點(diǎn)煩躁。這個(gè)時(shí)候,并不是你不專心高效測(cè)試了、不愛(ài)讀書(shū)了,而是你的大腦給你傳來(lái)一個(gè)信號(hào):我已經(jīng)接受了太多的信息,請(qǐng)您休息片刻,讓我消化消化,再繼續(xù)工作。此時(shí),是你運(yùn)用交替思維的時(shí)機(jī),你可以做些其他的事情轉(zhuǎn)移當(dāng)前的注意力,比如隨便點(diǎn)擊鼠標(biāo)試試其他的功能、比如整理一下你的測(cè)試記錄、或者干脆休息一下。雖然你在休息,但你的大腦并沒(méi)有休息,它在消化吸收剛才的信息,當(dāng)你再次開(kāi)始測(cè)試時(shí),你會(huì)發(fā)現(xiàn)測(cè)試效率提高了、測(cè)試思路打開(kāi)了,往往會(huì)有意想不到的收獲。

  所以,下次測(cè)試的時(shí)候,不妨注意一下你是否也存在某種心理定勢(shì)?這種心理定勢(shì)是如何影響了你的測(cè)試效果?你的測(cè)試深度與測(cè)試廣度又是如何平衡的?有意識(shí)地運(yùn)用一下交替思維、系統(tǒng)性思維等思維方式,讓你的測(cè)試更加高效起來(lái)!