IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

グーグルのクラウドを支えるテクノロジー

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第145回 Googleにおける開発者の生産性に影響する要因の分析(パート1) (中井悦司) 2023年2月

はじめに

 今回からは、2022年に公開された論文「What Improves Developer Productivity at Google? Code Quality」を紹介していきます。この論文では、Google社内のソフトウェア開発者を対象とした定期的な社内アンケート、および、開発システムのログデータを元にして、「ソフトウェア開発者の生産性の向上に影響する要因」の分析を行っています。第60回第61回の記事では、同様のテーマを取り扱った2019年の論文「What Predicts Software Developers' Productivity?」を紹介していますが、これら2つの論文には、分析対象のデータや分析手法に違いがあります。今回は、2022年の新しい論文が分析対象とするデータについて、以前の論文との違いを含めて説明します。

従来の手法の課題点

 2022年の新しい論文では、次のシンプルな問いに答えることを研究課題(Research Question)として設定しています。

・What causes improvements to developer productivity in practice?(開発者の生産性を向上する実践的な要因は何か?)

 ここでは、「in practice(実践的)」というキーワードがポイントになります。たとえば、開発者の生産性に影響する要因を調査する方法としては、開発者を2つのグループに分けて、それぞれ異なった条件の下に開発作業を進めてもらうという、「実験」に基づいた方法があります。この場合、あるツールを使用した場合と使用しない場合の違いなど、個々の要因の影響度を客観的に測れる一方で、「(実験用の環境ではなく)実際の開発現場において、最も影響が大きいものは何か?」という前述の問いに答えることは難しくなります。一方、冒頭で紹介した2019年の論文では、ソフトウェア開発者に対するアンケート調査を用いた分析を行っています。この場合は、実際の開発現場で働くエンジニアの「生の感覚」が得られる一方で、「因果関係」の客観的な分析が難しくなるという課題があります。2019年の論文では、開発者の生産性に強く影響する要因の1つとして、「Job enthusiasm(仕事に対する情熱)」という結果が得られていますが、「仕事に対する情熱」の結果として生産性が向上するという因果関係ははっきりしません。「能力の高いエンジニアは、仕事に対する情熱を持ちやすく、さらに、生産性も高い」など、別の隠れた要因が、「情熱」と「生産性」という2つの結果を生み出している可能性も否定はできません。

分析対象データ

 2022年の今回の論文では、上述の課題に対応するために、次の2つの方法を組み合わせた分析を用いています。

(1) 複数回に渡るアンケート調査結果を用いて、開発者ごとの生産性の時間的な変化を捕える
(2) 開発環境のログデータを用いて、分析の客観性を高める
 
 まず、(1)については、Googleでは、3ヶ月ごとにソフトウェア開発者を対象とした全社的なアンケート調査を行っており、これが元データとなります。このアンケートの中に「Overall, in the past three months how productive have you felt at work at Google/Alphabet?(過去3ヶ月のGoogle/Alphabetでの業務における自身の生産性をどのように感じますか?)」という項目があり、調査対象者は、これに対して5段階の選択肢から回答を選びます。これが、この開発者の生産性の指標となります。そして、その他には、担当するプロジェクトのコードの品質や技術的負債、社内標準の開発ツールに対する評価、チーム内のコミュケーションの状況などの質問があり、これらの中から、さきほどの生産性の指標に強く影響する要因を見つけ出すことが目標となります。
 この際、一度限りのアンケートであれば、生産性に対する回答そのものと関連性が高い項目を調べることになりますが、容易に想像できるように、5段階のどれを選ぶかは個々人の主観に依存します。実際には同程度の生産性であっても、自己評価が高くなりがちな回答者、あるいは、自己評価が低くなりがちな回答者など、実際に選ばれる回答にはばらつきが生じます。そこで、この論文では、それぞれの開発者について、2回の連続するアンケートにおける値の変化(生産性が向上したか、もしくは、低下したか)を調べています。生産性の変化に連動して、同じように(もしくは逆向きに)に変動している項目を調べることで、「生産性の向上/低下」に影響する要因を見つけ出そうと言うわけです。
 次に、(2)については、開発環境のログデータから、ビルド処理やコードレビューの待ち時間、エディターの使用時間など、実際の開発作業の状況がわかるデータを取得します。これらの中には、サブミットしたチェンジリスト(GitHubのプルリクエストに相当するもの)の数やコーディング作業に費やした時間など、開発者の生産性の指標となるデータが含まれています。(1)のアンケート結果とこれらのログデータを比較することで、自己評価の客観性が確認できます。この論文では、ログデータから得られた項目を特徴量とした機械学習モデルで、アンケートで得られた生産性の自己評価を予測するというタスクを実行しており、テストセットに対して高い予測精度(83%の適合率と99%の再現率)が得られることを確認しています。つまり、自己評価とログデータには有意な関連性があります。図1は、それぞれの特徴量の予測に対する影響度を示したもので、「Median Active Coding Time(実際にコードを書いている時間の中央値)」が、開発者が感じる生産性の高さに最も強く結びついていることがわかります。

fig01

図1 生産性の高さの自己評価に対する影響度(論文より抜粋)

 以上が調査対象データの概要になりますが、実はここまでの説明では、先に触れた「因果関係を明らかにする」という課題がどのように解決できるのかはまだわかりません。この点については、実際の調査結果とあわせて、次回に解説したいと思います。

次回予告

 今回は、2022年に公開された論文「What Improves Developer Productivity at Google? Code Quality」から、これまでの調査の課題、および、今回の調査で用いた分析対象データを紹介しました。次回は、より具体的な分析方法とその結果を紹介します。

Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes