生成AIを用いてアプリケーション開発プロセスを変革しよう(6) 数値で見るAIによるプログラム設計書生成編
進化が非常にめざましいAIを、アプリケーション開発に活用することを考えるコラムの第六弾です。
前回のコラム「生成AIを用いてアプリケーション開発プロセスを変革しよう(5) AIを活用したモダナイズ手順実例編」では、GitHub Copilotでのソフトウェアのモダナイズ手順の実例をご紹介しました。
今回は、ChatGPTとGitHub Copilotで並行して検証を行い、設計書が正しく生成された度合いの比較を行います。
- ※本コラムの内容は、2023年8月~2024年2月までの情報をもとにしています。現在進行形で急速に技術革新が進んでおり、最新の状況を把握して活用していくことが重要です。当社でも常にキャッチアップしながら現場適用を行っています。
1. 目的
AI の活用
ソフトウェア開発の開発生産性、品質向上のためのAI活用ノウハウを蓄積します。
今回は、ChatGPTとGitHub Copilotの両方で設計書を生成します。期待通りに設計書を生成できたかどうかを○×で確認し、その比率を数値で見ていきます。
本検証では、Microsoft社がサンプルとして公開しているプログラムコードを検証対象として使用しています。
https://github.com/Microsoft/VCSamples/tree/master/VC2010Samples
2. 設計書生成の基本
チャットで設計書生成を依頼する
ChatGPT
GitHub Copilot
3. 検証プロジェクトおよび検証項目
検証プロジェクト
Visual Studioの公式サンプルプロジェクトから13個のプロジェクト(プログラム)を選択
多数公開されているサンプルプロジェクトの中から、ファイル構成がシンプル、かつプログラムのサイズが小さく、プログラム設計書の出力が可能なプロジェクトを選択して実施します。
- ※複雑な構成やサイズの大きなプログラムの設計書の生成が難しい理由については、過去のコラムを参照してください。
検証項目
設計書生成で頻出する期待と異なるAIの挙動を12項目に整理
設計書生成を期待通りに生成できない場合の頻出パターンを12項目挙げます。これらの項目について、ChatGPTとGitHub Copilotとの比較、およびプログラム言語やフレームワークによる比較を行います。
- ※期待と異なる→期待する、と視点が変わっている点に注意してください。
4. 検証項目ごとの成功率
すべての検証項目で○となり、期待通りに設計書が生成された比率
ChatGPTとGitHub Copilotの比率では大きな違いはなく、おおよそ50%程度のプロジェクトで設計書を正しく生成することができました。また、GitHub Copilotでは、常に設計書の生成に成功していますが、ChatGPTでは、設計書の生成に失敗(内容の正誤によらず生成自体が失敗)することがありました。
検証項目ごとに、どの程度の比率で期待通りの挙動が得られたか
多くの項目が90%を超え、非常に高い精度で設計書が生成されます。
「関数がすべて抽出できている」「文字数オーバーで回答が途中で切れなかった」の2項目のみ低い数値となっています。
プログラミング言語ごとの成功率
プログラミング言語によって傾向に大きな差はないようです。「アセンブリ/C」「Visual Basic」では低い数値も出ていますが、これは、検証数が少なく極端な数値が出やすくなっているためです。
開発フレームワークごとの成功率
「関数がすべて抽出できている」の「.NET Framework」の数値が低いですが、次のアプリケーションフレームワークでも同じ傾向になっています。
(「.NET Framework」は、今回検証したプロジェクトでは、すべて「Windowsフォーム」でもあります)
アプリケーションフレームワークごとの成功率
「ATL」と「Windowsフォーム」は、低い数値が出やすくなっています。仮説ですが、これらは検証対象の中では、高度なフレームワークのため、数値が低くなりやすい可能性が考えられます。
5. プログラムの種類ごとの成功率
プログラムの種類ごとに、どの程度の比率で期待通りの挙動が得られたか
「.NET Framework」「Windowsフォーム」は、低い数値になっています。これらのプログラムの検証プロジェクトでは、「C++」と「Visual Basic」の2パターンがあります。「Visual Basic」の数値は高いため、プログラミング言語の中で数値が低めの「C++」との組み合わせが良くないようです。
プログラムの種類ごとに、どの程度の比率で期待通りの挙動が得られたか(数値の高い順)
前述までに確認した通り、「C++/.NET Framework/Windowsフォーム」「C++/COM/ATL」の数値が低くなっています。
「C/Win32API/コンソールアプリケーション」の数値も低いのですが、「C++/Win32API/コンソールアプリケーション」であれば数値は高いため、より注意深く調べる必要がありそうです。
6. まとめ
今回確認できたこと
一部のプログラムの種類では低い数値が出ているものの、全体として良い数値となりました。対象とするプログラムの種類によって手順などの調整が必要となりますが、AIによる設計書の生成は、十分に実現性があることが確認できました。
AI活用の成果(AIを使ってよかったこと)
事前に対象プログラムの中身を知らなくとも、事前に用意された手順でプロンプト(AIへの指示文言)を実行することで設計書が生成できました。特に今回の検証では、何に使用するソフトウェアか把握していないプログラムもありましたが、設計書が生成できたことにより把握することができました。
AI活用の成果(AIを使ってよかったこと)
一部のプログラムの種類で低い数値が出ています。プログラミング言語やフレームワークを熟知した有識者が、対象に合わせたAIへの指示文言(プロンプト)を事前に作成する必要があると考えられます。
AIを活用しない場合と比較し、「プログラムやフレームワークを熟知した有識者」の関与が必要であることは変わらないという結果になりました。
しかし、その目的はAIへの指示文言(プロンプト)の準備です。AIへの指示文言(プロンプト)のパターンを今後貯めていくことで解消できる可能性があります。
既存プログラムのプログラム設計書作成に対して、AIの活用は有益であると考えられます。
7. 付録
関数がすべて抽出できている
生成された設計書にプログラムのすべての関数が記述されているか。省略や認識されていない関数がある場合は×。
プログラムの流れが正しい
生成された設計書に記述されているプログラムの流れが正しいか。流れが記述されない場合は×。
依存関係が正しく抽出できた
生成された設計書にプログラムのすべての依存関係が記述されているか。省略や認識されていない依存関係がある場合は×。
エラーハンドリングの記述内容が正しい
生成された設計書に記載されているエラーハンドリングが正しいか。省略や誤ったエラーハンドリングが記述されている場合は×。
プロンプトが期待通りに実行できた
AIが設計書を生成したか。期待通りの設計書の生成をしなかった場合は×。
プログラム分析を「推測」で回答する事象が発生しなかった
AIは、プログラムのファイル名や関数名からプログラムの挙動を推測して回答することがある。推測した、と回答された場合は×。
プログラムの分析が正常に行えた
AIが、ファイルのエンコーディングを正しく読まない、ファイルの一部分しか読まないという場合がある。再現性は低く、再実行で上手くいく場合がある。正しく読まれなかった場合は×。
セッションエラーが発生しなかった
AIとのチャット中にセッションエラーとなり、回答が得られないことがある。セッションエラーが発生した場合は×。
英語で回答をされなかった
AIとのチャットでは、日本語でプロンプト(指示文言)を与えても英語で回答することがある。英語で回答があった場合は×。
文字数オーバーで回答が途中で切れなかった
AIとのチャットでは、長い文章の回答は途中で文章が途切れてしまう。チャットで指示することで、続きに回答を得られることもある一方で、得られないこともある。途中で途切れた場合は×。
アップロードエラーによって分析ができない事象が発生しなかった
ChatGPTへの指示では、プログラムのソースコードファイルをチャット画面でアップロードする。その際、アップロードエラーが発生することがある。アップロードエラーが発生した場合は×。
- ※文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。