是否使用TDD(測試驅動開發)進行UI開發
問題
StackOverflow上有一則是否使用TDD(測試驅動開發)進行UI開發 的提問。
JacobE問:
對於是否使用TDD進行開發UI這件事,我想了很久,但難以決定。我想聽聽你們的意見。
回答
kdgregory的回答(23票贊同)
試圖測試UI元件的放置是沒有意義的,首先因為UI佈局是主觀的,所以應該由人來測試。其次,隨著UI改動,你要不斷地重寫測試。 同樣,沒必要測試你所使用GUI庫的元件,它們已經被非常多的人測試過了。如果你寫了新的UI元件,倒是可以測一測。 你應該測試的是GUI下面的程式行為:控制器和模型部分。朝這個方向努力,你就會開始關心元件分離。為了方便測試,你會讓你的模型部分和控制器和你的UI儘量解耦。
bangroot的回答(8票贊同)
當我使用自動化測試去測試UI的外觀風格時,我發現這是最大的“過度工程”。我的建議是:不要!把你的測試重心轉移到程式的行為上吧,至於程式的UI,留給測試團隊去做吧。關鍵是把你的精力用在高收益的行為上,自動化的UI測試不僅不會增加價值,還會讓你負債!
Brian Rasmussen的回答(5票贊同)
TDD的作用就是讓你的邏輯程式碼和你的GUI程式碼分離。如果你這樣做了,你會發現很容易用TDD建立邏輯程式碼。如果你的邏輯程式碼分離得好,在它之上你完全可以建立另一套UI。
Harald Scheirich(4票贊同)
我從來不用TDD做任何UI佈局的事情,因為花的時間太不值。
後面的解答不一一列舉。
結論
關於這個問題的回答基本是一邊倒的結論:沒必要把精力放在UI的自動化測試上。原因可歸結為以下兩點:
- 不合理。“因為UI佈局是主觀的,所以應該由人來測試。”
- 不划算。對於UI的自動化測試,要花費很大的努力和很多的時間,隨著UI改動,測試也要改動。工作量太大。明顯不如由人來測試UI划算。
根據以上的討論,我的結論是:
- TDD是輔助設計的一種方法,但不是唯一的方法。當我做UI佈局時,寫CSS時,沒必要TDD。
- TDD應該針對程式的行為,而不是程式的外觀。TDD的目標寫出依賴儘量少的,方便測試的功能模組。
相關文章
- Swift 進階開發指南:如何使用 Quick、Nimble 執行測試驅動開發(TDD)SwiftUI
- TDD(測試驅動開發)死了嗎?
- 測試驅動開發(TDD)的思考
- 使用IdleTest進行TDD單元測試驅動開發演練(2)
- 使用IdleTest進行TDD單元測試驅動開發演練(1)
- 測試驅動開發(TDD)例項演示
- 測試驅動開發(TDD)跟敏捷開發有衝突敏捷
- 測試驅動開發(TDD)實戰心得 - DeniMoka
- 使用 TDD 測試驅動開發來構建 Laravel REST APILaravelRESTAPI
- 測試驅動開發(TDD)總結——原理篇
- 變異測試是測試驅動開發(TDD)的演變
- 測試驅動開發(TDD)—— 資料庫查詢篇資料庫
- 拒絕測試驅動開發(TDD)的10個理由
- 使用IdleTest進行TDD單元測試驅動開發演練(3) 之 ASP.NET MVCASP.NETMVC
- 使用Spring Boot REST API進行測試驅動開發Spring BootRESTAPI
- Scrum敏捷軟體開發之技術實踐——測試驅動開發TDDScrum敏捷
- Kent Beck 的《測試驅動開發》(TDD) Money示例Ruby版
- 【敏捷開發】驅動測試開發敏捷
- "測試"驅動開發
- 測試驅動開發TDD | IDCF FDCC認證學員作品
- TDD---測試驅動開發,簡單的一點認識
- 採用測試驅動開發理念(Test Driven Development)進行 SAP UI5 應用的功能開發(一)devUI
- 採用測試驅動開發理念(Test Driven Development)進行 SAP UI5 應用的功能開發(二)devUI
- 敏捷聯盟Gordon Pask獎獲得者講“測試驅動開發”(TDD)敏捷Go
- 談“測試驅動的開發”
- 小議測試驅動開發
- 行為驅動開發在 Python 開發測試中的應用Python
- 你這不是測試驅動開發
- 什麼是測試驅動開發
- Laravel 測試驅動開發 -- 正向單元測試Laravel
- 放棄測試優先式開發(TDD)
- 使用Jdon Framework進行模型驅動軟體開發Framework模型
- 基於測試驅動的iOS開發iOS
- 面向 C++ 的測試驅動開發C++
- 測試驅動開發到底好不好
- Go 語言:透過TDD測試驅動開發學習 Mocking (模擬)的思想GoMock
- [譯] 通過 Quick 和 Nimble 在 Swift 中進行測試驅動開發UISwift
- 探索AI驅動Web開發動態UIAIWebUI