1. 導入事例
  2. 京都工芸繊維大学様

産学連携特別インタビュー

Introduction cases

水野 修 准教授

研究内容
主に実証的ソフトウェア工学分野の研究、具体的にはバグを含むソフトウェアモジュールの検出・予測手法の開発、ソフトウェア開発プロセスのデータマイニングによる分析などを実施。日本のリポジトリマイニング研究における指折りの第一人者である。

今回インタビューを受けてくださった方

水野准教授(右中)/ 水野研究室の生徒の方々(最左:山田さん、左中:黒田さん)/ 弊社石原(最右)

「ソフトウェア開発時のリポジトリマイニング
およびそのマイニングを通じたバグの検出方法の確立」

インタビュアー:R&C部 部長 兼 上席研究員 石原一宏
年間800名を超える開発エンジニアにテスト・品質を教えるセミナー講師。テスト技法の開発・研究、社内・社外の技術研修・教育業務、プロセス改善コンサルティング業務に従事しつつ、ソフトウェア検証業務に携わる。

「ソースコードからバグを検出する方法がないか」が研究の始まり

リポジトリマイニングの研究を行われている水野准教授と水野研究室の皆さま

石原:水野研究室のご紹介と今の研究内容の主だったところをご紹介いただけますでしょうか。

水野准教授:私の研究室は京都工芸繊維大学では7年目となります。現在学生は12名所属しており、研究内容としましては、ソフトウェア開発のリポジトリマイニング、そのマイニングを通じたバグの検出方法の確立といった内容になります。

石原:研究テーマであるリポジトリマイニングですが、なぜこの研究に重きを置いているのか、また研究の面白さといった水野先生の想いをお聞かせいただけないでしょうか。

水野准教授:最初に研究を始めたのは2007年で、研究自体は8年程度になります。

石原:今ようやくビッグデータを含めた解析というのが世の中で言われている中で、非常に時代を先取りされていますね。

水野准教授:そう言われるとそうかもしれません。ただ研究を始めるきっかけは、その当時、リポジトリを調べており、たまたまある国際会議を聞きに行ったのが経緯です。そこで聞いた発表や読んだ論文で私が考えていたこととマッチするものでして。そこから本格的に研究を始めました。

具体的には「ソースコードからバグを検出する方法」がないかと思っていたのですが、当時それを紐づける方法が全く想像がつかなかった。データをどこから取ってくるのか、自らソースを書く必要があるのか、自らプログラムを作って、自分でバグを埋め込んでというのを頑張るしかないのかと。

ただ、その会議の中でバグトラッキングシステム(以下BTS)とリポジトリの間をつないでバグがどこにあるのかを推定するやり方を発表されている方がいて、「このやり方なら実装できる」と思いつきまして。それで、その時周りにいた学生と一緒にやったというのがこの研究の始まりです。

ちょうどその頃は、ソフトウェア開発のプロセスにまつわる研究を行っており、「ソフトウェア開発全体が成功する、もしくは混乱する」といったカギは何なんだろうかという研究を行っていたのですが、先ほどの会議での発表を聞いて、「もう少し細かく、踏み込んだ」内容が出来ると見つけられたのが嬉しかったですね。

石原:弊社バルテスはテスト専門会社ですが、不具合をいかに早い段階から見つけられるか、開発工程のプロセスも重要視しています。事実、下流のテスト工程で不具合を見つけるというのは実はすごく遅いんですね。お客様・利用者様側で不具合が発生するという最悪なケースを避けるために、開発プロセスにてテスト工程がありますが、不具合が見つかるのであれば、出来ればシステムテストよりは結合テストで見つけたいし、結合テストよりは単体テストで見つけたいし、単体テストよりはコーディングしながらワーニングが出てくるとありがたい。

そういった中で今回、水野先生のリポジトリマイニングの研究において、弊社のグループ会社であるバルテス・モバイルテクノロジーがオリジナルで開発・運営しているモバイルアプリ「テス友」やスマホケースのECサイト「Graffiti Case」の生データ提供という形で産学連携を進めさせていただくということで、弊社としても大変恐縮ながらも誇らしい想いです。

