バグはシステムの中に潜むように存在し、思いもよらぬところで顕在化します。
バグの出現を予測できれば、開発現場の負担を低減し、サービスを止めてしまうような事態を回避することにもつながります。
そこで、京都工芸繊維大学の水野修教授とバルテスは、バグ出現予測の新しい手法の開発を目指して、長年にわたって産学連携研究を実施。研究中のバグ出現予測ツール「CodeLamp」について、動作実験の成果を学会で発表しました。
その内容と今後の研究の展望についてインタビューしました。
【プロフィール】
- 水野 修氏
京都工芸繊維大学 情報工学・人間科学系 教授
ソフトウェア開発における膨大なデータを"採掘"し、工学的意義のある知見を見出そうとするソフトウェアリポジトリマイニングの分野の第一人者。研究の一つとして、ソースコードのテキストから不具合に関連する情報を発掘するツール「CodeLamp」の研究開発を進めている。
- 石原 一宏
バルテス株式会社 第3ソフトウェアテスト事業部 事業部長
年間1,200名を超える開発エンジニアにテスト・品質を教えるセミナー講師。テスト技法の開発・研究、社内・社外の技術研修・教育業務、プロセス改善コンサルティング業務に従事しつつ、ソフトウェア検証業務に携わる。
10年来の交流のなかでスタートした「CodeLamp」の研究
―研究されているバグ予測ツール「CodeLamp」について教えてください。
水野教授:Eclipseプラグインとして利用できるツールです。ソースファイルやGitコミット差分をチェックし、バグになる可能性の高いソースコードが書かれていないかを予測するツールです。一般的なバグ予測ツールは、ソースコードの構造の複雑さを抽出してバグが起こりやすいモデルをつくり、それをもとに予測するものがほとんどでした。「CodeLamp」は、ソースコードの内部に、特定の単語がどのぐらい出現するかを機械学習し、それをもとにバクを予測しています。そのため、わざわざモデルを作る必要がなく、ワンステップ省略できるところが大きな特徴です。発想のきっかけは、10年ほど前、eメールのフィルタリング技術でベイズ推定が利用され始めたこと。情報を自動収集しながら、未知の単語に対応できる点が、バグ予測にも使えると考え、研究を進めてきました。
―バルテスと連携するに至った経緯を教えてください。
石原:出会いとしては、2009年ごろにテスト予測ツールができないかという話で、お声がけさせていただいたのがきっかけです。ちょうどその頃、当社としてはソフトウェアのテストの専門企業としてサービスを提供するだけではなく、業界全体にテストや品質保証について情報を発信し、CSRにさらに力を入れていこうという時期でした。
水野教授:テストの専門企業として以前から認識はしていたので、何かのタイミングで一緒に研究できればと思っていました。そこで、現在の大学で教授に就任し、2015年ぐらいから「CodeLamp」の共同研究させていただくことになりました。
―バルテスグループと産学連携で研究を行った意義として、どのような点があるでしょうか。
水野教授:バルテスグループは、テストだけでなく、開発セクションもあるので、実際に「CodeLamp」が利用される環境に近いところからデータを取れると考えました。また、品質保証やテストに関してリテラシーの高い開発者から、フィードバックをもらえるため、その精度も高く、技術検証するには意義深いと思いましたね。
石原:バルテスはテスト専門会社でしたが、共同研究を始める3年ほど前ににバルテス・モバイルテクノロジーという開発専門のグループ会社が立ち上がっていたので、非常によいタイミングでした。共同研究を通じて業界に貢献できることは、当社にとっても社会的な意義のあることでしたので、ぜひにと参加させていただきました。
最小の事前学習で期待に沿う効果。動作実験が証明した実用性
―「CodeLamp」の動作実験にあたり、特に注目していた点を教えてください。
水野教授:まずはツールとして、導入から利用までスムーズに使っていただけるかどうかが気になりました。ただ、その点に関しては、学生がマニュアルを丁寧に作成してくれたこともあり、現場からのフィードバックはそれほど悪いものではなかったので安心しました。次は、当然のことながらバグ予測の精度です。バグ予測にあたっては、機械学習によるソースコードの事前学習が必要です。実際の開発環境から得られるデータの量がどのぐらいで、それが適当なのかどうか、そのあたりを注目していました。
石原:私たちもできるだけ事前学習のクオリティを上げられるよう、過去のプロジェクトのデータも用意しました。ただ、実験の対象となるプロジェクトと類似のものとなると、やはり限界があるので、コンパクトな動作実験からのスタートとなりました。
水野教授:しかし、どこの企業であっても、普通はそんなに昔からのデータが山のようにあるわけではありません。そこを手法で乗り越えていかなくては、実践に生かせないと考えています。今回は、机上と実践の間の壁を乗り越えるための共同研究と意識していました。
―動作実験の結果について、特にインパクトが大きかったことは?
水野教授:小さなデータでの実験ではありましたが、ツールを使ったことで不具合の出現確率を下げることができました。その変動幅がこちらの意図したとおりだったことです。
石原:これは意味のある結果だったと思います。膨大なデータが必要となると、実際の開発現場で取り掛かることができず、結果的に使えないツールになってしまいます。開発者からのフィードバックも、「思ったよりもいいところを指摘してくれる」と好印象でした。バグ出現予測ツールは、アラートを上げてくれるのはありがたいのですが、ピントが外れたものや、バグの可能性の低いものまで拾い上げ、あまりにアラートが高頻度になると、開発の手を止めてしまう懸念がありました。その点で、非常に"ほどよい"バランスだったようです。実用化の可能性を感じました。
水野教授:フィードバッグで、エンジニアがどのようにツールを使うのかを知ることができたのも成果です。ツールは設計の上では、定常的にコードを変更したときにバク予測を実行できるようにしていました。しかし、現場ではコミットのときにある程度まとめて実行していたのです。これは予想外でしたね。今後は設計思想を変えたほうが、より使い勝手がよくなると感じました。
石原:現場のリアルな実証結果を得たかったので、ツールの扱い方はプログラマに預けました。水野教授がおっしゃるように、開発の規模にもよりますが、一通りコードを書いてみて、一息ついたらバグ予測ツールを走らせるという使い方でしたね。でも、その使い方で評判がよかったのです。何より、開発者自身が手軽に実施できる点が大きかったと思います。たとえば、結合テストに持ち込む前などに、有識者を集めてソースコードレビューする時間もない、そんなときに非常に有効でした。開発環境にプラグインで使えるので、日常的な業務の中で「少しあやしいかな」と感じたときに、すぐに使えることもありがたかったです。
開発者が意識せずにバグを低減できるツールを目指す
―動作実験のフィードバックを通じて、今後改善していきたい点も教えてください。
水野教授:不具合予測に関して一定の効果はありますが、初回実行時は精度が低いことがわかりました。そこは課題として取り組まなくてはなりません。また、現在のツールは、ファイルそのもの、またはファイルの差分に対して不具合が発生している可能性を指摘しています。開発者からは、実際のコードのどの部分にアラートが出ているのかを指摘してきしてほしいという声がありました。これは、学会で発表したときにも研究者からも挙げられた課題です。不具合予測の粒度が細かくなれば、利便性はさらに上がるので、予測の精度との両立を図りながら、取り組んでいきたいと考えています。
―「CodeLamp」は、業界にどのような未来をもたらすとお考えですか。
水野教授:今回のツールはまだまだ改善の余地がありますが、開発の補助ツールとして少なからず貢献できるという手応えを感じました。今後、さらに進化することで、コーディングのときに具体的なバグの存在が未然にわかり、デバグの労力を低減できるようになることを期待しています。将来的には、開発者がツールを使おうと意識しなくても、アラートを上げられるようになるのが理想です。そして、デファクトスタンダードの開発ツールとなり、知らず識らずに業界全体でバグを減らせればと願っています。
石原:今回はコンパクトな事象で、プロジェクトの適応範囲も狭かったのですが、学習するとさらに精度が上がり、さまざまなプロジェクトでより幅広くバグを予測できるのではないかと考えています。開発技術は日進月歩で進んでいますが、それに伴ってバグ削減と品質向上の技術も進化していくことを望みます。今回は、開発の現場であるバルテスグループと、アカデミックな研究が連携することで、現場のニーズと未来のシーズが交差する動作実験になったと思います。今後も未来と現在をつなぐような役割を果たせればと考えています。
「バグとは何か?」という問いに、終わりはない
―今後の研究の展望についてもお聞かせいただけますか?
水野教授:今はバグ予測の研究ですが、将来的な目標は「そもそもソフトウェアのバグとは何か?」を明らかにすることです。バグはすごく面倒なものです。同じコードでも仕様によってバグが出ないこともありますし、単体のシステムではバグにならなくても、連結した先でバグとなる場合もあります。単純なヒューマンエラーや、記述の間違いだけでは定義できないのがバグなのです。
石原:非常に興味深いと思います。私たち"品質保証に携わる者"としては、非常にワクワクする問いの立て方で、何時間でも話したいテーマですね。世の中に画一的なシステムはなく、それら複数を統合したシステム・オブ・システムズもたくさんあります。システムの一つひとつは良かれと善意でつくられているのに、つなげてみるとクリティカルな事象が発生してしまう。このようなことが起こるのは残念ながら、枚挙にいとまがなく、バグや品質に関しては、常に追い続けなければならない課題だと思います。
水野教授:そのような意味で、認識できているバグはすごい狭いところしか見えていないのだと思います。実際にはもっと山ほどあるはず。「CodeLamp」などのツールで対策しても、その裏をかいてくるのがバグです。少なくとも、私が定年するぐらいまでは取り組めそうなテーマです。逆に言うと、研究がうまくいくと、究極的には私もバルテスさんも仕事がなくなることになります(笑)。
石原:複雑な心境ですね(笑)。しかし、バグを減らし、品質を向上するためには、常に新たに問題を立てて解決していくことが求められます。この継続的な営みこそが必要なのだと思います。
―今後、お互いに期待することは?
水野教授:研究者としては、やはりバルテスとの連携で生の開発現場の状況が見られ、データをもらえるのはありがたいことです。しかも、バルテスはテストを専業にしているので、品質に関する最前線の知見をもらうことができ、すごく研究の助けになっています。今後もお互いに関心の高いテーマを設定して取り組んでいきたいですね。さらに一歩踏み込んで、そのテーマを模索していくところも一緒にできればいいと思っています。
石原:そうですね。たとえば、短期的には「CodeLamp」の精度や利便性の向上、中期的には新しいテストのスタイルをつくる未来への展開、長期的には水野教授がおっしゃる「バグとはなにか?」という追究というように長い目で見て、企業は業績、大学は学問として爪痕を残していくことに意義があると信じています。
水野教授:長期的な研究に対する理解があるところも、パートナーとしてありがたいところです。
石原:ことに品質に関しては、付け焼き刃の研究で新しいイノベーションができると思わないからです。当社も17~18年かけて地道に取り組んできた歴史があります。創業当時からトップが教育や研究が大事という考えで、そのための時間や環境を保障してきました。何より、人と人との縁は単年度の数字のポートフォリオでわかるものではありません。長く紡いでいく時間が必要と考えます。
水野教授:そのような信頼関係がないと、共同研究はできないですよね。
石原:ご縁を大切にしたいのです。水野教授ともご縁があって、「品質とはなんだろう?」と長年にわたってお話しさせていただいています。今後も、学問的な見地から追究する水野教授や学生のみなさんと、企業という営利団体であるバルテスとが、人的交流や研究を含めてお互いに刺激し合えればと思っています。大学と企業の知見が、新しい大きな価値を生むことを願います。そして、次世代のエンジニアの方に、この職業や企業自体に未来や可能性があると感じてもらえるとなお嬉しいですね。産学連携を新しいご縁を広げる場としても、大切にしていければと思っています。