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

一文講清楚什么是行為驅(qū)動開發(fā)

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

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

行為驅(qū)動開發(fā)  BDD

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

在進行行為驅(qū)動開發(fā)時,需要避免兩種錯誤的傾向:

  • 從UI操作去表現(xiàn)業(yè)務(wù)行為
  • 描述技術(shù)實現(xiàn)而非業(yè)務(wù)需求

例如,我們要編寫“發(fā)送郵件”這個業(yè)務(wù)場景,可能會寫成這樣:

  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" 

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

那么換成這樣的寫法呢?

  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 

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

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

  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描述的場景視為一種可讀的需求規(guī)格(Specification),通過它準確地表現(xiàn)領(lǐng)域知識,就可以幫助我們提煉出隱含的領(lǐng)域概念。例如:

  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蘊含了與財務(wù)報表相關(guān)的領(lǐng)域知識,即有效報表周期為13個月,ReportingPeriod自身應(yīng)該履行驗證給定日期是否有效的職責。

【本文為51CTO專欄作者“張逸”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

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

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-10-29 11:30:31

補碼二進制反碼

2024-02-23 10:41:29

2025-05-06 09:30:00

DevOps云原生開發(fā)

2020-10-26 09:18:50

RedisCluste

2020-04-01 17:26:57

MySQL事務(wù)隔離級別數(shù)據(jù)庫

2018-08-13 09:20:21

NoSQLSQL數(shù)據(jù)

2020-07-29 09:21:34

Docker集群部署隔離環(huán)境

2021-07-05 22:22:24

協(xié)議MQTT

2017-12-17 20:17:23

NoSQLSQL數(shù)據(jù)

2023-01-11 08:47:10

2019-11-14 09:16:56

物聯(lián)網(wǎng)技術(shù)路由器

2019-07-07 08:18:10

MySQL索引數(shù)據(jù)庫

2022-01-05 09:27:24

讀擴散寫擴散feed

2021-04-21 10:00:08

MySQL索引數(shù)據(jù)庫

2024-01-05 07:55:39

Linux虛擬內(nèi)存

2024-04-01 10:09:23

AutowiredSpring容器

2019-06-20 17:49:51

RPCHTTP協(xié)議

2021-10-19 10:10:51

MySQL事務(wù)隔離級別數(shù)據(jù)庫

2019-01-31 09:20:36

架構(gòu)容錯架構(gòu)分布式容錯

2019-11-25 08:25:47

ZooKeeper分布式系統(tǒng)負載均衡
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 水蜜桃亚洲一二三四在线 | 日韩精品免费播放 | 九九导航| 夜夜爽99久久国产综合精品女不卡 | 亚洲精品成人在线 | 91久久精品一区 | 95国产精品 | 91成人在线视频 | 国产成人精品免费 | www.99re5.com| 九九色综合| а_天堂中文最新版地址 | 9999国产精品欧美久久久久久 | 奇色影视 | 成人在线视频一区 | 久久久美女 | 日本精品久久 | 午夜精品一区 | 91精品国产综合久久婷婷香蕉 | 日日夜夜视频 | 国产一级电影网 | 国产高清精品在线 | 在线观看日韩精品视频 | 亚洲一区二区三区视频 | 91精品久久久久久久久久入口 | 久久久久久国产免费视网址 | 免费视频久久 | 欧美国产日韩一区 | 欧美男人天堂 | 国产午夜精品一区二区三区四区 | 亚洲午夜三级 | 成人精品啪啪欧美成 | 亚洲 欧美 日韩在线 | 国产精品视频一区二区三区不卡 | 国产一区二区精华 | 亚洲在线观看视频 | 欧美精品二区 | 欧美一区二区三区在线观看视频 | 999在线精品 | a免费视频 | 1204国产成人精品视频 |