足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

測(cè)試驅(qū)動(dòng)開發(fā)與行為驅(qū)動(dòng)開發(fā)中的測(cè)試先行方法
2016-01-29 22:12:45   來源:Ben Linders ,譯者 陸志偉   評(píng)論:0 點(diǎn)擊:

InfoQ采訪了 Gil Zilberfeld,關(guān)于測(cè)試先行(test first)方法的優(yōu)勢(shì),測(cè)試驅(qū)動(dòng)開發(fā)(TDD)和行為驅(qū)動(dòng)開發(fā)(BDD)概念,團(tuán)隊(duì)使用hu BDD和 TDD的實(shí)例,以及如何在不編寫任何代碼的情況下探索 BDD和 TDD。

Gil Zilberfeld將在 Agile Practitioners會(huì)議上舉辦小型研討會(huì),討論測(cè)試先行(test first)方法,測(cè)試驅(qū)動(dòng)開發(fā)(TDD)和行為驅(qū)動(dòng)開發(fā)(BDD)的基礎(chǔ)。

Test-First是一個(gè)很優(yōu)秀的工具。它能促進(jìn)團(tuán)隊(duì)內(nèi)更好的理解力和生產(chǎn)力。其結(jié)果是高質(zhì)量的代碼——無論是早期成功發(fā)現(xiàn) bug還是正確實(shí)現(xiàn)特性方面。

Agile Practitioners 2016會(huì)議將于1月26-27日在以色列特拉維夫舉行,InfoQ將會(huì)覆蓋本次會(huì)議的新聞,Q&As和文章。

(……)今年我們的主題是親身實(shí)踐敏捷。我們知道沒有老師能夠傳授親身體驗(yàn),因此我們舉辦了很多研討會(huì)和實(shí)用講座,會(huì)議參加者可以親身體驗(yàn)、聽到和看到敏捷活動(dòng)是如何在許多成功企業(yè)內(nèi)實(shí)施的。

InfoQ采訪了 Zilberfeld,關(guān)于測(cè)試先行方法的優(yōu)勢(shì),測(cè)試驅(qū)動(dòng)開發(fā)和行為驅(qū)動(dòng)開發(fā)概念,團(tuán)隊(duì)使用 BDD和 TDD的實(shí)例,以及如何在不編寫任何代碼的情況下探索 BDD和 TDD。

InfoQ:“測(cè)試先行”方法的優(yōu)勢(shì)是什么?

Zilberfeld:測(cè)試驅(qū)動(dòng)開發(fā)是從90年代末的極限編程從業(yè)者開始的。但事實(shí)上,人們?cè)诰帉懘a的數(shù)十年前已經(jīng)開始編寫測(cè)試了。

其理念是這樣的:當(dāng)程序員編寫代碼時(shí),他們通常在代碼中解決復(fù)雜問題。但是,這種方式常常使得結(jié)果同樣復(fù)雜,并且含有遠(yuǎn)遠(yuǎn)超過實(shí)際需要解決的問題(假設(shè)重要的東西已經(jīng)被編碼)。

這意味著需要測(cè)試更多的代碼。測(cè)試有時(shí)需要改變“已經(jīng)工作”的代碼,這會(huì)引入風(fēng)險(xiǎn)。最終導(dǎo)致要么根本沒有進(jìn)行測(cè)試,因?yàn)闆]有時(shí)間測(cè)試,或者是次優(yōu)的測(cè)試,因?yàn)闊o法覆蓋我們想要覆蓋的范圍。

測(cè)試先行定義了工作需求。因?yàn)槲覀冇袦y(cè)試形式的定義,它定義了為了解決具體問題我們需要編寫什么樣的代碼。僅僅通過運(yùn)行測(cè)試就可以非常簡(jiǎn)單地知道我們是否有可工作的功能。

這種方式會(huì)擴(kuò)大測(cè)試覆蓋率,因?yàn)闇y(cè)試成為優(yōu)先開發(fā)活動(dòng),而不會(huì)被迫推到最后。

另外,編寫這些測(cè)試和制定場(chǎng)景的時(shí)候,我們會(huì)更深入地探索問題空間,因?yàn)闀?huì)出現(xiàn)許多問題。而在事后測(cè)試(test after)中,有時(shí)不會(huì)發(fā)生這些討論,開發(fā)人員以他們的思維編碼,而不是以解決方案的需求編碼。

