實施TDD時的常見問題

2021-04-22 15:05:25 字數 1570 閱讀 1637

作者amr elssamadisy譯者李劍發布於 2023年3月12日 上午1時17分 社群

agile

主題敏捷實施,

單元測試

標籤測試驅動開發

如果你剛接觸tdd不久,可能一些常見的問題正在困擾著你:

chad meyers寫下了一些他在開始接觸tdd實踐時碰到的

疑惑和問題,它們應該都是比較常見的:

我該容忍多大限度的預先設計?你怎麼知道應該何時停止(也就是說,「當人們開始討論演算法,就是該測試的時機了」)?

對於象「我心裡清楚我們需要這個」這類東西——我們該如何處理(例如,在控制台main()方法中加上乙個try/catch?)

編寫測試時,為了讓**編譯通過,你不得不寫下一兩個介面,乙個實體類,在類中還有一些notimplementedexceptions等等。這一步該走多遠?

如果在測試乙個使用者故事期間,你發現先前的預先設計有問題,你是會馬上停下來跟你的搭檔討論,做該做的事,然後繼續;還是折返回去,在當前的故事中採用完整的測試優先模式?

在處理乙個新的使用者故事時,你發現針對前乙個故事所編寫的測試已經不再體現需求。你是否會立刻重構那個測試,還是把它標記為「忽略」,等你完成當前的故事再回過頭去處理那個被忽略的測試?還是有其它做法?

如果新的使用者故事要求對某個已有的測試做出輕微調整,你是會調整它,還是會寫乙個新測試,把舊的扔掉(也就是,「不許更改現有的測試**!」,或者「只有出現小的編譯問題時才準動它,否則就別碰!」)?

如果你構建了模型並且通過了測試,但是你發現這個設計很幼稚,而且即將要做的使用者故事肯定會對其進行重大修改,並生成乙個新的完全不同的模型。你是應該退 一步,考慮進行大型重構嗎?還是應該繼續修修補補,調整現有的模型,儘管這個模型最終會被目前看來顯然超出該使用者故事範圍的工作所改進?

derick bailey分享了他對chad這些問題的看法。他很謹慎的說,這些都是基於他自己的親身體會,所以你的實踐經驗可能會跟他的不同。下面是他的回答:

知道自己應該構建什麼就行。

這個問題實際上應該根據你的實際專案來回答。我最近做了乙個企業整合專案,裡面用到了我們的核心維護系統,然後新增了一些離線操作功能。在這個專案中,我 沒有做太多的預先設計。我知道系統需要能夠在離線模式下操作,我還知道即使是沒人登入計算機或者執行這個軟體時,它也需要能夠執行一些操作,我知道它需要 跟主維護系統進行雙向通訊,用來執行與維護相關的的一定數量的任務。我從一些設想/預先設計開始動手——構建了乙個windows service來執行核心程序,構建了乙個客戶端-伺服器架構來託管ui,在乙個訊息系統上為通訊提供支援。除了這些算是預先設計以外,在構建軟體的過程 中都是其他各項任務的功能需求來驅動專案設計的進展。

最近,我與乙個為實驗室開發某系統的團隊一起工作時,有了截然相反的體驗。我們有源於客戶的需求,客戶所要求的流程,以及對客戶手中資料進行轉換的需要; 我們需要乙個大規模的預先設計,用以判斷我們的解決方案可以滿足資料轉換和功能需求。系統的核心設計是預先完成的,但是具體實現還是在開發過程中慢慢成 型。

common questions when adopting tdd

實施TDD時的常見問題

在infoq 發表的一篇文章 實施tdd時的常見問題 中,chad meyers提出了關於tdd實施的問題,如下所示 我該容忍多大限度的預先設計?你怎麼知道應該何時停止 也就是說,當人們開始討論演算法,就是該測試的時機了 對於象 我心裡清楚我們需要這個 這類東西 我們該如何處理 例如,在控制台mai...

實施TDD時的常見問題

在infoq最近發表的一篇文章 實施tdd時的常見問題 中,chad meyers提出了關於tdd實施的問題,如下所示 我該容忍多大限度的預先設計?你怎麼知道應該何時停止 也就是說,當人們開始討論演算法,就是該測試的時機了 對於象 我心裡清楚我們需要這個 這類東西 我們該如何處理 例如,在控制台ma...

Dynamics 365 實施常見問題及避免

專案管理中,解決問題的方法沒有對錯,只有是否適合自己,以下經驗僅僅是個人的觀點,分享出來是為了跟同行進行交流,給初學者在專案實施過程中一些參考案例及思路。經歷過erp的實施後發現,大部分的專案實施都很辛苦,尤其上線前後,顧問們都加班加點的幹活,但是上線後仍然發現有很多問題,我見過和聽過的問題主要有以...