水因地而制行,兵因敵而制勝 ——測試感悟(針對手動、黑盒)

轉自:http://groups.csdn.net/Microsoft_Testing_Experts/topic/e4c1aac5-4124-4a34-a8d6-ab2c29b04145.aspx


近日讀《在最短時間內找到最值錢的寶物》一文,想起我9年前的一篇文章——一篇發表在北大方正技術研究院內部刊物《七四八通訊》上的文章,當時副院長還給寫了編者按。今天翻出來對比來讀:一個把測試比作探寶者與寶藏,一個比作是將軍圍獵,似有異曲同工之妙。現發表如下:

 

水因地而制行,兵因敵而制勝 ——測試感悟(針對手動、黑盒)

北大方正技術研究院  李守亮

1999年6月

 

編者按:這是一篇好文章,不在於他的文筆,而在於他的用"心"工作,用心總結。是他的工作經驗和心路歷程的記錄,值得大家學習。

 

一直以來,總想寫一寫關於測試方面的文章。今天,真的接到這個題目時,卻欲言又止,遲遲不能落筆。在這裏,我也只將自己的實際經驗介紹給大家,拋磚引玉,和大家共同探討。

剛開始做測試的同事會有一種感覺,認爲測試實際上是在充當這個產品的第一用戶。也有人認爲,測試其實很簡單,沒有什麼技術可言。

其實,測試說易也易,因爲進入門檻低;說難也難,因爲測深測精不簡單。黑盒測試很講究策略,測試也是一門學問。

 

初涉測試的心路歷程

        

對測試的認識,每個測試人員都有一個過程。我對測試的認識,在每個階段各不相同,其中也走了不少彎路。在此,我用第三人稱把自己對測試工作的認識過程寫出來,希望後來的同事能從中得到啓發。

 

第一階段  學習+驗證

 

對於新來的同事,剛剛涉及測試,往往踏不下心來。感覺測試是件沒完沒了地事情,並且單調重複、枯燥乏味,沒有激情、沒有成就感。這是很正常的現象,剛進入一個新的崗位,總有一個適應過程。

在這一階段,新員工需要做的事情是,先學會使用所測的軟件,熟悉他的每一個功能,弄清楚每一個功能的正確效果應該是什麼?然後纔開始嘗試着去找一些膚淺的問題。這一階段的感覺是:"測試實際上就是驗證產品每個功能的有效性"。新員工這一階段雖然不太出成績,但卻很重要,因爲這是以後工作的基礎。

 

第二階段  與開發對立的誤區

 

         當熟悉了所測產品的功能,並且找到測試的感覺後,就開始較深入地測試了。

在這一階段,新員工會逐漸發現一些嚴重的BUG。當看到自己發現的問題被解決後,才真正感覺到自己在參與產品的生產。漸漸地,漸漸地,就會感覺到測試其實也挺有趣。尤其是發現一些死機或特別嚴重的錯誤時,有時會興奮上幾個小時。這是他進入狀態的必然過程。

此時,他對測試的認識是:"測試,就是要找出產品的缺陷,是證明當前產品不可用的一種行爲"。這一階段非常值得注意!很多軟件公司常說:"開發和測試的行爲是對立和矛盾的",這實際上是測試工作的誤區。

 

第三階段  與開發主動配合

 

         隨着測試經驗的積累,對工作的認識也逐步深入。最後,他會發現,開發和測試之間,本質上是一個合作的過程,目標本是一致的。都是爲了儘量減少發佈產品中的錯誤,達到用戶可接受的程度。於是,他會更多地站在用戶角度考慮問題,測試的目的也越來越明確,工作也越來越主動。

 

第四階段  責任感+驗證

 

         當經歷了產品的幾個生命週期之後,從不斷的需求、開發、維護、升級循環過程中,逐漸認識到,測試實際上是降低產品風險的一種行爲。逐步認識到,測試介入的環節越早,風險也就越小。

