南山の先生

学部別インデックス

理工学部・ソフトウェア工学科

天嵜 聡介

職名 教授
専攻分野 ソフトウェア工学
主要著書・論文 Cross-version defect prediction: use historical data, cross-project data, or both?, Empirical Software Engineering, Vol.25, No.2, pp.1573-1595, 2020.
将来的研究分野 ソフトウェア開発コミュニティの分析
ソフトウェア製品における予測技術の運用
担当の授業科目 プログラミング言語

機械学習がバグを見つける? これからのソフトウェア開発について

 最近、AIがプログラマーの大変な作業を助けてくれるようになってきていることがニュースなどで報道されています。ソフトウェア工学分野ではAIを活用するための研究が広く行われています。そのような研究の中に、プログラムのバグ(不具合)を自動的に見つけてくれる技術の研究があります。

 AIはどうやってバグを見つけているのでしょうか?いくつかの方法があるのですが、基本的には過去の膨大なデータからパターンを学習させています。例えばGitHubのようなソフトウェア開発活動をサポートするサイトにある何百万ものプロジェクトから、バグが発生したコードと正常なコードを集めて、AIに「このパターンだとバグになりやすい」ということを覚えさせます。人間のプログラマーが経験を積むのと同じように、AIも大量の事例から学習していくわけです。

 AIは単純な文法ミスだけでなく、もっと深い問題を見つけてくれます。例えば、コードの変更履歴を分析して「このファイルは最近何度も修正されているから要注意ですよ」とか、「この部分は他のプロジェクトで問題になったコードと似ていますから確認した方がいいですよ」といった、人間なら見落としそうな微妙なサインをキャッチしてくれます。このように有望な分野であることから、MicrosoftやGoogleなどソフトウェアでビジネスをしている多くの企業が国際会議などの場で活発に研究発表しています。もちろん、日本の企業も頻繁に学会発表をしています。

 近年、AI技術は急速に発展していますが、コードの不具合を完璧に指摘できるところまでは至っていません。AIは文脈まで完全に理解できないので、問題ないところを間違えて指摘する「偽陽性」の問題があります。逆に、本当は危ないのに見逃してしまう「偽陰性」の問題もあります。この問題は本質的なもので、ソフトウェア開発に関連する全ての情報を電子化してAIに理解させることは現実的ではありません。

 しかしながら、AIとプログラマーが協力することで効率的に不具合を発見することができます。将棋のプロがAIの分析を参考にするように、AIの指摘をそのまま鵜呑みにするのではなく、「なぜAIはそう判断したのか」を考えながら、最終的な判断はプログラマーが下すのです。この点では、AI自体の性能向上だけでなく、プログラマーとAIが協調しやすいユーザーインターフェースの研究も重要です。

 自動運転ソフトウェアや医療機器のプログラムなど、不具合が大きな影響を及ぼす分野では不具合の見逃しをどのように防ぐかが課題の一つです。AIによる不具合発見はコードをしらみ潰しに検査できるなど、人手による検査とは異なった長所があります。将来のソフトウェア開発になくてはならない存在になるかもしれません。

 これからはAIが初歩的なミスをすぐ教えてくれるようになるでしょうから、もっと本質的な創造的な作業に集中できるかもしれません。AIが得意なのはパターン認識ですが、最終的に「このコードはどうあるべきか」を決めるのは人間です。世の中の多くのソフトウェアは多くの人が協力しあって開発されています。そこでは、他の人が読みやすいようにコードを整理するセンスや、ソフトウェアを使う人の立場に立って考える想像力など、ソフトスキルも重要な武器になります。

 もし興味がわいてきたら、まずは小さなことから始めてみてください。Pythonの基本を学んでみるとか、GitHubでオープンソースプロジェクトをのぞいてみるとか、パソコンやタブレットがあれば今からでもできることが多くあります。AIの一種であるLLMはスマホから無料で試せるものもあります。実際にプログラムの不具合を指摘させてみたりするのもいいかもしれません。