ソフトウェア開発の友としてのAI

近年様々な分野でAIの適用可能領域が広がっている。さて、AIはソフトウェアとして存在するが、ソフトウェア開発自体へAIはどのように適用出来るのだろうか。起こりつつある具体的変化に着目し、今後のソフトウェア開発の未来の一端をつかまえてみたい。

ソフトウェア開発への適用努力の歴史は長い

AI自体は何度かのブームを経て発展してきており、ソフトウェア開発へ援用してみようという試みも今に始まったとこではない。むしろAI研究の当初から取り組まれてきた。特に1960,70年代の以下の研究テーマ(参考文献で紹介)は、当時実用に至らずとも示唆に富んだ成果を挙げている。

  • 一定の要件からプログラムを自動生成する。
  • プログラムが自ら学習し保守・成長できるようにする。
  • プログラムの検証をAIが行う。

上記の論点は、ソフトウェア開発そのものをAIに担わせること対象にしたものだが、ソフトウェア開発周辺の知的活動を支援する分野でも研究(参考文献で紹介)が行われた。例えば、見積り支援や開発計画策定支援といったものである。

このような先行研究分野のカテゴリに倣い、ソフトウェア開発へのAI適用を、開発そのものと開発の周辺領域にわけて見ていくことにしよう。

アルゴリズムを「作る」から「データを用意し、評価する」へ

ソフトウェア開発そのものに起こりうる変化は、処理ロジックであるアルゴリズムが人間が作る対象でなくなってくるかもしれない、という点だ。「作る」というよりも、適切なデータを用意して、機械学習により最適なアルゴリズムを「作らせ、それを評価・検証する」ということになるだろう。特に、組み込み系の自動運転技術や画像認識技術で見られるほか、業務アプリケーションでもそのような傾向が顕れ始めている。またマイクロソフト社はじめ様々な企業で、今後のソフトウェア開発の姿が論じられ始めている。

こうなるとソフトウェア開発は、これまでと重きを置く部分が異なってくる。いかに適切な学習データを用意するか、出来上がったアルゴリズムをいかに評価するかといった点が、そのソフトウェアの出来を左右する。

個人的には、アルゴリズムを作る楽しみは存分に味わいたいものである。ただ評価・検証に工夫を凝らすところもまた、知的活動として楽しさを見出すことができるのではないだろうか。

開発周辺領域での適用のカギは情報のトレーサビリティ

開発周辺領域への適用で最も開発者を支援するのは、開発における成果物同士を紐付け、必要に応じて関連する情報を引き出せるようにしておくことである。

直近の適用事例では、Stepsize社の「Layer」というソフトウェアが挙げられる。これは、プログラムコードに対し関連する情報を自動で収集・付与する機能を持つ。あるコード部分を調べたい開発者に対し、様々な関連ツールや文書を引っ張り出して調査しなければならないような状況を解決し、的確な判断が素早く下せるよう支援する。

今までと特に異なるのは、プログラムコードに対して、コード以外の情報を自動収集し付与できている点だ。これまでは、プログラムコードに閉じれば、静的解析ツールなどで情報のトレーサビリティを取ることができた。しかし、関連情報については、作成当初に取れていたトレーサビリティが段々と失われたり、後から発生した関連情報が紐付けられていなかった。そのために、保守開発等でコストが予定外にかかってしまうことを、経験された方が多いのではないだろうか。

他の事例では、文書を自動分類することで成果物作成や問い合わせ対応を支援する文書管理ツール(例:アップデイティット社crossnote ML)や、バグを自動検出する試み(2016/08/23の記事)が挙げられる。いずれも、開発者がより多くの付加価値を生み出せるよう支援する取り組みといえる。

 AIによるソフトウェア開発の究極進化形

AIそのものが、自己のソフトウェアをメンテナンスし進化していく姿は一つの到達点と言える。もしかすると、学習データの用意や検証といった部分もAI自身が行えるようになるかもしれない。究極進化形としてのAIの姿は、まだ捉えることができないが、知的活動としてのソフトウェア開発を人間に取って代わる存在ではなく、助けてくれる存在であろう。

先に触れたAI技術はいずれも、一労力で出来ることをどんどん増やすことを目的としている。とすれば究極進化形とは、人間とAIで生み出す付加価値が最大化した時が当てはまるのかもしれない。

ただ我々が求める付加価値は、常に増加し続ける。そうすると究極に至る道は、光に追いつこうとするような無限の旅路になるかもしれない。AIはそんな旅をともに歩いてくれる貴重な友になるだろう。