CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回に続いて、2022年に公開された論文「What Improves Developer Productivity at Google? Code Quality」を紹介していきます。この論文では、Google社内のソフトウェア開発者を対象とした定期的な社内アンケート、および、開発システムのログデータを元にして、「ソフトウェア開発者の生産性の向上に影響する要因」の分析を行っています。今回は、具体的な分析方法とその結果を紹介します。
前回の記事では、次の2種類の方法を組み合わせた分析を行うことを説明しました。
(1) 複数回に渡るアンケート調査結果を用いて、開発者ごとの生産性の時間的な変化を捕える
(2) 開発環境のログデータを用いて、分析の客観性を高める
まず、(1)については、それぞれの開発者の生産性に対する回答(5段階評価の数値 y)とその他のアンケート項目の回答 D1, D2,...の関係性を調べます。この際、D1, D2,...は回答を何らかの方法で数値化したものとします。また、前回説明したように、開発者個人によって自己評価の高低があります。そこで、このような個人に依存する影響をαとして、次のような線形モデルを用意します。
y = α + b1×D1 + b2×D2 + ... + λ + (統計誤差)
最後に加えたλは、開発者個人の自己評価の高低に加えて、アンケート実施時の企業風土など、すべての開発者に対して共通に影響する要素があると仮定した項です。そして、この調査では、複数回のアンケート結果が利用できるので、それぞれの開発者について連続する2回分の結果の差を取ります。
Δy = b1×ΔD1 + b2×ΔD2 + ... + Δλ + Δ(統計誤差)
この操作により、開発者個人に依存する影響αを取り除くことができます。この後は、実際のアンケート結果の数値を当てはめて、係数b1, b2,...の値を推定します。この部分の具体的な統計処理については、論文の中に記載がありますが、最終的に、係数b1, b2,...の推定値と、その値の信頼度(統計的な確らしさ)が得られます。係数の推定値が大きい項目Dは、開発者の生産性との関連性が高いと考えることができます。図1は、結果の一部を抜粋したもので、縦方向は結果の信頼度、横方向は係数の推定値(絶対値)に対応します。ここでは、信頼度が特に高いものを抜粋しています。
図1 開発者の生産性との関連が大きい項目(論文より抜粋)
上位の3つは、次の項目になります。
・sat. with project code quality(自分が関わるプロジェクトのコード品質)
・priority shift(プロジェクト方針の変更)
・project tech debt(自分が関わるプロジェクトの技術的負債)
つまり、開発中のコードの品質が高く、技術的負債が少ないほど、生産性は高くなり、その一方で、プロジェクト方針の変更は生産性に悪影響を及ぼすものと考えられます。ただし、ここまでの分析でわかるのは、「これらの項目は開発者の生産性との関連性が高い」という事であり、「これらが原因となって開発者の生産性が変化する」という因果関係が示されたわけではありません。
上述の因果関係を確認するには、どのような方法があるでしょうか? この論文では、時間をずらして変化を計測する方法を用いています。ある項目Qが原因となって、生産性Pの変化を引き越しているのであれば、Qの値が変化した後、すこし遅れてからPの変化が現れると想像できます。そこで、たとえば、2018年第3四半期と2019年第2四半期におけるコード品質に対する回答結果の変化をΔQとします。一方、2018年第3四半期と2019年第3四半期における生産性の変化をΔPとします。コード品質Qの変化が生産性Pの変化を引き起こしているのであれば、ΔQとΔPの間には有意な相関関係があるはずです。ただし、この分析を行うには、1人の開発者について、3回分のアンケート結果が必要になります。一方、実際の分析対象データとしては、それぞれの開発者について2回分のアンケート結果しか無いため、ここでは、生産性Pについては、アンケート結果ではなく、開発環境のログデータを利用しています。前回の記事で説明したように、生産性の自己評価と有意な関連性を持つログデータが発見されているので、これで代替しようというわけです。
また、QとPの役割を入れ替えて同様の分析を行うこともできます。これらの結果を比較することで、Qが原因でPの変化を引き起こしているのか、あるいは逆に、Pが原因でQの変化を引き起こしているのかが確認できます。コード品質をQとした場合の分析結果を見ると、コード品質に対する満足度Qが向上すると、それに応じて、1つのチェンジリストをサブミットするまでの時間が減少するなど、生産性の向上を示すログデータの(時間的に遅れた)変化が確かに現れているということです。また、QとPの役割を入れ替えた場合は、このような相関は確認できず、これにより、コード品質の改善が生産性向上の原因であることが確認できたことになります。
このようにして、コードの品質向上と技術的負債の解消が生産性向上に寄与することが明らかになったわけですが、この調査結果は2019年にGoogle社内で公表されて、さまざまな改善活動が実施されるきっかけになりました。具体的には、コードの品質向上に関わる全社的なカンファレンスが開催され、開発チームによっては、技術的負債の低減をプロジェクトメンバーの評価項目に加えるなどの取り組みが行われました。その結果、2019年と2021年のアンケート結果の比較では、「技術的負債で生産性が阻害されることはない」という回答が27%増加、「コード品質に満足している」という回答が22%増加、「高い生産性を実現している」という回答が18%増加など、実際の改善効果を示す結果が得られたという事です。
今回は、2022年に公開された論文「What Improves Developer Productivity at Google? Code Quality」から、具体的な分析方法とその結果、そして、現場の改善活動へのフィードバック効果などを紹介しました。学術的な分析にとどまらず、その結果を実際の改善活動に活用している点は、「データに基づいた判断」を重視するGoogleの文化が感じられる内容ではないでしょうか。
次回は、データセンターネットワークの負荷分散技術に関する話題をお届けします。
Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes