🥬

kcov を使って Zig プログラムのカバレッジを測定する

2023/06/15に公開

本記事では、 kcov を利用して Zig プログラムのカバレッジを測定する方法について説明します。

kcov とは何ですか?

https://github.com/SimonKagstrom/kcov

Kcov は、コンパイルされたプログラムの DWARF デバッグ情報を使用して、特別なコンパイラスイッチなしにカバレッジ情報を収集することができるようにします。

kcov のインストール

  • Ubuntu: apt-get install kcov
  • Arch Linux: pacman -S kcov

各ディストリビューションでバイナリが配付されていない場合、ソースコードからビルドすることになります。 このページ Building Kcovを参照してください。

kcov は Docker イメージも提供していますが、現時点では1つのバージョン遅れているようです。GitHub の最新リリースは 41 ですが、Docker イメージの最新バージョンは 40 です。

https://hub.docker.com/r/kcov/kcov

kcov を使う

zig build test コマンドでデバッグシンボルを含んだテスト用の実行ファイルを作成し、それを kcov を介して実行します。

$ zig build test
$ kcov kcov-out ./zig-cache/o/*/test

./zig-cache/o/*/test は、バイナリファイルのパスです。上記実行すると、 kcov-out ディレクトリ配下にカバレッジ測定結果を格納したHTMLファイルが生成されます。index.html ファイルをブラウザで開くと、テストカバレッジレポートが表示されます。

ただし、依存ライブラリも一緒に測定されるため、結果が妨げられます。結果を正確にするために、--include-pattern--exclude-pattern オプションを使用して結果をフィルタリングする必要があります。

GitHub Action との連携

kcov は多くの継続的インテグレーション(CI)プラットフォームをサポートしており、ここでは例として Codecov を使用します。まず、Codecov のドキュメントに従ってプロジェクトのトークンを設定します。

https://docs.codecov.com/docs/codecov-uploader#upload-token

次に、ワークフローファイルに以下の内容を追加してください。

jobs:
  test:
    name: Tests on Linux
    runs-on: ubuntu-latest
    steps:
    
      
      - name: Install kcov
        run: sudo apt-get install -y kcov
      - name: Generate coverage reports
        run: kcov $PWD/kcov-out ./zig-cache/o/*/test
      - name: Upload coverage reports
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          directory: ./kcov-out/test
          verbose: true
          fail_ci_if_error: true

CI の実行が終了すると、Codecov のページで最新の結果を確認できます。

Discussion