見出し画像

McKinseyレポート:生成AIにおけるソフトウェア開発 生産性向上の手法

ソフトウェア開発にAIを採用している会社は非常に多くなってきて、生産性は企業によっては驚異的な向上を達成している、と報告しているレポートは多く登場してます。
ところが、ソフトウェア開発に特化したAIツールはまだまだ黎明期ゆえ、どれを選択したら良いのか、という悩みがあります。また、開発の工程全てにおいてAIツールが効果を発揮するか、と言ったらそんなわけない、というのは容易に想像できます。
このレポートは、ソフトウェア開発へのAI技術の採用は生産性向上のために必須、という前提でありながら、どういうタスクにAIを使うべきか(あと、どういうところで使っちゃいけないか)という提言を実際の実験を通して行ってます。
また、AIツールの導入と並行して、それに伴って必要となる、4つの指針を提言してます。

  1. エンジニアに対する継続的なトレーニング/コーチング

  2. AI導入の標準的なユースケースの定義

  3. スキルシフトの計画

  4. AI導入に伴うリスクのコントロール

生成AIにおけるソフトウェア開発
生産性向上の手法

マッキンゼーの研究によると、生成AIを活用することで、ソフトウェア開発者はコーディング作業を最大で2倍速く完了できるとされています。生産性を最大化し、リスクを最小限に抑えるためには、4つの行動が重要だ、と述べています。
この記事は、マッキンゼー・デジタルの見解を代表して、Begum Karaci Deniz, Chandra Gnanasambandam, Martin Harrysson, Alharith Hussin, and Shivam Srivastavaによる共同研究成果です。

この研究について
生成AIベースのツールが開発者の生産性に与える影響を理解するために、アメリカとアジアに位置する40人以上のマッキンゼー開発者で構成するラボを設立しました。この開発者は、互いにソフトウェア開発経験の量が異なります。このラボは、業界の発展、新しいツールの影響、既存ツールの進化を理解するための継続的なテストベッドとして機能します。
このレポートでは、参加者に、数週間にわたり、コード生成、リファクタリング、文書化という3つの領域で一般的なソフトウェア開発タスクを実行してもらいました。各タスクは、2つの生成AIベースのツールにアクセスできるチームと、AIの支援を全く使用しないチームによって実行されました。各開発者は、タスクの半分にテストチームとして、もう半分にコントロールチームのメンバーとして参加しました。
複数のフォーマットでデータ収集しました。また、彼らの経験年数、専門知識、以前の知識も統計を取りました。各タスクに費やされた時間を測定するために、参加者は開始時間、終了時間、休憩時間を記録しました。各タスクの後のタスク調査では、タスクの複雑度合いと開発者の経験を捉えました。コードデモ中の審査員の評価は、成功した提出物を特定するために使用されました。オープンソースプラットフォームを使用したコード品質の自動レビューは、コードの可読性と保守性を評価し、バグを検出しました。そして、実験後の調査では、ツールとタスク全体の参加者の印象に関する洞察を集めました。
ソフトウェア開発において、生成AIの活用が画期的な時間節約に繋がる技術として期待されてます。しかし、この革新的技術の全潜在能力を引き出すためには、単なるツール導入以上の戦略が必要です。
最新の実証研究では、生成AIベースのツールが一般的な開発者タスクにおいて速度向上をもたらしていることがわかります。例えば、Exhibit 1にあるように次の結果が出ています。

  • 保守性(コードがどれだけ容易に改善できるかを考慮する)のためのコード機能の文書化は、1/2の時間で完了

  • 新しいコードの記述はほぼ1/2の時間で完了

  • 既存のコードの最適化(コードリファクタリングと呼ばれる)はほぼ2/3の時間で完了

適切なスキルアップがあれば、これらの速度向上は、新しいツールやプロセスによって推進される過去のエンジニアリング生産性の進歩を上回る生産性向上が実現されると言えます。

一方、タスクの複雑さや開発者の経験によって時間節約の程度が大きく異なることもわかりました。

  • 開発者が高度な複雑さを持つと判断したタスクでは、たとえば必要なプログラミングフレームワークに対する不慣れさなどの理由から、時間節約は10%未満に縮小

  • 1年未満の経験の新人開発者がツールを使用すると、それを使用しない場合に比べて7~10%時間が余計にかかる

これらのツールを使用しても、開発者がツールを使いこなした場合、生産スピードを向上しつつ、品質も確保が可能でした。バグ、保守性、読みやすさ(再利用性に重要)に関して、AI支援コードはわずかに良好な品質でした。
しかし、参加者のフィードバックによると、開発者はその品質を達成するためにツールと積極的に反復作業(Iteration)を行っていることが示されており、開発者を支援するための効果の方が大きいようです。最終的に、適切なコード品質を出すためには、ツールに対するプロンプト指示を繰り返し入力する必要があります。

結論として、エンジニアリングリーダーが生成AIのトレーニング、コーチング、ユースケースの選択、労働力のスキルアップ、リスクコントロールを含むアプローチを取る必要があることを示唆しています。

