kcov を使って Zig プログラムのカバレッジを測定する
本記事では、 kcov を利用して Zig プログラムのカバレッジを測定する方法について説明します。
kcov とは何ですか?
Kcov は、コンパイルされたプログラムの DWARF デバッグ情報を使用して、特別なコンパイラスイッチなしにカバレッジ情報を収集することができるようにします。
kcov のインストール
- Ubuntu:
apt-get install kcov
- Arch Linux:
pacman -S kcov
各ディストリビューションでバイナリが配付されていない場合、ソースコードからビルドすることになります。 このページ Building Kcovを参照してください。
kcov は Docker イメージも提供していますが、現時点では1つのバージョン遅れているようです。GitHub の最新リリースは 41 ですが、Docker イメージの最新バージョンは 40 です。
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 のドキュメントに従ってプロジェクトのトークンを設定します。
次に、ワークフローファイルに以下の内容を追加してください。
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