我在一個公司已有八年,這八年我見過不少剛剛開始工作的測試人員,也見過一些非常和的測試人員,也見過不少無法成長起來的測試人員。很多測試人員技術(shù)背景很強(qiáng),操作能力也不錯,但是很難發(fā)現(xiàn)問題,為什么呢?

  我們來談?wù)勗鯓訄?zhí)行好測試吧,需要培養(yǎng)哪些能力。

  工作態(tài)度和技術(shù)背景不去說它了,做任何工作都要有好的工作態(tài)度,如果只是想混日子,無論做什么工作都不會有長進(jìn)的。技術(shù)背景當(dāng)然也是需要的,測試人員可以不如開發(fā)人員深入,比如開發(fā)某些協(xié)議的時候,開發(fā)人員往往對rfc已經(jīng)倒背如流,測試人員沒必要做到如此熟練。

  那么,除此之外,測試人員需要培養(yǎng)哪些能力呢?

  我見過不少測試人員,他們非?释鹀ase能pass。如果一個case由于某種原因被block了,或者fail了,他們都表現(xiàn)出沮喪,或者嘲笑開發(fā)人員,認(rèn)為這給他們的工作帶來了麻煩。如果一個case順利地pass了,他們都?xì)g天喜地,覺得總算完成了一個工作,可以對經(jīng)理有交代了?墒堑臏y試人員不是這樣的。他們渴望的不是pass一個case,而是通過這個case,幫助開發(fā)人員找出更多的問題。當(dāng)問題出現(xiàn)的時候,他們很興奮,而不是沮喪。他們會尋根究底,來考察為什么會有這個問題,如何來解決這個問題,如何來改進(jìn)測試計(jì)劃發(fā)現(xiàn)更多類似的問題,等等。當(dāng)一個測試人員渴望做完一個case的時候,他往往下意識地會忽略很多他本來應(yīng)該發(fā)現(xiàn)的問題。只要操作能繼續(xù),大的錯誤不出現(xiàn),他們不會去主動尋找錯誤。我記得某部門有個老外剛來,報了很多的bug。大家發(fā)現(xiàn),他報的很多bug,大家以前也碰到過,但因?yàn)椴挥绊憸y試過程,不認(rèn)為這是bug,都忽略了。其實(shí)有些bug是很嚴(yán)重的問題,比如系統(tǒng)的CPU突然被長時間百分百占用,內(nèi)存泄漏,狀態(tài)顯示和真實(shí)情況不符,等等。到了用戶那里,都會成為用戶抱怨產(chǎn)品的可能。那個老外曾經(jīng)也指導(dǎo)過我做平臺集成測試,在他的指導(dǎo)下,我兩個禮拜報了十多個bug。有一個我記得很清楚,是擴(kuò)展卡的以太網(wǎng)接口順序與主機(jī)上的相反。主機(jī)上的網(wǎng)口是從左往右遞增,而擴(kuò)展卡上的是右邊為1,左邊為2,而且沒有在機(jī)器上標(biāo)注。這樣很容易造成配置錯誤。我一開始碰到這個問題,認(rèn)為是自己的問題,為啥我沒配對呢?但是老外說,你也是用戶,你沒配對,用戶也不會配對。到了用戶那里,這肯定是一個bug。很多人都很不喜歡做集成測試,因?yàn)檐浖沒有準(zhǔn)備好,測試case運(yùn)行非常不順利。我發(fā)現(xiàn)這么多bug的時候,其實(shí)真正的case一個也沒跑成。我一直停留在安裝和基本配置上。但我一點(diǎn)也不氣餒,反而在這個過程中發(fā)現(xiàn)了很多問題,對于基本的系統(tǒng)啟動和安裝也有了很多深刻的認(rèn)識。一個測試人員能夠很快成長起來,不是靠他能夠順利地完成測試任務(wù),而是要遇到很多問題,在問題中求成長,在問題中尋找答案。測試人員的一個很重要的品質(zhì),是歡迎問題,喜歡尋找問題,而不是完成測試。

  我發(fā)現(xiàn)的測試人員都有自己很好的測試習(xí)慣,我曾經(jīng)把這個當(dāng)成我學(xué)到的寶貴的財(cái)富,可是當(dāng)我想傳遞給其他的測試人員的時候,他們卻嗤之以鼻。有個測試人員,把所有的操作都事先寫在文檔里,用copy-paste來輸入命令。這樣可以完全重復(fù)測試過程,而不存在手工輸入錯誤的問題,使得測試過程可以重現(xiàn)。在輸入命令時,他把實(shí)時的log顯示和alarm顯示打開,并利用工具記錄所有的命令輸出。每輸入一條命令,他會看看是否會出現(xiàn)問題。如果出現(xiàn)問題,他立刻去分析這個問題出現(xiàn)的原因并考慮是否是個bug。很多測試人員只有在出了大問題的時候,比如call打不通了,或者機(jī)器重起了,或者整個測試結(jié)果與預(yù)想的不符,才想起去察看和記錄錯誤。我剛開始做測試的時候,也是這樣的。這樣常常會無法判斷錯誤什么時候出現(xiàn),是因?yàn)槭裁床僮鞒霈F(xiàn)的,只好再重復(fù)一遍。如果不是必現(xiàn)的問題,無法說清了。很多測試人員,在測試計(jì)劃上寫的是一套,自己做的是另一套,因?yàn)闇y試計(jì)劃和執(zhí)行不是同時做的,執(zhí)行時發(fā)現(xiàn)了一些問題,調(diào)整了測試步驟,但沒有及時更新計(jì)劃,也沒有記錄操作步驟。當(dāng)發(fā)現(xiàn)問題時,只好重新回憶自己做過的步驟,很浪費(fèi)時間。沒有出現(xiàn)問題的話,測試步驟根本不被記錄。這些問題看似簡單,但影響不小。所以,在平時的測試工作中,有意識地培養(yǎng)起自己良好的測試習(xí)慣,是成為的測試人員的一個很重要的品質(zhì)。

  的測試人員總是把自己當(dāng)成用戶,喜歡評論軟件給用戶的感受,這是很多測試人員不敢去做的。在測試報告里,我們只關(guān)注報了多少個bug,這些bug有沒有被修改,卻不關(guān)心測試人員對軟件的評價。其實(shí)這些評價對開發(fā)人員是非常重要的。測試人員往往能感受到系統(tǒng)薄弱的地方在哪里。比如系統(tǒng)內(nèi)存保護(hù)機(jī)制錯誤導(dǎo)致系統(tǒng)經(jīng)常crash,系統(tǒng)層次過多,交互很成問題,系統(tǒng)有瓶頸,性能上不去,等等。軟件人員只有各個分散的bug,卻得不到總體的感覺,這些反饋對系統(tǒng)架構(gòu)師和開發(fā)人員改進(jìn)系統(tǒng)、提高產(chǎn)品質(zhì)量是非常重要的。好的測試人員,要時時刻刻站在用戶的角度,表達(dá)出自己對軟件,對產(chǎn)品的感受。

  的測試人員喜歡和軟件人員pair-work,因?yàn)檐浖藛T比較清楚這個軟件的架構(gòu),對出現(xiàn)的問題會很快定位,從軟件人員對開發(fā)過程的描述,也可以事先判斷出bug容易出現(xiàn)的地方。而測試人員作為軟件的使用者,可以很快地反饋出自己對于軟件使用的感受。讓開發(fā)人員了解測試,也可以幫助開發(fā)人員更清楚用戶的需求,對軟件如何被使用有了深刻的認(rèn)識。有些開發(fā)人員從來沒進(jìn)過實(shí)驗(yàn)室,壓根沒用過自己寫的軟件,這是非常非常錯誤的。好的測試人員,要多和開發(fā)人員交朋友,和他們一起工作。敏捷的鼓吹者說應(yīng)該把測試人員分散到開發(fā)人員當(dāng)中,和他們密切合作。這我也不太贊同。測試人員彼此之間的交流更加重要,而且測試人員不能受軟件實(shí)現(xiàn)的約束。這是有個度的。把測試人員打散,測試人員在團(tuán)隊(duì)中往往處在劣勢,他們很容易成為開發(fā)人員的附屬品,開發(fā)人員讓他們測什么測什么,開發(fā)人員認(rèn)為是問題才是問題。測試人員很難成長起來。所以,和軟件人員共同工作,是在測試人員有足夠的測試經(jīng)驗(yàn)的時候,而且應(yīng)該是建立在平等的基礎(chǔ)上的合作。

  執(zhí)行測試,有點(diǎn)像探雷,需要一步一步地走,小心謹(jǐn)慎地前進(jìn)。目的是找雷,而不是通過。