# 二十、二不配備測試人員的五個首要(錯誤)原因
1992年,James Gleick正和一個多蟲軟件的各種問題周旋。科學作家Gleick認為 微軟剛出的Word for Windows新版很可怕。他在星期天紐約時報雜志寫了 一長篇 文章,這篇文章只能以激動來形容,整篇都在指責Word團隊不理會客戶的要求, 交付問題如此多的產品。
稍后,他以地區丨nternet供貨商Pan ix(剛好也是我的I nternet供貨商)客戶的身 份,要求提供自動排序并過濾其郵件的方法。提供這個功能的是一個叫procmail 很神秘的UN IX工具,它的接口連最硬派的UN IX迷都覺得難用。
總之Gleick先生不小心在procmail里打錯字,結果把他所有的信都刪掉了。一氣 之下就成立自己的Internet聯機公司。他雇用了 Uday Ivatury當程序員,并且 建立了 Pipeline這個真的有點超越時代的公司:這是第一個有圖形接口的商業 Internet聯機供貨商。
當然啰,Pipeline也有它自己的問題。很早期的第一個版本沒有使用任何錯誤更 正的協議,所以很容易把數據弄亂或當掉。它就像所有的軟體一樣有臭蟲。1993 年我去Pipeline找工作,面試中問到Gleick所寫的文章。「現在你已經身在蘺笆 的另一邊,」我問道:「有沒有稍微體會到創造好軟件的難處呢?」
Gleick惱羞成怒。他否認Pipeline有任何問題,他也否認這個軟件有和Word—樣糟。他告訴我說:「約耳,總有一天你也會恨微軟的。」他做了一年的軟件開 發而不再只是個使用者,這一年的經驗卻沒有讓他體會到無蟲又易用的軟件是多 么困難的事,這實在令我有點震驚。所以我就回絕那個工作機會逃掉了。 (Pipeline后來被一家世界上最奇怪的Internet供貨商PSI買走,然后隨隨便便就 被關掉了。)
軟件有蟲。CPU異常的守規矩,它們絕對會/互絕處理沒有被明確教過的東西,而 且通常會以最孩子氣的方式拒絕。我的筆記本電腦在外頭使用時常會當掉,因為 它找不到本來找得到的打印機,多么像個嬰孩。不過原因可能是某一行程序有個 極微小卻又很嚴重的問題。
這也正是你絕對要有QA部門的原因。每用兩個程序員就需要一個測試人員(如果 軟件需要用于多種復雜的組態或操作系統時還不只)。每個程序員都應該和某一 個測試人員緊密配合,盡可能頻繁地丟出自己編譯的版本給測試人員測。
QA部門應該要獨立并擁有權力,絕對不可以對開發團隊負責,事實上QA的主管應 該有否絕權,可以阻止發行不合格的軟件。
我第一份真正的工作是在微軟;這家公司并不以高質量的程序傾名,不過它還是 雇用了大量的測試人員。所以我曾經認為每個軟件組織都會有測試人員。
雖然很多組織確實有,不過沒有測試人員的組織還是多的令人驚訝。事實上很多 軟件團隊甚至不相信測試。 你可能會認為,現在的經理經過80年代的質量狂熱洗禮,又有各種無意義的國際 「質量」認證(如IS0-9000)和「六個標準偏差」等術語,應該會了解高質量的 產品才能獲得高質量的生意。事實上他們都了解,其中大多數人已經盡量把它塞 進腦袋,不過他們還是找出各種理由不用軟件測試人員,而這所有的理由通通 都是錯的。
我希望可以對你解釋這些想法的錯誤。如果你趕時間剩下的就別看了,直接算人 頭每兩個全職程序員請一個全職測試人員就對了。
下面是我聽過不雇用測試人員最常見的鬼叫:
1.問題是懶惰的程序員弄出來的。
這種幻想的內容是這樣的:「如果你請了測試人員,程序員就會馬虎而寫出問題更多的程序。 不要請測試人員,就可以強迫程序員一開始就寫出正確的程序。」哇!如果你會這樣想, 那你不是沒寫過程序,就是把寫程序這回事完全想歪了。由定義來看,臭蟲會出現就是因為 程序員沒看到程序代碼里的問題。通常就是需要其他人才看得到問題。當我還在Juno寫程 序時,每次都會用一樣的方式執行我的程序。我會照我自己的習慣大量使用鼠標操作。我們 神奇的測試強者習慣有點不同:她比較常用鍵盤(而且會嚴厲地實際用所有可能的組合去測 試使用接口)。這樣子很快就會找出丈量的問題。事實上有時候她還會說整個接口都不能用, 而且是沒分之百不簾用,可是在我的機器上一切正常。當我看著她重現問題才恍然大悟。Alt 鍵!你按住Alt鍵了!我怎么會沒測到呢?
2.我的軟件放在網絡上。即使有問題也馬上就能修好。
哈哈哈哈!好吧,你說對了,用網絡分發軟件的確能比以往軟件包時代更快速的更新修正版 本。不過即使把軟件放在網站上,也別低估在項目凍結后修正一個問題的代價。一來你可 能在修正第一個問題時產生更多的問題。更糟的是如果你檢討發行新版本的程序,就會了解 在網絡上丟出修正版是個相當昂貴的建議。更別提會讓人因為有以下感覺而造成壞印象了:
3.客戶會替我測試軟件。
啊,令人害怕的「Netscape防線」。這家可憐的公司借著獨特的「測試」方法嚴重傷害了自 己的聲譽。他們的測試方法是:
1. 當程序員寫好一半時,不經任何測試就把軟件發行到網絡上。
2. 當程序員說完成時,不經任何測試就把軟件發行到網絡上。
3. 重復做六到七次。
4. 把其中某個版本稱為「最終版」
5. 每次當c|net上爆出一個丟臉的問題時就發行.01、.02、.03版。
這家公司是「廣泛beta」這個點子的先驅。意思是讓教百?萬人下載這些多蟲的未完成版本。 最初幾年幾乎所有Netscape使用者都在用某個搶鮮版或beta版。結果大多數人都認為 Netscape軟件的問題實在很多。雖然最終版通常問題都極少,可是Netscape己經讓多到離譜 的人用過多蟲的版本,所以大多數人對該軟件的普體印象都很差。
另外讓「客戶」來測試的重點在于讓他們找到問題然后由你來修正。不幸的是,Netscape 或任何其他地球上的公司都沒有人力,可以處理兩百萬客戶的問題回報并找出真正重要的 問題。當我要填報Netscape 2.0的問題時,問題回報網站一直當機,根本不讓我回報(不過 反正問題回報最后都會丟進黑洞)。可是Netscape并沒有學到教訓,現在6.0「搶鮮版」的 測試人員就在新聞組里抱怨,說問題回報網站還是沒辦法送出報告。那么多年了!還是老問 題!
不過我敢打賭,在這些多得要命的問題回報中,絕大多數都在講相同的5到10組很鍛顯的問 題。里面可能還埋有一兩個有意思又難查的問題,是某人千辛萬苦才成功送出的。不過反正 沒人會看這些報告,所以也就等于不見了。
這種測試型式最糟的一點,就是公司會得到非常差的印象。當Userland推出主力產品 Frontie「的第一個Windows版時,我去下載并開始照著教學操作。不幸的是Frontie「當了好 幾次。我完全照著教學上面的指令逐一照做,怎么樣都沒辦法執行兩分鐘以上。我覺得 Userland可能連最基本的測試都沒做,根本沒有確認教學是能動的。產品質量低落的印象讓 我有很長一段時間不再碰Frontier。
4.有資格可以勝任的人都不想做測試人員。
這是個很沈痛的理由。好的測試人員非常難找。測試人員和程序員一樣,頂尖高手和一般 水平的人相差一個量級。Juno有一個測試人員Jil l McFar lane,她找到的問題是其他四個人 合起來的三倍。我是真的算過,絕對沒有夸大其辭。她比普通測試人員的生產力好12倍。當 她離職時,我寫了封電子郵件給執行長說道:「我寧愿只有星期一和星期二讓Jill幫忙,也 好過讓QA團隊其他人全部一起測。」不幸的是,這么聰明的人大都容易對日復一日的測試 感覺厭煩,所以頂尖的測試人員通常只待三或四個月就會換工作。這個問題唯一的解法就 是面對然后想辦法處理。下面列出幾個建議:
把測試當作技術支持的下一個晉升工作。測試或許很沈悶,不過絕對比用電話處理憤怒的用 戶好,而且可能也是消除某些技術支持人員騷擾的方法。
允許測試人員上程序設計課程拓展職業生涯,并且鼓勵較聰明的測試人員,運用程序工具及 腳本語言開發自動化測試套件。這比不斷重復測試相同的對話盒要有趣多了。
要有頂尖測試人員經常流動的認知。積極的進行招募以保持穩定的人員流入。不要只因為暫 時滿額而停止招募,因為總會有下一波好景氣。
找尋「非傳統」的工作者:找聰明的青少年,大學里的小朋友還有退休人士來兼差。你可以 用兩三位頂尖全職人員再搭配一群趁暑假賺學費的Bronx Science(紐約一流高中)學生,建 立出一個效果驚人的測試部門。
雇用臨時人力。如果請10個臨時工進來拿你的軟件來玩個幾天,就會發現很多很多的問題。 里頭可能會找到兩三個測試技巧不錯,值得簽約轉成全職人員的人。要先有心理準備,里面 有些人可能做不了測試人員;這時只能請他回家再繼續找新人。這也正是臨時人力中介的功 用。
下面這種方法無法處理這個問題:
千萬不要對來工作的計算機科系學生打歪主意,說什么「所有人都要在QA部門磨練一陣子才 能去寫程序。」我看過太多例子了。程序員沒法子當個好的測試人員,而且還會因而損失好 的程序員,而這就更難找了。
終于到了,這是人們不雇用測試人員的頭號笨理由:
5.我請不起測試人員!
這是最笨而且也是最容易揭穿的理由。不管測試人員有多難找,還是比程序員要便宜,而 且便宜多了。另外如果不請測試人員,就得讓程序員自己測。再來如果你認為測試人員大量 増加不太好,就想想這件事的代價吧:年薪十萬美元的明星程序員受不了有人要他「在發 行前留幾個星期測一測」,而換去比較專業的公司。光是為找新程序員而付給獵人頭公司 就夠你一年請三個測試人員了。吝嗇請測試人員是如此的劃不來,我實在不懂為什么有這 么多人認不清。
- 第一部分 位與字節:編程實踐點滴
- 一、語言的選擇
- 二、深入底層
- 三、joel測試:改進代碼的12個步驟
- 四、每一位軟件開發人員必須、絕對要至少具備UNICODE 與字符集知識(沒有任何例外!)
- 五、輕松寫就功能規格說明書 - 第1節:為什么煩心?
- 六、輕松寫就功能規格說明書 - 第2節:什么是規格說明書?
- 七、輕松寫就功能規格說明書 - 第3節:但是……如何?
- 八、輕松寫就功能規格說明書 - 第4節:技巧
- 九、輕松制訂軟件進度表
- 十、每日連編是朋友
- 十一、難伺候的故障修復
- 十二、軟件開發中的5個世界
- 十三、稿紙原型開發
- 十四、不要被太空架構師所嚇倒
- 十五、開火與運動
- 十六、人員技能
- 十七、源于計算機學科的三個錯誤思想
- 十八、二元文化
- 十九、自動獲取用戶故障報表
- 第二部分 開發人員的管理
- 二十、面試游擊指南
- 二十一、重金激勵害多利少
- 二十、二不配備測試人員的五個首要(錯誤)原因
- 二十三、任務換人有害無益
- 二十四、絕不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序設計界的LordPalmerston
- 二十八、評測
- 第三部分 Joel對常態問題的遐想
- 二十九、RickChapman解讀愚昧
- 三十、在這個國家狗是干什么的? 我們有多么天真?
- 三十一、作為哼哈二將,只管去做事
- 三十二、兩個故事
- 三十三、巨無霸麥當勞與天才廚師JamieOliver
- 三十四、沒有什么像IT看起來那么簡單
- 三十五、提防非自主開發綜合癥
- 三十六、策略I:BEN&JERRY公司與AMAZON
- 三十七、策略II:雞與蛋問題
- 三十八、策略III:讓我回去!
- 三十九、策略IV:大件與80/20神話
- 四十、策略V:公開源代碼的經濟因素
- 四十一、墨菲法則肆掠的禮拜
- 四十二、微軟公司是如何敗北API之戰的
- 第四部分 對.NET稍多的評說
- 四十三、微軟精神失常了
- 四十四、我們的.NET對策
- 四十五、請問,我可以使用連接程序嗎