資深測試老司機經驗總結:什麼才是軟體測試工程師的正常心態?
幹軟體測試這行已經許多年,見過剛剛開始工作的測試人員,也見過一些非常資深和優秀的測試人員,也見過不少無法成長起來的測試人員。
很多測試人員技術背景很強,操作能力也不錯,但就是很難發現問題,為什麼呢?我們就來談談怎樣執行好測試吧,需要培養哪些能力。
工作態度和技術背景就不去說它了。
做任何工作都要有好的工作態度,如果只是想混日子,無論做什麼工作都不會有長進的。技術背景當然也是需要的,測試人員可以不如開發人員深入。比如開發某些協議的時候,開發人員往往對rfc已經倒背如流,測試人員沒必要做到如此熟練。
那麼,除此之外,測試人員需要培養哪些能力呢?
我見過不少測試人員,他們非常渴望case能pass。如果一個case由於某種原因被block了,或者fail了,他們都表現出沮喪,或者嘲笑開發人員,認為這給他們的工作帶來了麻煩。
如果一個case順利地pass了,他們都歡天喜地,覺得總算完成了一個工作,可以對經理有交代了。可是資深的測試人員不是這樣的。 他們渴望的不是pass一個case,而是通過這個case,幫助開發人員找出更多的問題。
當問題出現的時候,他們很興奮,而不是沮喪。
他們會尋根究底,來考察為什麼會有這個問題,如何來解決這個問題,如何來改進測試計劃發現更多類似的問題,等等。當一個測試人員渴望做完一個 case的時候,他往往下意識地會忽略很多他本來應該發現的問題。只要操作能繼續,大的錯誤不出現,他們就不會去主動尋找錯誤。
我記得某部門有個老外剛來,就報了很多的bug。大家發現,他報的很多bug,大家以前也碰到過,但因為不影響測試過程,不認為這是bug,就都忽略了。
但其實有些bug是很嚴重的問題,比如系統的CPU突然被長時間百分百佔用,記憶體洩漏,狀態顯示和真實情況不符,等等。到了使用者那裡,都會成為使用者抱怨產品的可能。
那個老外曾經也指導過我做平臺整合測試,在他的指導下,我兩個禮拜報了十多個bug。有一個我記得很清楚,就是擴充套件卡的乙太網介面順序與主機上的相反。主機上的網口是從左往右遞增,而擴充套件卡上的是右邊為1,左邊為2,而且沒有在機器上標註。這樣就很容易造成配置錯誤。
我一開始碰到這個問題,就認為是自己的問題,為啥我沒配對呢?但是老外說,你也是使用者,你沒配對,使用者也不會配對。到了使用者那裡,這肯定就是一個bug。很多人都很不喜歡做整合測試,因為軟體還沒有準備好,測試case執行非常不順利。我發現這麼多bug的時候,其實真正的case一個也沒跑成。我一直停留在安裝和基本配置上。
但我一點也不氣餒,反而在這個過程中發現了很多問題,對於最基本的系統啟動和安裝也有了很多深刻的認識。一個測試人員能夠很快成長起來,不是靠他能夠順利地完成測試任務,而是要遇到很多問題,在問題中求成長,在問題中尋找答案。
測試人員的一個很重要的品質,就是歡迎問題,喜歡尋找問題,而不是完成測試。我發現資深的測試人員都有自己很好的測試習慣,我曾經把這個當成我學到的最寶貴的財富。可是當我想傳遞給其他的測試人員的時候,他們卻嗤之以鼻。
我有個同事,把所有的操作都事先寫在文件裡,用copy-paste來輸入命令。這樣可以完全重複測試過程,而不存在手工輸入錯誤的問題,使得測試過程可以重現。在輸入命令時,他把實時的log顯示和alarm顯示開啟,並利用工具記錄所有的命令輸出。每輸入一條命令, 他就會看看是否會出現問題。如果出現問題,他就立刻去分析這個問題出現的原因並考慮是否是個bug。
很多測試人員只有在出了大問題的時候,比如call打不通了,或者機器重起了,或者整個測試結果與預想的不符,才想起去察看和記錄錯誤。
我剛開始做測試的時候,也是這樣的。這樣常常會無法判斷錯誤什麼時候出現,是因為什麼操作出現的,只好再重複一遍。如果不是必現的問題,就無法說清了。很多測試人員,在測試計劃上寫的是一套,自己做的是另一套。因為測試計劃 和執行不是同時做的,執行時發現了一些問題,調整了測試步驟,但沒有及時更新計劃,也沒有記錄操作步驟。
當發現問題時,只好重新回憶自己做過的步驟,很浪費時間。沒有出現問題的話,測試步驟根本不被記錄。這些問題看似簡單,但影響不小。所以,在平時的測試工作中,有意識地培養起自己良好的測試習慣,是成為優秀的測試人員的一個很重要的品質。資深的測試人員總是把自己當成使用者,喜歡評論軟體給使用者的感受,這是很多測試人員不敢去做的。在測試報告裡,我們只關注報了多少個bug,這些 bug有沒有被修改,卻不關心測試人員對軟體的評價。
其實這些評價對開發人員是非常重要的。 測試人員往往能感受到系統最薄弱的地方在哪裡。 比如系統記憶體保護機制錯誤導致系統經常crash,系統層次過多,互動很成問題,系統有瓶頸,效能上不去,等等。
軟體人員只有各個分散的bug,卻得不到總體的感覺,這些反饋對系統架構師和開發人員改進系統、提高產品質量是非常重要的。 好的測試人員,要時時刻刻站在使用者的角度,表達出自己對軟體,對產品的感受。
資深的測試人員喜歡和軟體人員pair-work。因為軟體人員比較清楚這個軟體的架構,對出現的問題會很快定位,從軟體人員對開發過程的描述,也可以事先判斷出bug容易出現的地方。
而測試人員作為軟體的使用者,可以很快地反饋出自己對於軟體使用的感受。
讓開發人員瞭解測試,也可以幫助開發人員更清楚使用者的需求,對軟體如何被使用有了深刻的認識。有些開發人員從來沒進過實驗室,壓根就沒用過自己寫的軟體,這是非常非常錯誤的。
好的測試人員,會多和開發人員交朋友,和他們一起工作。敏捷的鼓吹者說應該把測試人員分散到開發人員當中,和他們密切合作。這我也不太贊同。
測試人員彼此之間的交流更加重要,而且測試人員不能受軟體實現的約束。這是有個度的。 把測試人員打散,測試人員在團隊中往往處在劣勢,他們很容易成為開發人員的附屬品。 開發人員讓他們測什麼就測什麼,開發人員認為是問題才是問題。測試人員很難成長起來。
所以,和軟體人員共同工作,是在測試人員有足夠的測試經驗的時候,而且應該是建立在平等的基礎上的合作。執行測試,有點像探雷,需要一步一步地走,小心謹慎地前進。目的是找雷,而不是通過。
【責任編輯:龐桂玉 TEL:(010)68476606】