水野准教授:その節はありがとうございます。おそらくECサイトのデータを中心に分析していくことになると思います。ただ企業の生データは研究にありがたい面もある一方で難しさもありまして。バルテス様のものは、言い方はおかしいですが、まだ楽な方でして。実際不具合のデータをいただいたとしても、解析を行おうとすると仕様まで遡ってやっと内容が分かるというのは良くある話です。中々フィットするというのが難しい。

石原:確かに生のデータを研究に活用させるためにフィットさせるというのは難しいかもしれませんね。

水野准教授:そのあたりは実際にやりながら詰めていくしかないと考えています。

「そのコードの書き方をしたらまたバグになるかもしれない」
とアラートが出るツールを作りたい

静的解析ツールの問題点は文法エラーやコード規約違反であると判定できるデータを精度高く集めることが出来ていないためだと語る水野准教授

石原:リポジトリマイニングの研究をされている中で、開発現場や静的解析ツールの問題点を水野先生はどうお考えですか。通常であればプログラマーが自分のソースコードを見るのは文法的な側面を静的解析ツールなどを駆使しながら行う訳ですが、不具合が完全に取り切れるかというと取り切れていないのが現状で、システムテストの段階で発見されるということも散見されている現状です。

水野准教授:静的解析ツールは文法エラーやコード規約違反といったところを見るものだと思いますが、端的に言うと、それを判定させるためのデータを精度高く集めてくることがほとんど出来ていないことが問題かと考えています。

石原:データを精度よく集めてくる?

水野准教授:その時のアルゴリズムはそこまで精度が良くないんですね。実際コーディング時は作業されている方が意図してバグを結び付けようとされている訳ではないので、小さい手がかりだけで結び付けようとするとどうしても無理が生じます。

きちんとやろうと考えたら、このバグはどこで今発生していて、どう直したかが分かり、原因がはっきりと分かるという状態にならなければならないですが、全部を全てきれいに出来るということがないというお話をよく伺います。

例えば、バグが発生したとして、別の状況で同条件のことを実行したとしてもバグが発生するかは分からないというケースがあります。また同じソースコードでもバグになる状況、ならない状況というのもありまして、本当に難しい。だから「精度」なんです。何がバグかを決めるのは人間ですから。

石原:なるほど、そういう問題点があるのですね。そこで水野先生の研究ではそれをどう解決していくものなのでしょうか。

水野准教授:先程申した文法エラーやコード規約違反といったところからもう少し先に進んで、「そのコーディングを実行するとバグが発生するかもしれない」と言ってあげられるツールが出来ないかなと思っているところです。
過去にバグを出したソースの書き方を記憶して、「そのコードの書き方をしたらまたバグになるかもしれない」というアラートが出るツールを作りたいと思っています。

石原:それを使い続けることでそのツールも学習して、ますます精度が高まっていくということも。

水野准教授:可能だと思います。BTSの記載情報を取り込んで、自分で学習してさらにフィードバックをかけて、「ここがおかしい」と言えるようになるものを開発したいと考えています。

石原:ぜひお願いします!私たちテストを行う人間からすると、ほんのわずかな可能性があったとしても、可能性が濃いところは叩いておきたいというところがあって、それが事前に分かるだけでもずいぶんありがたいと思うわけです。

水野准教授:その可能性が濃いところ、イメージとしては「ソースコードのこのあたりがグレーだよ」というのがあり、それがだんだん濃くなっていくというようなイメージになってくれれば良いかなと思っています。

石原:ちなみにこちらは新規開発や派生開発問わずに利用できるものなのでしょうか。現場に関しては、圧倒的に派生開発が多くて、特に不具合の温床は、既存のレガシーコードのどこをいじったらどのあたりに影響範囲が現れるのかということでして。それを大量のデータの中からどのように追いかけるのか、ソフト開発に携わっている者はいつも悩まされている問題です。

水野准教授:過去のデータを使うことを想定すると、派生開発のほうがやりやすいと思っています。むしろ新規のほうが難しくて、バグ予測するにも「データがないやん」ってなってしまう。

石原:そういう意味ですと、この研究はそれなりのデータ蓄積がある派生開発のほうが適用しやすいということですね。私個人の意見としては、ニーズはむしろそちらの方が多いと思います。

