成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文講清楚什么是行為驅動開發

開發 開發工具 測試
行為驅動開發(Behavior-Driven Development, BDD)的概念來自于測試驅動開發,強調使用DSL(Domain Specific Language,領域特定語言)描述用戶行為,定義業務需求,是需求分析人員、開發人員與測試人員進行溝通的有效方法。

行為驅動開發(Behavior-Driven Development, BDD)的概念來自于測試驅動開發,強調使用DSL(Domain Specific Language,領域特定語言)描述用戶行為,定義業務需求,是需求分析人員、開發人員與測試人員進行溝通的有效方法。DSL是一種編碼實現,相比自然語言更加精確,又能以符合領域概念的形式滿足所謂“活文檔(Living Document)”的要求。可以說,行為驅動開發將編碼實現與業務行為描述***地結合起來,走出了一條業務分析人員、開發人員與測試人員都能接受的中庸之道。

行為驅動開發  BDD

行為驅動開發的核心在于“行為”。當業務需求被劃分為不同的業務場景,并以“Given-When-Then”的形式描述出來時,就形成了一種范式化的領域建模規約。編寫領域特定語言的過程,其實就是不斷發現領域概念的過程。因此,采用BDD進行開發,最重要的產出不是可以自動運行的驗收測試,而是它提供了團隊交流的平臺,并在其約束之下完成了領域建模。由于團隊的不同角色都參與了這個過程,就保證了領域模型的一致性與準確性。

在進行行為驅動開發時,需要避免兩種錯誤的傾向:

  • 從UI操作去表現業務行為
  • 描述技術實現而非業務需求

例如,我們要編寫“發送郵件”這個業務場景,可能會寫成這樣:

  1. Scenario: send email 
  2.  
  3. Given a user "James" with password "123456" 
  4. And I sign in 
  5. And I fill in "mike@dddpractice.com" in "to" textbox  
  6. And fill in "test email" in "subject" textbox 
  7. And fill in "This is a test email" in "body" textarea 
  8.  
  9. When I click the "send email" button 
  10.  
  11. Then the email should be sent sucessfully 
  12. And shown with message "the email is sent sucessfully" 

該業務場景描寫的不是業務行為,而是用戶通過UI進行交互的操作流程。這種方式實則是讓用戶界面捆綁了你對領域行為的認知。準確地說,這種UI交互操作并非業務行為,例如上述場景中提到的button與textbox控件,與發送郵件的功能并沒有關系。或許換一個UI設計,使用的控件又完全不同了。

那么換成這樣的寫法呢?

  1. Scenario: send email 
  2.  
  3. Given a user "James" with password "123456" 
  4. And I sign in after OAuth authentification 
  5. And I fill in "mike@dddpractice.com" as receiver 
  6. And "test email" as subject 
  7. And "This is a test email" as email body 
  8.  
  9. When I send the email 
  10.  
  11. Then it should connect smtp server 
  12. And all messages should be composed to email 
  13. And a composed email should be sent to receiver via smtp protocal 

該場景的編寫暴露了不必要的技術細節,如連接到smtp服務器、消息組合為郵件、郵件通過smtp協議發送等。對于BDD而言,場景應該關注于做什么(what),而不是怎么做(how)。如果在業務分析過程中,糾纏于技術細節,就可能導致我們忽略了業務價值。在業務建模階段,業務才是重心,不能舍本逐末。

那么,該怎么寫?當我們使用DSL編寫業務場景時,不要考慮任何UI操作,甚至需要拋開業已設計好的UI原型,也不要考慮任何技術細節。在編寫好業務場景之后,可以驗證:如果我們更換了UI設計,調整了UI布局,是否需要修改業務場景?同理,如果我們改變了技術實現方案,是否需要修改業務場景?如下場景采用業務行為的形式編寫:

  1. Scenario: send email 
  2.  
  3. Given a user "James" with password "123456" 
  4. And I sign in 
  5. And I fill in a subject with "test email" 
  6. And a body with "This is a test email" 
  7.  
  8. When I send the email to "Mike" with address "mike@dddpractice.com" 
  9.  
  10. Then the email should be sent sucessfully 

我們要將DSL描述的場景視為一種可讀的需求規格(Specification),通過它準確地表現領域知識,就可以幫助我們提煉出隱含的領域概念。例如:

  1. Scenario: validate the given date for reporting period  
  2.  
  3. Given the reporting period as prior 13 month to report month 
  4. And the reporting month is "April 2018" 
  5. When user choose the "April 2017" 
  6. Then validation result is true 
  7. When user choose "March 2017" 
  8. Then validation result is false 

場景描述中的ReportingPeriod蘊含了與財務報表相關的領域知識,即有效報表周期為13個月,ReportingPeriod自身應該履行驗證給定日期是否有效的職責。

【本文為51CTO專欄作者“張逸”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2021-10-29 11:30:31

補碼二進制反碼

2024-02-23 10:41:29

2025-05-06 09:30:00

DevOps云原生開發

2020-10-26 09:18:50

RedisCluste

2020-04-01 17:26:57

MySQL事務隔離級別數據庫

2017-12-17 20:17:23

NoSQLSQL數據

2018-08-13 09:20:21

NoSQLSQL數據

2020-07-29 09:21:34

Docker集群部署隔離環境

2021-07-05 22:22:24

協議MQTT

2023-01-11 08:47:10

2019-07-07 08:18:10

MySQL索引數據庫

2022-01-05 09:27:24

讀擴散寫擴散feed

2019-11-14 09:16:56

物聯網技術路由器

2021-04-21 10:00:08

MySQL索引數據庫

2019-06-20 17:49:51

RPCHTTP協議

2024-04-01 10:09:23

AutowiredSpring容器

2024-01-05 07:55:39

Linux虛擬內存

2021-10-19 10:10:51

MySQL事務隔離級別數據庫

2019-11-25 08:25:47

ZooKeeper分布式系統負載均衡

2021-07-07 10:28:09

分布式架構系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费毛片www com cn | 欧美精品一二区 | 成人精品免费视频 | 国产成人亚洲精品自产在线 | 日韩一二区 | 欧美日韩亚洲视频 | 欧美日韩久久精品 | 国产精品久久久久久高潮 | 欧美欧美欧美 | 国产精品成人一区二区三区夜夜夜 | 日韩欧美在线不卡 | 亚洲国产精品一区二区第一页 | 自拍偷拍精品 | 久久网站免费视频 | 成年女人免费v片 | 不卡一区二区三区四区 | 韩国理论电影在线 | 久久久久久中文字幕 | 国产视频精品免费 | 在线观看视频福利 | 亚洲一区久久 | 日韩中文字幕av | 国产精品海角社区在线观看 | 国产ts一区| 午夜久久久 | 日韩精品免费视频 | 我要看黄色录像一级片 | 亚洲成人中文字幕 | 99精品视频一区二区三区 | 免费精品久久久久久中文字幕 | 国产大毛片 | 亚洲一二视频 | 成人午夜免费在线视频 | 日韩av免费看 | av在线免费观看网站 | 久久一级 | 老外几下就让我高潮了 | 午夜精品福利视频 | 韩国毛片一区二区三区 | 久久99深爱久久99精品 | 国产91亚洲精品一区二区三区 |