復用測試資產 - 傳承測試經驗和技能
2018年6月8日,作為第一屆TMMi中國峯會圓桌會議的嘉賓,我參與討論了「如何更好的復用測試資產」這個測試主題,其中分享了我對該話題的一些想法和經驗。現在通過文章的方式將當時講解的內容進行了一些歸納和總結,供大家參考和探討。
測試資產不僅僅包括測試過程中輸出的各個測試文檔,同時包括測試團隊積累的測試經驗、技能和思維等。測試工作中經常會出現下面的場景:你作為測試人員工作幾年之後,在測試經驗、技能和能力方面非常出色,有可能就會開始你的測試管理職位;或者,隨著自己技能和能力的不斷增加,在有更好機會出現時離開當前公司;此時,假如團隊內沒有很好的測試資產復用要求,你這麼多年在測試團隊內積累的經驗和技能等,就會隨著你職位的改變或者跳槽而出現中斷,甚至幾乎沒有任何傳承。因此,測試資產復用對於測試團隊的經驗傳承和持續改進是不可或缺的。 測試資產的復用,套用結構化思維的精髓,同樣是有框架的,其核心是分層次的,即測試過程中必須根據不同目的,對不同層次的測試資產進行復用。主要包括:- 文檔復用
- 經驗復用
- 思維復用
測試貫穿於整個開發生命週期,對於較為正式的測試過程,其每個測試階段都會輸出相應的文檔,這就是最基礎的測試資產。我們以ISTQB的測試過程為例,其生命週期由5個階段組成,分別是:
- 測試計劃與監控
- 測試分析與設計
- 測試實現與執行
- 測試出口準則評估與報告
- 測試結束活動
二、經驗復用
測試人員的優秀經驗是開展成功測試的重要組成部分,測試過程中很多缺陷的發現不是在驗證需求是否實現的過程,而是測試人員在相對獨立自主開展探索性測試中發現的。此過程中測試人員假如能構建結構化的測試經驗資產,就可以在測試團隊內有效分享測試思路和經驗,同時可以減少其他測試人員測試相近類型被測對象時走彎路,或者重複測試工作。測試人員的經驗總結,屬於測試團隊可以利用的第二層次資產。有了該層次的測試資產,測試團隊的經驗相對不會隨著測試人員的流動而消失。下面是我在測試工作中實踐的兩個思路:- 全局視角:DTO(Data Test Overview),針對不同項目或者產品中共性的一些功能,例如:通訊產品中通常都會有DHCP功能以獲取IP地址。此時,會針對DHCP功能形成DTO文件。
- 責任人:完整經歷過該功能測試分析、設計和執行的測試人員,針對該功能的測試人員有豐富的測試經驗;
- 測試分析與設計:以思維導圖的方式羅列該功能的主要測試點,而非詳細的測試用例。基於結構化思維和發散性思維構建該功能測試點的框架;
- 測試實現與執行:該功能的測試點羅列更偏向腳本化思路,而測試執行過程中,基於腳本化的測試點基礎之上,結合探索性測試的發散特點,實現腳本化測試和探索性測試的平衡;
- 優點:結構化與發散性思維的平衡,更方便維護和測試思維的發散;
- 缺點:測試點的顆粒度選擇問題,在測試團隊內部不容易統一;
- 強制無效輸出:年月日的測試;
- 文件保存:文件中出現「」字元;
- 強制恢復默認值:全局變數和局部變數之間是否能恢復到默認值;
- 重複創建和刪除條目:重複Enable和Disable,導致內存泄漏,業務不通;
- 全局變數和局部變數的關係:IGMP總開關和埠開關之間的切換;
- 測試技術:例如等價類邊界值分析;
三、思維復用
除了前面提到的文檔復用和測試經驗復用之外,更重要的是將測試過程中應用的結構化思維、發散性思維和可視化思維形成資產,在測試團隊內共享和傳承。相對而言,測試思維在測試團隊內的復用是更困難的,但是對測試團隊能力的提升也是最有效的。即使大家面對的是同樣的文檔、經驗和測試對象,由於測試人員之間思維方式不同,測試得到的結果都會是截然不同。下面是測試用例為例,說明測試思維在測試工作中的作用。測試用例是測試分析與設計階段的重要輸出,其質量直接影響了後續的測試執行效率和有效性。結構化思維的應用有助於提升測試分析與設計活動的質量,其核心是構建框架,把表象雜亂複雜的測試點/測試用例變得結構而有序。「問題驅動的軟體測試設計」課程體現的就是結構化思維在其中的應用過程 - 自上而下的結構化構建(可以參考下面的框架圖):- 選擇框架:根據測試過程中經常面臨的4大問題入手,搭建了有4個維度組成的框架,分別是基於質量模型、基於領域知識、基於規格說明、重點選擇和測試執行。結構化思維中其屬於搭架子的過程,常見的架子除了基於行業背景知識外,還有時間架、空間架和三角架等;
- 分層/分類:對框架中的每個維度或架子進行分層和分類。例如:針對領域知識,包含了功能交互模型和用戶場景模型等。
- 繼續細分:根據對測試目標和測試人員能力等因素的考慮,確定測試點的顆粒度,然後根據顆粒度要求繼續對每個維度/架子進行不斷詳細化,直到滿足要求為止;
- 檢查框架:分層/分類和細化過程,需要不斷檢查每個層次之間是否滿足MECE原則(相互獨立、完全窮盡,簡單地講就是各個分類之間不重疊不遺漏);
推薦閱讀: