5

私は定期的に TDD を使用してライブラリの 100% のカバレッジを達成していますが、常にではありません。また、テストされておらず、カバーされていないアプリケーションの部分が残っているように常に見えます。
次に、テストがほとんどなく、カバレッジもほとんどないレガシー コードから始める場合があります。

あなたの状況と、少なくともカバレッジを改善するために何が機能したかを教えてください.
単体テスト中にカバレッジを測定していると仮定していますが、他の手法を使用しているかどうかを教えてください。

4

5 に答える 5

6

コードを削除します。

これは皮肉なことではありませんが、実際には深刻です。ごくわずかなコードの重複や、実行できないコードを見つけるたびに、それを削除しました。これにより、カバレッジが向上し、保守性が向上しました。

これは、古いコード ベースと新しいコード ベースのカバレッジを拡大する場合により適していることに注意してください。

于 2008-10-04T17:54:44.883 に答える
2

「カバーされたコードとテストされたコード」を読んだと思いますよね?

その質問で述べたように、

100% のブロック カバレッジ + 100% のアーク カバレッジ + 100% エラーのない少なくとも 1 つのパスの直線コードを使用しても、より多くのバグを示す方法でパス/ループを実行する入力データがまだ存在します。

ここで、EMMA に基づくeclemmaを使用します。そのコード カバレッジ ツールは、100% コードが常に可能であるとは限らない理由を説明しています

  • 同じ行の暗黙的な分岐。
  • 共有コンストラクター コード。
  • finally ブロックによる暗黙的な分岐。
  • 非表示の Class.forName() による暗黙の分岐。

したがって、これら 4 つのケースはすべて、コード カバレッジの向上につながるリファクタリングの候補となる可能性があります。

さて、私はフランク・クルーガーの答えに同意します。カバーされていないコードの一部は、実際に削除するコードを含む、リファクタリングが必要であることを示している可能性もあります;)

于 2008-10-04T18:02:34.787 に答える
1

私たちは Perl を使っているので、Devel::Coverはとても役に立ちました。単体テスト中のステートメントごとのカバレッジ、分岐カバレッジ、条件付きカバレッジ、および POD カバレッジなどを表示します。「100%」は識別しやすい緑色、低レベルのカバレッジは黄色と赤色の HTML 出力を使用します。

編集:物事を少し拡張するには:

  • 条件付きカバレッジが完全でない場合は、条件の相互依存性を調べます。そこにある場合は、リファクタリングします。そうでない場合は、すべての条件に一致するようにテストを拡張できるはずです。
  • 条件と分岐のカバレッジが完全に見えても、ステートメントのカバレッジがそうでない場合は、条件を間違って記述したか (たとえば、意図しないときに常にサブルーチンから早期に戻る)、安全に削除できる余分なコードを持っているかのどちらかです。 .
于 2008-10-04T17:55:45.457 に答える
1

私が取り組んできたプロジェクトに最も大きな影響を与えた 2 つのことは次のとおりです。

  1. 開発チームにユニットテストを実際に実装するよう定期的に「思い出させ」、効果的なテストの書き方をレビューします。
  2. 全体的なテスト カバレッジのレポートを生成し、それを開発マネージャー間で回覧します。
于 2008-10-04T18:02:21.433 に答える
0

FIT テストにより、コード カバレッジが改善されました。まったく別のタックであるため、それは素晴らしいことです。

背景: 従来のコードと新しいコードが混在しています。新しいもののユニット/統合テストを可能な限り試みますが、Hibernate/Postgres に移行し、OODB から離れているため、レガシー コードをテストする意味はあまりありません。

ご存じない方のために説明すると、FIT はユーザーの視点からソフトウェアをテストする方法です。基本的に、HTML テーブルで目的の動作を指定できます。テーブルは、ソフトウェアに対するアクションと目的の結果を指定します。私たちのチームは、アクションをコードに対する呼び出しにマッピングする「グルー コード」(別名 FIT テスト) を作成します。これらのテストは、単体テストと比較して「空間から」のビューで動作することに注意してください。

このアプローチを使用することで、コード カバレッジが数パーセント向上しました。追加のボーナスは、これらのテストがバージョン間でブリッジすることです。これらのテストはレガシー コードをテストしますが、後で新しいコードをテストします。つまり、ある意味で回帰テストとして機能します。

于 2008-10-04T18:16:23.077 に答える