答えて
コードに対するテストの優れた点は、作成したコードに自信を持てるようにすることであり、アプリケーションの残りの部分であなたが何をしているのかがわかるようにリファクタリングすることができます。私は1:1.5から1:2.5程度までのテスト・レシオを持っていますが、アプリケーションの複雑さによってテスト・レシオが実際に変わる可能性があります。
コードに対するテスト比率は、誤解を招く統計情報です。より良い方法はrcov
を使用することです、あなたは簡単に100%のコードカバレッジなくなりrake spec:rcov
を実行することにより、それを使用することができ、時にはあなたはすぐにlaw of diminishing returnsに実行し、絶対的な目標として掲げています。個人的に私は全生産コードで90%のコードカバレッジを目指しています。これは主に任意ですが、目的の番号を目指す方がずっと簡単です。
簡単なコード私は多くのテストコードをプロダクションコードとして期待しています。複雑なコードは、テストコードの2倍の価値があります。テスト駆動型開発を行い、コード内のすべてがテストによって駆動され、それが重要であるため、比率について心配する必要はありません。
私たちは現在、意見について話しています。優れたコードとテストの比は、リファクタリング時に何があなたの周りに壊れているのかを知ることができるように、書かれていることと自信の両方に自信を持たせる必要がある程度までコードがカバーされています。
数値は良好ですが、数値が大きすぎると危険です。
私の目標は、rcovとheckleによって明らかにされたテストされていないコードです。あなたがrcovで得ることができるすべてのカバレッジを取得したら、heckleでコードを実行することができます。ヘックルはあなたのコードを修正し、テストによってキャッチされなかった変更を表示します。
rspecはヘッケルを知っています。 heckle gemをインストールした後: "spec foo_spec.rb -H Foo"。ああ、奇妙なエラーが発生した場合は、1.2.4ではなくruby2rubyのバージョン1.2.2をインストールしてください。ここで
は野次る私は完全に指定したと思った機能不満だ:
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
それがどのようにクールですか?
私が見つけた唯一のことは、完全なテストカバレッジを得ることが本当に難しいということは、並行性を含むテストです。競争条件。ミューテックスやクリティカルセクションが存在しなければならないことを証明しようとするのは難しいでしょう。時々あなたはそれを行うことができます。時々、あなたは肩を肩をすくめ、テストする方法がわからないコード行を入れ、次に進む必要があります。
- 1. 良いコード形式は何ですか?
- 2. 良い静的コード解析プラグインは何ですか?
- 3. 良いコード展開戦略とは何ですか?
- 4. 良いリジッドボディダイナミクスのリファレンスは何ですか?
- 5. Querydslの良いユースケースは何ですか?
- 6. ランキングシステムの良いデザインは何ですか
- 7. 私のAppiumコードで使用する良いIFステートメントは何ですか
- 8. 良いJavaScriptプラグインカラーピッカーは何ですか?
- 9. 良いJavaメディアライブラリとは何ですか?
- 10. Subject.asObservableとは何が良いですか?
- 11. より良いアプローチは何ですか
- 12. 良いwiki/cmsは何ですか?
- 13. 良いフリーターミナルマルチプレクサとは何ですか?
- 14. 良いC#コンパイラコンパイラ/パーサジェネレータは何ですか?
- 15. 良いRailsロギングソリューションとは何ですか?
- 16. より良いデザインは何ですか?
- 17. 良いメッシュアニメーションテクニックは何ですか?
- 18. 良いラップトップテーブルとは何ですか?
- 19. 良いGeoTiffビューアとは何ですか?
- 20. 良いAPIインデクサーとは何ですか?
- 21. 良いWiresharkチュートリアルは何ですか?
- 22. C++コードでヘッダファイルをインクルードするより良い方法は何ですか?
- 23. このコードを修正するには何が良いでしょうか[リファクタリング]
- 24. Cコードのブラウジング/フォローを助ける良いツールは何ですか?
- 25. 何が良いですか:データかattr?
- 26. C#コードのquickbooksと統合する最良の方法は何ですか?
- 27. 見栄えの良いレーダーグラフを持つ良いJSグラフライブラリは何ですか?
- 28. f#コードを文書化する最良の方法は何ですか?
- 29. Silverlightの弱いイベントの良い実装は何ですか?
- 30. ダイナミックキャストの「良い使い方」の例は何ですか?
これに同意すると、おそらくrcovが良いでしょう。誤解を招く可能性もありますが、それが本当に簡単なコードなら、カバレッジはそれほど重要ではありませんが、必ずしもそうではありません。これは本当に主観的な領域です。 – nitecoder
コードカバレッジはすべてではありません。 rcovは、コードがテスト中に実行されるかどうかをチェックするだけです。それはあなたの条件を完全にテストしていないかどうかを教えてくれません。 –
@railsninja簡単なコードでコードカバレッジがそれほど重要ではないのはなぜですか?あなたは簡単なコードで間違いを少なくしますか?私はより良い区別は、それが生産コードであるかどうかであろうと思う。 – Olly