水野准教授:そうでしょうね。世の中派生開発のほうが圧倒的にあふれていますし、「派生開発なのになんでバグが出るの」という話は良くあり、皆が皆「なぜなんだ」と思う訳ですよね。そこに踏み込んでいけるものでありたいなと思っています。

企業の生データの提供はリポジトリマイニングの研究全体に希少性がある

弊社からのデータ提供によって、全体のソフトウェア品質の向上に貢献・寄与できると語る弊社石原

石原:今回のテーマに関して、研究であるからにはその難しさを半歩でも一歩でも超えていくというところになるかと思うのですが、従来のものに比べて一石を投じたい、頑張りたいというポイントはございますでしょうか。

水野准教授:私が今までやってきた研究は、本当の開発の場面に当てはめてみたというのは無いわけなんですよね。それを今回の共同研究で多少でも実用のフェーズに移せると考えています。

石原:これまでの先行研究は割とプロトタイプ的な、本当の開発現場ではなくオープンソースみたいな感じということですね。

水野准教授:オープンソースのもので、かつ基本的には完了しているデータでずっとやっているだけだったので、いわばシミュレーションをしていたという感じだったんですね。なので、商用の開発現場で出てくるバグとは性格が違うものかもしれないと考えていました。

石原:その意味では、弊社からの生のデータを提供できるということは、水野先生の研究はもとよりリポジトリマイニングの研究全体にそれなりに希少性があると。

水野准教授:そうですね。実際に企業のデータを使ってみたということはあまりないですので、提供いただいたデータを活かし、研究を前へ進められればと思っています。有効性がしっかり示せた、ちゃんと適用できたなどが分かると素晴らしいことだと思っています。

石原:弊社としても品質を向上させることは会社としての企業理念の一つですので、弊社が提供したデータがソフトウェアの品質を上げること全般に貢献・寄与しているとなると、非常にうれしいことだと思っています。

水野准教授:ご期待に応えられるようにこれからも頑張っていきたいと思っています。

「バグ予測」ツールはソフトウェア開発現場全てで貢献できる、役立つもの

該当研究において、ソフトウェア開発現場に貢献できる点が面白みと良い経験になっていると語る黒田さんと山田さん

石原:ここで研究に参加いただいている黒田さん、山田さんにもお聞きしたいと思います。まず黒田さん、現在ご自身の研究の面白み・関心といったことはいかがでしょうか。

黒田さん:私は今回、Eclipseのプラグインとなるよう対応させていただいており、ものすごく良い経験をさせていただいています。中々思うようにいかないことも多くて手間取っているのですが、なるべく早い段階で作って、実際に評価していただけることができるように、ただいま頑張っています。

石原:弊社のエンジニア連中も「いつ出来るんですか?」、「早く使いたいですけど」という声が挙がっています。大学で作っていただいて、弊社のような現場でフィードバックをかけて、またそれがぐるぐると改善されていく。そのような流れが作られると非常に望ましいかなと私は思います。お互いに恩恵・メリットを享受する方向にしていけると嬉しいですね。

黒田さん:はい。そうなるようにこれからも頑張りたいと思います。

水野准教授:私もそうなっていくのが一番良いと思います。

石原:山田さんはいかがでしょうか。リポジトリマイニングの研究の面白みや関心というところに関してで言うと。

山田さん:この研究にはすごい面白みを感じています。リポジトリマイニングも含め、「バグ予測」という形での理想的なツールが完成すれば、それこそ世の中に多くあるソフトウェア開発現場の全てに貢献ができるのではないか、世の中の役に立つのではないかと考えています。

水野准教授:金鉱を掘り当てるイメージですけどね。それこそ本当の「マイニング」のような。ただ我々の考えた手法でバグが100%分かるようになったら本当にどれだけ嬉しいかと考えています。

石原:100%。将来的にこの数字に近づく精度まで上がっていくとは思いますが、個人的にはやはりワーニングが上がってくれるということも非常に大きいことだと思っています。こちらの精度という話も出てくるとは思いますが。

水野准教授:もちろん可能性あるよ、危ないよって出してあげると良いと思っています。ただ、ユーザーもすぐに慣れてしまうので、「本当に当たる」実感しないと実用的とは言えないとも思っています。確率的にはワーニングが出た中の、3割程度が当たっていて、そのバグの中にアクチュアルなバグが入っていたとなると、ユーザーも使うようになるかなと考えています。

