「精準的定義不是預防爭論,就是終結爭論。」——神學家艾蒙斯(Nathanael Emmons)

測試之所以常背負惡名,往往源於「它到底是什麼、該做什麼」的混淆。弔詭的是,管理者若有大量開發經驗,這份釐清反而可能更困難——因為他過去一個人包辦所有角色時,從不需要區分自己當下在做哪件事。

一個人時,七種活動渾然一體#

本書以專案經理珍(Jane)的職涯為例。早年她在小公司身兼數職,一天之內流暢地切換於七種不同活動,而且毫無違和:

  • 探索性測試(testing for discovery):對受測軟體執行有潛力發現新資訊的動作。例如珍逐一跑情境,確認昨天的改動有按預期運作、且沒影響其他功能
  • 釘定(pinpointing):隔離 bug 發生的條件。例如珍確認某 bug 只在「清除選填欄位」時出現
  • 定位(locating):在程式碼中找到 bug 的位置以便修復。例如珍設中斷點、逐步追蹤更新資料庫的程式碼
  • 判定重要性(determining significance):權衡「修」與「不修」的風險。例如珍評估這個罕見 bug 值不值得冒著改動五十行程式碼的風險去修
  • 修復(repairing):修改程式碼以移除問題
  • 疑難排解(troubleshooting):排除或繞過障礙,讓軟體做它該做的事。例如珍在電話中引導客戶 Sherman 改用另一套還原流程
  • 以測試來學習(testing to learn):不是找 bug,而是摸索某套工具如何運作,類似 hacking、逆向工程或「玩」

只要珍持續為客戶服務,她當下在做七者中的哪一件其實無關緊要。問題出在組織變大之後。

組織變大,混淆就引發衝突#

當珍轉到大公司、團隊分工後,同樣這些活動的混淆就釀成衝突。書中以測試人員史丹(Stan)的一天為例:

  • 史丹回報了 bug 25073,開發者蘇妮(Suni)卻把它標為「需要更多資訊」,要求史丹跑遍各種使用者、備份與顯示選項去釘定確切條件
  • 史丹照做,結果花掉整個上午,沒能在中午前交出主管肯(Ken)要的測試結果
  • 肯認為「你有可重現的案例、你回報了,你的工作就完成了」,釘定不是測試人員的責任
  • 史丹依肯的指示拒絕後,反而四面不是人:蘇妮覺得史丹不幫忙、肯覺得時間被浪費、珍覺得排程被打亂

問題的根源在於:組織裡沒有人對「測試人員該負責釘定到什麼程度」達成共識,於是衝突無可避免。

不要把一切都塞進「測試」這個大標籤#

身為綜觀全局的專案經理,珍能終結這種混淆——關鍵是不要把這些活動全部混為一團、貼上「測試」這個大標籤

混為一團唯一的效果,就是讓測試流程看起來「永遠做不完」。實際偵測失敗(真正的測試)只佔了「測試」這個籠統標籤下的一小部分時間,而這種模糊讓準確估算與排程變得不可能。

由於珍的職責橫跨測試、開發與支援三個團隊,她必須釐清哪些人對哪些任務負主要責任。

時間限制是管理者的心法(但要視情況調整)#

一個有助於釐清「誰花多久做什麼」的捷思法(heuristic)很簡單:

專案上的任何人,都不該草率地浪費專案上任何人的時間。

珍據此教導測試人員:調查一個 bug 不超過十分鐘就要通知程式設計師。對史丹來說很隱晦的問題,對寫那段程式的人可能一目了然。但這是捷思法,不是死規則

  • 若程式設計師在五個時區之外,史丹可以調查久一點、把 bug 報告批次送出
  • 有些測試團隊設專職的 bug 調查員,處理需要多花幾分鐘才能鎖定的問題
  • 這個原則也適用於「別浪費時間做太細的區分」——與其爭論某活動算不算「釘定」,不如測試者與開發者一起動手把事情做完

小結#

許多需要不同技能的任務常被混在「測試」這個統稱底下。這種混為一團會扭曲規劃、估算與工作分派,對整個專案造成傷害。

常見錯誤#

以下是混淆測試與除錯時最常見的失誤。

  1. 以為「定位錯誤」可以排程:要知道定位 bug 需要多久,唯一辦法是先知道它們在哪——但若知道,就根本不需要定位了
  2. 沒考慮任務切換的損耗:切換有益,但也有成本。若你在約五件任務間切換,可能什麼都完成不了
  3. 把測試當成可被任意理由打斷的低優先任務:測試若要做得可靠,需要專注
  4. 要求測試人員釘定每一個失敗:他們可以協助,但這終究是開發者的責任
  5. 要求測試人員定位每一個錯誤:這完全是開發者的工作,因為他們有所需的技能
  6. 修復後不重測:匆忙的修復極可能讓事情更糟;若你不趕,何不重測?
  7. 忽略交叉關聯:程式設計師的行為常驅動測試需求,若他們交付遲了或品質不佳,你就得調整測試預期
  8. 對可測試性(testability)關注不足:設計成易於測試的程式碼,能大幅降低各方面的測試時間與心力
  9. 堅持所有 bug 都必須「可重現」:間歇性 bug 需要積極追查,而非拿來當延後測試或修復的藉口
  10. 把測試與「建立並執行測試案例」混為一談:測試人員大量的工作無法被框進某個可辨識的測試案例,不如改以「測試活動」來思考
  11. 要求公司徹底改造流程:即使你想提升測試人員受尊重的程度,粗魯的革命姿態也改變不了環境,不如以邀請討論的方式與主管溝通