複製鏈接
請複製以下鏈接發送給好友

行為驅動開發

鎖定
行為驅動開發(Behavior-Driven Development)(簡寫BDD),在軟件工程中,BDD是一種敏捷軟件開發技術
中文名
行為驅動開發
外文名
Behavior-Driven Development
簡    寫
BDD
性    質
敏捷軟件開發的技術

行為驅動開發簡介

行為驅動開發(BDD)是測試驅動開發的延伸,開發使用簡單的,特定於領域的腳本語言。這些DSL將結構化自然語言語句轉換為可執行測試。結果是與給定功能的驗收標準以及用於驗證該功能的測試之間的關係更密切。因此,它一般是測試驅動開發(TDD)測試的自然延伸。
BDD 作為一種設計方法,可以有效的改善設計,並在系統的演化過程中為團隊指明前進方向。
行為驅動開發的根基是一種“通用語言”。這種通用語言同時被客户和開發者用來定義系統的行為。由於客户和開發者使用同一種“語言”來描述同一個系統,可以最大程度避免表達不一致帶來的問題。表達不一致是軟件開發中最常見的問題,由此造成的結果就是開發人員最終做出來的東西就不是客户期望的。使用通用語言,客户和開發者可以一起定義出系統的行為,從而做出符合客户需求的設計。但如果光有設計,而沒有驗證的手段,就無法檢驗我們的實現是不是符合設計。所以 BDD還是要和測試結合在一起,用系統行為的定義來驗證實現代碼。
雖然行為驅動開發是測試驅動開發的進化,但關注的核心是設計。行為驅動開發中,定義系統的行為是主要工作,而對系統行為的描述則變成了測試標準。在行為驅動開發中,我們需要使用通用語言來定義系統行為。而通用語言,實際上是一個最小化的詞彙表。我們使用這些詞彙來書寫故事。選入詞彙表的詞彙必須具有準確無誤的表達能力和一致的含義。例如“系統”這個詞就不符合要求,因為在不同的語境(又稱為上下文 Context)中,“系統”一詞具有不同的含義。而“自動提款機”則明確標識了一個沒有歧義的事物。 [1] 

行為驅動開發歷史

Dan North創建了一個BDD框架,JBehave,然後出現了Ruby的BDD框架,稱為RBehave,後來被集成到RSpec項目中。他還與David Chelimsky,AslakHellesøy等人合作開發了RSpec,並編寫了一本RSpec書:《RSpec,Cucumber等的行為驅動開發》。RSpec中的第一個基於故事的框架後來由主要由Aslak Hellesøy開發的Cucumber取代。Cucumber已成為BDD的首選框架。CukeTest是一款以Cucumber框架為基礎的,基於Windows的行為驅動自動化測試的開發軟件。 [1] 

行為驅動開發BDD 實踐

BDD的做法包括:
  • 確立不同利益相關者要實現的遠景目標
  • 使用特性注入方法繪製出達到這些目標所需要的特性
  • 通過由外及內的軟件開發方法,把涉及到的利益相關者融入到實現的過程中
  • 使用例子來描述應用程序的行為或代碼的每個單元
  • 通過自動運行這些例子,提供快速反饋,進行迴歸測試
  • 使用“應當(should)”來描述軟件的行為,以幫助闡明代碼的職責,以及回答對該軟件的功能性的質疑
  • 使用“確保(ensure)”來描述軟件的職責,以把代碼本身的效用與其他單元(element)代碼帶來的邊際效用中區分出來。
  • 使用mock作為還未編寫的相關代碼模塊的替身 [1] 

行為驅動開發特性注入

一個公司可能有多個會帶來商業利益的不同願景,通常包括盈利、省錢或保護錢。一旦某個願景被開發小組確定為當前條件下的最佳願景,他們將需要更多的幫助來成功實現這個遠景。
然後確定該願景的主要利益相關者,會帶入其他的利益相關者。每個相關者要定義為了實現該願景他們需要完成的目標。例如,法務部門可能要求某些監管要得到滿足。市場營銷負責人可能要參加將使用該軟件的用户的社區。安全專家需要確保該軟件不會受到SQL注入的攻擊。
通過這些目標,會定義出要實現這些目標所需要的大概的題目(theme)或者特性集合。例如,“允許用户排序貢獻值”或“交易審計”。
從這些主題,可以得到用户功能以及用户界面的第一批細節。 [2] 

行為驅動開發由外及內

BDD是由商業價值--在應用開發中自然增長的商業利益--所驅動的。要認清這個利益的唯一方式,是通過用户接口(通常--但並不總是--圖形界面,GUI)理解應用程序。
同樣,每一段代碼,從用户界面開始,可以視作它使用的其他模塊代碼的利益相關者。每個代碼單元(element)通過與其他單元合作,提供部分行為,從而實現整個應用程序的行為。 [1] 
參考資料
  • 1.    Mabey, Ben. "Imperative vs. Declarative Scenarios in user stories". Archived from the original on 3 June 2010. Retrieved 19 May 2008.
  • 2.    Tharayil, Ranjith (15 February 2016). "Behavior-Driven Development: Simplifying the Complex Problem Space". SolutionsIQ. Retrieved 15 February 2018.