欧美3dxxxxhd_国产精品欧美日韩_日韩视频在线播放_亚洲高清不卡在线

了解TDD和BDD的差異

了解TDD和BDD的差異

測試驅動開發 (TDD)和行為驅動開發 (BDD?) 都是軟件開發的測試優先方法。它們共享共同的概念和范式,植根于相同的哲學。在本文中,我們將重點介紹這兩種方法的共性、差異、優缺點。

了解TDD和BDD的差異-美聯科技

什么是測試驅動開發(TDD)

測試驅動開發 (TDD) 是一種依賴于重復短開發周期的軟件開發過程:需求轉化為非常具體的測試用例。編寫代碼是為了使測試通過。最后,對代碼進行重構和改進,以確保代碼質量并消除任何技術債務。這個循環被稱為 Red-Green-Refactor 循環。

什么是行為驅動開發 (BDD)

行為驅動開發 (BDD) 是一個軟件開發過程,它鼓勵參與項目交付的所有各方之間的協作。它鼓勵以各方都能理解的通用語言對系統行為進行定義和形式化,并將此定義用作基于 TDD 的流程的種子。

TDD 和 BDD 之間的主要區別

TDD BDD
重點 交付功能特性 交付預期的系統行為
方法 自下而上或自上而下(驗收測試驅動開發) 自頂向下
初始點 一個測試用例 用戶故事/場景
參與者 技術團隊 包括客戶在內的所有團隊成員
語言 編程語言 通用語
過程 精益,迭代 精益,迭代
提供 符合我們測試標準的功能系統 一個按預期運行的系統和一個用人類通用語言描述系統行為的測試套件
避免 過度工程、低測試覆蓋率和低價值測試 偏離預期的系統行為
脆性 實現的變化可能導致測試套件的變化 如果需要更改系統行為,則僅需要更改測試套件
實施難度 自底向上比較簡單,自頂向下比較難 為所有相關方提供更大的學習曲線

了解TDD和BDD的差異-美聯科技

測試驅動開發 (TDD)

在 TDD 中,我們有眾所周知的 Red-Green-Refactor 循環。我們從一個失敗的測試開始(紅色),并盡可能少地實現代碼以使其通過(綠色)。此過程也稱為測試優先開發。TDD 還增加了一個 Refactor 階段,這對整體成功同樣重要。

TDD 方法是由單元測試和后來的 TDD、敏捷軟件開發和最終極限編程的先驅之一的 Kent Beck 發現(或可能重新發現)的。

下圖很好地提供了一個易于理解的過程概述。然而,美在于細節。在深入研究每個單獨的階段之前,我們還必須討論 TDD 的兩種高級方法,即自下而上和自上而下的 TDD。

自下而上的 TDD

自底向上 TDD(也稱為 Inside-Out TDD)背后的理念是迭代地構建功能,一次只關注一個實體,在移動到其他實體和其他層之前鞏固其行為。

我們首先編寫單元級測試,繼續執行它們,然后繼續編寫高級測試,聚合低級測試的功能,創建所述聚合測試的實現,等等。通過逐層構建,我們最終將達到一個階段,即聚合測試是一個驗收水平測試,希望符合所要求的功能。此過程使其成為一種高度以開發人員為中心的方法,主要旨在使開發人員的生活更輕松。

優點 缺點
一次只關注一個功能實體 延遲整合階段
功能實體易于識別 實體需要暴露的行為數量尚不清楚
不需要高水平的愿景開始 實體之間無法正確交互從而需要重構的高風險
有助于并行化 業務邏輯可能分布在多個實體中,使其不清楚且難以測試

了解TDD和BDD的差異-美聯科技

自上而下的 TDD

自上而下的 TDD 也稱為外向內 TDD 或驗收測試驅動開發 (ATDD)。它采取相反的方法。我們開始構建一個系統,迭代地為實現添加更多細節。隨著重構機會變得明顯,迭代地將其分解為更小的實體。

我們首先編寫一個可接受級別的測試,然后進行最少的實現。該測試也需要逐步進行。因此,在創建任何新實體或方法之前,需要在適當級別進行測試。因此,我們迭代地改進解決方案,直到它解決了啟動整個練習的問題,即驗收測試。

