グーグルでのコードカバレッジ活用を紹介した論文
Code Coverage at Googleというグーグルでのコードカバレッジの使い方を紹介した論文を紹介します。タイトルと出典の以下のとおり。
M. Ivanković, G. Petrović, R. Just, G. Fraser, Code coverage at Google. In Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, pp. 955-963 (2019)
以下で原典が読めるので、詳細はこちらを確認してください。
著者のWebサイト
出版社のサイト
グーグルのコードカバレッジシステムであるCritiqueを紹介しています。
コードカバレッジはテストで実行されたコードの範囲を指します。範囲の粒度には、ステートメント(実行できるコード1行単位)、条件分岐、関数があり、この論文ではステートメントを対象としています。
コードカバレッジの可視化の様子は原典のFig. 4, Fig. 5, Fig. 6にあります。実行された行には緑色で可視化されていたり、コード差分ごとに何パーセントのステートメントが実行されたかを示しています。ここでのコード差分は構成管理ツールの最小単位の更新を指します。1件のプルリクエストの差分と考えるとイメージしやすいかもしれません。
コードカバレッジを使うとステートメント全体に対して実行されたステートメントの割合を求めることができます。グーグルではそれに対し、5つのレベルを設定しています。プロジェクトごとに自主的にこのレベルを設定しているそうです。
-
レベル1: コードカバレッジの自動収集は無効
-
レベル2: コードカバレッジの自動収集している
-
レベル3: プロジェクトでのコードカバレッジを60%以上、コード差分を70%以上
-
レベル4: プロジェクトでのコードカバレッジを75%以上、コード差分を80%以上
-
レベル5: プロジェクトでのコードカバレッジを90%以上、コード差分を90%以上
カバレッジを使っているプロジェクトの割合は2012第一四半期で数パーセントだったものが2019年には、プロジェクトカバレッジを採用しているプロジェクト8割、コード差分カバレッジを使っているプロジェクトが6割程度だそうです。時系列の推移はFig. 7を参照してください
C++, Java, Python, Go, JavaScript, Dart, TypeScriptのカバレッジを収集していて、合計10億行コードに対するカバレージの割合をこの論文で紹介しています。カバレッジの中央値は2015年からおおよそ80%前後となっています。こちらの時系列推移はFig. 8を参照してください 。
アンケートでグーグルの開発者にコードカバレッジがどのように役立っているかを聞いた結果も掲載されています。3000人にアンケート回答の依頼をして512人から得られた回答で、「コードを書くとき」「コードレビューするとき」「コードをブラウズするとき」の3つにおいて、コードカバレッジがどのくらいの頻度で役立ったかを報告しています。頻度は、一度もない、ほとんどない、時々、頻繁に、とても頻繁に、わからないの回答数がFig. 11に掲載されています。レビューやコードを書くときに役立っていることがわかります。
また、プログラミング言語が異なっていても統一したインタフェースで開発者に提示できることや主要な開発作業で自動的に測定することも大切であると報告しています。
私には以下が印象に残りました。
-
カバレッジ収集のレベルは自主的に決めていること
-
ずっと計測し続けていること
-
カバレッジの中央値は80%程度
-
必ずしも常に役立っているというわけではないというアンケート結果