生成AIをソフトウェア開発に用いることによる開発生産性および品質効果に関する検証
アーカイブ動画
生成AIを開発業務に利用することの有用性について調査検証
NECソリューションイノベータが実施した、生成AI活用の価値における調査・検証を紹介したのは、顔認証エッジデバイスの開発を経て、現在はマルチモーダル認証端末開発のプロジェクトリーダーを務める、大嶋健悟氏だ。
NECソリューションイノベータ株式会社
AI・データアナリティクス事業部 大嶋 健悟氏
IoT機器のソフトウェア開発がメイン業務だという大嶋氏は、「ソフトウェア開発において、生成AIをどのように使っているかという視点で伝えたい」と述べると共に、具体的な活用用途も示した。
ソースコード自体の生成はもちろん、他の人が書いたコードのレビュー、あるいは両業務の効率化などである。さらにはペアプログラミングのような使い方をすることで、若手エンジニアのスキルアップならびにスキルレベルの統一化を図るという。
一方で、実際の開発案件に適用している例は多くなく、効果も未知数な課題が多いと、大嶋氏は語る。そこで、実際に開発業務に取り込んだ場合、有用性はどうなのか。品質向上や工数削減といった視点での検証を行うこととした。
検証対象は、新人エンジニアなど、まだスキルレベルが高くないメンバーとし、ChatGPT、GitHub Copilotの2つの生成AIを用いた。
対象とした実プロジェクトは、顔認証システムのデータベースに、複数人のユーザーを一括で登録・更新・削除するコマンドラインツールの開発とした。
データベースの操作は、REST APIのインターフェースをあらかじめ用意。スライドで示したように、コマンドプロンプトなどのコマンドラインで登録や更新といったオペレーションが記述された入力用csvファイルと、 その結果を格納する出力用csvファイルを用意。コマンドを実行すると、指定されたオペレーションの処理が実行される、というシンプルなツールだ。
大嶋氏は早速、主観であると前置きしながらも、同プロジェクトのChatGPTの適用可能性の結果を示したスライドを紹介。赤字の箇所を詳しく説明していった。
1つ目は、以下スライドの基本設計工程の骨子作成である。プロンプトでは、まず「上級ITエンジニアとして振舞ってください」という役割を記述すると共に、実行してほしいタスクや、先ほど紹介したツールの概要などを記述した。
すると、右側8つのセクションに分かれた設計書骨子が作成されると共に、それぞれ記述する内容が提案された。
例えば、6番目のエラーハンドリング項目では、ツール内でエラーが発生した際の対処について説明する、といった具合だ。
ただし、エラー時の処理については左側のプロンプトを確認すると分かるが、大嶋氏は特に指示は出していない。大嶋氏は以下のように評価を述べている。
「ChatGPTが基本設計書に必要なものを考慮すると共に、私が作りたいツールの情報を当てはめていってくれたような感じがします」(大嶋氏)
続いては、UML図の作成である。流れは先と同様であるが、クリーンアーキテクチャの観点からクラス図はPlantUMLで作成するようにという具体的な指示を記述した。
右側の出力を見ると、確かに指示した図が示されていることが分かる。また同様の命令でシーケンス図の作成も行えることが分かった。
設計書のレビューも行った。今度はシステムメッセージとして、大嶋氏が考えるレビューの観点を記述。いくつかの記述内容の誤りなどを指摘されたが、「確認するとすべて正しかった」と、大嶋氏は評価した。
コード生成では、参考とすべき類似オペレーションのソースコードをプロンプトに記述し、実行すると、仕様に記述していないような内容のコードも作成した。
続いては、試験で使うためのテストコードの生成だ。まずは上記スライド左上、入力用csvファイルをパース(構文解析)するための、テストケースを洗い出してほしいという指示を出した。すると、その下に複数のテストケースが出力された。
その中から一つ、「入力用csvファイルのファイルサイズが非常に大きい場合でも、パフォーマンスが低下せずにパースできるか」というテストケースを選択し実行する。
すると、今度は右側のコマンドラインに、10万行がパースできれば正しいとのコードが生成された。
「パフォーマンスの定義は曖昧のため、10万行という数字は人間が与える必要がありますが、雛形として十分利用できるコードが出力されたと思います」(大嶋氏)
大嶋氏は、このように再び評価をすると共に「初めから予測はしていましたが、ソースコードの生成に対しては大きな効果が期待できる結果となりました」と、続けた。
続いては、プログラミング言語に特化したGitHub Copilotを用いることによる、開発の効果と品質を定量的に評価した取り組みだ。今回のケースでは先のようなコマンドラインツールではなく、より一般的な開発案件とした。
具体的には、顔認証端末が外部に公開するインターフェースにより、リクエストされた認証結果に対して、指定したレスポンスを返すWebサーバの開発である。
検証は大きく3つの項目で行い、生産性と品質を評価基準とした。なお、GitHub Copilotによりどれだけ効率化されたかを可視化するために、ソースコード全体に対してGitHub Copilotの提案を受け入れた割合を「Accept数」として計測した。
「生産性は1.5倍~3倍ほど高くなったと考えています。提案受け入れ率が7割以上と高かったことが、その理由でしょう」と、大嶋氏は結果を評価した。
一方で、品質に関して大差はなく、逆に、ファイルストリームのクローズ忘れなど大きく悪化しているケースもあった、と続けた。
大嶋氏は調査検証に取り組んだ所感や結果、課題を述べると共に、「生成AIはすごく優秀で、数秒である程度のアウトプットができる新入社員として扱うことが正解だと感じました」と、述べた。
ただ同検証は1年ほど前に行ったものであり、その後の生成AIの急速な進化を踏まえ「私を楽にさせてくれるような生成AIができてくれるとすごく助かります」との言葉を述べ、セッションを締めた。