数理モデルを使ってソフトウェアの欠陥(バグ)を探る―血液検査のソフトウェア版

block_30938_01_m我々の日常生活では、その多くの場面でコンピュータが直接的あるいは間接的に活用されています。決してパソコンや携帯電話だけではありません。普段の生活で考えてみて下さい。家のテレビ、マンションのエレベータ、駅の改札、バスの支払い等どれもコンピュータ無しでは機能しません。生活の基盤となる重要な存在と言ってよいでしょう。
コンピュータはソフトウェア、すなわち人間が考えたプログラムやルールに忠実に従って動作します。しかし、プログラムされていないことはできません。つまり、いくら高性能なコンピュータであっても、人間が「あらゆる場面」を想定し、それぞれについて「正しく」ソフトウェアを作らなければ役に立ちません。
ここが研究のポイントです。これだけコンピュータが普及している現代でも、ソフトウェアは人による「手作り」なのです。そして、人は誰しも間違いを犯してしまうものです。そういったミスは一般にソフトウェアの欠陥と呼ばれます。いわゆる「バグ」というものです。
私の研究では「どういったソフトウェアにはバグが入り込みやすいのか」という傾向を実際のデータを使って解析しています。これを適切にモデル化できれば、早い段階でバグを発見したり、未然にその混入を防いだりといったことができます。

研究の特色

この研究ではソフトウェアの特徴を数値化するのが大きな特色です。実際にソフトウェアを開発する立場になると分かるのですが、ソフトウェアの設計書やソースコード(プログラム)にはさまざまな特徴があります。少し専門的になりますが、例えばプログラムの長さ(行数や文字数)、変数の個数、条件分岐(場合分け)の個数、関数呼出しの回数、プログラム中にコメント文(説明書き)が占める割合といった項目でプログラムの特徴を数値化するのです。そして、過去の実績データを分析して、数値にどういった傾向があるとバグが多いのかを見つけ出していきます。

図1. 測定(データ収集)のイメージ

図1. 測定(データ収集)のイメージ

これはまさに、健康診断での血液検査のようなものです。血液検査ではさまざまな検査項目(赤血球数やコレステロール値など)について血液サンプルの特徴が数値化され、その結果から総合的に疾病の可能性が検討されます。私の研究は血液ではなくソフトウェアを対象としたものと考えてもらえるとイメージをつかみやすいかと思います。

図2. データに基づいた数理モデル式の例

図2. データに基づいた数理モデル式の例

 

研究の魅力

図3. モデルを使って品質管理(ソフトウェアのテスト)が効率化されているグラフ

図3. モデルを使って品質管理(ソフトウェアのテスト)が効率化されているグラフ

どの分野でもいえることですが、研究では世界中のどの教科書を探しても答えが載っていないことを追求します。よい答えがすぐに出てこないは当たり前なので、焦らずじっくりといろいろな可能性にチャレンジできるのが研究の魅力だと思っています。そして、ひょっとすると自分の研究成果が教科書の新たな1ページに掲載される日がくるかもしれません。
ソフトウェア工学の分野では、ソフトウェアという人間が作り出す人工物を研究対象とするため、自然現象とはまた違った難しさがあります。ただ、それだけに未知なものも多く、自分が開拓者になれる可能性も大いにあると信じています。

 

 

 

研究の展望

現在は、まだどういった特徴を数値化するのが有効なのか、どういった数理モデルを使うのが有効なのかが十分に明らかになっていないというのが実状です。ただ、完全ではないにしても既にいくつかの技術やモデルが実用化されてきています(最近では Google が過去のプログラム修正履歴を使ったバグ予測手法を活用したりしています)。将来、「OSやアプリケーションの頻繁なバージョンアップ」というのが「昔話」になる時代がやってくるかもしれません。

この研究を志望する方へ

おそらく、この研究分野に興味を抱く多くの方は、ソフトウェア開発、特にプログラミングに興味のある方だと思います。この研究は「プログラムを作る」という行為そのものを研究対象にしています。最近「マネジメント」という言葉が(某マンガの影響で?)よく聞かれますが、この研究はまさにソフトウェア開発をマネジメントするというものです。
プログラミングに限りませんが、自分の行動や活動成果を記録してマネジメントする(評価して次の計画に活かす)ということを始めてみると、この研究の面白さをより身近に感じてもらえるかと思います。