在和最終用戶多次打交道,親身體驗用戶的心情之後,油然而生出一種強烈的責任感,對測試的理解也隨之昇華爲一種產品意識:測試工作和研發工作,實際上是一種榮辱與共的關係,取得的成績和造成的失誤,其榮譽和責任是同等的。此時,當他發現一個致命的錯誤或缺陷時,第二階段的那種興奮也許只會存在3秒鐘。此時的他,更多考慮的是怎樣幫助研發組儘快地把該問題解決掉。在這一階段,測試工作中更注重產品的實用性和易用性。

 

 

從學習階段對產品的驗證,到與研發的對立,到主動地和研發配合,到一種責任感使命感自發地對功能的驗證,這是一個高級測試人員所必然要經歷的一個心路歷程。

 

測試中的幾種思維方式

 

         測試能否出成績?以及測試工作的優劣,與個人的素質和修養有關。

測試工作說易也易,只要認真、負責,就能做出一些成績。但說難也難,測試講究很多方法和策略,要測的精,問題定位的及時準確,規律找的準確有效,那是需要下一番功夫的。在此,我把測試中常用的幾種思維方式共享如下:

 

正向思維

 

         在測試一個產品之前,需要做的重要事情是,熟讀產品的設計文檔,詳細瞭解每個功能的正確效果。然後針對每個模塊,順着程序員的思路,逐個驗證,以驗證測試功能的有效性。這是以後深入測試的基礎,也是做自動測試的前提。

         搞清楚每個模塊是幹什麼的,弄清楚正確的效果,才知道什麼是錯誤的。這是非常關鍵的一個環節,如果在這方面不下功夫,也就很難測試出有價值的BUG。因爲,很明顯的錯誤結果可能就在你眼前大搖大擺地經過,而你卻認爲這是正確的!我就曾經一度陷入這一誤區,好在很快地補上了這一課。

 

逆向思維

 

         關於"逆向思維",我有兩種解釋,一是針對開發人員。

開發人員在調試或自測時,總愛順着已有的思路進行。所以,在很多情況下容易忽略自己所犯的錯誤,例如邊緣條件檢查,異常處理等等。所謂當局者迷,旁觀者清,是因爲你可以跳出他的思維定式,從另外的角度來思考問題。所以,只要你肯動腦筋,不按他的邏輯進行檢測,就一定能找出許多破綻。

 

關於"逆向思維"的第二種解釋,是針對具體問題。

當發生嚴重問題時,首先要保護好現場,然後努力地回憶,努力地理清思路。要善於從錯誤現象的最後一步往前倒推。例如死機問題,僅一個現象並不能說明問題,關鍵要找出它的規律。規律有時是最後一步操作導致,而有時則是前幾十步操作的累加,這需要我們追憶剛纔的幾十步操作,並大膽懷疑其中的疑點,有目的的undo、redo。這一招叫順藤摸瓜,抓住規律的尾巴,從最後一步開始。

 

跳躍性思維

 

         我也稱它爲聯動思維。

有時,一個問題表現出來的現象和問題的本質會差着十萬八千里,這類問題的規律也極難準確地捕捉到。處理這類問題,需要有紮實的測試基本功,並對產品非常地熟悉,才能把表面上毫不相關,卻有着千絲萬縷關係的孤立的兩點聯繫起來;才能從一處錯誤得到啓示,聯想到其他模塊也可能存在類似的問題......

 

關於測試技巧

 

黑盒測試,尤其是手工黑盒測試的業績,有七成決定於個人因素。

測試需要有高度的責任心和使命感,要有主人翁精神。任何工作只有敬業才能做出成績,工作主動了,自然會得到回報。

 

在很多情況下,問題的現象出現了,但規律卻不明顯。當問題提交後,在開發那裏卻死活不能重現,這種情況是很尷尬和無奈的。所以,作爲一個出色的測試工程師,僅僅捕獲到問題的現象是遠遠不夠的,還要找到其規律,甚至弄懂它更深層次的原因。

遇到這類問題怎麼辦?很多人可能就此放棄了,因爲說他是"無規律或不能重現事件"。在我看來,這種說法是錯誤的。我認爲,一定要樹立起一個觀念,那就是:"任何錯誤的出現,都絕不是偶然的。每個錯誤現象背後都隱含着一個必然的規律,不管是膚淺的,還是深奧的。"而測試的目的,就是要把這個規律挖出來。因爲,規律總結得越準確,對問題的定位和解決幫助就越大。

 

         做好測試工作必須要做到幾條:首先,要努力培養起對測試的興趣;要培養對所測產品的感情,要像對待自己孩子一樣去熱愛它,呵護它。其次,要膽大並心細。要有遊走於高山峽谷邊緣的那種"如臨深淵,如履薄冰"的膽量和謹慎。要敢於懷疑,大膽假設而小心求證。再次,要有耐心,戒驕戒躁,心要安靜。

 

如果說測試有技巧的話,也僅佔到三成:

         1、對待問題要鍥而不捨,並善於總結經驗。

         舉一個案例,對於"方正飛騰(報社專用排版軟件)自動勾邊死機問題"規律的發現,我現在還記憶猶新。我1997年剛接觸這款軟件時就遇到了該問題,但問題變化無常,當時找不到一點兒規律:有時,在關鍵位置點一下鼠標就死,有時點100多次才死,有時怎麼點都不會死。該問題整整困擾了我一年,直到有一天,我盯着屏幕發呆,發現鼠標變成了漏斗,我隨便點了一下<調整>按鈕,程序立刻死機。當時靈機一動,莫非跟"自動存盤"有關?判斷是正確的!一年來的謎終於被解開了,而受此啓發,後來遇到"非法字體窗口"、"自動翻頁"、以及"刪除表格"所引發的死機,不到1秒的時間,我就準確定位與自動存盤有關。

 

         對於疑難問題,不妨先放他一放,過幾天再去想,說不定就會有新思路冒出來,有新靈感被激發出來。對於每一個解決的疑難問題,都要認真分析它的原因,總結定位經驗,並推演聯想到其他模塊。測試過程是一個循序漸進的過程,是一個經驗積累的過程。以一年的摸索換來若干個一秒鐘的思索,值!還有很多典型案例,限於篇幅,不便羅列。

 

         2、善於推理,善於運用逆向思維。善於換位思考,變換角色對待問題;

         3、善於和別人共享經驗,站在別人已有的思路上進一步深入,多動腦筋,多動手。

         4、簡化問題規律的步驟,弄清楚問題產生的原因,總結程序員的教訓,對類似問題可以觸類旁通。

         5、不斷地懷疑,不斷地推翻懷疑。突破跳出思維定式,大膽假設,小心求證。

 

將軍圍獵

 

曾經在文字所和測試中心流傳一句話:"軟件裏的bug如同海綿裏的水,要想擠總會有的"。舊bug的修改往往會引發新bug的產生,所謂"按下葫蘆起來瓢"。

 

如何培養測試人員的對測試工作的興趣呢?不妨把bug比作藏匿在深山叢林中的獵物,把自己比作圍獵的將軍。程序中的bug變化莫測,要有將軍指揮作戰的氣度,怎樣更快更準更有效地定位它們,捕獲住它們?圍追堵截之中,盡顯英雄本色。

 

兵法上說,水因地而制行,兵因敵而制勝。兵無常勢,無恆形,能與敵變化而取制者,謂之神。僅僅通過黑盒測試,你就能知道程序員做了什麼改動?怎樣做的改動?還存在什麼缺陷?並快速準確地把它定位出來。若能達到這種境界,讓你的思維能力受到如此的鍛鍊和考驗,難道還不會有成就感麼?

 

當你全身心地投入在測試中,你會感覺到測試,實際上是一場智力遊戲。所謂"氣癡者技精",因爲一進入狀態,坐下來就會忘記時間的流逝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章