「コードのテスト行」に対する「コードの機能行」の通常の比率は何ですか?


27

私はTDDアプローチにかなり慣れており、最初の実験では、1行の機能コードを記述することは、2〜3行のテストコードを記述することを意味します。したがって、1000 LOCを記述する場合、テストを含むコードベース全体は〜3500 LOCのようなものになります。

これは正常と見なされますか?あなたが書くコードの割合は何ですか?


8
うん、TDDには高価なタグが付いています!
ELユスボフ

6
あなたの2-3Xの数字はせいぜい保守的で、実際にはC#/ Javaのようなものでは4-5Xに近く、Python / Rubyは2-3Xに近く、Erlangのような簡潔なものは1:1に近いかもしれません。あなたがTDDについてどれだけ独断的であるかに依存し、独断的であるほど、それらの比率は大きくなります!

6
@tomwrong:ケントの本の中で、彼はあなたの恐怖が退屈に変わるまでテストを書くべきだとウォードを引用しています。
ハービー

4
@ElYusubov:それが「価格」だということにはまったく同意しません。LOCの作業量をまだ数える人にとってはそうのようです。しかし、価格はLOCではなく、お金と市場投入までの時間です。そして、TDDは他の合理的な開発プロセスよりも高価ではありません。
ハービー

5
みんな、答えを投稿する代わりにコメントするのはなぜですか?あなたが書くことは理にかなっています。
アンドレイアギバロフ

回答:


18

TDDでは1:3は正常です。

私の経験から、そして私が覚えている他の引用から。


12
...どのような引用ですか?
TehShrike

...漠然と覚えています...私はそれがどこにあったかすでに覚えていません(たぶん、Kent BeckのTDD By Example、おそらくc2.comのどこかに)。ただし、本番コードの3倍のテストコードで問題ないという意味を覚えています。
ハービー

うわー、私の経験でもまったく同じです。(私は今clocの結果を見つめているので、この比率に関する投稿を見つけるためにGoogleを検索しました)
ニコライツェンコフ14

9

さまざまなコーディングスタイルと言語に基づいたバリエーションがあります。ただし、使用する言語に関係なく、最大のバリエーションはあなたです。

ロバート・マーティンはかつて言った:

「テストがより具体的になると、コードはより一般的になります。」

それは私に考えさせられました。より具体的なテストは、より多くのテストコードを意味します。より一般的な量産コードは、より少ないコードを意味するため、コードの進化に応じてテスト/コードの比率を上げる必要があります。

しかし、待ってください、それも良くありません。ある特定の場合、たとえば特定のアルゴリズムを定義する場合、「if」、しばらく、および場合によっては2〜3回の再帰を含むコードが6〜10行しかありません。コードにはおそらく100行以上のテストコードが含まれることになります。

実際のプロジェクトでは、ほんの数個のアルゴリズムよりも大きなものであるため、テスト/コードの比率は1:1から2:1の間でなければなりません。2:1を超える場合、リファクタリングまたは削除する必要のあるテスト(またはテストが困難なコード)があるというにおいです。テストでは、本番コードと同じ量の注意とリファクタリングを常に投資する必要があります。

いずれにせよ、あなたの質問に対する最良の答えは「サイクロマティックコンプレックス」でしょう。メソッドの循環的複雑さが高ければ高いほど、すべてのケースをカバーするために、より多くのテストを記述する必要があります。


3

比率は、メソッドのサイズによって異なります。メソッドのサイズは、プログラミングスタイル、言語、問題ドメインによって異なります。

メソッドが短い場合、3:1が妥当です。メソッドが長い場合、3:1がハイサイドになります。

だから、あなたの質問に答えるには、状況次第です。:-)


「メソッドが長い」という意味によって異なります。それが私の頭に浮かんだイメージは、メソッドは長く不必要であり、作業が多すぎて責任が大きすぎる(多くの場合パラメーターが多すぎる)ことです。その場合、そのような方法は、テストでカバーするために比例してより多くの組み合わせを必要とするため、比率が大きく変わるとは思わない
...-

しばらくの間、テストをセットアップし、テストするメソッドを呼び出して、3行のコードで結果を確認できると仮定します。テストするメソッドが1行の長さである場合(Scalaで発生する場合)、実動コードに対するテストの比率は3:1です。メソッドの長さが6行の場合、1:2です。6行はそれほど長くありません。
ジョン・ストレイヤー

2

ソフトウェアクリティカルなアプリケーションの場合、通常の比率は、機能する10個のLoCごとに1日テストすることです。

そして、これはテストではなく仕様に関するTDDをカウントしていません。



-1

私の比率は約2-1対10-1(テストするコード)です。テストは、実装ではなく価値/行動に関するものであることを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.