說(shuō)起B(yǎng)DD永脓,你會(huì)想到什么?

本文首發(fā)于【林子的空間


在剛接觸BDD(Behavior Driven Development贸宏,行為驅(qū)動(dòng)開(kāi)發(fā))的時(shí)候造寝,我以為就是用Cucumber這樣的工具來(lái)編寫場(chǎng)景用例,從而實(shí)現(xiàn)自動(dòng)化測(cè)試吭练,甚至很長(zhǎng)時(shí)間分不清BDD和ATDD(Acceptance test driven development)到底有什么區(qū)別诫龙。那么,BDD真的就是用來(lái)做自動(dòng)化測(cè)試的嗎鲫咽?本文就來(lái)跟大家分享一下我理解的BDD签赃。

為什么要BDD?

“開(kāi)發(fā)軟件系統(tǒng)最困難的部分就是準(zhǔn)確說(shuō)明開(kāi)發(fā)什么” (“The hardest single part of building a software system is deciding precisely what to build” — No Silver Bullet, Fred Brooks) 分尸。

場(chǎng)景一:業(yè)務(wù)分析人員覺(jué)得自己分析的需求已經(jīng)寫的很清晰了锦聊,并且跟技術(shù)人員進(jìn)行了足夠的溝通,可是開(kāi)發(fā)完做Desk check的時(shí)候箩绍,發(fā)現(xiàn)所開(kāi)發(fā)的功能還是跟期望有差距括丁。
場(chǎng)景二:開(kāi)發(fā)團(tuán)隊(duì)辛辛苦苦開(kāi)發(fā)完一個(gè)功能,滿懷信心的去給產(chǎn)品經(jīng)理/客戶展示的時(shí)候伶选,才發(fā)現(xiàn)原來(lái)客戶需求的功能不是這樣的史飞。

這些場(chǎng)景是不是似曾相識(shí)?為什么會(huì)這樣仰税?第一個(gè)場(chǎng)景是開(kāi)發(fā)團(tuán)隊(duì)內(nèi)部技術(shù)人員跟需求分析人員的理解有偏差构资,導(dǎo)致大家理解的需求其實(shí)是不一樣的;第二個(gè)場(chǎng)景是開(kāi)發(fā)團(tuán)隊(duì)沒(méi)有真正理解產(chǎn)品經(jīng)理/客戶所提出來(lái)的真實(shí)需求陨簇,導(dǎo)致開(kāi)發(fā)的產(chǎn)品跟需求不一致吐绵。其實(shí),產(chǎn)生這兩個(gè)不一致的真正原因是因?yàn)椴煌巧兄煌念I(lǐng)域知識(shí)河绽,說(shuō)著不同的語(yǔ)言己单,大家在溝通的時(shí)候,如果都用自己領(lǐng)域語(yǔ)言耙饰,必然會(huì)產(chǎn)生溝通代溝纹笼,導(dǎo)致理解的不一致性。

領(lǐng)域知識(shí)不同苟跪、語(yǔ)言不通導(dǎo)致溝通障礙廷痘,這個(gè)客觀存在的問(wèn)題該如何解決呢蔓涧?BDD正是為此而生。

BDD是什么笋额?

BDD的提出者Dan North強(qiáng)調(diào)BDD不是關(guān)于測(cè)試的元暴,它是在應(yīng)用程序存在之前,寫出用例與期望兄猩,從而描述應(yīng)用程序的行為茉盏,并且促使在項(xiàng)目中的人們彼此互相溝通。

要給BDD下個(gè)清晰易懂的定義很難枢冤,包括大師們也這么認(rèn)為鸠姨,這里試著總結(jié)以下幾點(diǎn):

1. 關(guān)注的是業(yè)務(wù)領(lǐng)域,而不是技術(shù):BDD強(qiáng)調(diào)用領(lǐng)域特定語(yǔ)言(DSL, domain specific language)描述用戶行為掏导,定義業(yè)務(wù)需求享怀,而不會(huì)關(guān)心系統(tǒng)的技術(shù)實(shí)現(xiàn)。
2. 不是工具趟咆,強(qiáng)調(diào)的是一種協(xié)作方式:BDD要求各個(gè)角色共同參與系統(tǒng)行為的挖掘和定義添瓷,以實(shí)現(xiàn)對(duì)業(yè)務(wù)價(jià)值的一致理解。
3. 不是關(guān)于測(cè)試的:BDD源自TDD值纱,又不同于TDD鳞贷,重點(diǎn)不是關(guān)于測(cè)試的,但可以指導(dǎo)更好的做自動(dòng)化測(cè)試虐唠。
4. 全棧敏捷方法:BDD促使團(tuán)隊(duì)所有角色從需求到最后的測(cè)試驗(yàn)證搀愧,進(jìn)行高度的協(xié)作和溝通,以交付最有價(jià)值的功能疆偿。

BDD怎么做咱筛?

用例場(chǎng)景的描述格式“GIVEN... WHEN... THEN... ”對(duì)大家都不陌生,但用這個(gè)格式寫出好的用例卻是非常的難杆故,尤其是新手迅箩。這里總結(jié)幾點(diǎn)供大家參考:

1.業(yè)務(wù)層抽取,業(yè)務(wù)語(yǔ)言描述

根據(jù)業(yè)務(wù)流程找出對(duì)應(yīng)的數(shù)據(jù)流处铛,在每個(gè)數(shù)據(jù)停留點(diǎn)或者數(shù)據(jù)發(fā)生變化的點(diǎn)進(jìn)行縱切饲趋,抽取出一個(gè)個(gè)用例場(chǎng)景。下面以一個(gè)真實(shí)業(yè)務(wù)來(lái)說(shuō)明撤蟆。

實(shí)例:

員工在企業(yè)系統(tǒng)創(chuàng)建空白問(wèn)卷奕塑,發(fā)送給委托人,委托人可以在用戶系統(tǒng)看到問(wèn)卷并填寫家肯,填寫完畢提交后龄砰,員工可以在企業(yè)系統(tǒng)看到填完的問(wèn)卷報(bào)告。業(yè)務(wù)流程和數(shù)據(jù)流如下圖所示息楔,根據(jù)前面描述的方法可以切分出四個(gè)用例場(chǎng)景寝贡。

業(yè)務(wù)場(chǎng)景切分實(shí)例

場(chǎng)景的描述語(yǔ)言一定是業(yè)務(wù)領(lǐng)域可懂的扒披,不要涉及任何實(shí)現(xiàn)相關(guān)的技術(shù)細(xì)節(jié)值依。所描述的場(chǎng)景一定是從業(yè)務(wù)層抽象出來(lái)圃泡,體現(xiàn)真實(shí)業(yè)務(wù)價(jià)值的。

2.技術(shù)人員可懂愿险,自動(dòng)化友好

所描述的用例場(chǎng)景要能驅(qū)動(dòng)開(kāi)發(fā)颇蜡,必須要讓技術(shù)人員易于理解;要指導(dǎo)自動(dòng)化測(cè)試辆亏,還得要求對(duì)于自動(dòng)化的實(shí)現(xiàn)是友好的风秤。

這一點(diǎn)似乎是跟第一點(diǎn)有些矛盾,但我們嚴(yán)格遵守BDD的格式要求還是可以做到的:

- GIVEN從句描述的是場(chǎng)景的前提條件扮叨、初始狀態(tài)缤弦,通常是一種現(xiàn)在完成時(shí)態(tài);

- WHEN從句是采取某個(gè)動(dòng)作或者是發(fā)生某個(gè)事件彻磁,一定是動(dòng)詞碍沐,通常是一般現(xiàn)在時(shí);