InfoQ:你能簡(jiǎn)單介紹一下行為驅(qū)動(dòng)開發(fā)(BDD)和測(cè)試驅(qū)動(dòng)開發(fā)(TDD)的概念嗎?

Zilberfeld:在 TDD和 BDD中,你先將問題分解成多個(gè)情境,也就是例子。我們的頭腦更容易專注小情境,而不善于解決大的、復(fù)雜的問題。

然后開始著名的紅-綠-重構(gòu)循環(huán),就像這樣:

  • 編寫一個(gè)失敗的情境。失敗是因?yàn)榫幾g或者因?yàn)榇a不存在。無論如何,該測(cè)試是代碼如何被外部模塊使用的案例。
  • 努力讓測(cè)試通過。重點(diǎn)是可工作的功能而不是形式,也就是編寫最小的實(shí)現(xiàn),讓它通過測(cè)試。更進(jìn)一步,它應(yīng)該通過迄今為止我們編寫的整個(gè)測(cè)試套件。
  • 改進(jìn)代碼。現(xiàn)在一切都是綠色的,使用測(cè)試安全網(wǎng)我們可以重寫代碼。如果我們破壞了什么,我們會(huì)立即知道。

將問題分解成更小的部分,然后以增量的形式開發(fā)需要的代碼,并且在流程中加入急需的剎車。這有助于我們思考我們遺漏的情境,而不是“我們知道解決方案是什么樣子”。

BDD開始于2000年代中期,更進(jìn)一步地將 TDD推向產(chǎn)品空間。通過使用產(chǎn)品用途案例,我們可以僅僅開發(fā)情境所需的代碼。我們可以專注對(duì)業(yè)務(wù)重要的情境。然后可以使用 TDD編寫實(shí)際代碼。

BDD最大的優(yōu)勢(shì)是溝通。如果你將“三個(gè)同伴”——業(yè)務(wù)分析師、開發(fā)人員和測(cè)試人員——集中到一個(gè)房間,討論我們希望看到的行為案例,那么在編寫代碼之前,我們將會(huì)得到最好的提出和解決問題的觀點(diǎn)。

而這就是 BDD——討論商定的行為案例。這些案例可以寫成自動(dòng)化測(cè)試(但這不是要求),然后編碼使測(cè)試通過,最后重構(gòu)代碼。

顯然,BDD情境的詳細(xì)程度比更精細(xì)的 TDD測(cè)試還要寬泛。盡管我發(fā)現(xiàn)在某些方面它們是相互關(guān)聯(lián)的,但是在 TDD和 BDD情境中編寫測(cè)試還是需要不同的技能。

InfoQ:你有與合作團(tuán)隊(duì)使用 BDD和 TDD的案例嗎?

Zilberfeld:在 BDD中,由誰編寫情境是有區(qū)別的,但是我合作的大多數(shù)團(tuán)隊(duì)中,都是測(cè)試人員編寫情境。這些案例的討論通常在編寫代碼之前。測(cè)試人員和開發(fā)人員并行工作——測(cè)試人員專注高水平的自動(dòng)化測(cè)試,開發(fā)人員專注代碼和單元測(cè)試(測(cè)試優(yōu)先與否)。一旦完成就會(huì)對(duì)情境進(jìn)行評(píng)審。然后在某個(gè)時(shí)候?qū)﹂_發(fā)和測(cè)試進(jìn)行集成,以確保測(cè)試通過。

BDD和 TDD在迭代中非常“敏捷”,這使得情境“完成”與否非常的明顯。BDD情境要么“符合”迭代,要么就是故事過于冗長(zhǎng)。

在實(shí)現(xiàn)上 TDD稍有不同。培訓(xùn)之后,開發(fā)人員會(huì)對(duì)等待他們的代碼妥協(xié)。通常這些都是遺留代碼,這與干凈的測(cè)試先行代碼不同。

我常開玩笑說 TDD中最后一個(gè) D是紀(jì)律。因?yàn)樗鼘?duì)測(cè)試先行的實(shí)現(xiàn)最重要。它與我們被教導(dǎo)的不同也更難,因此在看到價(jià)值之前我們需要團(tuán)隊(duì)的支持。這就是為什么大部分團(tuán)隊(duì)最終不做 TDD,勉強(qiáng)接受事后測(cè)試的緣故。

