亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

BDD:Behavior-Driven Development 行為驅(qū)動(dòng)開發(fā)

philadelphia / 2932人閱讀

摘要:理想情況下項(xiàng)目的參與人員能根據(jù)當(dāng)前系統(tǒng)行為列表判斷新加入的功能行為是否會(huì)破壞現(xiàn)有功能。通過暫時(shí)掛起不實(shí)現(xiàn)具體行為,你可以進(jìn)行測試優(yōu)先的開發(fā)。

我們一般將測試放在項(xiàng)目的最后時(shí)刻進(jìn)行,甚至在時(shí)間較緊時(shí)、預(yù)算超支,或者其他原因發(fā)生時(shí)會(huì)放棄測試。

項(xiàng)目的管理者好奇為什么開發(fā)者就是不能一開始就明白(需求、設(shè)計(jì)),而在系統(tǒng)有很多利益相關(guān)者并且不同的相關(guān)者對(duì)系統(tǒng)有不同的看法的時(shí)候,開發(fā)者(特別是在大型項(xiàng)目中),更容易變得迷糊,使得協(xié)商過程像盲人摸象一樣。

每個(gè)項(xiàng)目的開始,必然是有一個(gè)關(guān)于項(xiàng)目行為表現(xiàn)、功能特點(diǎn)的討論會(huì),由客戶或者其他業(yè)務(wù)人員向開發(fā)團(tuán)隊(duì)解釋他們就行想要什么。(苦逼又令人討厭的策劃....)

有時(shí)候,這些交互、討論以敏捷開發(fā)形式表現(xiàn);有時(shí)是設(shè)計(jì)文檔,就像去年查理斯-??怂沟牟┛退f的那樣;有時(shí)是由Keynote制作的流程圖或者模型;有時(shí)甚至是一個(gè)簡單的電話解釋而已。

僅通過這些溝通,開發(fā)者一般只是負(fù)責(zé)構(gòu)建一個(gè)能夠運(yùn)行的系統(tǒng)而已,而這對(duì)于一個(gè)開發(fā)團(tuán)隊(duì)來說,是遠(yuǎn)遠(yuǎn)不夠的。這(單純的溝通)對(duì)于大型系統(tǒng)的業(yè)余開發(fā)人員來說尤其困難。

為什么不進(jìn)行測試?

一般存在一個(gè)爭議:如果客戶/業(yè)務(wù)人員一開始就對(duì)系統(tǒng)的行為、特征有充分的認(rèn)知,那么為什么往往要撤銷對(duì)這些功能、行為進(jìn)行測試?

答案可能非常簡單:測試一般被認(rèn)為是共享資產(chǎn)(對(duì)大家都有用的),也不被認(rèn)為是對(duì)項(xiàng)目開發(fā)有實(shí)際價(jià)值的。測試只對(duì)工程師有用或者只對(duì)特定的一些人有用。

那么如何才能使得測試對(duì)大家都有價(jià)值呢?僅僅是列出系統(tǒng)的功能特性嗎?當(dāng)然不是,我們應(yīng)該使用behavior-driven development (BDD)而不是僅僅是test-driven development (TDD)。

BDD是什么?

行為驅(qū)動(dòng)開發(fā)應(yīng)該著眼于你的代碼所要實(shí)現(xiàn)的業(yè)務(wù)行為,即“為什么要編寫這樣的代碼?”它可以很好的支撐項(xiàng)目核心工作流程,特別是對(duì)于交叉功能的了解與實(shí)現(xiàn)。

敏捷BDD開發(fā)有很大的好處。當(dāng)開發(fā)者和敏捷項(xiàng)目主或者業(yè)務(wù)分析師坐在一起,將大概功能框框(具體如何實(shí)現(xiàn)由開發(fā)者在框內(nèi)填寫)寫在白板上:

業(yè)務(wù)人員指定系統(tǒng)的行為特性

開發(fā)者基于他們自己對(duì)系統(tǒng)的理解向業(yè)務(wù)人員提問,同時(shí)從開發(fā)者角度寫下其他附加的行為。

理想情況下:項(xiàng)目的參與人員能根據(jù)當(dāng)前系統(tǒng)行為列表判斷新加入的功能行為是否會(huì)破壞現(xiàn)有功能。

我發(fā)現(xiàn)這些簡單的行為給了我一些約束,使得我能像一個(gè)開發(fā)者一樣思考:這些我已經(jīng)實(shí)現(xiàn)的這些測試能夠?qū)⑽业膶?shí)現(xiàn)代碼約束在一個(gè)規(guī)范之中。而那些功能代碼只需滿足這些約束、規(guī)范,就能在協(xié)作開發(fā)中快速完成。

這種協(xié)作方法使得我更加專注于提供給最終用戶的功能特性,而且業(yè)務(wù)人員可以在旁約束、糾正我對(duì)系統(tǒng)行為的理解,而不是系統(tǒng)的具體實(shí)現(xiàn)。這就是BDD和TDD的突出區(qū)別。

BDD的一個(gè)例子

情景:你是負(fù)責(zé)開發(fā)企業(yè)會(huì)計(jì)系統(tǒng)的團(tuán)隊(duì)一員,系統(tǒng)使用Rails框架實(shí)現(xiàn)。有一天,業(yè)務(wù)人員問你一個(gè)關(guān)于提醒模塊的功能:提醒用戶他們正在等待處理的發(fā)票。你坐下來和業(yè)務(wù)人員定義這個(gè)功能模塊。

你打開你的文本編輯器/筆記本,開始在上面畫上框框,每個(gè)框代表用戶需要的功能行為:

//為每個(gè)新支票添加一個(gè)提醒日期
it "adds a reminder date when an invoice is created"
//當(dāng)提醒日期到來就發(fā)郵件提醒
it "sends an email to the invoice"s account"s primary contact after the reminder date has passed"
//如果用戶閱讀了郵件就給用戶打上標(biāo)記
it "marks that the user has read the email in the invoice"

在開發(fā)中專注于系統(tǒng)行為使得測試在驗(yàn)證你所實(shí)現(xiàn)系統(tǒng)行為是否正確中是十分有用的,而不僅僅是編碼正確(沒有bug)。要注意的是,這種分析要用業(yè)務(wù)語言而不是實(shí)現(xiàn)系統(tǒng)所采用的具體開發(fā)語言。
你不需要將“發(fā)票屬于哪個(gè)用戶”描述出來,因?yàn)殚_發(fā)團(tuán)隊(duì)之外的人也并不關(guān)心這種關(guān)系。

有些開發(fā)者在討論/開發(fā)現(xiàn)場就寫出測試樣例,在系統(tǒng)中調(diào)用這些所要測試的方法,設(shè)置期望值,如下:

it "adds a reminder date when an invoice is created"  do
  current_invoice = create :invoice
  current_invoice.reminder_date.should == 20.days.from_now
end

這些測試樣例必然是運(yùn)行失敗的,因?yàn)槲覀冞€沒有實(shí)現(xiàn)設(shè)置remind_date的代碼。

失敗的測試

我明白開發(fā)者為什么會(huì)寫失敗樣例測試,但是從業(yè)務(wù)人員的角度來說,這寫測試對(duì)他并無用處。一些業(yè)務(wù)人員可能會(huì)被這些測試細(xì)節(jié)、實(shí)現(xiàn)細(xì)節(jié)搞迷糊,甚至我學(xué)得一些開發(fā)知識(shí)后就插手開發(fā)人員的工作。(數(shù)據(jù)庫設(shè)計(jì)、代碼復(fù)用)

從我的經(jīng)驗(yàn)來開,如果開發(fā)者對(duì)于特定系統(tǒng)行為寫出多行實(shí)現(xiàn)概要,業(yè)務(wù)人員會(huì)感到不耐煩,他們會(huì)覺得這是浪費(fèi)他們的時(shí)間并不耐煩的急于闡釋他們假想的下一個(gè)系統(tǒng)行為。

BDD和TDD的區(qū)別

現(xiàn)在我們從另一個(gè)角度看:使用TDD方法,并且寫出測試概要:

//創(chuàng)建支票后,過期日期=創(chuàng)建日期+20天
it "after_create an Invoice sets a reminder date to be creation + 20 business days"
//Account#primary_payment_contact返回支付聯(lián)系人或者用戶項(xiàng)目管理者
it "Account#primary_payment_contact returns the current payment contact or the client project manager"
//InvoiceChecker#mailer 檢查是否過期,如果是,就發(fā)郵件提醒。
it "InvoiceChecker#mailer finds invoices that are overdue and sends the email"

這些測試是有用的,不過只是對(duì)一些人有用:工程師。BDD是用來溝通(交叉功能)項(xiàng)目成員的工具,包括開發(fā)者和業(yè)務(wù)人員。

通過暫時(shí)掛起(不實(shí)現(xiàn))具體行為,你可以進(jìn)行測試優(yōu)先的開發(fā)。首先,編寫測試;接著,運(yùn)行測試(當(dāng)然是運(yùn)行失敗的,因?yàn)槲覀兌歼€沒開始實(shí)現(xiàn)具體行為);編寫行為,使他能跑;修正,使他能正確運(yùn)行。

BDD社區(qū)的很多工作和產(chǎn)品都使得測試中的斷言檢查讀起來向普通語言一樣。下面是一個(gè)刻板老套的RSpec測試:

a = 42
a.should == 42

這個(gè)格式使得結(jié)果易于閱讀和理解。但注意這不是我們?cè)诖怂鶓?yīng)該做的,我們應(yīng)該盡快獲取系統(tǒng)行為的準(zhǔn)確描述,并且堅(jiān)持“每個(gè)系統(tǒng)行為都要測試”的原則。而從之前白板上畫框框的工作,我們基本能夠知道系統(tǒng)行為是什么。

BDD不是修正編碼的奇特方式,它只是用來讓團(tuán)隊(duì)成員(包含業(yè)務(wù)人員、顧客)對(duì)系統(tǒng)行為進(jìn)行溝通而已。

BDD是關(guān)于協(xié)作和溝通的

再回看剛才的例子:企業(yè)會(huì)計(jì)系統(tǒng)。

你和業(yè)務(wù)人員討論項(xiàng)目的功能:你(開發(fā)者)從內(nèi)部(各模塊是如何協(xié)作的)分析系統(tǒng),而他們(業(yè)務(wù)人員)就從外部分析。

你會(huì)思考一些情況并且并對(duì)系統(tǒng)分析師(業(yè)務(wù)人員)就一下情況進(jìn)行提問:

//默認(rèn)的提醒日期是?在支票到期前的第幾天提醒?
* What"s the default reminder date going to be? How many days before the invoice due date?
//這些天數(shù)是指自然日還是工作日?
* Are those business days or just calendar days?
//如果這些支票所屬的賬號(hào)主沒有對(duì)應(yīng)的聯(lián)系方式,那該怎么辦?
* What happens if there"s not a primary contact associated with the account?

因此,使得業(yè)務(wù)人員理解你的問題是非常重要的,因?yàn)樗麄兛赡軐?duì)具體開發(fā)缺乏相應(yīng)的知識(shí)。

有時(shí)候,BDD是一種有益于兩個(gè)部門(如策劃和開發(fā))協(xié)作和溝通的工具,也是清晰劃分系統(tǒng)功能界限和對(duì)開發(fā)團(tuán)隊(duì)(如預(yù)計(jì)開發(fā)時(shí)間)有更好估計(jì)的一種方法。
可能你意識(shí)到無法從給定日期計(jì)算10天以后的日期(因?yàn)槊總€(gè)月的天數(shù)都不一樣),那么你就需要實(shí)現(xiàn)這個(gè)計(jì)數(shù)功能,而業(yè)務(wù)人員對(duì)這個(gè)計(jì)數(shù)功能可能并不關(guān)心。

開發(fā)者有對(duì)于具體開發(fā)的思考(比如你說的‘天’是什么),業(yè)務(wù)人員也有他們的思考(如:請(qǐng)不要使用’過期’這個(gè)詞語了,有時(shí)候它有不同的意思)。因此,只由一方來考慮系統(tǒng)功能和測試就會(huì)抹殺掉另一方的有價(jià)值的觀點(diǎn)。