大学で制作し、企業の現場でフィードバックする。
これこそが本当の意味での「産学連携」

バグ研究において、ソフトウェアと人間研究の分野という相反するテーマを要素に含めることで、「バグ混入モデル」を確立できるのではないかと期待する水野准教授

石原:現在進められている研究に関してのタイムスパンとしてはどうお考えでしょうか。
もしかしたら気が早いのかもしれないのですが、到達点の予測をどのようにお考えでしょうか。

水野准教授:まだまだですね。正直これから7、8年やっても半分程度しか到達していないのではという気がしています。しかもそこから先がさらに長いとも考えています。よく90%シンドロームとも言いますが、詰めの部分の残り10%からがさらに長いという風になるんではないかなと思っています。

実際バグはそんな簡単にはなくならないし、バグをなくすための方法もそんな簡単には出来ないと思っています。

石原:おっしゃる通りですね。数学的なアプローチやモジュールとモジュールの繋がり具合を構造化するホワイトボックス的なアプローチもありますし、中身は度外視したとして、「機能」と「要求」と「バグ」を結び付け、ブラックボックス的なマトリクスを追いかけるというアプローチもある。それぞれ有効的だけども、100%かと言われるとどれも違う。それぞれを補い合うということも出来ればとも思うが、実際は出来ないことが多い。難しいですね。

水野准教授:昔から思っているのですが、ソフトウェアのバグって、結局人間が入れてしまうものなので、人間自体をもっと研究しないと本当はだめなんだろうなと思っています。それこそ人間的な側面や心理的な要素面をもっと研究する必要がある。

そういう中で、人間の行動パターンのモデルを確立できるという話であれば、それを使ってバグの混入モデルというものが出来たりするのではないかという気がしています。

ソフトウェアの分野って、人間研究の分野とわりと遠くに離れているんですね。だからこういった研究はあまりないと思っていて、現在の研究の中にそういった要素も含めて行っていければと思っています。

石原:確かにそういった研究テーマはあまり聞かないですね。そのあたりの研究も進めば弊社としてもエンジニアの教育分野にも力を注いでおりますので、ぜひお話しをお聞きしたいところです。

ところで、そろそろ開発ツールのプロトタイプをという話をさせていただきたいと思うのですが、2016年の頭ぐらいにはこちらでも確認できると思っていてよろしいでしょうか。

水野准教授:そうですね。その頃には何かしら形になっているようにしたいと思っています。

石原:楽しみにしております。先ほども申した通り、大学で作っていただいて現場でフィードバックをかけてというのがローテーションで回っていく流れが作れれば、本当の意味での産学連携となるかと思います。弊社としても現段階では生データの提供をさせていただいておりますが、ぜひその流れの一助を担わせていただければと考えておりますので、これからもよろしくお願いいたします。

また、このようにこちらの研究に関しての状況を、不定期的かもしれませんが、弊社を通じて紹介するように出来ればとも考えております。ぜひこれからも何卒よろしくお願いいたします。
本日はありがとうございました。

お話を伺った大学様

大学名 京都工芸繊維大学
URL http://www.kit.ac.jp/
水野 修 准教授 主に実証的ソフトウェア工学分野の研究、具体的にはバグを含むソフトウェアモジュールの検出・予測手法の開発、ソフトウェア開発プロセスのデータマイニングによる分析などを実施。日本のリポジトリマイニング研究における指折りの第一人者である。
■経歴
  • 1999年4月~2002年3月:大阪大学大学院基礎工学研究科 助手
  • 2002年4月~2007年3月:大阪大学 大学院情報科学研究科 助手
  • 2007年4月~2009年8月:大阪大学 大学院情報科学研究科 助教
  • 2009年9月~     :京都工芸繊維大学 大学院工芸科学研究科 准教授
■受賞
  • 1996年:ソフトウェアシンポジウム'96最優秀論文賞
  • 2000年:情報処理学会40周年記念論文賞
  • 2005年:「SEC journal」創刊記念論文 優秀賞
  • 2005年:「SEC journal」創刊記念論文 優秀賞
  • 2006年:「SEC journal」優秀論文賞