マネジメントを行う上では以下のような取り組みが重要です。
- 何らかの定量指標を収集し、目標を設定する
- その数値を誰もが見る場所に置く
これはテスト文化を作るときにも例外ではありません。 「テストを書こう」といくら啓蒙したところで、ぼくの経験上効果は薄い。 テストを根付かせるためには、誰もが見える場所にカバレッジなどの数値を示し、自分の正負両面の貢献を表すべきです。たぶん。
GitLabでカバレッジを表示する
ぼくたちはGitLabを使って開発を進めていますが、GitLabにはGitLab CI/CDの標準出力の中からカバレッジをキャプチャする機能があります。キャプチャしたカバレッジは以下のようにMerge Requestの画面に表示できます。
どのような正規表現でキャプチャするのか、という設定は、GitLabの設定
->CI/CD
->一般のパイプライン
にあります。
Golangのカバレッジを標準出力に出力する
こちらのエントリで、マルチパッケージのGolangプロダクトにおけるカバレッジの計算方法を書きました。 一方でこのカバレッジは、全パッケージに対する「特定のパッケージにおけるテストのカバレッジ」でしかありません。今ぼくに必要なのは、全パッケージに対する「全てのテストコードのカバレッジ」です。
https://kiririmode.hatenablog.jp/entry/20210204/1612450799
こういった目的を達成するためにはgo tool cover
を使います。
以下のように、最終行にtotal:
としてのカバレッジが示されます。
$ go tool cover -func coverage.out | tail -5 gitlab.com/eponas/epona-aws-starter-cli/internal/version/version.go:35: GetTerraformVersion 0.0% gitlab.com/eponas/epona-aws-starter-cli/internal/version/version.go:45: SetAwsProviderVersion 0.0% gitlab.com/eponas/epona-aws-starter-cli/internal/version/version.go:49: GetAwsProviderVersion 0.0% gitlab.com/eponas/epona-aws-starter-cli/main.go:5: main 0.0% total: (statements) 1.2%
あとはこれを正規表現でキャプチャすれば良い。
ぼくは^total:\s+\(statements\)\s+\d+.\d+%
としてキャプチャしています。
まとめ
このような設定によって、Merge Requestを作るごとに、MRの画面にカバレッジが出力されるようになります。