簡體   English   中英

TDD中測試單元的效率

[英]Testing Unit's Efficiency in TDD

假設我們需要一個排序函數,並希望確保它是在O(nlogn)而不是O(n^2)

使用測試驅動的開發,是否有系統的方法來測試此功能的執行效率?

根據Wikipedia的說法, 測試實施細節被視為“測試驅動開發”中的反模式,這是否會阻止TDD嘗試檢查滿足要求的代碼的效率? 還是有系統的方法來做到這一點?

這並不是TDD的真正優點-請記住,TDD的動機不是測試(盡管這是一個很好的副作用),而是設計 (也就是說使代碼易於更改)。

TDD儀式的一部分是在開發周期中頻繁運行測試; 干擾開發流程的測試(例如,花費很長時間運行)超出了范圍。 這並不是說您無法進行這些測試; 支持TDD的理由之一是,它確保您擁有可測試的代碼。 但是您通常不會期望在紅色/綠色/回收儀式期間運行需要大量掛鍾時間的測試。

此外,當實現不穩定時,緊密耦合到實現的測試是真正的障礙。 當測試干擾更改代碼中的封裝設計時,您將失去信譽。

有時,您可以引入可觀察性要求,以便從系統外部獲得計數關鍵部分的頻率。 並且只要系統正在使用該關鍵部分,那么您就可以將計數用作證據,並估計實現是否按您期望的方式擴展。

在排序的情況下,這可能意味着比較功能是可配置的依賴項的設計,並且在測試中,我們提供了一個實現,該實現計算調用它的頻率。

但這確實引入了一些耦合-那時您要測量的是是否調用您的方法, 不是測試對象是否產生正確答案。 在某些情況下,這很好。 在其他情況下,這是過度耦合。 我不知道有任何簡單的啟發式方法可用於區分這兩種情況,而無需嘗試實驗,也不會在發生過度耦合時感到費解。

可以使用test-after代替TDD:

  • 注入一個可以測量操作數的計數器
  • 針對給定的輸入運行算法
  • 確認計數小於閾值

這將防止操作數量的下降。 (請記住,這不能保證實際性能。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM