TDDBDD
Behavior Driven Development,行為驅動開發是一種敏捷軟件開發的技術,它鼓勵軟件項目中的開發者、QA和非技術人員或商業參與者之間的協作。
在了解Behavior Driven Development之前,先介紹Test-Driven Development(TDD)即測試驅動開發,它是一種測試先于編寫代碼的思想用于指導軟件開發。測試驅動開發是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。TDD的原理是在開發功能代碼之前,先編寫單元測試用例代碼,測試代碼確定需要編寫什么產品代碼。
它的工作流程如下所示:
TDD方法的一些特點:
- 有利于更加專注軟件設計;
- 清晰地了解軟件的需求;
- 很好的詮釋了代碼即文檔。
?
我眼中的測試
之前一直對于測試都是一個籠統的認知,覺得測試僅僅是一種驗證,類似于部分企業中一些比較省事的測試方法,通常在代碼寫好之后再實施測試工作,用于驗證developer的代碼是否符合需求。稍微了解TDD、BDD之后才發現,測試不僅僅是一種對于代碼的驗證,找出幾個bug或者一些諸如壓力測試、負載測試,更是一種約束,一種規范,是與項目需求息息相關,還需要溝通協調客戶、開發人員以及QA,從而幫助更加高效的完成軟件設計開發工作。
通過下面一幅圖就可以發現對于測試也有不同的層次和流程:
從圖中可以發現,最下面的是單元測試(白盒測試),主要用于測試開發人員編寫的代碼是否正確,這部分工作都是開發人員自己來做的。通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定函數的行為。再往上,就是BDD(灰盒測試、黑盒測試),主要用于測試代碼是否符合客戶的需求,這里的BDD更加側重于代碼的功能邏輯。
從左邊的范疇也可以看出,測試的范圍也是逐層擴大,從單元測試的類到BDD里面的服務、控制器等,再到最上層的模擬實際操作場景的Selenium(Selenium也是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。)對于包括UI界面的測試。之前自己有做過這樣的編碼測試工作,通過寫代碼,可以打開IE、FF等瀏覽器,模擬用戶點擊、填寫數據等操作,從而完成一整套的流程測試。整個測試從小到大,從函數、方法、類到功能模塊乃至系統有著一系列嚴謹的體系。
?
再說BDD
BDD是一種敏捷軟件開發的技術。它對TDD的理念進行了擴展,在TDD中側重點偏向開發,通過測試用例來規范約束開發者編寫出質量更高、bug更少的代碼。而BDD更加側重設計,其要求在設計測試用例的時候對系統進行定義,倡導使用通用的語言將系統的行為描述出來,將系統設計和測試用例結合起來,從而以此為驅動進行開發工作。
BDD的通用語言是一種近乎自然語言的描述軟件的形式。傳統的開發模式中,客戶很難從技術層面理解問題,開發人員很難從業務需求考慮問題,基于這種通用語言形式可以盡可能的避免客戶和開發者在溝通上的障礙,實現客戶和開發者同時定義系統的需求。避免了因為理解需求不充分而帶來的不必必要的工作量。
BDD描述的行為就像一個個的故事(Story),系統業務專家、開發者、測試人員一起合作,分析軟件的需求,然后將這些需求寫成一個個的故事。開發者負責填充這些故事的內容,測試者負責檢驗這些故事的結果。通常,會使用一個故事的模板來對故事進行描述
Story:
| 1 2 3 | As a 角色 I want 特征 so that 利益 |
As a標識出這個系統行為是為哪一個角色而定義的。
I want和so that則指明了該角色想做的事, 以及想達到的目的。
這三個斷句定義了這個系統行為的參與者、范圍。
?
同樣的一個Story,可能會有不同的場景。通過上面的模板描述了故事之后,再通過下面的模板對不同場景進行描述
Scenario:
| 1 2 3 4 5 | Given [上下文] ????And [更多的上下文] When [事件] Then [結果] ????And [其他結果] |
這些場景中的Given…When…Then…實際上就是設定該場景的狀態、適用的事件,以及場景的執行結果。
其實通過這樣的Story描述和場景設置,基本就完成了一個完整測試的定義。
?
BDD整個測試流程如圖所示:
?
常見的BDD框架:
- C – Cspec
- C++ – CppSpec, Spec-CPP
- .Net – NBehave, NSpecify, SpecFlow
- Groovy – GSpec, easyb, Cuke4Duke
- PHP – PHPSpec
- Python – Specipy
- Ruby – RSpec, Shoulda, Cucumber
與Java相關的BDD測試工具:
- JBehave – Java annotations based, Test frameworks agnostic
- Cuke4duke – Cucumber support for JVM
- JDave – RSpec (Ruby) inspired, Mojo 2 & Hamcrest based
- beanSpec – Java based
- easyb – Java based, Specifications written in Groovy
- instinct – BDD framework for Java, providing annotations for contexts. Inspired by Rspec
- BDoc - Extracts behaviour from unit tests
轉載于:https://www.cnblogs.com/SH-xuliang/p/7516091.html
總結
- 上一篇: mysql六:索引原理与慢查询优化
- 下一篇: Postfix邮件队列查看方法