2010-04-13 106 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个断言。其他人是否有类似的价值观?