做社會化的測試工程師之一:把軟體測試搬出實驗室

柴阿峰發表於2012-07-31

在四月間,六月間分別在天津和北京參加了軟體測試主題沙龍,在會上都討論了同一個問題: 什麼是軟體測試人員的核心能力?

在天津的沙龍上,與會的測試經理和高階測試人員總結了十條,但是其中沒有“寫程式碼”。

在北京的沙龍上,不僅測試人員同意這個觀點,一些資深開發人員也指出,出色的開發人員,他的核心技能不是寫程式碼,而是對需求的把握,對設計的睿智,對品質的追逐。

反過來看我們的測試人員,尤其是那些剛剛參加測試工作兩三年,正在經歷“迷茫期”的工程師,他們總在問同樣的問題:是該學習Java程式設計嗎?學習 Loadrunner 可以讓我加薪嗎?既然Google 需要使用 Python,我是該系統的學習 Python 和 Selenium 嗎?對這種問題我的回答都是:不!不!不!

測試人員(大部分是手工測試人員)問這個問題,是出於一種擔憂:怕失去工作: 既然自動化測試的程式碼會代替手工操作軟體,既然敏捷模式下的開發測試混合模式已經(號稱)不再有獨立的測試人員,那麼出路何在?

首先,我們拋開愚蠢的工作安全性擔憂——我家門口菜市場賣燒餅的老闆不會英語,電腦使用僅限於播放dvd,但掙得比我多——我們回到測試的本質聊一聊。

獨立軟體測試出現的原因是為了應對軟體質量風險,那麼從這個角度我們來分析一下:

1. 由開發人員執行的測試從1940s年代,電腦又傻又大的歲月其起就有了,而第一個獨立的測試人員是微軟公司在1976年招聘的,那麼,只要微軟公司的智商還正常,他們的軟體質量就一定遇到了靠開發人員測試無法保證的狀況——這種狀況實在太多,我就不意義列舉了——那麼,在1940年到1976年將近四十年,開發人員測試沒有解決的質量風險,在今天就忽然可以解決了?

2. 開發人員是人類歷史上最懶惰的一批人,自他們開始測試起,他們就發明了各種各樣的工具來代替他們測試——也就是自動化測試,結果呢,到了1980年代,微軟還是開始大批量招聘獨立測試人員,到現在僅微軟就有幾萬的測試人員——那麼,在1940年到1976年將近四十年,自動化測試沒有解決的質量問題,在今天就忽然可以解決了?

何況今天軟體的使用場景、使用者型別、業務都極大的複雜化了。

解決了是否會失業這個問題,談談個人的觀點:手工測試人員不會失業,其中一個原因就是:我們的測試將會社會化、複雜化。

關於軟體測試的社會性,我舉兩個例子。

例子1:幾年前坐公交時,和旁邊的兩位美女搭訕,聊起工作。她們開始吐槽自己的職業。她們是銀行資訊中心的表單錄入員。每天的工作就是把紙質表單中的資料錄入到軟體中去。她們說:“我們每天早上最大的期待,就是運氣,期待挑到一臺好電腦”(她們沒有固定的電腦裝置)。而好電腦的定義是:用Windows XP的是好電腦;用Windows 2000的是爛電腦。因為,表單錄入軟體的某些按鈕,在xp下只需要做單次點選,在2000下就要雙擊。當錄入一個表單時這很好,但是她們一天要處理將近3000個表單,這就意味著用“好”電腦的人可以早下班,而用“爛”電腦的那個就要加班。這個問題(注意,嚴格意義上說,都不能算bug,因為“客戶沒有明確這個需求”)對程式設計師來說,對測試人員來說,真的不算重要,我們只會點幾次,看到完成了功能,就宣告通過了,但是看看我們給客戶帶來的痛苦。

例子2:一個大學生告訴我,大夫給母親開藥的電子處方系統沒有做限制,某個只能吃三天的藥開了五天的量,幸虧在藥房被發現,及時更改過來,否則就可能造成人命關天的醫療事故。

例子3:我的女兒只有三歲,但是她可以用ipad找到切水果,我觀察過她的操作:首先她不會看字,全部靠圖形識別,另外,她能記住劃幾下螢幕可以找到那個圖示,如果找不到那個圖示,她就會按下home鍵回到初始螢幕,然後再次執行同樣的操作。但是一旦到了使用滑鼠和樹形選單的windows系統下,我經常會聽到她找不到應用而生氣的大聲哭。

有人(尤其是開發人員)會說,這三個例子中的問題,甚至都不是缺陷:

首先,客戶沒有提出明確的需求;

其次,只要使用“正確”,軟體的功能都可以“正常的”完成;

再次,其他公司的大部分軟體都是這麼做的,而且似乎賣得也不錯。

然而,使用者只要有選擇權,她們就會用腳投票,放棄那些“爛”軟體。

最後,由社會因素導致的“真正的”缺陷,我也能舉出半打,比如說時間:

我曾經有篇部落格中講過時間因素導致的缺陷。時間是一個典型的社會因素:對程式設計師來說,時間不過是簡單2012073112000001(2012年7月31日12點零1秒)十六位字元,但是在實際的社會中,時間就會涉及到時區、原子時、世界時、閏年、閏月、閏秒,如果讀者有心,可以去檢索一下,前面列出的任何一個時間因素都造成過嚴重的軟體缺陷。

所以,個人主張,軟體——尤其是那些以消費使用者為目標群體的軟體——測試必須搬出我們舒適的帶有中央空調的辦公室,走入到社會中去。

一旦我們把軟體測試“搬出實驗室”,就會發現:那些在實驗室看起來正常的東西對於客戶來說就“不正常”——具體例子看前文。

一旦我們把軟體測試“搬出實驗室”,就會發現:影響軟體質量的因素開始迅速複雜化。

比如最近我堅持使用 TDCDMA 網路的手機,因為我知道許多商人需要依靠中國行動網路接打電話。但是,大部分移動app對TDCDMA網路的相容性都有問題,在 WCDMA 網路下就很好:這是因為 TD 網路是獨生於中國的網路,國外沒有。

比如我的家在近郊,我很想知道有多少移動網際網路公司會測試在弱訊號情況下的軟體穩定性?

比如一旦考慮到需要適配十種解析度,幾十種品牌的三百種安卓平臺,安卓app的測試複雜程度就會迅速膨脹。

比如考慮到軟體的使用者群體的多樣性,任何一個在實驗室裡正確的功能最終對使用者來說可能都是災難:由於我老婆使用瀏覽器的習慣,IE8在她手下崩潰的頻率要高很多。

比如考慮到業務的複雜性,胡亂的使用輸入框而不對輸入資料進行控制,最後都可能導致災難性的後果,而一家企業,一個醫院的業務複雜程度,豈是幾篇部落格可以說清的?

一旦我們把軟體測試“搬出實驗室”,我們就會發現,現有的測試是大大不足的,而且這種測試是單純靠工具,程式碼很難測試全面的。

向計算機解釋人類是由於何種腦殘的原因,通過夜觀天象開始計時,結果每每發現這種記時誤差很大於是找出各種閏年,閏月,閏秒來彌補?快省省吧,Linux核心號稱是由這個星球上最會寫程式碼的人搞出來的,由於2012年某一天憑空多出一個閏秒,多少Linux核心程式死鎖伺服器掛掉這種事情,他們會隨便告訴別人嗎?

向計算機解釋為什麼我的老奶奶在七十歲以後手開始抖動以至於在於無法完成哪怕一次滑鼠的雙擊操作?快省省吧,雙擊操作絕對是反社會軟體設計的典型:如果你跟朋友打招呼時拍一下腦袋,他會認為是親暱的表示,想象一下這時你來了個“雙擊”,嗯,很可能你們要開打。

一旦我們把軟體測試“搬出實驗室”,我們就會發現,手工測試人員是寶貴的:

他們似乎是團隊中那個真正像個“人”那樣思考的人……

說到這,大家應該清楚我的觀點了,對於手工測試工程師來說:別光盯著學程式碼,學工具,琢磨琢磨這個“社會”。

PS: 單身程式設計師們,如果下次你用“這是特性不是缺陷”來搪塞測試人員報的“應該雙擊而不是單擊”缺陷時,請花幾秒考慮一下這個場景——恰恰就是你們這種木有社會責任感的行為,導致漂亮的銀行妹子每天加班,沒時間跟你約會,所以你才單身的…好吧…這個 bug 你改不改?

 

本篇完,後續敬請期待。@柴阿峰 授權伯樂線上使用,轉載必須經過作者書面允許,郵箱:chaiafeng#163.com

 

相關文章