這種設置使自上而下的 TDD 成為一種更加以業務/客戶為中心的方法。這種方法更難正確,因為它在很大程度上依賴于客戶和團隊之間的良好溝通。它還需要開發人員的良好公民身份,因為需要仔細考慮下一個迭代步驟。這個過程會及時加快,但確實有一個學習曲線。然而,好處遠遠超過任何負面影響。這種方法導致客戶和團隊之間的協作成為中心舞臺,一個具有非常明確的行為、明確定義的流程、專注于首先集成以及非常可預測的工作流程和結果的系統。

優點 缺點
一次只關注一個用戶請求的場景 獲得正確的斷言測試至關重要,因此需要業務/用戶/客戶和團隊之間的協作討論
流量很容易識別 依賴于 Stubbing、Mocking 和/或測試替身
重點是集成而不是實現細節 由于通過多次迭代識別流程,因此啟動較慢
一個實體需要暴露的行為數量是明確的 更有限的并行化機會,直到骨架系統開始出現
用戶需求、系統設計和實施細節都清楚地反映在測試套件中
可預見的

紅綠重構生命周期

有了上面討論過的關于如何處理 TDD 的高級愿景,我們可以自由地深入研究 Red-Green-Refactor 流程的三個核心階段。

了解TDD和BDD的差異-美聯科技

紅色的

我們首先編寫一個測試,執行它(因此失敗),然后才開始執行該測試。在這里編寫正確的測試至關重要,就我們試圖實現的測試層達成一致也是如此。這將是驗收水平測試還是單元水平測試?這種選擇是自下而上和自上而下 TDD 之間的主要界限。

在綠色階段,我們必須創建一個實現以使紅色階段中定義的測試通過。實現應該是盡可能最小的實現,使測試通過,僅此而已。運行測試并觀察它通過。

創建盡可能最小的實現通常是這里的挑戰,因為開發人員可能傾向于通過習慣的力量立即美化實現。這個結果是不可取的,因為它會產生技術包袱,隨著時間的推移,這將使重構更加昂貴,并可能基于重構成本扭曲系統。通過使每個實施步驟盡可能小,我們進一步強調了我們試圖實施的過程的迭代性質。此功能將賦予我們敏捷性。

另一個關鍵方面是紅色階段,即測試,是推動綠色階段的動力。任何實現都不應該由非常具體的測試驅動。如果我們采用自下而上的方法,這很自然。但是,如果我們采用自上而下的方法,那么我們必須更加認真,并確保在實現形成時創建進一步的測試,從而從驗收級別測試轉向單元級別測試。

重構

重構階段是 TDD 的第三個支柱。這里的目標是重新審視和改進實施。優化了實現,提高了代碼質量,消除了冗余。

重構對許多人來說可能具有負面含義,被視為純粹的成本,在第一次就修復了不正確的事情。這種看法源于更傳統的工作流程,其中重構主要只在必要時進行,通常是在技術包袱達到無法維持的水平時,從而導致冗長、昂貴的重構工作。

然而,在這里,重構是工作流的固有部分,并且是迭代執行的。這種靈活性極大地降低了重構的成本。代碼沒有完全重做。相反,它正在緩慢發展。此外,根據定義,重構的代碼包含在測試中。在之前的代碼迭代中已經通過的測試。因此,可以放心地進行重構,從而進一步加快速度。此外,這種改進代碼庫的迭代方法允許緊急設計,這大大降低了過度設計問題的風險。

行為不應該改變是至關重要的,我們不會在重構階段添加額外的功能。這個過程允許以極大的信心和敏捷性進行重構,因為根據定義,相關代碼已經被測試覆蓋。

了解TDD和BDD的差異-美聯科技

行為驅動開發 (BDD)

如前所述,TDD(或自下而上的 TDD)是一種以開發人員為中心的方法,旨在生成更好的代碼庫和更好的測試套件。相比之下,ATDD 更加以客戶為中心,旨在提供更好的整體解決方案。我們可以將行為驅動開發視為 ATDD 的下一個邏輯進展。Dan North在 TDD 和 ATDD 方面的經驗導致他提出了 BDD 概念,其想法和主張是將 TDD 和 ATDD 的最佳方面結合在一起,同時消除他在這兩種方法中發現的痛點。他發現,具有描述性的測試名稱很有幫助,而且測試行為比功能測試更有價值。

