什么是良好的代码测试比率?

时间:2009-07-30 09:49:12

标签: ruby-on-rails ruby rspec

我正在使用RSpec编写测试。

您如何看待,这是一个良好的代码测试比率?

5 个答案:

答案 0 :(得分:6)

代码测试比率是一个误导性的统计数据。更好的方法是使用rcov,您可以通过运行rake spec:rcov

轻松使用它

虽然100%的代码覆盖率有时会被视为绝对目标,但您很快就会遇到law of diminishing returns。我个人的目标是在所有生产代码中实现90%的代码覆盖率;尽管这主要是武断的,但我发现目标号码要容易得多。

答案 1 :(得分:4)

良好的代码比率测试可以让您对自己编写的代码充满信心,并且可以让您放心地重构,您将知道您在其他应用程序中所面临的区域。我的测试比率范围从1:1.5到1:2.5左右,它可以根据您的应用程序的复杂程度而变化。

答案 2 :(得分:3)

我们目前正在谈论意见。良好的代码与测试比率是指您的代码所涵盖的程度,以满足您对所写内容的信心和信心,当您进行重构时,您将知道什么在您周围打破。

数字很好,但在它们中放入太多的股票也同样危险。

答案 3 :(得分:3)

我的目标是没有经过rcov和heckle发现的未经测试的代码。当你获得rcov可以获得的所有覆盖范围时,你可以通过heckle运行代码。 Heckle会修改您的代码,并向您显示测试未捕获的修改。

rspec知道heckle。安装heckle gem之后:“spec foo_spec.rb -H Foo”。哦,如果你得到一个奇怪的错误,安装ruby2ruby版本1.2.2而不是1.2.4。

这就是抱怨我认为我已经完全指定的功能:

The following mutations didn't cause test failures:

--- original
+++ mutation
 def model_matches?(substring)
-  s = substring.gsub(/\./, ".")
+  s = substring.gsub(/\033!\032\002l\}\?V\010d\}\r\-\fyg,a\*jFT\003_"ga\016\020ufN\0066/, ".")
   s = substring.gsub(/\*/, ".*")
   s = "^#{s}$"
   Regexp.new(s, "i").=~(@model)
 end

--- original
+++ mutation
 def model_matches?(substring)
-  s = substring.gsub(/\./, ".")
+  s = substring.gsub(/\./, "\023GA3w+h-#z$?I;a\"k0n^r$\005io#l\023H1M{\034m")
   s = substring.gsub(/\*/, ".*")
   s = "^#{s}$"
   Regexp.new(s, "i").=~(@model)
 end

--- original
+++ mutation
 def model_matches?(substring)
-  s = substring.gsub(/\./, ".")
+  s = nil
   s = substring.gsub(/\*/, ".*")
   s = "^#{s}$"
   Regexp.new(s, "i").=~(@model)
 end

--- original
+++ mutation
 def model_matches?(substring)
   s = substring.gsub(/\./, ".")
   s = substring.gsub(/\*/, ".*")
   s = "^#{s}$"
-  Regexp.new(s, "i").=~(@model)
+  Regexp.new(s, "v\022").=~(@model)
 end

那有多酷?

我发现的唯一真正难以获得完整测试覆盖率的是涉及并发的测试,尤其是。竞争条件。试图证明互斥锁或临界区必须到位可能很困难。有时候你可以做到。有时候,你只需要耸耸肩膀,加入你不知道如何测试的代码行,然后继续前进。

答案 4 :(得分:1)

它有所不同。简单的代码我希望测试代码与生产代码一样多。复杂的代码很容易得到两倍的测试代码。做测试驱动开发并且不必担心比率,因为代码中的所有内容都是由测试驱动的,这是重要的。