誰でもプログラミングしソフトウェアを作ると、バグに悩まされます。肥後先生は遺伝的プログラミングを用いた自動バグ修正という、魔法のような研究をしています。バグのあるソフトウェアに対し、弱いものは淘汰され、正しく動くソフトウェアだけ生き残るという方法です。夢のような話を紹介しましょう。
弱いものが自然淘汰されるソフトウェア自動進化への挑戦
僕はまず皆さんに言いたい。デバックってしんどいですよね。デバックとは、プログラムに潜む欠陥、つまりバグを取り除いてやることです。最近このデバック研究は盛んですが、中でも僕は一番トピックな自動バグ修正を研究しています。
自動バグ修正というのは、バグのあるソフトウェアを入力として与えると、バグが取り除かれ、正しく動くソフトウェアが出力されるような技術です。今日は、その1つ、遺伝的プログラミングを用いた自動バグ修正という、魔法のようなやり方を紹介したいと思います。
例えばある行を削除したり、ある行をコピーしてほかのところに貼り付けたりするなど、少しだけ無作為に変更したソフトウェアを数十個用意します。そしてこれらのソフトウェアに対して、テストケースを実行します。そうするとそれぞれのソフトウェアは、何個のテストケースに成功したかがわかります。ここで遺伝的プログラミングを使います。
遺伝的プログラミングとは、一言で言えば生物の進化を模すことにより解に到達するためのアルゴリズムです。バグを含むソフトウェアに対して遺伝的プログラミングを適用することによって、自動的にバグが取り除かれたソフトウェアを生成します。自動バグ修正の過程では、弱いものは淘汰され強いものだけ生き残るということが次々と繰り返されます。最終的にすべてのテストケースをパスするプログラムが生まれ、正しく動くソフトウェアが出力されます。
バグの修正だけではなく、新しい機能の追加や、ソフトウェアをメンテナンスするリファクタリングなど、いろんな変更が加えられます。
別の言い方でこんなふうにも考えられます。例えばバージョン1.0から2.0にバージョンアップするとは、バグ修正等の細かい変更が繰り返し行われることを意味します。このソフトウェアの変化は、進化と捉えることができます。
このように私は、このソフトウェアの進化を自動的に行うことができる技術を生み出したいと思っています。実現へ向けてはまだまだ研究の第一歩に過ぎません。それでも研究の結果、過去の変更情報を利用して、未来の変更内容を予測することが、ある程度できるようになってきています。
ソフトウェアを作るのは難しいです。でも自動化が実現できれば、その問題はかなり解消されるようになります。さらに、ソフトウェアを完全に自動で生成できるようになれば、欲しいソフトウェアがすぐに手に入るようになるかもしれません。そんな時代にはソフトウェアではなくクイックウエアのような他の名前がついているかもしれません。
ずっと受けたかったソフトウェア・エンジニアリングの授業1
鶴保征城、駒谷昇一(翔泳社)
本書は大学生を対象としたソフトウェア工学の教科書ですが、読みやすい語り口調で書かれていますし、導入部が非常に優しく書かれていますので、高校生でも十分に理解できると思います。ソフトウェアを開発するとはどんなことなのか、実際の開発現場ではどんな問題が起こり、それらに対応するためにどんな方法が考えられているのか等を楽しみながら知ることができるのではないかと思います。
イミテーション・ゲーム/エニグマと天才数学者の秘密
イギリスの数学者アラン・チューリングを題材にした映画です。チューリングは、チューリングマシンという現在のコンピュータを作る上での重要な理論を考案した人物です。チューリング賞(計算機科学分野のノーベル賞と言われている)は彼の名にちなんでいます。この映画は、彼がエニグマ(第二次世界大戦中にドイツ軍が使用した暗号機)を解読する部分に焦点を当てて描かれています。
プロジェクトX 挑戦者たち「100万座席への苦闘 ~みどりの窓口・世界初 鉄道システム~」
NHKのTV番組でDVD化されています。旧国鉄(現在のJR)が開発したオンライン発券システムの開発を紹介したドキュメンタリー番組です。システム開発の苦労や完成したときの感動を知ることができると思います。プロジェクトXの「家電革命 トロンの衝撃」や「国産コンピューター ゼロからの大逆転」もコンピュータを扱っており、オススメです。