iT邦幫忙

2022 iThome 鐵人賽

DAY 22
1
Software Development

QA 三十天養成日記系列 第 22

[Day22] 軟體世界裡的 TDD/BDD/ATDD!懶人包幫你一次釐清(二)

  • 分享至 

  • xImage
  •  

上一篇中詳細講解了 TDD,此篇將會重於 BDD/ATDD 的概念為主
目的是希望有個 TDD 基底後,了解 BDD/ATDD 會更加順利


什麼是 BDD(Behaviour-Driven Development)?

BDD(Behaviour-Driven Development)是一種開發流程,中文是「行為驅動開發」。
而 BDD 比 TDD 更進一步,在寫測試前先寫測試規格書,同時它會更從使用者的角度建立相關的測試情境。
然後這份測試規格會用更接近人類語意的自然語言來描述軟體功能和測試案例。
而且這份規格不是單純的敘述文件,而是一份「可以被執行的規格」,也就是可以被轉成自動化測試。

BDD 的步驟

  • 第一階段是 Given,為測試的輸入
  • 第二階段是 When,為事件或動作的觸發時間
  • 最後一個階段是 Then,為測試的結果
Feature: 一句話簡介這份規格書所涵蓋的軟體功能
  對這份規格書更多的介紹 (非必要,不影響自動測試)
  介紹....
  介紹....

  Scenario: 要測試的測試案例 1
    Given 前提條件是....
    When 我做了某件事....
    Then 結果應該得到...

  Scenario: 要測試的測試案例 2
    Given 前提條件是....
    When 我做了某件事....
    Then 結果應該得到...

BDD 的好處:

  • 由於非技術性語言,所有技術或非技術團隊的都能更加容易理解
  • 從使用者和開發人員的角度更關注系統本身的行
  • 提供多種方式來說明實際的測試情境,以便更了解需求

較為著名的 BDD 測試框架是 Cucumber
實作教學可參考: BDD/TDD差別是什麼? 手把手用 Cucumber 實作示範BDD

TDD vs BDD

BDD 主要是從使者用的角度測試產品的行為方式,而 TDD 則單獨測試產品中的小功能。
TDD 關注的是特定方法結果,而 BDD 關注更複雜使用者場景的結果。

簡單說明:
TDD :【我需要以特定方式執行預先設計的測試,而不用擔心結果】
BDD :【只要結果在預定條件下是正確的,這個過程就無關緊要】

BDD 和 TDD 是可以同時進行的嗎?

答案:【可以】
BDD 和 TDD 雖然有這不同的地方,但兩者是並不相互排斥。
反之讓兩者並存時,是可以確保有更高程度的測試情境及測試案例的效率。

e.g. 開發團隊可以使用 BDD 方法與 TDD 一起進行更複雜的測試時,這一來可以從開發的角度處理技術上的細微差別,二來還可以評估使用者的行為。
為了實現這些小細節,開發可以撰寫更加單獨的測試單元來維護不同組件。
這時考慮到這些相同的組件是可以在測試情境上相互搭配使用,對測試結果來說也會更有效益。


什麼是 ATDD(Acceptance Test-Driven Development)?

ATDD(Acceptance Test-Driven Development) 是一種開發流程,中文是「驗收測試驅動開發」。ATDD 是一種將驗收標準轉化為測試的開發技術。

驗收測試的書寫方式,通常是非軟體工程師也能閱讀的文件,可以是可執行的自動化測試,但也可以不是,這點與 TDD 不太相同。

ATDD 的目的在於讓工程師與團隊其他角色,能夠互助合作,並對產品需求達成共識,互相了解要完成什麼內容。

ATDD 的步驟:

  1. 討論需求
  2. 訂定驗收測試
  3. 才開始根據規格寫軟體

所以 ATDD 相比 TDD BDD 不同之處是,ATDD 在規格撰寫之前,就開始先條列驗收的測試
再依照驗收測試定義規格書,其實有點像是我們常說的 User Story,但差別是【驗收的方式及標準】。

User Story vs ATDD 兩者差異

User Story 為簡單說明使用者行為,以表示這個情境符合需求即可。
ATDD 不僅僅是需求,也會更著重於解決潛在的業務問題。

User Story 目標:

  • 開始討論誰需要解決問題,要解決什麼問題,以及為什麼要解決
  • 專注於需要解決的業務問題
  • 盡可能簡單和簡短地展示需求

ATDD 目標:

  • 確保每個人都能正常理解所有需求及問題
  • 在開始工作之前確認團隊責任是什麼
  • 協助通過自動化測試來驗證 User Story

User Story 範本:

  • 作為使用者,我要能夠在我的交易超過 5000 元時輸入我的密碼,這樣即使我的卡被盜,我也能確保資金安全。
  • 作為使用者,我要能夠使用金融卡上快速付款,這樣交易的時間就能縮短。
  • 作為使用者,我要能對我的金融卡進行審查,以確保它們是有效的。

與 User Story 相比,了解驗收標準以及所有其他條件非常重要
因為如果一個需求是模糊的或不完整的,它可以延後到下一個 Sprint 才進去進行
但是,如果發現沒有驗收標準,則無法確定是否滿足 User Story。

ATDD 範本:
當有個 User Story 為

  • 作為使用者,我要能夠使用金融卡上快速付款,這樣交易的時間就能縮短。

以下驗收標準為:

  • 金融卡號碼要正確
  • 單筆交易上限為 10000 元
  • 提交交易時,要確保餘額充足
  • 交易的時間要在 3s 內完成

總結

TDD BDD ATDD
TDD 專注於功能的實現 BDD 專注於系統的行為 ATDD 專注於捕捉準確的需求
主要是開發人員參與編寫單元測試 開發、QA 和使用者參與此過程 開發、QA 和使用者參與此過程
用 Python、Java 等程式語言撰寫 用簡單易懂的英文敘述方式 用簡單易懂的英文敘述方式
非技術人員不容易理解這一點 非技術人員很容易理解這一點 非技術人員很容易理解這一點
重點是編寫單元測試 重點是理解需求 重點是編寫驗收測試
TDD 中使用的工具有 JDave、Cucumber、JBehave、Spec Flow、BeanSpec、Gherkin Concordian、FitNesse、Junit、TestNG、NUnit 框架、Selenium 工具 BDD 中使用的工具有 Gherkin、Dave、Cucumber、RSpec、Behat、Lettuce、JBehave、Specflow、BeanSpec、Concordian、MSpec、Cucumber with Selenium / Serenity ATDD 中使用的工具有TestNG、FitNesse、EasyB、Spectacular、Concordian、Thucydides、Robot Framework

ATDD、BDD 與 TDD 的本質其實是相同的設計思維,先從要做什麼開始思考,接著是如何驗證,最後才是寫內容達成驗證。

最初的 TDD 從單元測試出發,而 ATDD 與 BDD 則是從需求面切入,基於 TDD 擴展了測試的層面,讓 TDD 的應用更加寬廣。

參考來源


上一篇
[Day21] 軟體世界裡的 TDD/BDD/ATDD!懶人包幫你一次釐清(一)
下一篇
[Day23][負載測試] K6 基本介紹、安裝及實作,輕鬆上手!
系列文
QA 三十天養成日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言