- THEN從句用“應(yīng)該…(should be…)”來(lái)描述一種期望的結(jié)果衷蜓,而不用斷言(assert)累提,后者與測(cè)試關(guān)聯(lián)更緊密。

3.數(shù)據(jù)驅(qū)動(dòng)磁浇,需求實(shí)例化

抽象的業(yè)務(wù)語(yǔ)言描述的需求斋陪,往往由于太抽象而缺失掉很多關(guān)鍵信息,導(dǎo)致不同人員對(duì)需求理解的不一致置吓。想要既抽象又能包含細(xì)節(jié)信息无虚,就需要采用需求實(shí)例來(lái)描述。簡(jiǎn)單說(shuō)來(lái)衍锚,就是給場(chǎng)景用例舉例說(shuō)明友题。舉例就會(huì)需要列舉數(shù)據(jù),如果在場(chǎng)景用例描述里邊直接添加數(shù)據(jù)實(shí)例构拳,那樣的用例將會(huì)很混亂咆爽,可讀性和可維護(hù)性都非常差。如果我們能夠在描述場(chǎng)景的用例里邊用一些變量來(lái)代替置森,把變量對(duì)應(yīng)的值(數(shù)據(jù))提取出來(lái)存為一個(gè)表格或者獨(dú)立的文件斗埂,這樣將會(huì)使得用例的可讀性很好,而且也不會(huì)缺失細(xì)節(jié)信息(數(shù)據(jù))凫海,后期的維護(hù)和修改也較為方便呛凶。這就是數(shù)據(jù)驅(qū)動(dòng)的方法來(lái)描述實(shí)例化的需求。

下面舉幾個(gè)例子行贪,大家體會(huì)一下:

場(chǎng)景一:檢查收件箱漾稀,可以看出第三個(gè)清晰明了且能體現(xiàn)業(yè)務(wù)價(jià)值模闲,比較符合上面的要求。

場(chǎng)景二:限制非法用戶查看某些受限內(nèi)容崭捍,BDD要強(qiáng)調(diào)什么(What)尸折,而不是怎么(How),第二個(gè)寫的比較好殷蛇。

場(chǎng)景三:添加圖書到購(gòu)物車并計(jì)算總額

BDD的工具有Cucumber实夹、JBehave、Twist粒梦、Concordion等亮航,工具的優(yōu)缺點(diǎn)和使用方法,網(wǎng)上都有豐富的文檔可參考匀们,在此不作介紹缴淋。

BDD有什么好處?

BDD的作用是把利益關(guān)系人泄朴、交付團(tuán)隊(duì)等不同方面的項(xiàng)目相關(guān)人員集中到一起重抖,形成共同的理解,共同的價(jià)值觀以及共同的期望值叼旋。它可以幫助我們:

1. 關(guān)注用戶行為

2.交付最有用的功能

3. 在團(tuán)隊(duì)內(nèi)部維護(hù)一致的術(shù)語(yǔ)

4. 探究需求實(shí)例

5. 編寫和維護(hù)需求

6. 創(chuàng)建活的文檔

7. 消除協(xié)作與溝通障礙

什么樣的項(xiàng)目適合BDD仇哆?

- 簡(jiǎn)單的一次性項(xiàng)目,溝通交流成本都較低的情況下夫植,沒(méi)有必要使用BDD讹剔;

- 業(yè)務(wù)比較輕量,重在技術(shù)方面的項(xiàng)目详民,可以使用簡(jiǎn)單的白板上的BDD延欠,不需要在BDD工具記錄需求用例文檔;

- 業(yè)務(wù)復(fù)雜沈跨、團(tuán)隊(duì)成員較多的項(xiàng)目由捎,溝通成本高,BDD很有必要饿凛。

常見(jiàn)疑惑

1.BDD與TDD/ATDD