熬過困難的前期之后,開始清理自己的代碼,添加更多的覆蓋率。代碼變得更加容易維護(hù)。并且從社會(huì)角度來看,新加入團(tuán)隊(duì)的開發(fā)人員會(huì)帶著“這就是我們的工作方式”理念加入 TDD。這是一個(gè)正面的反饋循環(huán)。

InfoQ:你能給 InfoQ讀者提前透露一下 Agile Practitioners會(huì)議上研討會(huì)的內(nèi)容嗎?以及向參會(huì)者展示如何在不編寫任何代碼的情況下探索 BDD和 TDD?

Zilberfeld:這次研討會(huì)背后還有一個(gè)故事。幾年前,我打算在比利時(shí) Testing Days會(huì)議上舉辦“TDD a spaceship”研討會(huì)(我打算三月在荷蘭的 Agile Testing Days會(huì)議上舉辦)。它是為開發(fā)人員設(shè)計(jì)的,但是參與者都是測(cè)試人員,擁有極少的編碼經(jīng)驗(yàn)。因此研討會(huì)變成解釋測(cè)試先行的理念,并且是在沒有實(shí)際編碼的情況下。很自然地,我被吸引到星球大戰(zhàn)的例子,我們交談、做課堂筆記,并討論了驗(yàn)收標(biāo)準(zhǔn),以及如何知道故事已經(jīng)完成。

那次研討會(huì)之后,我考慮如何以一種經(jīng)驗(yàn)的方式實(shí)現(xiàn)它。碰巧,我被介紹給GIF制作軟件工具,突然之間我們有了能夠幫助的工具。這是一個(gè)創(chuàng)建型工具,人們可以提前寫電影“腳本”,構(gòu)建并運(yùn)行,并能夠立即獲得反饋。

很棒的是我們可以應(yīng)用敏捷開發(fā)原則和經(jīng)驗(yàn)。因?yàn)槟闼胂蟮碾娪皹邮礁鷮?shí)際結(jié)果總是會(huì)有出入,所以我們構(gòu)建了一個(gè)新的版本。

另一個(gè)案例是處理遺留代碼。其中一個(gè)練習(xí)是在電影中更換演員,但是因?yàn)殡娪耙呀?jīng)編輯,因此我們只能在開頭或者結(jié)尾添加場(chǎng)景。鑒于需求與代碼不能分開考慮,如何更改需求與已經(jīng)構(gòu)建完成的代碼之間的沖突這一理念就非常有啟發(fā)性。

InfoQ:你同時(shí)還是agile practitioners會(huì)議的組織者之一,你能提前透露一下會(huì)議議程嗎?

Zilberfeld:這是我們第五年舉辦該會(huì)議,自創(chuàng)立以來無論是規(guī)模還是質(zhì)量都得到了提升。它被列為以色列最好的敏捷會(huì)議是因?yàn)椋?

我們圍繞“親身實(shí)踐”主題會(huì)議。我們將有全天的專題報(bào)告、小型研討會(huì),甚至演講都具有實(shí)際用途。我們旨在讓人們親身體驗(yàn),然后回歸工作,開始實(shí)施他們學(xué)到的內(nèi)容。

我們?yōu)椴煌愋偷膮⑴c者準(zhǔn)備了內(nèi)容——Scrum Master,測(cè)試人員,開發(fā)人員,產(chǎn)品經(jīng)理,團(tuán)隊(duì)領(lǐng)袖等任何你能夠想到的。但是,該會(huì)議不僅僅是拓寬你的角色知識(shí)。它是以一種“親身實(shí)踐”的方式讓你學(xué)習(xí)別人如何做的。

查看英文原文:Test First Approaches With Test Driven Development and Behavior Driven Development

相關(guān)熱詞搜索:test first TDD BDD 文化 & 方法 語言 & 開發(fā) Behavior Driven Development 協(xié)作 測(cè)試驅(qū)動(dòng)開發(fā) 重構(gòu) 團(tuán)隊(duì)工作 敏捷 測(cè)試 設(shè)計(jì)

上一篇:Facebook公布了可用于蘋果電視和手表的Parse SDK
下一篇:Facebook將關(guān)閉其移動(dòng)開發(fā)者平臺(tái)Parse

分享到: 收藏