GoogleのエンジニアがGoogleで9ヶ月間で、数千人の開発者が実行した2660万回のビルドに関するリサーチペーパーを発表した。このペーパーにはビルドのワークフローを説明し、ビルド失敗の頻度、コンパイルエラータイプ、修正作業を分析している。著者らによれば、この調査結果は大規模な組織でのビルドプロセスのあり方や、開発者より効率的にサポートする方法についての理解を促進するのに役に立つ。
著者らは自分たちの研究について、"全く新しい"アプローチでプログラマがコンパイラやビルドツールに取り組んでいるかを示している、という。さらに、彼らはビルドプロセスの重要性を強調している。ビルドプロセスは“編集-コンパイル-デバッグ”サイクルの中心にあるのだ。
ゆっくりしたコンパイルだと、プログラマは他のタスクに気を取られてしまいます。[...] 遅延が起きれば、プログラマが次にしたい変更とその変更の影響の確認のギャップが大きくなります。ビルドプロセスを高速にしておき、ビルドがいつどのように失敗したのかを理解しておくことはプログラマの生産性を改善する上でとても重要です。
著者らは4つのメトリクスの分析の基づいて、いくつかの質問に答えている。
- 各開発者のビルド回数
- ビルド失敗率
- 各エラー種別ごとのエラー回数
- 開発者がエラー修正に費やした時間
どの程度ビルドに失敗しているか
ビルド失敗率は"ほぼ正規分布しており、メディアンはC++(38.4%)のほうがJava(28.5%)よりも高い"。著者らはこの言語での違いをIDEの利用に起因していると考えている。ほとんどのJava開発者はIEDEのビルドチェック機構の恩恵を受けている。
"失敗率が極端に高い、あるいは低い開発者はほとんどいない"。そのような開発者は特定の言語や特定のプロジェクトに貢献している開発者ではないようだ。
ビルドの回数とビルドの失敗率に強い相関関係はない。ビルド回数が多い開発者は失敗率が高いという仮説は成り立たないようだ。
開発者の経験とビルドの失敗率には相関関係がない。原因は"経験や専門性を正確に測定するのが難しいためかもしれない"。
ビルドが失敗する理由
この研究は大量のビルド失敗を特定し、頻度を測定している。下図の通りだ(クリックして拡大)。
結果はさらに5つに分類される。依存物、タイプミス、構文、セマンティクス、その他の5つのカテゴリだ。カテゴリの分布は下記の通り。
依存物に関連するエラーはC++ (52.68%)とJava (64.71%)で最も頻度が多いエラータイプだ。C++のほうがJavaよりも構文エラーが多い。著者らが言うにはこの違いもJavaでIDEを利用していることに起因する。
ビルドを修正するのにどのくらい時間がかかっているか
解決にかかる時間のメディアンはC++は5分、Javaは12分だ。
エラーの影響範囲によって、解決にかかる時間がかわる。平均的にはC++のほうがJavaよりも時間がかかっている。しかし、ある主のC++のビルドエラーは高いメディアンを示している。解決に時間がかかるほど難しいエラーであるのが原因だ。
エラーが解決されるまでのビルド回数の観点から見ると、JavaでもC++でも、25のビルドエラー種別のうち、75%のエラーは2回のビルドで解決している。
研究でわかったこと
著者らによれば、研究によってわかったことは、以下の通りだ。
-
プログラミング言語にかかわらず、10%のエラータイプが90%のビルド失敗を占めている。
-
依存性のエラーが最も多い。
-
平均的には修正は1回のビルドで反映される。2回のビルドでほとんどのエラーが解消される。
開発者にとってもツールの開発者にとってもこの結果は役に立つ、と著者らは言う。
開発者にとっては、専門性やツールの使い方、開発の仕方(例えば依存性を減らす)など、さらに強化するべき点を特定できます。
一方、"依存性のエラーを解決するために優れたツールを導入するのは、完全に元が取れる"ことがわかります。同じように、エラーメッセージとタイプを定量化できれば、コンパイラチームを助けて、開発者を支援するために改善するべきエラーメッセージを特定できます。
最後にこの研究には、そしてあらゆる研究には、妥当性に制限があることを示したほうがいいだろう。著者らは次のような要因がこの研究の妥当性を脅かすとしている。
- この研究はひとつの企業の特定のプロセス、制約、リソース、ツールを分析している。しかし、ビルドの回数、開発者数、関連するシステムの規模の観点から考えれば、コミュニティにとって十分に価値を提供できる。
- C++とJavaに特化している。
- エラーの分類、データからのノイズの除去によって適応性が低下している。
この研究はGoogleのエンジニアであるCaitlin Sadowski氏、Edward Aftandilian氏、Robert Bowdidge氏と香港大学の研究者であるHyunmin Seo氏、ネブラスカ大学の研究者Sebastian Elbaum氏によって行われた。