TDD是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)狞玛,ATDD是驗(yàn)收測(cè)試驅(qū)動(dòng)開(kāi)發(fā),都是關(guān)于測(cè)試的涧窒,是與所開(kāi)發(fā)的系統(tǒng)緊密聯(lián)系的心肪。而BDD則不同,前面提到過(guò)BDD不是關(guān)于測(cè)試的纠吴,著重關(guān)注需求硬鞍、關(guān)注客戶的業(yè)務(wù)價(jià)值,所描述的需求用例是可以獨(dú)立于軟件系統(tǒng)存在的,因?yàn)榭蛻舻臉I(yè)務(wù)是始終存在的固该,不取決于是否有軟件系統(tǒng)來(lái)支撐锅减。

2. BDD與SBE

SBE(Specification By Example,實(shí)例化需求)是在BDD之后由Gojko提出來(lái)的伐坏,也是關(guān)于需求的怔匣,主要強(qiáng)調(diào)通過(guò)列舉實(shí)例發(fā)現(xiàn)需求中的缺失概念。BDD也是關(guān)注需求的著淆,同樣會(huì)使用實(shí)例來(lái)描述行為劫狠。兩者的本質(zhì)沒(méi)有區(qū)別拴疤,只是概念的差異永部。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呐矾,隨后出現(xiàn)的幾起案子苔埋,更是在濱河造成了極大的恐慌,老刑警劉巖蜒犯,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件组橄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡罚随,警方通過(guò)查閱死者的電腦和手機(jī)玉工,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淘菩,“玉大人遵班,你說(shuō)我怎么就攤上這事〕备模” “怎么了狭郑?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汇在。 經(jīng)常有香客問(wèn)我翰萨,道長(zhǎng),這世上最難降的妖魔是什么糕殉? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任亩鬼,我火速辦了婚禮,結(jié)果婚禮上阿蝶,老公的妹妹穿的比我還像新娘雳锋。我一直安慰自己,他們只是感情好赡磅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布魄缚。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冶匹。 梳的紋絲不亂的頭發(fā)上习劫,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音嚼隘,去河邊找鬼诽里。 笑死,一個(gè)胖子當(dāng)著我的面吹牛飞蛹,可吹牛的內(nèi)容都是我干的谤狡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼卧檐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼墓懂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起霉囚,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捕仔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盈罐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榜跌,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年盅粪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钓葫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡票顾,死狀恐怖础浮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情库物,我是刑警寧澤霸旗,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站戚揭,受9級(jí)特大地震影響诱告,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜民晒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一精居、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潜必,春花似錦靴姿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宵晚。三九已至,卻和暖如春维雇,著一層夾襖步出監(jiān)牢的瞬間淤刃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工吱型, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逸贾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓津滞,卻偏偏與公主長(zhǎng)得像铝侵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子触徐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程咪鲜、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開(kāi)發(fā)包括:需求锌介、設(shè)...
    Mr希靈閱讀 21,949評(píng)論 7 278
  • 1.測(cè)試與軟件模型 軟件開(kāi)發(fā)生命周期模型指的是軟件開(kāi)發(fā)全過(guò)程嗜诀、活動(dòng)和任務(wù)的結(jié)構(gòu)性框架。軟件項(xiàng)目的開(kāi)發(fā)包括:需求孔祸、設(shè)...
    宇文臭臭閱讀 6,718評(píng)論 5 100
  • 羅振宇老師在其羅輯思維的節(jié)目中談到,現(xiàn)在高度評(píng)價(jià)一個(gè)人使用的一個(gè)詞-靠譜发皿。其實(shí)在工作中常常會(huì)用到"靠譜"這個(gè)詞來(lái)評(píng)...
    路上的威利閱讀 1,675評(píng)論 0 3
  • 壹 @這個(gè)年紀(jì):勿忘初心 親愛(ài)的,《這個(gè)年紀(jì)》是首有意思的民謠玄货,分享給大家皇钞,點(diǎn)開(kāi)鏈接就可以聽(tīng)到喔~《這個(gè)年紀(jì)》:h...
    喝月亮閱讀 1,080評(píng)論 0 0