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

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

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

  1. プロジェクト、ビルド構成、またはファイルのプロパティでコード カバレッジを有効にします。
    注: プロジェクトの設定と異なる場合、アプリケーションのビルド時はビルド構成の設定がプロジェクトの設定よりも優先されます。プロジェクト レベルでコード カバレッジを有効にしても、アプリケーションの実行時に結果が返されない場合は、アプリケーションを実行したビルド構成でコード カバレッジが有効になっていない可能性があります。この問題を回避するには、アプリケーションを実行するビルド構成でコード カバレッジを有効にしてください。
  2. プロジェクトをコンパイルして、変更を適用します。
  3. コード カバレッジを有効にした起動構成を作成し、その中でアプリケーションを実行します。

アプリケーションがコード カバレッジで実行している間に、コード カバレッジが有効にされてコンパイルされたプログラムやサブプログラムごとに、コード実行のログが記録されます。ログはバイナリ結果ファイルに保存されます。このファイルの拡張子は .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.