はじめに
興味があって、というかもうちょっと楽をしたくて、LLMと要求工学周りのことについて今どうなってるかまとめてみる。一旦サーベイ論文読んだ程度のことをまとめるので、もう一踏ん張りは必要そうだけどまあ概観掴むにはこの程度で良いかなと。参照している論文は以下Large Language Models for Software Engineering: Survey and Open Problems。他のサーベイ論文も見ましたが引用数も多かったのでこちらを選択。
概要
サーベイ論文なので、要求工学に限らずソフトウェア工学、という文脈でのLLMの活用についてまとめている。勤め先の社内勉強会(輪読会)でざっと読んだけど、要求工学からSREのようなソフトウェア運用よりの話題にテストに関するまで非常に幅広く扱っていた。全部読む必要はないので自分の興味のある領域だけ見るだけでも良いサーベイ論文だと思う。
要求工学とLLM
さて本題。引用先の論文まで読み進めたいけども、一旦取り上げたサーベイ論文のみの話題を扱うことにする(また突っ込んでみる機会があれば追記します)。
マクロな状況(ざっくり説明)
- 要求工学全体の置かれた状況はRequirements engineering: the state of the practice を読むのが良さそう。引用数もすげー多い。
- まだまだ研究は少ない様子(サーベイ論文書いてた時点での話)
- LLMは自然言語を扱うことができるし、要求工学も自然言語を使っているわけなので相性は良さそう、これからの利用が期待できる
個別の研究事例など
- LLM普及以前の研究では、特に要求工学の分野に対する検索技術の利用に関する研究があった
- 参照論文: Search Based Requirements Optimisation: Existing Work and Challenges | SpringerLink
- 参照先まだ読んでないので細かいところまではよくわからず
- あと、LLM普及以前の要求工学におけるAI技術の利用状況あんまり知らないのでそこもよくわかってない
- 要求定義をした結果としての成果物を用いて、要求分析の作業をLLMができるか評価作業をした研究がある
- 参照論文: [2304.12562] Empirical Evaluation of ChatGPT on Requirements Information Retrieval Under Zero-Shot Setting
- サーベイ論文読んだだけだと、内容が具体的に何したかまではわからない
- 論文そのものの結論としては、要求定義におけるLLM利用をポジティブに捉えて終わってる
- 要求の分類をした研究もある
- 要求の完全性に関する研究(<= 日本語でどう書くかわからなかった)
- 参照論文:Improving requirements completeness: automated assistance through large language models | Requirements Engineering
- これもサーベイ論文だけだどさっぱりわからなかったから、実際に参照してる論文読む必要がある。でも、パッと概要読んだ限りだと、自然言語で書かれている要求は曖昧なので、それらは要求工学の分野で長らく課題となっていて、その課題に対してLLMを用いてアプローチした話のよう。
Open Problems
- マクロな状況:他のソフトウェア工学の分野もそうだが、LLMベースの要求工学、というような体系だったものはまだない
- LLMの利用にがっかりしているPractitionerもいる
- 参照論文: A large-scale survey on the usability of ai programming assistants: Successes and challenges
- 上記論文読んでないので細かく読んでないので詳細よくわからない
- コード生成は特にLLMの活用というコンテキストで目覚ましい成果を出しているが、要求定義という活動においても成果は期待できる
- 要求とコード、テストケースなどの開発活動における成果物のつながり(トレーサビリティ)の確認に関する研究はChallenging。
まとめ(というか感想)
掘り下げて読んだ方が良い論文いくつか見つかったので良かった。何度かサーベイ論文中でも出てきたんだけど、LLMと要求定義って自然言語を扱うという意味で相性良いはず、ということだった。まあそうだろうな、と思いつつ、どうプロンプトするかていうのは難しそうな気がする。これはなんでもそうなんかな。モデリング上手くしてインプットにしてあげるのが基本は良さそうだけど、モデリングもなかなか曖昧ではあるから、モデリングを助けてくれるプロンプトなり、モデリングした結果を利用するプロンプトなりそういった方向での活用がいいのかしら。わからん。
一番面白いと思ったのは、Open Problemsで書かれてたLLMを用いたトレーサビリティの話。たしかに要求定義工程における成果物やコード、テストケースをうまくLLMにインプットできるならそれぞれの成果物がつながって、要求に対する成果物がどうか、というのが評価できそうに思った。実際にこういう観点でプロジェクトリードしてるソフトウェアエンジニアって見てると思うし、少なくとも僕もこういう視点でチェックすることはあるから必要だしできそうだと思った。これできたらソフトウェア開発もうちょい楽になりそう。
↑我が家の一番難しいステークホルダーを三輪車にのせてコントロールしてる様子