當(dāng)然如果業(yè)務(wù)人員或者客戶不能和開發(fā)者共處一室的時(shí)候,讓他們將期望的系統(tǒng)行為和開發(fā)者自己的分析、理解寫在紙上也是一個(gè)有效的溝通方法。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/8765.html

相關(guān)文章

  • 學(xué)會(huì)JavaScript測試你就是同行中最亮的仔(妹)

    摘要:測試驅(qū)動(dòng)開發(fā)是一種使用自動(dòng)化單元測試來推動(dòng)軟件設(shè)計(jì)并強(qiáng)制依賴關(guān)系解耦的技術(shù)。使用這種做法的結(jié)果是一套全面的單元測試,可隨時(shí)運(yùn)行,以提供軟件可以正常工作的反饋。 showImg(http://ws1.sinaimg.cn/large/005NRne3gy1g2cmxxl7c5j30nc0c8h1p.jpg); 一、幾種概念(稍微了解一下) ATDD: Acceptance Test Dr...

    fengxiuping 評(píng)論0 收藏0
  • 探知JS測試(1)

    摘要:單元測試這是測試類型的一種,所謂的單元即,由一些函數(shù)組成能完成某項(xiàng)功能的模塊。單元測試的過程想好測試用例動(dòng)手寫測試查看測試結(jié)果,通過則否則應(yīng)該進(jìn)行測試模式想說一下,測試模式和單元測試的區(qū)別。測試模式包括單元測試通常測試模式有和模式。 有一定水平的js童鞋,應(yīng)該會(huì)經(jīng)??吹揭恍?,在介紹項(xiàng)目的時(shí)候,會(huì)不由自主說道測試。 比如,單元測試,函數(shù)測試,或是TDD,BDD等測試模式。沒錯(cuò),這也是...

    xingpingz 評(píng)論0 收藏0
  • 探知JS測試(1)

    摘要:單元測試這是測試類型的一種,所謂的單元即,由一些函數(shù)組成能完成某項(xiàng)功能的模塊。單元測試的過程想好測試用例動(dòng)手寫測試查看測試結(jié)果,通過則否則應(yīng)該進(jìn)行測試模式想說一下,測試模式和單元測試的區(qū)別。測試模式包括單元測試通常測試模式有和模式。 有一定水平的js童鞋,應(yīng)該會(huì)經(jīng)常看到一些書上,在介紹項(xiàng)目的時(shí)候,會(huì)不由自主說道測試。 比如,單元測試,函數(shù)測試,或是TDD,BDD等測試模式。沒錯(cuò),這也是...

    bladefury 評(píng)論0 收藏0
  • TDD,BDD

    摘要:每個(gè)階段就能進(jìn)行測試,節(jié)省開發(fā)成本。最初是由在年命名,它包括驗(yàn)收測試和客戶測試驅(qū)動(dòng)等的極限編程的實(shí)踐,作為對(duì)測試驅(qū)動(dòng)開發(fā)的回應(yīng)。的優(yōu)點(diǎn)是將各個(gè)參與協(xié)作團(tuán)隊(duì)的人員跨領(lǐng)域集中在一起達(dá)成一致的理解,節(jié)約了很多協(xié)作上的溝通時(shí)間。 TDD(測試驅(qū)動(dòng)開發(fā) Test Driven Development) TDD(Test-Driven Development) 測試驅(qū)動(dòng)開發(fā) 是敏捷開發(fā)中的一項(xiàng)核心...

    shadajin 評(píng)論0 收藏0
  • 前端單元測試探索

    摘要:單元測試的首要目的不是為了能夠編寫出大覆蓋率的全部通過的測試代碼,而是需要從使用者調(diào)用者的角度出發(fā),嘗試函數(shù)邏輯的各種可能性,進(jìn)而輔助性增強(qiáng)代碼質(zhì)量測試是手段而不是目的。 本文已發(fā)布在稀土掘金 轉(zhuǎn)載請(qǐng)注明原文鏈接:https://github.com/ecmadao/Co... 雖然很多公司有自己的測試部門,而且前端開發(fā)大多不涉及測試環(huán)節(jié),但鑒于目前前端領(lǐng)域的快速發(fā)展,其涉及面越來...

    陳江龍 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<