作為一個由技術支援工程師和 QA 轉任 Developer 的資訊從業者, 我從很早就認識到一件殘酷的事實, 那就是測試是個苦差事 - 至少比多數軟體主管和部份軟體開發者所以為的還要辛苦。我不想倚老賣老, 但是我發現很多沒有真正從事過測試工作的開發者, 好像並沒有真正思考過測試工作的難度。在他們心中, 如果談到測試, 雖然會理所當然的認為一定要做測試, 但是真正分配來做測試的人, 遠比所需要的少。
測試到底是怎麼一回事? 又應該如何做才算適當?
前言
當我在某國外軟體公司擔任技術支援 (Technical Support) 工程師時, 有一天, 我接到一通客服電話, 客戶跟我抱怨說我們公司的傳真軟體跟聲霸卡驅動程式衝突, 問我怎麼解決。
我一時之間簡直不相信我的耳朵。傳真軟體是負責傳真的, 嚴格地說, 它根本是一個印表機驅動程式, 只不過它驅動的是經由 RS-232 連接到電腦的數據機 (Modem) 而不是真的印表機。它無論如何都不應該跟音效卡驅動程式衝突的。
不過, 既然客戶已經斬釘截鐵的這麼說了, 我就只好依照標準程序到公司的 Helpdesk 尋求支援。搜尋聲霸卡 (我當然是使用英文輸入了 - 如果你想挑我毛病的話), 沒有! 搜尋音效卡, 沒有! 寫信去問總公司的二線客服, 沒有! 直接打越洋電話去問, 通通沒有! 公司上上下下, 沒人遇過這種問題。
我正愁不知道怎麼回答客戶時, 他又打電話來了。而且, 這次的問題更妙了! 「為什麼只有聲霸卡的中文驅動程式出問題?」他試了英文版驅動程式, 居然就沒問題了!
本來, 遇上這種令人毫無頭緒的問題, 已經叫我傷透腦筋了! 他現在居然來問我為何聲霸卡的中文驅動程式會出問題而英文版不會出問題!? 照理說, 既然他自己證明我們的產品跟英文版的聲霸卡驅動程式沒問題, 很明顯地就是聲霸卡的中文驅動程式在中文化的過程中改壞了嘛! 他不去問 Creative Lab, 怎麼來問我呢?
更糟糕的是, 他隔天居然找上門來了! 他自稱是美國來的律師 (attorney - 對了, 他是一個只會講洋文的洋人), 如果我不給他一個交待的話, 他要告我!
什麼? 我就算英文再不好, 也能很清楚地聽見他不是說要告公司, 而是要告我 ("I will sue you")! 我到今天都還記得我那天心裡在 OS 什麼。
還好我適時發揮了 EQ 和小聰明; 我試著對他曉以大義, 要他改用聲霸卡的英文版驅動程式 (哇咧! 反正你自己是美國人, 我真不懂你幹嘛堅持要裝中文版驅動程式), 然後又塞了一片防毒軟體試用版和一個小禮物 (這東西在公司堆滿了一整個倉庫, 逢人就送), 居然就把他逗得眉開眼笑, 也忘記說過要告我了。
這件事就這樣圓滿解決了; 我從此再也沒聽過我們的任何軟體跟聲霸卡又結下什麼樑子。但是, 這件事仍然在我心裡留下很長的陰影。
其實, 並不是因為我曾經被槍指著頭... 呃, 我是說曾經被人威脅說要告我, 而是因為我體認到, 一個軟體的穩定度, 是多麼容易被許多看似無關的週邊因素所影響。
誠實的說, 這個故事裡的那個傳真軟體, 本身並不是個乖寶寶。我只是沒聽過它跟音效卡有過節而已; 事實上, 它自己的大大小小的問題簡直是多如牛毛。
然而, 在那個時代, 如果一個軟體出了問題, 沒有人搞得清楚到底是那個軟體的問題, 還是作業系統的問題, 或者是任何其它軟體的問題。而身為一個防毒軟體公司的技術客服, 我也總是懷疑什麼問題都與潛伏於系統中的病毒脫不了關係。
為了迅速解決客戶的問題, 我練就了一身遇招拆招的絕技。其實說穿了一點都不值錢, 就是一個字: Isolation 而已。
面對棘手的問題, 必須根據經驗, 立刻把問題分類為幾個方向, 例如操作方式正不正確、系統是乾淨還是複雜、正版還是盜版、有沒有裝防毒軟體(如果有, 裝了幾套)、有沒有安裝很多套 TrueType 字型等等。我記得那時候我有辦法在問客戶第三個問題時, 就能判斷出解決的辦法, 而且準確率可以到達 90% 以上。我如果辦不到這一點, 客戶的電話就會泛濫到 Sales 那邊, 然後我就吃不完兜著走。
我這套自創的模式在今天已經沒什麼用處了。因為隨著作業系統的進化, 以前會發生的問題, 大概有七到八成, 在今天不會發生。
但是把複雜問題 isolate 成不同的區塊, 使用 divide and conquer 的技巧來解決, 倒是一個還算不錯的習慣。這個概念一直延續到我擔任 QA 和開發者之後, 仍然很受用。
測試難在哪裡?
或許是因為我從技術客服轉任 QA 的關係, 我對軟體的相容性總是充滿了疑慮 (就像曾經被槍指著頭的感覺)。然而, 當我真正進行測試的規劃和實作之後, 我又深陷其複雜難行的一面。
以下我就不提陳年往事了。但就以今天的現狀來講, 如果你要測試一套防毒軟體的話, 你可以算算有多少種作業系統需要測試? 光談 PC 好了, 包括 X86 和 X64, 最好要準備八個系統。
接著, 你要不要搭配防火牆軟體一起測試? 反間諜軟體? IPS? IDS? 以上還分軟體和硬體, 還有版本。排列組合之後, 算少一點, 也算它八套好了。
再接下來, 你要不要搭配自家的軟體一起測試? 別以為這個想法很可笑! 事實上, 如果你家的防毒軟體竟然跟自家某個軟體打架了, 貴公司不馬上變成業界笑柄才怪! 那麼, 請問貴公司有多少產品? 多少版本? 好吧, 排列組合之後, 也算它八套好了。
到這裡為止, 我都只算到重要的測試而已; 像我在第一個例子所描述的像張飛打岳飛那種神來一筆的不相干軟體的相容性測試, 都沒有提到。但即便如此, 你的測試環境, 已經有 8 X 8 X 8 = 512 個了。
在這 512 個測試環境中, 你有測到像「在 Windows 7 Ultimate Beta 版更新到 Windows 7 Professional 版, 搭配 Cisco XXX (IDS 預設為開啟), 且已安裝本公司 YYY 系統 Z.ZZ Trial 版而且已過試用期」的這種環境嗎?
不要以為這很好笑。如果你當過技術客服的話, 你或許就能體會那就是技術客服每天都可能會面對的問題, 而你們的 QA 根本沒有沒有測試過這種環境。
正因為你沒有做這樣的測試, 未來有一天, 你們公司的客服就被會被客戶拿槍指著頭 (好吧我又誇大了)...
還有更難的嗎?
喂! 老兄! 我在上面只講到相容性測試耶! 我提到單元測試、整合測試、接受度測試、UI 測試... 了嗎?
以上各種測試, 如果再搭配上邊界測試、分支測試、迴圈測試... 隨便都可以算出幾百萬甚至上千億的天文數字。
所以, 我所謂的測試很難, 指的就是所謂的 Exhaustive Testing is Impossible (請參考「程式內的防呆之道」) 的意思嗎?
並不是。
測試之所以難, 不在測試的不可能完整, 而在於「QA 如何在有限的資源下達成合理的測試」。
這句話在某些人眼中, 簡直像個廢話一樣。他可能會問道「什麼叫做有限? 什麼叫做合理?」。
是啊! 所以我說它難嘛! 我並沒有說這是簡單的事情! 所以, 還有人覺得測試是簡單的事嗎?
測試的本質和目的又是什麼?
我之所以要寫這篇文章, 是因為我看到許多開發者 (尤其是主管) 把測試當作開發過程中的討厭的附屬品 (講難聽點, 就是擦屁股的)。
其實, 測試的本質就是保障產品品質。因此, 開發主管最應忌諱的是開發人員和測試人員之間的不對等。身為主管, 你必需把 QA 和 Developer 放在天秤的兩端, 而且應該力求平衡, 熟輕熟重都不應該。如果 QA 在團隊中屈於守勢或者劣勢, 這個團隊的產品就不值得信賴。
QA 必須有自己的主管, 最好每個專案都由他來指派 Lead, 再由 Lead 來製訂 QA Plan 並組織測試團隊。QA Lead 最好能找對產品最熟悉的人來擔任, 由其負責測試方法和時程的安排。QA 主管應該和 QA Lead、開發主管、專案主管和客服主管一起製訂 Risk Assessment, 再根據它來決定應該進行哪些測試。如此, 表示大家都同意什麼才是最重要的, 而 QA 也才知道應該如何從最重要的測試做起。
測試的目的並不在找到所有的問題, 而是設法做完大家所共同同意的最重要的測試。測試也不是一次性工作; 產品上市之後, 雖然測試工作暫時告一段落, 卻不代表測試的工作結束。QA 必須確保他們能夠隨時把做過的測試重新翻出來完整的重做一次, 所以所有記錄都應該保留。
在某種程度上, 來自客服和其他單位 (也包括客戶 - 不管經由什麼管道) 的意見反應, 都應該同時納入 QA 的體系之下, 如此 QA 才能適當的調整產品品質的方向。雖然一般而言客服並不隸屬於開發團隊, 但是講究品質的公司, 最好也能把客服的發言權提昇到與 QA 和 Developer 相同的層級。
做為一個基礎的測試人員~要殺出一條有尊嚴的路~真難
回覆刪除好文一篇,受教了。
回覆刪除