コード カバレッジ (ネイティブ COBOL)

Visual COBOL では、ネイティブ COBOL のコード カバレッジを把握するツールとして、Micro Focus Test Coverage 機能が用意されています。
注: この機能はネイティブ COBOL でのみサポートされます。

アプリケーションに対してコード カバレッジを有効にして、コード カバレッジ レポートを作成するには、次の手順を実行します。

  1. 関連するプロジェクトのプロパティの [COBOL] ページでコード カバレッジを有効にします。
  2. アプリケーションをコンパイルして、変更を適用します。
  3. コード カバレッジ モードでアプリケーションを実行します。[Debug > Start With Micro Focus Code Coverage] をクリックします。

アプリケーションがコード カバレッジで実行している間に、プログラムやサブプログラムごとに、コード実行のログが記録されます。ログはバイナリ結果ファイルに保存されます。このファイルの拡張子は .tcz です。IDE では、テスト カバレッジの構成に応じて、どの程度詳細にテスト カバレッジのログを結果ファイルに記録するかの設定を指定できます。

たとえば、ソース コード内の文にタグを付けてコード カバレッジを使用すると、これらの文が実行されたかどうかをレポートできます。この方法は、ソース コードに追加された行や変更された行のカバレッジを確認する場合に特に役立ちます。

カバレッジをわかりやすくするため、Visual COBOL では、結果ファイルのコード カバレッジ情報をビジュアル化して、処理済み (実行された) ブロックおよびプログラムまたは未処理 (実行されていない) ブロックおよびプログラムの統計を [Code Coverage] ウィンドウに表示して、処理済みおよび未処理ブロックをエディター内で別の色で強調表示します。コード カバレッジ レポートは HTML 形式で生成できます。

注:

コード カバレッジ モードでプログラムを実行する場合、コード カバレッジが有効ではない場合に比べて、使用するリソースが大幅に増加します。このため、コード カバレッジは開発システムでのみ使用し、本番システムでは使用しないことを推奨します。

処理済みブロックと未処理ブロック

ブロックとはコードのまとまりであり、実行時に連続して順番に実行されます。つまり、ブロック内の一箇所が実行されたら、ブロック内のそれ以外の箇所も実行されていると想定できます。

順番に実行されないコード (たとえば、IF THEN ELSE のように文の中の各句が直線的な順番で実行されないコード) には、複数のコード ブロックが含まれます。

実行されたコード ブロックは「処理済み」ブロックと呼ばれ、実行されていないコード ブロックは「未処理」ブロックと呼ばれます。

制限事項

IDE でコード カバレッジを把握するには、Test Coverage コマンド ライン ユーティリティを使用します。Test Coverage ユーティリティには次の制限事項があり、これらはコード カバレッジにも該当します。

  • Test coverage does not support nested programs. In particular, it does not work for programs which call the cobsetjmp() and coblongjmp() APIs that are used when calling nested programs.
  • Manually changing the execution point while debugging a program produces test coverage results that are unpredictable.
  • If you have a multi-threaded program (one that is compiled with the REENTRANT directive) and you compile it with the test coverage enabled and run it under test coverage, the test coverage results obtained will be unpredictable.
  • When you use test coverage with preprocessors, only the basic blocks of the original code are taken into account.