軟件測試的心理定勢
作者:網絡轉載 發布時間:[ 2012/3/22 10:38:05 ] 推薦標簽:
岳曉東博士在中國版幸福課《幸福在我心》中,拿出一副達?芬奇的畫作《蒙娜麗莎》讓聽眾觀察畫里面還有什么。有的看出畫里面有一只貓,有的看出畫里面還有一只狗,有的人除了蒙娜麗莎怎么也看不出來畫里面還有什么……如果你看不出有什么動物,休息一會兒,再看這幅畫時,也許能看到了。
這在心理學上稱為“心理定勢”,指的是一個人看問題一旦形成某種模式后,不再思考了;但是如果暮然回首再回頭看時,會覺得原來不是沒得可為、不能再做什么事了,而是看待問題又有了新的突破。這種心理現象在測試中是普遍存在的。
前一段時間,我和另外幾個人對同一被測對象各自單獨進行了探索性測試。被測對象是Word2007的插入頁碼功能。在1小時的探索中,我測試了插入頁碼在頁面頂端、底端、頁邊距、當前位置,以及設置不同的頁碼格式、刪除頁碼功能,發現缺陷集中在“在頁面上編輯頁碼格式”( 比如放大頁碼格式的形狀、移動其位置等等)以及對超大文件插入頁碼方面;由于頁碼刪除功能比較簡單,只測試了少許時間,認為其風險比較低。總體而言,我對這次探索性測試比較滿意。
可是,當我觀察另外一個人的探索性測試時,我驚奇地發現,還有這樣一個重要的功能完全不在我的視線范圍之內:編輯某種頁碼格式的屬性。按如下的操作步驟:插入?頁碼?頁面頂端?普通數字1?右鍵點擊鼠標,選擇“編輯屬性……”,則彈出“修改構建基塊”的對話框,用戶可以編輯修改此種頁碼格式相關的屬性。同時我發現,她花費了較多的時間測試“刪除頁碼”的功能,并且發現了一些問題。為什么會出現如此的差異呢?這些功能和問題為什么我沒有發現呢?一個直接的原因是,我把注意力集中在每種頁碼格式可能存在的問題上,每次選擇一種頁碼后,直接點擊鼠標左鍵,然后急于觀察這種頁碼格式顯示是否正確、當我改變其形狀移動其位置后表現是否正確,從來沒有想過點擊鼠標右鍵。這么做,好的方面是,我找到一個點后,對這個點的測試會比較深入(Test in Depth);不好的方面是,測試寬度上(Test in Width)容易有所遺漏。
這里面有幾個有趣的點值得深入探討一下。
(1)心理定勢
“總是直接點擊鼠標左鍵、從來沒有想過點擊鼠標右鍵”,這雖然描述的是我的動作,但是一個人的行為取決于他/她(下文統一用“他”代替了)的思想和意識。
我的心理定勢是:我認為插入頁碼的主要功能是“插入各種格式的頁碼”,主要的風險也在這里,所以我的注意力也集中在“每種頁碼格式可能存在的問題上”。當我把這個集中的點進行了較充分的測試,并且真的發現了其中的一些問題,并且對這些問題進行了進一步的調查后,我會認為:這次測試還是有些收獲的、差不多可以結束了、主要的點基本都覆蓋過了、應該沒有什么大問題了,對那些可能被遺漏的點(比如“編輯屬性”功能)和那些未知的缺陷(刪除頁碼相關的缺陷)卻渾然不覺。
當然,如果我再進行一輪測試,很有可能會突破前一輪測試的思維定勢,找到新的測試點、找到新的缺陷。所以,從測試的心理定勢我想到的,為了保證更好的測試效果,使不同的測試人員對同一個被測對象展開測試、或者同一個測試人員在不同時間對同一被測對象展開不只一次的測試,是很有必要的。
(2)深度測試與廣度測試
注意,在上面的分析中,我把“并且真的發現了其中的一些問題”重點強調了一下。如果我把注意力集中在“每種頁碼格式可能存在的問題上”,卻什么問題也沒有發現,會怎么樣呢?也許,我會懷疑之前自己對風險的假設,從而關注其他值得深入測試的點,也許能發現上述的測試盲區。這說明,發現的缺陷往往會阻止缺陷的發現。
這句話的意思是,當我發現了一個缺陷,我會花費時間去調查這個缺陷,它真的是個缺陷嗎?還是我測試過程出現了問題?這個缺陷有可能導致什么問題?到底如何觸發這個缺陷的?有沒有其他值得進一步挖掘的缺陷?對于一個的測試人員來講,解答這些問題的過程才是真正有趣的測試過程,像一名獵手聞到獵物后開始的一系列追蹤的過程,充滿希望和挑戰!但測試也是充滿矛盾的過程:測試需要這種深入的測試過程,深入的測試才能發現有價值的缺陷,可是發現了缺陷會占用你的測試時間、放緩你的測試腳步、“占用”你的測試思維,讓你沒有更多的時間、也無法避免地忽視其他的缺陷,從而導致測試的遺漏,所以總是要在深度測試和廣度測試之間把握一定的平衡。
本文中提到的探索性測試的例子,我更偏向于深度測試,而另外一個人更偏向于廣度測試。如果用那個沿著一條路挖水井的例子做類比,我挖了很多坑,大部分都挖了100米,終找到了4口井;她挖了更多的坑,都不超過50米,找到了2口井。其實,更好地平衡深度測試與廣度測試的話,我們都可以挖掘出更多的更有價值的井。
由深度測試與廣度測試,還可以聯想到另外一個測試中的矛盾點:你可以相信測試人員提供的對被測對象質量的評價,但你又不能完全相信這個評價。深度測試更多與降低風險相關,廣度測試更多與增加覆蓋相關。無論測試人員做到怎樣的平衡,都不能同時做到的深度測試和的廣度測試,也是說,不可能既降低了所有的質量風險、又覆蓋了所有應該覆蓋的東西。我們知道,每個測試人員都是基于他的測試情況給出他對被測系統質量的評價。比如,基于我的測試過程,我認為Word2007的插入頁碼功能在頁數較多的大文件插入頁碼時存在質量風險、系統對不同種類頁碼格式的處理有所不同(我的感覺)因而需要分別測試、對頁碼形狀進行編輯等操作容易引起問題;而另外一名人員經過他的測試過程,認為Word2007的插入頁碼功能質量不錯,只有一些小的GUI界面提示性問題,沒有什么大的問題,無需對每一種頁碼格式進行單獨測試。作為測試管理者,你應該相信每一位測試人員提供的質量評價,因為這個測試結論是測試人員基于他的測試過程對質量的真實理解,但是你顯然不能盡信這個觀點,因為這個真實的理解并不代表真實的質量信息,只是目前測試人員能夠覺察到的質量信息(Perceived Quality),你還要去了解這個觀點是在什么樣的測試深度和測試廣度下得出的結論。
(3)交替思維
怎么樣克服測試的心理定勢、避免測試的盲區呢?
也許你會說,我不用探索性測試,我用腳本化測試(Scripted Testing,這里對腳本化測試的理解與Cem Kaner在http://www.kaner.com/pdfs/ValueOfChecklists.pdf里對Scripted Testing的描述是一致的)方法,測試前仔細閱讀需求規格說明書,這樣我可以事先知道一共有多少個點需要測試了,不會遺漏。這樣做其實并不能從根本上解決問題。
首先,需求一旦寫成文檔,是不完整或不足夠細致的需求了。你并不能依賴需求文檔的完整性來避免漏測。而且,算在測試執行之前,你已經了解了所有的需求,測試的心理定勢以及其他一些因素仍然會致使你漏掉一些缺陷。
其次,如果過于依賴腳本化測試方法,你的測試思路會不知不覺地受文檔描述的影響。我們有另外一個人對插入頁碼功能也進行了測試。與我們的測試過程不同,他先閱讀插入頁碼的幫助,然后再開展測試。結果,我發現他的測試過程有很多“受文檔影響的痕跡”。對于文檔中沒有提到的部分,他很少會關注。比如“對頁碼的形狀進行編輯”、“對過大的文件”來測試等等這樣的操作”;而對于文檔中提到的部分,他會關注較多,比如幫助中有這么一句話:“您可以將頁碼添加到文檔的頂部、底部或頁邊距。保存在頁眉和頁腳或頁邊距中的信息顯示為灰色,并且不能與文檔正文信息同時進行更改”,很顯然這句話給他留下了深刻的印象,所以他在測試中時不時地會驗證一下頁碼信息和正文信息是否可以同時修改。是的,我這里用的詞是“驗證”,也可以叫“檢查”,可以對應到英文的checking,我是說他的測試過程更偏向于checking,而不是testing。關于checking和testing的區別,可以參考Michael Bolton的博文,http://www.developsense.com/blog/2009/08/testing-vs-checking/。更偏重于checking的人,測試執行時會更傾向于去驗證一下他之前認為的一個結果是否正確;而更偏重于testing的人,測試執行時會更多地想發現一些之前沒有想到的情況、發現一些新的信息、獲得對真實的系統更深一些的理解。
克服心理定勢、避免測試盲區,可能有很多種方法,比如運用系統性思維(Systems Thinking),散焦思維(Defocused Thinking),交替思維(Alternation Thinking)等,關于這些概念的更多信息,可以參考James Bach的書《Scerets of a Buccaneer-Scholar》,也可以參考這本書《經典思維50法》,里面有不少有趣的例子。限于篇幅,這里只分享一下我對交替思維的理解。
你在測試時,是否有這樣的時候,絞盡腦汁也發現不了什么問題、缺乏新的測試思路,或者感覺當前有點混亂、測試效率很低;或者當你讀一本書的時候,讀了一段時間,發現大腦反應有點遲鈍、閱讀效果極差、感覺有點煩躁。這個時候,并不是你不專心高效測試了、不愛讀書了,而是你的大腦給你傳來一個信號:我已經接受了太多的信息,請您休息片刻,讓我消化消化,再繼續工作。此時,是你運用交替思維的時機,你可以做些其他的事情轉移當前的注意力,比如隨便點擊鼠標試試其他的功能、比如整理一下你的測試記錄、或者干脆休息一下。雖然你在休息,但你的大腦并沒有休息,它在消化吸收剛才的信息,當你再次開始測試時,你會發現測試效率提高了、測試思路打開了,往往會有意想不到的收獲。
所以,下次測試的時候,不妨注意一下你是否也存在某種心理定勢?這種心理定勢是如何影響了你的測試效果?你的測試深度與測試廣度又是如何平衡的?有意識地運用一下交替思維、系統性思維等思維方式,讓你的測試更加高效起來!
相關推薦

最新發布
性能測試之測試環境搭建的方法
2020/7/21 15:39:32軟件測試是從什么時候開始被企業所重視的呢?
2020/7/17 9:09:11Android自動化測試框架有哪些?有什么用途?
2020/7/17 9:03:50什么樣的項目適合做自動化?自動化測試人員應具備怎樣的能力?
2020/7/17 8:57:06幾大市面主流性能測試工具測評
2020/7/17 8:52:11RPA機器人能夠快速響應企業需求,是怎么做到的?
2020/7/17 8:48:05Bug可以真正消滅嗎?為什么?
2020/7/17 8:43:03軟件測試基本概念是怎么來的?軟件測試生命周期的形成歷經了什么?
2020/7/16 9:11:10