2012-03-30 76 views
3

我正在研究一個新的PHP項目,雖然我喜歡TTD,但我發現它似乎比在項目的這個階段對幫助更有幫助。我應該在新項目開始時使用TDD嗎?

我開始了但是現在我更深入的一些應用功能的原型,我發現自己重寫位和核心框架件與編寫測試一起編寫單元測試。看起來好像我花了很多時間重寫測試,也許我應該等到我處於更多的項目的alpha/beta階段。

我應該從頭開始寫單元測試,即使有很高的機會,我將不得不重寫它們嗎?

回答

3

是的,這是瞭解您的系統並創建一個可靠的API的最佳方式。

這聽起來像你需要將你的測試升級到更高的水平。不要測試單個方法,測試功能單元。但是這並不是一回事,因爲我還沒有遇到一個至少沒有朝着這個方向努力的tdd醫生。

+2

我對你的陳述有疑問。 TDD當然是設計系統的一種方式,但是爲了真正地設計一個設計,在編寫單行代碼,測試用例或其他方面之前,它不能替代進行適當的需求分析,並且完全理解問題域。 - 即便如此,我也會爭辯說,「建立一個扔掉」也更有可能是啓發性的。 – 2012-03-30 17:01:23

+0

@TylerEaves的確如此。根據我的經驗,我將對其進行修改,TDD是進行正確分析和了解開發人員可以使用的領域的最佳方式。所以是的,這是一個工具,在我看來,它是一個令人難以置信的強大工具,但它不是你應該使用的唯一工具。 – 2012-03-30 17:05:17

+1

有史以來唯一正確的需求分析是從交付的軟件進行回顧性分析。 :( – 2012-03-30 17:14:35

3

如果您要使用TDD,您最好先使用它。

如果您認爲這是正確的選擇,那麼使用它,否則當您決定在未來使用它時可能會頭疼。

+0

同意。 TDD非常棒,雖然它可能會讓事情變得困難,但如果您決定中途轉向使用TDD,情況會更糟。 – eandersson 2012-03-30 16:55:06

1

當然你會重新把它們重新組合,事情會改變。

如果你做了全面,徹底的需求分析,事情會改變(更可能已經改變了,而你正在追求的是嵌合體),你就必須重新分析。

但是,如果你潛水權和獲得寫了一些代碼和一些成果排序,你不會有任何有用的分析,沒有測試,然後整個銷售部門搓手,因爲交付=可供出售。

迭代,寫測試你可以,履行他們,看看你下一步去哪裏。 TDD或經典的瀑布,在你有一些軟件之前,很多工作都在前面進行。

做前期工作第二,不是很多的使用,並且永遠不會發生。

也許你需要更多的概念證明或故事登機,或者本尊禁止分析,但是所有的潛水都會在儀表盤上放置表情符號,而且你唯一能獲得的信用就是踢球在nads當車輪脫落時,以及次級風格的技術債務危機。

1

我發現它似乎比在項目的這個階段幫助 更有幫助。

這是爲什麼?你能更客觀地確定你的擔憂嗎?

現在我更深入的一些應用 功能的原型,我發現自己重寫位和核心 框架件與編寫測試一起。看起來好像我是 花了很多時間重寫測試,在這裏我應該等待 ,直到我進入更多的項目的alpha/beta階段。

  • 不要在原型設計時使用TDD。原型是要獲得知識..很快......在時間框中更可取。一旦你消除了不確定性,你扔掉原型。這次用TDD再次開始。
  • 您的測試正在改變,因爲您現在有更好的洞察力?或者,測試是否與實現相結合(知道測試主體如何實現與提供的服務相關)?前者是不可避免的,除非你具有高瞻遠矚。需求變化,測試變化。後者是一種氣味......可以通過專注於什麼而不是如何去避免?
  • 等待您的產品/應用程序穩定下來的問題是:您可能會永遠拖延,或者最終可能會得到一個難以測試的設計。這將使寫作測試(後來)比它必須更困難。 如果您在可測試的代碼基礎上以較小的增量進行工作,TDD將變得更加輕鬆。這些測試也是一個安全網,幫助您充滿信心地做出改變並提供即時反饋。
+0

對安全網有很大幫助,它是人們不經常承認的測試的一部分。傾向於將更多的測試視爲實現的最終驗證,而不是過程的一部分,無論他們是先做還是先做/從不做 – 2012-03-31 19:03:52

0
  • 是的,我認爲它開始從非常begining編寫測試是非常重要的。 TDD(測試驅動開發)不僅僅是單獨測試各個類。它應該指導您在設計階段做出的決定。

  • 當你先寫測試的時候,你會更好地理解你的問題。你在說,你很可能會在稍後重寫它們。如果是這種情況,那麼這可能意味着你會更好地理解你的系統,這是一件好事。然後,您可以通過實施進一步的測試或對現有測試進行重新分解來重新設計您的系統。

  • 它可能會讓人感覺像是在浪費時間,但並不是因爲您對自己的系統有了更好的理解。

  • 我正在閱讀的一本書(以測試爲導向的面向對象的軟件)提到了一個「步行骨架」概念。它表明你應該使用TDD來開發最低限度的工作解決方案,即使它非常基本。

  • 另一個要點是您應該從一開始就嘗試自動化您的部署。這不完全是一個單元測試,但它是一個部署測試,這個測試同樣比單元測試更重要。如果您在項目開始時進行這種測試,則不會在發佈日期附近遇到意外問題。您還將更好地瞭解系統中不同組件的組合方式。

相關問題