2010-04-13 107 views
8

我很好奇當人們在做TDD時,測試代碼與生產代碼的比率是多少合理/典型值。看一個組件,我有130行產品代碼的530行測試代碼。另一個組件有360行生產代碼的1000行測試代碼。所以單元測試需要大約3倍到5倍的代碼。這是用於Javascript代碼的。我沒有太多的測試C#代碼方便,但我認爲對於另一個項目,我一直在尋找2倍到3倍的測試代碼,然後是生產代碼。單元測試的典型大小與測試代碼相比

這似乎對我來說,該值越低,假設測試是足夠的,將反映更高的質量檢驗。純粹的猜測,我只是想知道其他人看到的比率。

我知道的代碼行是一個鬆散指標,但由於在相同的風格我代碼測試和生產(相同的間隔格式,註釋相同ammount的,等等)中的值是可比較的。

+0

順便說一句,這真的看起來像一個討論,而不是一個真正的問題。 – 2010-04-13 23:34:20

回答

4

這真的取決於事情如何因素,但是,我的經驗(是的,我做了這個測量一些項目),我從見過比2:1到5:1(這是測試代碼當然)。還可以查看C2 wiki上的ProductionCodeVsUnitTestsRatioUnitTestToCodeRatio頁面。

0

這些數字聽起來很正常。我寫的最長的單元測試超過1500行,它只測試了大約300行代碼。

+0

這不是一個單元測試 – 2015-05-05 14:21:15

+0

@CallumBradbury單位是您可以方便地結束測試的最小代碼量。 300行太大,應該重構,所以當我拿到代碼時,我爲它寫了測試,因此可以安全地分解它。 – Daniel 2015-05-07 21:56:13

3

哇,這些數字相當大!我大致是1:1,有時對於具有更高圈複雜度的類,它可能會更接近2:1,而傾向於單元測試LOC,但是這樣會引發類需要重構的警報響鈴。

你提到您正在使用相同的樣式爲單元測試。就把你的測試當作生產代碼來說,這是很好的,但是你真的需要很多關於測試代碼的評論嗎?你是否在命名你的測試方法,以便描述測試的主張?例如使用'GivenXWhenYThenZ'函數命名,那麼應該很清楚測試沒有大的評論部分。

你正在重構你的測試嗎?將任何重複的設置等移入單獨的方法?

你保持你的單元測試簡單,所以他們只斷言每個測試的一件事?

和你過測試之類的getter/setter方法?

+0

我說我的評論在生產和測試代碼之間是一致的 - 但這並不意味着很多評論;) – 2010-04-14 17:12:29

+0

只需要好奇你使用哪種語言,你看到1:1的比例?我認爲我的JavaScript測試可能會更重,因爲與我的C#代碼相比,我做了更多的嘲諷和嘲笑。 – 2010-04-14 17:15:20

0

不同的語言和測試框架會有很大的不同。例如,BDD框架比TestUnit風格的代碼「DRYer」多得多。另外,在幾個項目中,我最終得到了非常大的數據集,只通過幾行Java來測試 - 測試了成千上萬行代碼 - 所以我的比例將全部扭曲。

我剛纔看了一下我最近的三個項目(中等大小的導軌),測試比率的代碼是1:2.3,1:1.6和1:1.9 ......所以你的數字聽起來就像是相似的。 (我只是跑rake stats - 我從來沒有真正前看着他們。)

不管怎麼說,並警告說你有太多的測試跡象:

  • ,如果你做一個改變做多的測試失敗,或者只是一個?如果大量測試失敗,則可能反覆測試相同的東西,並且可能會消除大部分測試。
  • 代碼看起來像是複製和粘貼。重構通用代碼。
  • 測試太慢
  • 測試從未失敗
0

我個人使用的斷言來祿比例。有些事情可能需要更多的模型和設置代碼來測試。我覺得X行測試代碼到Y行代碼可能不是非常有用。代碼覆蓋工具可能是查看它的最佳方法。我發現在我的最後兩個項目中,我的代碼每10行產品代碼有1個斷言。其他人是否有類似的價值觀?