也許細心的讀者注意到了,本公眾號改名了,從“張老師的小黑屋”改成了“軟件測試經驗與教訓”。
去年寫過幾篇關於測試思想的文章 ,就測試員的思維方式進行了一些探討。主要目的是為剛入行的測試新手糾正一些錯誤的“常識”。從反響來看,讀者寥寥,遠不如探討諸如“面試”、“工具”等話題那般火熱。對此,我能理解,卻難以接受。
常聽到一句話“不怕走彎路,就怕走錯路”。不過當一個測試員花費三年、五年甚至更多的時間走了彎路的時候,跟走了一條錯路又有什么區別?思想指導行動,作為剛入行的測試新手來說,多看一些測試工具、測試技巧固然能快速見效提升實力,但從長期來看,多看一些測試思想卻可以讓自己少走彎路,少一些遺憾。
言歸正傳。其實直到今天,在外行人看來(甚至包括很多項目經理/程序員),我們測試人員找bug,靠的是對系統的無知、靠好奇心、靠良好的思維發散度、靠直覺、靠“消極”的思維方式。。。這就引出了兩個問題:到底什么才是測試最重要的品質?優秀的測試員和平庸的測試員區別在哪里?
我得承認,前面提到的幾點外行人對測試的印象,都是有一定道理的,甚至有些是需要我們去培養的品質。但這並非最重要的。
當初由於公司的安排,從開發轉了測試。之后很長一段時間都處於野蠻生長的狀態,懵懵懂懂干了兩年, 深知一個測試人員在沒有好的導師是多么不易。后來有同事問我,為什么選擇測試這條路,我給他一個當時我自己都信以為真的理由:做測試找bug很有成就感,有征服感。到今天我明白了,其實我並不喜歡征服,只是喜歡打破產品沒有問題的幻覺。我也並不喜歡報告一些壞消息,但是喜歡將客戶從虛假信息中解放出來。
我的看法
對於測試員最重要的品質,在之前的文章中有提到,測試員最寶貴的財產是自己受過訓練的大腦,也就是思維方式,跟開發相比我們測試員的思維方式確實是不同的。
同樣的,優秀測試和平庸測試之間的差別在於他們如何思考:如何進行測試設計選擇,如何解釋所觀察到的現象,以及如何分析和描述這些現象並且讓人信服。。。 下面簡單說幾點。
測試運用的是認識論
也許看到這個題目,會有人說:這是什么鬼?我沒學習過認識論也做得很好,別裝X,好好說人話不行嗎?——請相信我,認識論是幫助測試員更好測試的一個哲學分支。
認識論研究如何認識所了解的東西:研究證據和推理。這是科學實踐的基礎。研究認識論的目標是了解怎么樣才能改進我們的思維,按照測試員的方式思考意味着實踐認識論 。遇到以下類似問題的時候需要用到認識論:
- 怎么知道軟件足夠好?
- 如果軟件並不是足夠好,怎么樣才能知道?
- 怎么知道已經完成了足夠好的測試?
另外,直接與軟件測試有關的認識論問題包括:
- 如何收集和評估證據
- 如何進行有效的推論
- 如何使用不同邏輯形式
- 擁有合理的信念意味着什么
- 形式和非形式推理之間的差別是
- 非形式推理的常見謬誤
- 自然語言的含義與模糊性
- 如何做好決策
的確,從來沒有研究這些問題的人,也能把測試做得很好(比如只掌握了我之前分享的測試框架)。但是想要做的比很好更好,就得研究這些問題。研究認識論可以幫助測試員設計有效的測試策略。更好的意識到自己工作中的錯誤,理解自己的測試能夠證明什么,不能證明什么,並寫出無懈可擊的測試報告。
蘇格拉底早在2400年前就提倡並描述了對信念的批判性觀察,直到今天哲學家、心理學家都還在繼續研究認識論。作為測試人員,很有必要好好利用這份遺產。
大膽假設小心求證
依靠“直覺”做測試是很多測試員(包括資深的)的測試手段,但需要注意的是,“直覺”很有用,但只在開始的時候有用,而不是其他時候。不可把由直覺做出的判斷作為測試報告或者質量評估的依據。除非大家都有這種直覺,否則不會相信或者采納你的建議。直覺適合用作指南,而不能用作合理性證明。當你憑借直覺找到測試方向時,就需要用嚴謹的測試行為進行驗證。 總之,用直覺開始工作時不錯的,但用直覺做為工作的結束又是非常糟糕的。
當然有“這是問題,因為它顯然是問題”的想法時,可以換一種方式進行溝通:“這是問題,因為我看到產品的行為與需求1、2和3沖突,而我們的客戶很看重這些需求。”
所有的測試都是基於模型
每次培訓新人,我都會鄭重申明這一點:在設計測試時,頭腦中要創建一個產品模型(比如一個想象的圖景,一份功能清單或者某個圖表,知道有誰是用戶,用戶關心什么)。不管模型是什么,測試都主要基於產品模型進行,而不是實際產品。如果程序員怎么做你就怎么測,那相當於你默認了程序員做出來的就是對的——這是一種很危險的情況——任何時候我們都要相信,程序員是很有“創造力”的,他們能創造出各種匪夷所思的邏輯!
有缺點的模型會產生有缺點的測試。學會一種對產品建模的新方法,就像是學會了觀察產品的一種新方法。 作為測試員,有責任去研究建模問題。對建模藝術越精通,越能夠更好的測試。
關於黑盒測試
黑盒測試意味着軟件內部知識在測試中不起重要作用。需要花更多的時間在了解用戶,了解他們的期望和需要,了解技術,了解軟件運行環境的配置,了解與這個軟件進行交互的其他軟件,了解軟件必須管理的數據,了解開發過程,了解競品,等等(更多請參考我的測試框架)。我們測試員的工作就是收集信息,而收集上面這些信息的目的是為了更好的進行測試策略的制定。比如說近期軟件進行了一次改動,如果說我們只去了解這次改動的內容,而不了解改動的原因(項目背景),那我們怎么能保證這次開發出來東西是用戶想要的?永遠對項目經理/開發說的“我們已經跟客戶做過需求確認”這句話保持質疑。從我個人經驗來看,很多“隱式需求”都隱藏在這些問題中。
記住,所有的活動都試圖回答某些問題,任何測試活動中,都要問自己什么樣的問題能夠推動自己評估測試策略,否則就會更像是一個游客,而不是測試員。
做黑盒測試並不反對大家去了解軟件代碼,如果有能力,多去了解軟件工作原理。了解產品的方式越多,越能更好的測試。
按照慣例,給大家推薦幾本書:
《批判性思維的工具:心理學的元思想》
《思考與決策》
《研究的技巧》