Dan North 將 BDD 簡潔地描述為“使用多個級別的示例來創建共享理解和表面確定性以交付重要的軟件”,做得很好。

這里的一些關鍵點:

  • 我們關心的是系統的行為
  • 測試行為比測試特定的功能實現細節更有價值
  • 使用通用語言/符號在領域專家、開發人員、測試人員、利益相關者等之間形成對預期和現有行為的共同理解。
  • 當每個人都能夠理解系統的行為、已經實現了什么以及正在實現什么并且保證系統滿足所描述的行為時,我們實現了表面確定性

BDD 將責任更多地放在客戶和團隊之間富有成效的協作上。正確定義系統的行為變得更加關鍵,從而導致正確的行為測試。這里的一個常見陷阱是對系統將如何實施行為做出假設。這個錯誤發生在被實現細節污染的測試中,因此使其成為功能測試而不是真正的行為測試。這個錯誤是我們想要避免的。

行為測試的價值在于它測試了系統。它不關心它是如何實現結果的。這種設置意味著行為測試不應隨時間而改變。除非行為本身需要作為功能請求的一部分進行更改。功能測試的成本效益更為顯著,因為此類測試通常與實現緊密耦合,以至于代碼的重構也涉及測試的重構。

然而,更大的好處是保留了表面確定性。在功能測試中,代碼重構也可能需要測試重構,這不可避免地會導致失去信心。如果測試失敗,我們不確定原因可能是什么:代碼、測試或兩者兼而有之。即使測試通過,我們也不能確信之前的行為已經被保留。我們所知道的是測試與實現相匹配。這個結果的價值很低,因為最終客戶關心的是系統的行為。因此,我們需要測試和保證的是系統的行為。

了解TDD和BDD的差異-美聯科技

基于 BDD 的方法應該導致完整的測試覆蓋,其中行為測試使用通用語言向所有各方充分描述系統的行為。與功能測試相比,即使完全覆蓋也不能保證系統是否滿足客戶的需求,重構測試套件本身的風險和成本只會隨著覆蓋率的增加而增加。當然,通過自上而下地從行為測試到更多功能測試來利用這兩種方法,將為行為測試帶來表面確定性的好處。此外,功能測試以開發人員為中心的好處也抑制了功能測試的成本和風險,因為它們只在適當的地方使用。

在直接比較 TDD 和 BDD 時,主要變化是:

  • 簡化了測試什么的決定;我們需要測試行為
  • 我們利用一種通用語言來縮短另一層通信并簡化工作;利益相關者定義的用戶故事是測試用例

出現了框架和工具的生態系統,以允許跨團隊進行基于通用語言的協作。以及通過利用行業標準工具來集成和執行測試等行為。這方面的例子包括 Cucumber、JBehave 和 Fitnesse 等等。

適合工作的工具

正如我們所看到的,TDD 和 BDD 之間并沒有真正的直接競爭。將 BDD 視為 TDD 和 ATDD 的進一步發展,它帶來了更多以客戶為中心,并進一步強調了客戶與技術團隊在流程的所有階段之間的溝通。這樣做的結果是一個系統,其行為符合所有相關方的預期,以及一個測試套件,以人類可讀的方式描述系統的許多行為,每個人都可以訪問并易于理解。反過來,該系統不僅對已實施的系統,而且對系統的未來更改、重構和維護提供了非常高的信心。

同時,BDD 很大程度上基于 TDD 流程,并進行了一些關鍵更改。雖然客戶或團隊的特定成員可能主要參與系統的最頂層,但其他團隊成員(如開發人員和 QA 工程師)會在他們以自己的方式在頂層工作時從 BDD 有機地轉變為 TDD 模型。下來時尚。

了解TDD和BDD的差異-美聯科技

我們期待以下主要好處:

  • 把痛苦向前推進
  • 客戶和團隊之間協作的責任
  • 客戶和團隊領導之間共享的共同語言,以分享理解
  • 實施精益的迭代過程
  • 保證交付的軟件不僅可以正常工作,而且可以按定義工作
  • 通過緊急設計避免過度設計,從而通過盡可能最小的解決方案達到預期的結果
  • 表面確定性允許快速和自信的代碼重構
  • 測試具有與生俱來的價值 VS 創建測試只是為了滿足任意代碼覆蓋率閾值
  • 測試是完整描述系統行為的活文檔

在某些情況下,BDD 可能不是合適的選擇。在某些情況下,所討論的系統技術性很強,可能根本不面向客戶。它使需求與功能的聯系比與行為的聯系更緊密,從而使 TDD 可能更適合。

采用 TDD 還是 BDD?

最終,問題不應該是采用 TDD 還是 BDD,而是哪種方法最適合手頭的任務。很多時候,這個問題的答案是兩者兼而有之。隨著越來越多的人參與到更重要的項目中,不言而喻的是,在整個項目生命周期的不同級別和不同時間都需要這兩種方法。TDD 將為技術團隊提供結構和信心。BDD 將促進和強調所有相關方之間的溝通,并最終交付滿足客戶期望的產品,并提供所需的表面確定性,以確保對未來進一步發展產品的信心。

通常情況下,這里沒有靈丹妙藥。相反,我們擁有的是一些非常有效的方法。兩者的知識將使團隊能夠根據項目的需要確定最佳方法。進一步的經驗和執行的流暢性將使團隊能夠在整個項目生命周期中根據需要使用其工具箱中的所有工具,從而實現最佳的業務成果。

