是否使用TDD(測試驅動開發)進行UI開發

吳吉慶發表於2015-02-12

問題

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的自動化測試上。原因可歸結為以下兩點:

  1. 不合理。“因為UI佈局是主觀的,所以應該由人來測試。”
  2. 不划算。對於UI的自動化測試,要花費很大的努力和很多的時間,隨著UI改動,測試也要改動。工作量太大。明顯不如由人來測試UI划算。

根據以上的討論,我的結論是:

  1. TDD是輔助設計的一種方法,但不是唯一的方法。當我做UI佈局時,寫CSS時,沒必要TDD。
  2. TDD應該針對程式的行為,而不是程式的外觀。TDD的目標寫出依賴儘量少的,方便測試的功能模組。

相關文章