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

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

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

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

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

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

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

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

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

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

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

制約事項

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

  • テスト カバレッジでは、ネストされたプログラムはサポートされません。特に、ネストされたプログラムの呼び出し時に使用する cobsetjmp() API および coblongjmp() API を呼び出すプログラムには機能しません。
  • プログラムのデバッグ中に実行ポイントを手動で変更すると、予測不可能なテスト カバレッジ結果が生成されます。
  • マルチスレッド プログラム (REENTRANT 指令でコンパイルされたプログラム) がある場合に、そのプログラムをテスト カバレッジを有効にしてコンパイルし、テスト カバレッジ モードで実行すると、生成されるテスト カバレッジ結果は予測不可能なものになります。
  • プリプロセッサでテスト カバレッジを使用すると、元のコードの基本ブロックのみが対象となります。

コード カバレッジ モードでの実行時にシステム リソースに対する要件が増えるため、プロダクション システムでコード カバレッジを使用することはお勧めしません。ただし、必要があれば、プロダクション システムへのコンパイル時にコード カバレッジを有効にすることは可能です。また、大規模なリモート プロジェクトでコード カバレッジを有効にすると、テスト カバレッジの結果を処理するために必要なプロジェクト ファイルがローカルで転送されて、大量のデータ転送が発生するので注意してください。