客戶經理
欧美3dxxxxhd_国产精品欧美日韩_日韩视频在线播放_亚洲高清不卡在线
亚洲国产日韩欧美综合久久| 亚洲国产精品国自产拍av秋霞| 亚洲精品美女| 欧美区日韩区| 国产精品99久久久久久久女警| 亚洲全黄一级网站| 欧美日韩一区二区三区在线观看免 | 亚洲综合欧美日韩| 午夜国产精品视频免费体验区| 国产日产欧美精品| 美腿丝袜亚洲色图| 欧美激情一区二区三区| 亚洲一区亚洲二区| 欧美在线视频日韩| 亚洲精品日产精品乱码不卡| 亚洲精品国精品久久99热| 国产精品wwwwww| 久久天天躁夜夜躁狠狠躁2022| 农夫在线精品视频免费观看| 亚洲视频播放| 久久成人精品| 9l国产精品久久久久麻豆| 亚洲一区中文字幕在线观看| 黑人巨大精品欧美黑白配亚洲| 亚洲盗摄视频| 国产视频一区二区在线观看| 亚洲成人在线视频网站| 国产精品激情偷乱一区二区∴| 久久中文精品| 国产精品久久久久9999| 欧美a级片网站| 国产精品一卡二| 亚洲国产天堂久久综合网| 国产欧美短视频| 最近中文字幕日韩精品 | 精久久久久久| 一区二区欧美在线| 亚洲经典自拍| 亚洲免费观看| 欧美亚洲色图校园春色| 日韩视频精品在线| 久久人人爽人人爽| 久久成人这里只有精品| 欧美日韩国产综合视频在线观看| 久久资源av| 国产精品手机视频| 亚洲美女视频| 亚洲日本免费| 久久久久亚洲综合| 销魂美女一区二区三区视频在线| 欧美激情精品久久久久| 欧美成人午夜激情| 国内精品久久久久久久果冻传媒| 在线一区二区三区做爰视频网站 | 激情国产一区| 欧美一级在线亚洲天堂| 亚洲欧美三级伦理| 欧美午夜不卡在线观看免费 | 巨乳诱惑日韩免费av| 久久久久成人精品| 国产毛片久久| 午夜精品久久久久久久99水蜜桃 | 亚洲精品国产欧美| 亚洲精华国产欧美| 女同性一区二区三区人了人一 | 一区二区欧美在线| 欧美精品1区2区3区| 亚洲电影免费观看高清完整版| 狠狠88综合久久久久综合网| 欧美一区二区三区免费大片| 欧美怡红院视频| 国产欧亚日韩视频| 欧美一区二区三区视频在线观看| 小黄鸭精品aⅴ导航网站入口| 国产精品蜜臀在线观看| 亚洲与欧洲av电影| 久久久亚洲一区| 狠狠狠色丁香婷婷综合激情| 久久九九国产| 免费亚洲婷婷| aa级大片欧美三级| 国产精品久久久久久久久免费桃花 | 欧美一区二区高清在线观看| 久久亚洲精品视频| 亚洲电影免费| 欧美理论电影在线观看| 正在播放亚洲| 久久亚洲风情| 日韩视频一区二区三区在线播放免费观看| 欧美大片在线观看| 一本大道久久a久久精二百| 欧美一区二区三区视频在线| 在线看国产日韩| 欧美日韩视频一区二区三区| 亚洲尤物精选| 亚洲国产成人在线| 午夜精品久久久久影视| 狠狠色丁香久久婷婷综合_中| 嫩草成人www欧美| 一区二区三区国产盗摄| 久久久久9999亚洲精品| 亚洲精品综合| 国产亚洲免费的视频看| 欧美第十八页| 亚洲欧美日韩网| 亚洲日本国产| 久久一区中文字幕| 亚洲香蕉视频| 亚洲黄页一区| 国产亚洲精品一区二555| 欧美欧美全黄| 久久久久免费观看| 亚洲女与黑人做爰| 日韩午夜黄色| 欧美大片在线看| 欧美一区二区在线视频| 亚洲免费精品| 亚洲欧洲日夜超级视频| 韩国精品主播一区二区在线观看| 欧美精品日韩综合在线| 久久蜜桃av一区精品变态类天堂| 一区二区av在线| 亚洲国产欧美一区二区三区丁香婷| 欧美在线观看一区| 亚洲资源av| 一区二区精品| 亚洲日本国产| 亚洲国产欧美一区| 精品成人一区二区| 国产一区二区三区自拍| 国产乱码精品一区二区三| 欧美日韩一区二区视频在线| 欧美不卡视频一区发布| 久久美女性网| 久久久蜜桃精品| 久久精品国内一区二区三区| 亚洲综合国产精品| 亚洲一区区二区| 亚洲午夜精品久久久久久app| 99精品欧美一区| 亚洲精品综合精品自拍| 亚洲国产欧美一区二区三区同亚洲 | 亚洲成人影音| 91久久午夜| 亚洲激情综合| 亚洲免费观看| 中文精品在线| 亚洲免费在线电影| 亚洲午夜av电影| 亚洲一区在线观看视频| 亚洲一区影院| 欧美制服丝袜| 老牛嫩草一区二区三区日本| 久久亚洲一区二区| 欧美激情综合色| 91久久国产精品91久久性色| 亚洲娇小video精品| 亚洲另类春色国产| 亚洲一区二区三区精品视频| 亚洲欧美一区二区三区久久| 欧美亚洲免费高清在线观看| 久久精品一二三区| 嫩草成人www欧美| 欧美视频一区二区三区在线观看| 国产精品av免费在线观看| 国产精品在线看| 在线观看成人小视频| 日韩一级大片在线| 午夜精品久久久久久久久久久久久| 久久国产一区二区| 欧美激情1区| 亚洲色图制服丝袜| 久久精品国产77777蜜臀| 免费看亚洲片| 国产精品草草| 亚洲国语精品自产拍在线观看| 99精品欧美一区二区蜜桃免费| 午夜精品福利一区二区三区av | 久久久精品一区| 亚洲二区在线视频| 亚洲一级影院| 欧美岛国在线观看| 国产一区二区三区的电影| 亚洲日本激情| 久久久久久久999| 日韩写真视频在线观看| 久久国产主播精品| 欧美午夜剧场| 亚洲国产欧美不卡在线观看 | 亚洲电影免费观看高清完整版 | 激情欧美一区| 亚洲欧美国产77777| 欧美电影免费观看高清| 午夜精品视频网站| 欧美日韩国产另类不卡| 在线观看亚洲一区| 欧美一区在线看| 中文在线资源观看网站视频免费不卡| 久久亚洲春色中文字幕久久久| 国产精品成人观看视频国产奇米|