生成AIが効果を発揮した場所

この研究では、ソフトウェアチームが定期的に行う一般的タスクを開発者に割り当てました:

  • 保守性と再利用性を向上させるためにコードをマイクロサービスにリファクタリング

  • 顧客体験を向上させるための新しいアプリケーション機能を構築

  • 将来の変更を容易にするためにコード機能を文書化

これらのタスクにわたって、本研究は、生成AIベースのツールが以下の4つの主要な領域で著しい生産性の向上を可能にすることを発見しました:

  • 手作業と反復作業の迅速化
    生成AIは、次のようなルーチンタスクを処理できます。これにより、開発者はより複雑なビジネスの課題を解決し、新しいソフトウェア機能を迅速に推進することができます。

    • コーディングに使用される標準機能の自動入力

    • 開発者がタイプ中のコーディングステートメントの完成

    • 開発者のプロンプトに基づいて特定の標準形式でのコード機能の文書化

  • 新しいコードの初稿の迅速なスタート
    空白の画面に対して別のウィンドウまたは使用している統合開発環境(IDE)内でプロンプトを入力することでコーディングの提案を求めることができます。いわゆる、ライターズブロックからの脱出対策として効果を発揮してます。

  • 既存のコードへの更新の加速
    効果的にプロンプトを使用すると、既存のコードに対する変更をより速く行うことができると報告されてます。

    • 例:

      • オンラインコーディングライブラリからのコードを適応させる時間の短縮

      • 事前に書かれたコードを改善するために、開発者はそれをプロンプトにコピーして貼り付け、ツールに基準に基づいて調整するように反復的なクエリを送信

  • 新しい課題に取り組む開発者の能力の向上

    • 未知のコードベース、言語、またはフレームワークに迅速に精通するのに役立ちます。

    • 新しい課題に直面した開発者は、これらのツールを使用して、通常は経験豊富な同僚に相談するような助けを得ることができます。
      例:新しい概念の説明、情報の合成(異なるリポジトリからのコードを比較・対照するなど)

    • フレームワークの使用方法に関するステップバイステップガイドの提供したがって、複雑なタスクを実行するために生成AIベースのツールを使用する開発者は、ツールを持たない者に比べて、与えられた時間枠内でこれらのタスクを完了する可能性が25〜30%高いことがわかりました(Exhibit 2)。

また、生成AIベースのツールを使用する開発者は、全体的な幸福感、達成感、フロー状態を報告する可能性が2倍以上になることがわかりました(Exhibit 3)。満足度の低い単純作業を自動化し、異なるオンラインプラットフォームでの解決策を迅速に情報を手に入れることができるツールの能力が起因していると考えられます。

逆に開発者の知見を要するタスク

生成AI技術は多くのことを実行できますが、本研究によると、そのツールはそれを使用するエンジニアのスキルに依存していることも示唆されています。参加者のフィードバックから、人間による関与が重要であるとされる3つの領域が明らかになりました:

  • バグとエラーのコード検査:
    生成AIベースのツールが間違ったコーディング提案を行ったり、コードにエラーを導入したりすることがあるとの報告がありました。あるタスクでは、開発者がツールの誤った仮定を修正するために多数のプロンプトを入力しなければならなかったと指摘されています。また、別のケースでは、開発者がコードのデバッグを正しく行うためにツールにかなり細かい指示をする必要があったと共有されています。

  • 組織的な要件の考慮:
    生成AIベースのツールはコーディングに関する多くの知識を持ってますが、特定のプロジェクトや組織の特定のニーズについては知識ベースを持ちません。これは最終的なソフトウェア製品が他のアプリとの統合、企業のセキュリティ要件、最終的なエンドユーザーのニーズ解決に必要な知識です。ソフトウェア開発者が具体的なプロンプトを通じてこれらのツールに文脈を提供することが必要です。これには、コードがどのように使用され、誰によって使用されるか、ソフトウェアが連携する他のシステムの種類、使用データなど、割と多岐に渡ります。

  • 複雑なコーディング要件のナビゲーション:
    生成AIベースのツールは、短いコードの最適化などの単純なプロンプトに答えるのに適しているが、異なるコードロジックを持つ複数のフレームワークを組み合わせるなど、複雑なものには適していないことが報告されています。
    ある参加者は、多面的な要件を満たすための実用的な解決策を得るには、まず手動でコンポーネントを組み合わせるか、コードをより小さなセグメントに分割する必要があったと述べています。別の参加者は、「生成AIは、問題がより複雑になり、大局を考慮する必要がある場合に最も役に立たない」と説明しています。

この結果はリーダーに対してどういう意味を持つのか?

生成AIをソフトウェア開発に使用する際、これらの時間節約と品質改善を実際の生産性向上に変換し、リスクを最小限に抑えるために、以下の4つの優先事項から始めることが提案されています:スキル開発、高度なユースケースの追求、スキルシフトの計画、リスク管理

開発者に生成AIトレーニングとコーチングを提供する

開発者が日常業務を補完するために技術を効果的に使用するためには、トレーニングとコーチングの組み合わせが必要になるでしょう。

  • 初期トレーニングには、プロンプトエンジニアリングと呼ばれることが多い、ツールに自然言語プロンプトを入力するためのベストプラクティスと実践的な演習が含まれるべきです。

  • 業界固有のデータプライバシーや知的財産の問題を含む生成AIリスクの概要、AI支援コードのデザイン、機能性、複雑性、コーディング標準、品質のレビューのベストプラクティス、ツールからの良い対応と悪い対応の見分け方を開発者に教える必要があります。

  • 1年未満の経験を持つ開発者には、追加の基礎プログラミング原則のコースワークが必要です。例えば、コーディング構文、データ構造、アルゴリズム、デザインパターン、デバッグスキルなど、より経験豊富な人々が観察した生産性向上を達成するためには、追加のコースワークが必要です。

  • 日常業務でツールを使用し始めると、スキル開発は上級チームメンバーからの継続的なコーチングとコミュニティの構築で続けられるべき。
    例えば、専用のオンラインチャンネルやチームミーティングを通じて実践例を共有すること。これは継続的な学習を促進し、ベストプラクティスが組織全体で共有されることを確実にし、問題を早期に特定するのに役立ちます。参加者がより多くのプロンプトを生成し、お互いに学びを共有するにつれて、彼らのプロンプトの品質が向上したことが指摘されています。

コード生成を超えた高度なユースケースの追求

本研究は、この技術が既存のコードのリファクタリングを含む多くの一般的な開発者タスクにおいて影響を与える可能性があることを示しています。例:レガシーアプリケーションのリファクタリング等での生産性向上が
新しいユースケースの展開には、ツールの慎重な評価が必要です。市場には新しい生成AIツールが次々と登場しており、異なるツールは異なる領域で優れています。
本研究は、複数のツールを使用することが一つのツールを使用するよりも有利であることを示しています。本研究中、参加者は下記の2つのツールにアクセスできました。

  • ユーザーのプロンプトに応答するためにトレーニングされたファウンデーションモデル
    コードのリファクタリングを行っている際に質問に答えるのに優れていると評価

  • コードに特化してトレーニング/チューニングされたファウンデーションモデル
    統合開発環境にプラグインし、ドキュメント内の記述的なコメントからコードを提案する能力のおかげで、新しいコードの記述に優れている、と評価

開発者が特定のタスクにおいて両方の生成AIツールを組み合わせて使用した場合(一つだけを使用するのではなく)、彼らは開発作業の時間短縮を1.5〜2.5倍実現しました。

スキルシフトの計画

開発者の生産性が向上するにつれて、リーダーはスタッフをより価値の高いタスクにシフトする事が必要になります。生産性の基準を設定し、継続的に改善を測定することで、組織全体で新たに生じるキャパシティを明らかにすることができます。
リーダーは、追加のキャパシティをどのように使用し、出現する可能性のあるスキルギャップを埋めるためにどのようなスキルアップが必要かを検討する必要があります。例えば、新しいビジネス拡張を可能にするために才能を活用したり、既存の製品をより頻繁に更新したりすることが考えられます。これらの任務には、開発者がソフトウェア設計とアーキテクチャにおける新しいスキルを構築することが求められます。

リスクコントロールの提供

生成AIベースのツールに伴って、新たな知的財産等に関する規制/条例のリスクが出現しています。企業内のソフトウェア開発のガバナンスを見直す際、以下のようなリスクを考慮する必要があります:

  • データプライバシーと第三者のセキュリティ:開発者がツールにプロンプトを入力する際に機密情報を露出させる可能性を防止する制度が必要

  • 法律および規制の変更:ヨーロッパ連合の一般データ保護規則(GDPR)などの技術の使用を制限する規制の変更にタイムリーに準拠する手段

  • AIの行動的脆弱性:悪意のある行為により、LLMモデルのトレーニングに悪影響を与えたり、組織の開発環境に侵入したりする影響を防止

  • 倫理および評判に関する問題:他のエンティティによって著作権で保護されたコードを使用することや、ツールが生成するコードの所有権に関する議論から生じうる問題

  • セキュリティの脆弱性:AIが脆弱性のあるコードを生成する可能性があり、システム(および組織)をリスクにさらす可能性が発生する問題

生成AIは、他のどのツールやプロセスの改善とは異なる方法でソフトウェア開発を変革する可能性があります。今日の生成AIベースのツールを使用することで、開発者はタスクを最大2倍速く完了できますが、今後技術が進化し、ソフトウェア開発ライフサイクル全体のツールにシームレスに統合されるにつれて、開発プロセスの速度や品質がさらに向上すると予想されています。しかし、本研究が示すように、単にツールの導入だけでは、この技術の全潜在能力を引き出すことはできません。生成AIのトレーニングとコーチングユースケースの選択労働力のスキルアップリスクコントロールを含む構造化されたアプローチは、組織が生成AIの卓越した生産性と比類のないソフトウェアイノベーションの約束を追求するための堅固な基盤を築くことができます。


この記事が気に入ったらサポートをしてみませんか?