本系列筆記將從測試兩年來的測試經驗,記錄乙個完整的基於敏捷流程的驗收測試全過程,分享在測試過程中的一些知識和經驗,以及自己的一些理念。總結自己,也希望對大家有益。
驗收測試驅動開發(atdd)和測試驅動開發(tdd)是完全不同的兩個概念。
tdd更偏重自動化case先行,而atdd更偏重於驗收細節、質量標準先行。
在了解atdd之前,先回顧下tdd:
極限程式設計的方法之一,從業務入手,以測試先行的方法來反向推動**的實現。那什麼是tdd呢?
簡單的說,就是每當需要新增乙個新功能,或修改現有功能時,我們首先思考這部分**期望達到的輸入與輸出,先把驗證該業務的單元測試用例寫出來,再去寫最簡單的實現**來通過該測試;不斷重複此過程直到完成整個功能。
注意:tdd是開發人員的責任。
典型的tdd開發步驟:
step 1
:分析並確定乙個目標測試場景
step 2
:新增乙個單元測試來驗證該測試場景的輸入輸出
step 3
:執行該測試,得到失敗的測試結果
step 4
:寫最簡單的功能**來通過該測試
step 5
:再次執行該測試,看到測試通過
step 6
:進行**重構,包括功能**和單元測試**
step 7
:重複以上步驟,直至開發完成
建議在tdd的開發遵循的最佳實踐:
1.簡化-保持測試用例盡可能的簡單,以驗證業務為首要目標
2.業務導向-針對每乙個需要驗證的業務場景進行測試,而不是對**的每乙個方法進行測試
3.隔離-每乙個測試類(testcase)都可以單獨執行,不依賴於其它任何測試;同樣很多測試類也可以一起執行,而不會互相干擾
4.重構-開發出來的單元測試和功能**都需要不斷重構,改進**的可讀性,可維護性,減少冗餘**等
5.測試列表-在開始開發之前,先列出所有需要的測試,並在開發中不斷維護該列表,避免遺忘一些必要的測試
6.反向工程-在某些開發環境中,如eclipse,可以使用ide所提供的反向工程能力從測試**自動生成必要的類,方法等
7.注釋-不需要另外單獨的文件,而是在測試類中對每個測試方法對應的業務場景,輸入和期望的輸出進行詳細的描述
tdd的好處:
1.提高**質量-測試先行,並達到足夠的覆蓋率,確保**都經過了測試
2.對系統進行描述-tdd產生的測試就是對系統的一套完整的說明文件,所有的業務,每乙個方法的使用在這裡都有描述。如果誰想深入了解你的系統,讓他去看測試:)
3.自信得重構- tdd能夠產生一組完備的測試套件,每當我們重構了**後,可以方便得通過執行已有的測試來確保新的改進沒有影響到**的邏輯和行為;同樣,當每次解決了缺陷後,可以通過執行已有的測試來確保其它功能沒有受影響,沒有引入新的缺陷。這讓團隊可以更加自信得去進行**重構
4.自動回歸測試- tdd產生的測試套件可以與自動化的持續程序環境相結合,部分實現回歸測試的自動化,大大提高回歸測試的頻率,同時減少所花費的時間
5.消除浪費- tdd有助於開發團隊避免產生冗餘的,沒有用的**;避免那些沒有任何人能看懂的不知所謂的**
6.減少debugging -通過tdd來進行程式設計,可以大大減少對**debugging的需要,節省時間
7.簡化設計-在概要設計的指導下,tdd能夠替代大部分甚至全部的詳細設計(實現類,方法級別的設計)
8.更加模組化-由於tdd需要開發人員將乙個功能分解為乙個個可以測試的更小單元,然後再集成為乙個整體。這樣的思維和開發模式將產生更小的,更清晰的,更加責任明確的類,更加松耦合的元件和清晰的介面
tdd的侷限性:
1. tdd產生的**質量取決於測試的質量,即不恰當,不正確的測試會產生錯誤的**;業務場景覆蓋不充分的測試會產生功能不完整的**;
2. tdd只適用於輸入輸出明確的開發專案,不適用於某些探索性的,輸出不確定的開發,比如密碼系統,人工智慧,安全等領域的研發;
3. tdd在某些環境下實施會有一些困難,比如關係型資料庫,非同步通訊等,需要一些額外的輔助工具。
最後,作為一種新的設計和程式設計方法,在專案中實施tdd對開發人員提出了一些新的挑戰:
*職責轉變-某些開發人員認為,他的工作就是實現功能,寫**;測試只是測試人員的事情,不在他的職責範圍內。這是錯誤的認識,完備高質量的單元測試也是開發人員的職責!
*思維轉變-很多開發人員拿到需求後,喜歡立刻就埋頭開始寫**實現。tdd要求測試為先,開發人員首先要思考的不再是功能如何實現,而是應該如何去進行驗證,並列出需要的測試場景。這是乙個大的逆向思維轉變。
敏捷開發 敏捷測試
敏捷測試的定義 首先敏捷測試是敏捷的一種,原有測試定義中通過執行被測系統發現問題,通過測試這種活動能夠提供對被測系統提供度量等概念還是適用的。在傳統的測試定義上,還需要新增 敏捷測試是遵循敏捷宣言的一種測試實踐 強調從客戶的角度,即使用系統的使用者的角度,來測試系統 重點關注持續迭代的測試新開發的功...
敏捷測試 傳統測試
敏捷測試 首先敏捷測試 agile testing 是測試的一種,敏捷測試的理念是,和編碼一樣,測試是開發的乙個關鍵部分。在敏捷中,測試被直接整合到軟體開發過程中,以便盡早 頻繁地發現bug。因此,測試人員可以在開發過程的每乙個節點上發現問題,從而使產品快速走向發布。敏捷測試的特點 傳統測試 傳統測...
敏捷開發與敏捷測試
敏捷開發 1.敏捷型方法是 適配性 而非 預設性 重型方法試圖對乙個軟體開發專案在很長的時間跨度內作出詳細的計畫,然後依計畫進行開發。這類方法在計畫制定完成後拒絕變化。而敏捷型方法則歡迎變化。其實,它們的目的就是成為適應變化的過程,甚至能允許改變自身來適應變化。2.敏捷型方法是 面向人 的 peop...