問題タブ [code-coverage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
code-coverage - lcov コード カバレッジ レポートを 1 つまたは 2 つのディレクトリに集中させる方法はありますか?
私は最近、自分のコード カバレッジを視覚化するために lcov を使い始めました。それは素晴らしいツールです。
私が気付いていることの 1 つは、使用しているすべてのファイル (興味のないものも含む) のコード カバレッジ レポートが生成されることです。
lcov に特定のファイルのカバレッジ レポートのみを生成させる簡単な方法はありますか?
-k パラメータを次のように使用してみました。
(つまり、「include」および「src」ディレクトリのカバレッジ ファイルのみが必要です。)
ただし、これは機能しないようです。レポートには、無関係なファイルがすべて表示されます。どんな提案でも大歓迎です。ありがとう!
python - ノーズカバレッジの出力を(パッケージではなく)ディレクトリに制限できますか?
私のSUTは次のようになります:
を実行するnosetests --with-coverage
と、無視したいあらゆる種類のモジュールの詳細が表示されます。しかし
、 &がパッケージに含まれていない--cover-package=PACKAGE
ため、このオプションを使用できません。
(パッケージに入れない理由については、http://lists.idyll.org/pipermail/testing-in-python/2008-November/001091.htmlの後のスレッドを参照してください
。)foo.py
bar.py
カバレッジ出力をfoo.pyとbar.pyだけに制限できますか?
更新-以下のNadiaよりも良い答えがないと仮定して、フォローアップの質問をしました:「ディレクトリ内の一致するすべてのファイル名をコマンドラインオプションに変換する(bash)シェルスクリプトを作成するにはどうすればよいですか? 「」
unit-testing - 内部実装をテストする必要がありますか、それとも公開動作のみをテストする必要がありますか?
与えられたソフトウェアが...
- システムはいくつかのサブシステムで構成されています
- 各サブシステムはいくつかのコンポーネントで構成されています
- 各コンポーネントは多くのクラスを使用して実装されています
... 各サブシステムまたはコンポーネントの自動テストを作成するのが好きです。
コンポーネントの各内部クラスのテストは作成しません (各クラスがコンポーネントのパブリック機能に貢献し、コンポーネントのパブリック API を介して外部からテスト可能/テストされる場合を除きます)。
コンポーネントの実装をリファクタリングするとき (新しい機能を追加する一環としてよく行う)、既存の自動テストを変更する必要はありません。テストはコンポーネントのパブリック API とパブリック API のみに依存するためです。通常、変更ではなく拡張されます。
このポリシーは、 Refactoring Test Codeのようなドキュメントとは対照的だと思います...
- 「...単体テスト...」
- 「...システム内のすべてのクラスのテストクラス...」
- 「... テスト コードと製品コードの比率は ... 理想的には 1:1 の比率に近づくと考えられています ...」
... 私はそのすべてに同意しないと思います (または、少なくとも練習していません)。
私の質問は、私のポリシーに同意しない場合、その理由を説明していただけますか? この程度のテストでは不十分なシナリオはどれですか?
要約すれば:
- パブリック インターフェイスはテスト (および再テスト) され、変更されることはほとんどありません (追加されることはありますが、変更されることはほとんどありません)。
- 内部 API は公開 API の背後に隠され、公開 API をテストするテスト ケースを書き直すことなく変更できます。
脚注: 私の「テスト ケース」の一部は、実際にはデータとして実装されています。たとえば、UI のテスト ケースは、さまざまなユーザー入力とそれに対応する予想されるシステム出力を含むデータ ファイルで構成されます。システムのテストとは、各データ ファイルを読み取り、システムへの入力を再生し、対応する期待される出力が得られることをアサートするテスト コードを用意することを意味します。
テスト コードを変更する必要はほとんどありませんが (通常、パブリック API は変更ではなく追加されるため)、既存のデータ ファイルを変更する必要がある場合があります (週に 2 回など)。これは、システム出力をより良いものに変更した場合 (つまり、新しい機能によって既存の出力が改善された場合) に発生する可能性があり、既存のテストが「失敗」する可能性があります (テスト コードは、出力が変更されていないことをアサートしようとするだけであるため)。これらのケースを処理するために、次のことを行います。
- 出力をアサートするのではなく、新しい出力を新しいディレクトリにキャプチャするように指示する、特別なランタイム フラグが設定された自動テスト スイートを再実行します。
- ビジュアル差分ツールを使用して、どの出力データ ファイル (つまり、どのテスト ケース) が変更されたかを確認し、これらの変更が適切であり、新しい機能が期待どおりであることを確認します。
- 新しい出力ファイルを新しいディレクトリからテスト ケースの実行元のディレクトリにコピーして、既存のテストを更新します (古いテストを上書きします)。
脚注: 「コンポーネント」とは、「1 つの DLL」または「1 つのアセンブリ」のようなものを意味します... アーキテクチャまたはシステムの配置図に表示されるのに十分な大きさのもので、多くの場合、数十または 100 のクラスを使用して実装されます。約1つまたは少数のインターフェースのみで構成されるパブリックAPIを使用...開発者の1つのチームに割り当てられる可能性があるもの(別のコンポーネントが別のチームに割り当てられる場合)、したがって、コンウェイの法則に従って比較的安定したパブリック API。
脚注: 記事Object-Oriented Testing: Myth and Realityは次のように述べています。
通説: ブラック ボックス テストで十分です。 クラス インターフェイスまたは仕様を使用して慎重にテスト ケースを設計すれば、クラスが完全に実行されたことを確認できます。ホワイトボックス テスト (テストを設計するためのメソッドの実装を見る) は、カプセル化の概念そのものに違反しています。
現実: OO 構造が重要、パート II。多くの調査によると、開発者が耐え難いほど完全であると考えているブラックボックス テスト スイートは、テスト対象の実装のステートメント (パスや状態は言うまでもなく) の 3 分の 1 から半分しか実行しないことが示されています。これには 3 つの理由があります。まず、選択された入力または状態は通常、通常のパスを実行しますが、可能なすべてのパス/状態を強制するわけではありません。第二に、ブラックボックステストだけでは驚きを明らかにすることはできません。テスト対象のシステムの指定されたすべての動作をテストしたとします。不特定の動作がないことを確認するには、システムの一部がブラックボックス テスト スイートによって実行されていないかどうかを知る必要があります。この情報を取得できる唯一の方法は、コード インストルメンテーションです。三番、
ホワイトボックスの機能テストを行っていることを付け加えておきます。コード (実装内) を確認し、機能テスト (パブリック API を駆動する) を作成して、さまざまなコード ブランチ (機能の実装の詳細) を実行します。
c++ - コード カバレッジ内のコンパイラ生成コード
g++ コンパイラーを使用して、Linux で Intel コード・カバレッジ・ツールを使用しています。特定のクラスについて、カバレッジ ツールは、ソース コードに実際に存在する関数よりも 2/3 余分な関数を示します。
これらの追加機能は何ですか? それらはコンパイラによって生成された関数ですか?
コード カバレッジからヘッダー ファイルを除外しています。私のクラスは空の ctor と dtor でシンプルです。
次の関数はコンパイラによって生成されると思います。
- コンストラクターのコピー
- 代入演算子
- マクロ(私の場合ではありません)
- シグナル スロット接続メカニズム (たとえば、Qt moc コンパイラではこれらが生成されます)
php - 手動テストで動作するコードカバレッジツールはありますか?
PHPには、自動化された単体テストケースを使用せずにコードカバレッジレポートを生成できるツールはありますか?
(基本的に、phpunitまたは同様のユニットテストフレームワークを使用していません。これらのフレームワークは、レポートの生成には適していますが、ユニットテストケースをphpで記述する必要があります!)。
まさに私が探しているのは、テスターによって実行された手動テストに基づいてコードカバレッジレポートを生成するツールです。
tdd - 失敗した単体テストを作成するまで本番コードを作成できない可能性があることはわかっていますが、UIを作成できないことをマネージャーに伝えることはできますか?
私はサーバー側の開発にTDDを使用しています。すべての本番コードを単体テストで囲むことのメリットが、リファクタリングに必要な時間の4倍の時間を費やすことのデメリットを上回るかどうかはよくわかりません。
しかし、UIコードを開発しているときは、TDDを適用できません。そこにいるすべての原理主義者にとって、TDDの最初の法則は、「失敗した単体テストを書くまで、本番コードを書くことはできない」と述べています。しかし、UIを開発している場合、これはどのようになりますか?
(Seleniumのような受け入れテストフレームワークを使用できますが、ソースコードを直接操作しないため、カウントされません。)
それで、新しい> 90%のコードカバレッジポリシーのために、ユーザーインターフェイスコードを記述できないことをマネージャーに伝えることができますか?
teamcity - 64ビットのNCover-CorFlags修正-corflags:エラーCF008:指定されたファイルに有効な管理対象ヘッダーがありません
このブログで概説されているように、NCoverv1.5.5がTeamCity継続的インテグレーションサーバーを介してWindowsServer2008X64で実行できるようにするための修正を適用しようとしています。
http://abdullin.com/journal/2008/6/6/how-to-run-free-ncover-on-a-64-bit-machine.html
これが私のログです:
だから私はそれを機能させるためにCorFlagsトリックを適用しようとしていますが、エラーが発生します:
C:\ Program Files(x86)\ Microsoft.NET \ SDK \ v2.0 \ Bin> CorFlags.exe D:\ TeamCity \ build Agent \ work \ a65ff8d0771db303 \ tools \ NCover \ NCover.exe / 32BIT +
Microsoft(R).NETFrameworkCorFlags変換ツール。バージョン2.0.50727.42Copyright(c)MicrosoftCorporation。全著作権所有。
corflags:エラーCF008:指定されたファイルに有効な管理対象ヘッダーがありません
何か案は??ヘルプ!
java - ライブJavaアプリを検査するためのリアルタイムコードカバレッジビューアツール?
私は、ライブ Java アプリケーション (主に Tomcat のようなアプリケーション コンテナー内で実行される Web アプリケーション) を検査することを目的としたコード カバレッジ ビューアーを探していました。確かに、単体テスト カバレッジの自動レポートを取得するための適切なツールは多数ありますが、私の目的は、なじみのない Java アプリが特定のユーザー インタラクションなどで行うことをリアルタイムで学習することです。
Eclipse Java デバッガー (リモート デバッグ用の JPDA を使用) は非常に便利ですが、アプリケーションのアーキテクチャーに精通している場合に限られます。理論的には、カバレッジ ツールを使用して、2 秒ごとに静的 HTML カバレッジ レポートを自動更新するように設定することもできますが、これは最適とは言えません。
Adobe Flex の場合、FlexCover はほぼリアルタイムでカバレッジを視覚化するカバレッジ ビューア ツールを提供することで、私が望むことを実現します。では、Java 用の同様のセットアップが簡単な GUI ツール (無料または非無料) はありますか?
.net - コード カバレッジ ツールを使用する必要がありますか?
次の .NET プロジェクトでコード カバレッジ ツールを使用することに興味がありますが、必要かどうか疑問に思っていました。私は会社で唯一の開発者ですが、NCover を使用することは私にとってメリットがありますか?それとも、継続的インテグレーションを使用する大規模なチームのためだけですか? ありがとう
python - virtualenv で実行された行がカバレッジに表示されない
プロジェクトがあり、カバレッジを使用してノーズテストを実行しようとしています。私はvirtualenvで実行しています。私が走るとき
テストは正常に実行されますが、カバレッジはコードが実行されたことを示していません (カバレッジはすべて 0% です)。
対象バージョン 3.0b3、Darwin Kernel バージョン 9.7.0、Mac OS X 10.5.7、setuptools 0.6c9、nose 0.11.1、Python 2.5.4