基本概念
敏捷方法
敏捷方法,或敏捷開發(模式),是一種針對需求會快速變化的項目的開發方法(模式),項目主要是指軟體工程 。
敏捷方法的主要內容是,所有跟當前產品開發有關的人員——商業人員、程式設計師、測試員、分析師等等——組成一個團隊共同決定產品開發的走向,這是一種面向產品的開發模式 。
Scrum
Scrum是敏捷方法的一種,是一種疊代式增量軟體開發方法,在1990年代由Ken Schwaber和Jeff Sutherland開發,通過提供一套簡單而嚴格的規則和對規則外的情況的靈活適應完成項目的開發過程。除了Scrum外,比較知名的敏捷方法還有XP極限編程、Crystal、DSDM、FDD等,這裡不再一一介紹。
自動化金字塔
自動化金字塔是對一種自動化測試過程的金字塔形策略結構的稱呼。
在軟體產品的測試上,為了能夠達到高效率、高質量、反饋性好、解放人力的效果,需要引入自動化測試技術。為了對自動化測試的測試層次提供引導方向,人們總結出了自動化金字塔結構的測試層次。
結構
原始結構:三層結構
最初的金字塔結構被邁克科恩在2009年的著作 Succeeding with Agile: Software Development using Scrum (《Scrum敏捷軟體開發》)中提到,在這本書中,自動化測試金字塔被定義為一種三層的金字塔形結構,如下圖所示 。
在最初的三層金字塔中,最下層是單元測試,單元測試是自動化測試策略穩固的根基,因此也是金字塔結構的最底層;最上層是用戶界面,通常用戶界面是脆弱的,測試和修改的經濟成本和時間成本較高;中間服務層是為了過渡用戶界面和程式單元而設計的,認為所有應用程式都由各種服務組成,服務是指實現某一具體功能的程式集合,服務通過對輸入進行回響而體現。通過對服務進行測試,而不是對用戶界面進行測試,可以極大縮短時間和成本。
需要說明的一點是,有的地方在最底層之上增加了一層組件層(Component),一般可以認為單元層和組件層在同一層。
補充:三層加帽結構
在Lisa Grispin的 Agile Testing(《敏捷測試》)一書中,對自動化金字塔原始的三層結構進行了補充,增加了手工測試的“帽子”結構,如下圖所示 。
在這種結構中,認為無論自動化測試的效果有多好,總是需要一些人工測試的成分,如探索式測試或用戶滿意度測試等,所以以雲狀結構添加了人工測試在金字塔的頂端。
替換:探索式測試替代人工測試
隨著敏捷測試的不斷推進,有一種說法認為可以將雲狀結構內容從人工測試換為探索式測試(Exploratory Test),這裡不再附圖,主體結構形式和三層加帽結構一致。
反模式
自動化金字塔的解讀
對自動化測試金字塔結構的解讀可以分為以下幾個方面:
越下層投入應當越多,這是金字塔結構主要提出的觀點,認為單元測試的穩定性和投入保證了產品質量;
越下層效率會越高,因為軟體的漏洞最終是落在具體的程式代碼上的,所以底層的測試效率是最容易發現和修改錯誤(BUG)的;
越下層成本會越低,因為低層代碼測試進行的最早,此時發現錯誤修改起來較為容易,牽連的其他內容也很少,越向上再發現問題往往需要修改的代碼量會成倍增多,所以說下層測試和修改的各項成本都是相對低的;
越下層實現專業性要求越高,雖然底層的直接修改是容易的,但是這是基於擁有一個經驗豐富的程式設計師或測試員的前提下,高度的專業性意味著人才的需求和人力成本的提高。
1.越下層投入應當越多,這是金字塔結構主要提出的觀點,認為單元測試的穩定性和投入保證了產品質量;
2.越下層效率會越高,因為軟體的漏洞最終是落在具體的程式代碼上的,所以底層的測試效率是最容易發現和修改錯誤(BUG)的;
3.越下層成本會越低,因為低層代碼測試進行的最早,此時發現錯誤修改起來較為容易,牽連的其他內容也很少,越向上再發現問題往往需要修改的代碼量會成倍增多,所以說下層測試和修改的各項成本都是相對低的;
4.越下層實現專業性要求越高,雖然底層的直接修改是容易的,但是這是基於擁有一個經驗豐富的程式設計師或測試員的前提下,高度的專業性意味著人才的需求和人力成本的提高。
反模式
在很多團隊中都缺乏穩定的單元測試人員,或單元測試人員的經驗不足,這導致發展一個穩定的單元測試根基並不是一件容易實現的事情,於是有人提出了金字塔結構的反模式。
如2012年Alister Scott提出的蛋筒冰激凌模式,就是將金字塔中用戶界面和單元兩個結構所占比重進行了對調,並且極大增加了手工調試的比重。這反映出了團隊在自動化測試能力上的欠缺和投入不足。這種模式是缺乏完善產品質量保證監督體系的團隊常採用的模式,從用戶的需求入手,回溯到單元實現上。這樣的後果是產品質量得不到保證,且代碼的可讀性、可維護性、可修改性差。
此外還有紙杯蛋糕模式等,在此不做介紹。