第3回ソフトウェア工学 × QA最前線

「ソフトエンジニアリングでは机上の空論だけでは成り立たない」大阪大学 井上 克郎 教授 ✕ バルテス 石原 一宏【QA最前線:対談企画】

最終更新日時:2022.03.24 (公開日:2022.02.08)
「ソフトエンジニアリングでは机上の空論だけでは成り立たない」大阪大学 井上 克郎 教授 ✕ バルテス 石原 一宏【QA最前線:対談企画】

ソフトウエア工学やQA(Quality Assurance) に関する様々な角度からの研究について、研究者の方にお話を伺う『QA最前線!』。
皆さんは「コードクローン」という言葉をご存知でしょうか?「コードクローン」とは、複数のソースコード中に存在する双方が一致、ないしは類似、酷似した部分のことです。ソースコード内の「コピー&ペースト(コピペ)」によりコード内に作り込まれ、状況によって保守や運用の面で悪影響を及ぼすことがあります。今回は、このコードクローンやオープンソースソフトウエアのライセンス問題の研究における第一人者である、大阪大学の井上 克郎教授に話を伺いました。ソフトウェア品質に関するセミナー講師として第一線で活躍する、バルテスの石原 一宏との対談形式でお届けします。

対談者紹介

20220207-inoue.jpg
井上 克郎 (いのうえ かつろう) 氏

大阪大学大学院 情報科学研究科 教授

1984年大阪大学大学院基礎工学研究科博士後期課程修了、工学博士。その後、ハワイ大学助教授、大阪大学助手、講師、助教授を経て、1995年大阪大学基礎工学部教授。2002年に大阪大学大学院情報科学研究科教授。コードクローン研究の第一人者として知られ、オープンソースシステムのプログラムの起源や変遷を解析し、可視化する方法の研究も進めている。

聞き手

ishihara-thumb.jpg
石原 一宏 (いしはら かずひろ)

バルテス株式会社 テスト・アライアンス事業部 事業部長 兼 上席研究員

年間2,000名を超える開発エンジニアにテスト・品質を教えるセミナー講師。 ソフトウェアテスト・品質技術の研究開発、社内/社外の技術研修やセミナーの講師、コンサルティングなどを担当する。 著書に『いちばんやさしいソフトウェアテストの本』、『ソフトウェアテストの教科書』。 PMI認定プロジェクト・マネジメント・プロフェッショナル(PMP)。 JSTQB認定Advanced Level テストマネージャ。

もくじ

研究室でコードクローンとオープンソースのライセンス等を研究

バルテス 石原(以下石原)はじめに井上先生の簡単な自己紹介をお願いします。

井上教授:私は1984年に大阪大学基礎工学研究科で学位をいただきました。研究テーマはプログラムの解析、特にコンパイラの最適化です。その後いろいろあってハワイ大学で2年間、助教授をしました。その後、日本に戻り、実証的なソフトウエア工学をやっておられた鳥居宏次教授の元でソフトウエア工学の研究の道に入ることになりました。

2000年ぐらいからコードクローンというプログラム分析の技術に興味を持って取り組みはじめました。コードクローンの研究は今でも続けており、私自身、非常に成功したと評価している研究トピックスです。くわえてオープンソースのライセンス研究など、様々な研究テーマに研究室のメンバーと一緒になって取り組んでいます。

コードクローン研究で注目を集め、第一人者に

石原:井上先生の研究の大きな柱であるコードクローン研究には私もたいへん興味を持っています。私が開発関係からキャリアをスタートした当時、先輩のソースコードを読むと、上手く書いてあるソースコードと切り貼りを多用して見にくくて使いにくいソースコードがあり、後者から不具合が多く発生することが肌身に染みていたからです。

これはあくまで経験則でしたが、これが学術的かつ体系的に理解できたらと考えていました。コードクローン研究において、どんな点が手応えがあったと感じられましたか?

井上教授:コードクローンとは簡単に言うとソフトウエアの「コピペ」のことです。コードプログラムの一部もしくはシステム全体をコピーして別の用途に使用するということです。

私がコードクローンの研究を始めたきっかけは、2000年ごろ、ある日本のメーカーから、20年ほどメンテナンスしている政府系の公共システム内に存在するコピペを調べ直すようなツールはないか聞かれたことです。調べますとコードクローンについて先行的な研究はあり、関連するツールが販売されていることもわかったのですが、企業で使えるツールやサービスは皆無と言って良い状況でした。

この話を研究室や他の教員にしたところ、たまたま遺伝子のDNSシーケンスを分析するバイオ情報学の先生がいて「ソフトウエアで同じような箇所を探すのも同じようなことちゃうか?」とアドバイスをしてくれて「サフィックスツリー(Suffix Tree)※」アルゴリズムを使ってやったらどうかと本を貸してくれました。

※サフィックスツリー(Suffix Tree):与えられた文字列の接尾部を木構造(基数木)で表すデータ構造

石原:なるほど。興味深い出会いがあったのですね。

井上教授:そこで学生と勉強して、ツールがないなら自分たちで作ろうと決意しました。現在は島根大学の教授をしている当時ドクター2年の神谷君がアルゴリズムを理解してC++を使って1ヶ月ほどでプロトタイプを作り、動かしてみたら非常に面白い結果が出てきたのです。「コピペは簡単にわかるんだな」とか「コピペは多くある」ということがわかり、この研究は面白いと考えて継続することになりました。ツールを使って学生の演習問題の解答を調べて「こいつらコピペしとるな」と呼び出したりしましたね(笑)

石原:(笑)

井上教授:結果は出せましたが、このアルゴリズムを動作させるにはメモリが大量に必要でした。2000年当時、まだ「G(ギガ)」単位のメモリは一般的ではなく4GBで100万円ぐらいしたと思いますが、ワークステーションも用意し、大きなソースコードでも実行できるよう環境を整備しました。さらにアルゴリズムを改良して1年ぐらいで100万行ぐらいまで解析できるようなシステムを作り上げました。

そして我々の業界では一番ハイランクといわれるIEEE(アイ・トリプル・イー)のソフトウエア工学の論文誌に論文を投稿したところ採録されることになり、私たちの結果が世の中に知れ渡るようになりました。さらに神谷君が作ったコードクローン検出ツールを『CCFinder』と言う(Code Clone Finderが略された)名前で世の中に出すことになりました。

20220207-image1-5.png

AIST CCFinderX 動作イメージ(CCFinderホームページ 跡地:http://www.ccfinder.net/ccfinderxos-j.html より)

検出ツール『CCFinder』が反響を呼び、裁判でも使用される

井上教授:論文と『CCFinder』は反響を呼び、他の研究者が使ってみたいとか、企業にも興味を持たれるようになったのです。企業の場合、協力会社が作ってくるソースコードがコピペで膨らんでいないか調べたいというニーズがありました。

石原:いわゆる"水増し"のチェックですね。

井上教授:はい。そこで、多くの企業と共同研究をしたり、他の研究機関に無償で提供したりすることで、5年間ほどで5000ダウンロードされ、論文は現在でも参照され続けています。参照数は2003ほどあり、過去の世界のソフトウエア工学の論文の中でもトップ20ぐらいの引用数だと思います。いわゆる「一発当てた」という状態ですが、たいへん面白い鉱脈に当たったなと思っています。

コードクローンに関して、10以上の共同研究も実施しています。今では韓国のSamsung社など、海外の携帯電話のソフトウエア内のコピペ、コピペ中のバグの追跡にも使われています。そして、最初に問題提起してくれた会社とも共同研究することになり、最初の問題を解決することもできました。

石原最初の問題意識提起から何年後ぐらいに解決できたのですか?

井上教授:わりと早くて、3年後ぐらいだったと思います。

石原いろいろな良い形のリンクが繋がって、最速で素晴らしい結果を出されたのですね。

井上教授:非常に上手くいったと思います。稀に見る事例だったのではないでしょうか。面白いのは、さきほど申し上げたように学生の演習課題ですね。それを調べると人間関係がよくわかるわけです(笑)。

石原:たしかに(笑)。でも、この話は本当に学生なら呼び出しで済みますが、企業になってくると本当に不具合があった場合には呼び出しどころの騒ぎではないと思いました。

井上教授:そうですね。企業間ではソースコードの盗用問題があり、実際に裁判事例があります。仮にA社とB社とすると、A社にいたエンジニアがB社に移ったあと、非常によく似たソフトウエアが出てきたためA社がB社を訴えたのです。そこでB社の弁護士がA社、B社のソフトウエアを私たちのところに持ってきました。分析するとB社のソフトウエアの60%ぐらいがA社由来のものだとわかったのです。これを提出したら、当然ですがB社が負けてしまいました。

石原:分析を依頼したB社が逆に自分の首を絞めてしまうことになったのですね。

井上教授:判決文にも『CCFinder』を使って解析をすると、何%がコードクローンであることがわかったといったことが書かれています。このように応用用途もいろいろ広がっていき、私自身非常に面白い研究ができたと感じていますし、今でも研究を継続しています。

ソースコードのコピペとバグの伝播

石原:私たちバルテスも、レガシー資産、つまり15年とか20年とかに渡って改修を重ねているソースコードの保守メンテナンスでテストをすることがよくあります。その意味で、元となるソースコードがコピペされて拡散された場合、影響範囲や不具合の発生が予測できるのかどうかということに興味があります。もし、実際に『CCFinder』を使って不具合を予測する実例もしくはご研究などがあったら教えてください。

井上教授:コピペした先にバグが伝播することがあるので、バグ修正のときは、必ず修正した箇所と同じバグがシステム内にあるかどうかをコードクローンツールで調べるプラクティスを社内に普及させる活動をしている会社があります。公表している事例としてはNECとの共同研究があります。この研究では、社内にリポジトリ※があり、ソースコードを更新するごとにコードクローン分析をして作成者に注意喚起をするバッチシステムを共同開発しました。

Microsoft社が『Visual Studio』のコードクローン検出機能を作るときにも協力をしています。セキュリティで脆弱性が見つかったら、コードクローン検出機能で社内のリポジトリで同じようなコードを持っている箇所を探す機能などで、これについても研究論文で発表されています。

※リポジトリ:アプリケーション開発で、システムを構成するデータやプログラムの情報が納められたデータベース

石原:よく切れる包丁だけに、その包丁をどういうふうに活用するかといった形で使い方のバリエーションが広がっていった感じでしょうか?

井上教授:仰るようにツールとしては非常に切れ味が鋭く、結果としてビシッと出てくるのが面白いですね。いろいろなところに応用できる、魅力のある機能だと思っています。

最先端のソフトウエアエンジニアリング研究動向

石原:1990年代、2000年代を経た今、ネットワークも複雑化してデジタルで普通に私たちがコミュニケーションする時代になりました。コロナ禍もあり、ますますその流れが加速していますが、井上先生がソフトウエアエンジニアリングに携わられてきて、時代とともにどう変化してきたのか、現在における最新の研究動向や今後の方向性について、どのようなことを感じておられますか?

井上教授:ソフトウエア工学の国際会議やワークショップに参加したり、委員を務めたり、論文の査読をしたりと、様々なことを手がけていると研究のトレンドが変化していることを実感します。

1980年代や90年代は、ある意味、穏やかな時代でした。ソフトウエアの品質を上げるためにはしっかり管理をすれば上手くいくという研究や実証的なアプローチがあったと感じています。その一環としてISOとか、CMMIといったものがありました。多くの取り組みがありましたが、やってみて「やっぱしんどいな」というのが皆さんの一致した感想じゃないかと思いますね(笑)

石原:一定の成果はありましたが、たしかに仰るとおりの雰囲気があったと思います。

井上教授:その後、2000年ぐらいになってネットワークや携帯電話が広く普及していきました。ソフトウエアも素早く開発してデリバーする流れになり、プロセスがフォーマルでは追いつかなくなっています。ソフトウエアエンジニアの研究もアジャイル、DevOpsに向かっていきました。そこから実証的なソフトウエア工学、エンピリカルソフトエンジニアリングが出てきている流れだと思います。

そしてソフトウエアリポジトリマイニングですね、リポジトリを分析して過去のノウハウをピックアップする研究の流れもありますが、これらは私には過去にきっちりソフトウエアの開発をやってきたことへの反動にも感じられています。データを集めて、そこからいいものを抽出して、次の生産に生かしていこうという考え方は、どちらかと言うと受身のアプローチではないかと感じられるからです。

石原:今はたしかに仰るような流れがあると感じます。受身のアプローチという視点は興味深いですね。

井上教授:ソフトの開発手法はどんどん形態が変わっていますが、品質や生産性を担保するようなアプローチが上手く提案できてこなかったと思います。そういった背景もあり、さらにエンピリカルなアプローチやマイニングの延長線上かもしれませんが、最近は統計的機械学習、AIを使ったアプローチが目立ってきました。過去のデータを単に数値ではなく"教師"として次のステップに生かそうということになります。

機械学習は昔からあり、私は恩師から機械学習は、その答えで十分なのかがわからないという薫陶を受けていました。しかし、今では機械学習を使ってバグの予測をしようとか、コードの補完をしようとか、さらに踏み込んで生産性に結び付けようとする動きが出てきています。最近の国際会議の論文などを見ても、もう8割ぐらいが機械学習を使ったものです。機械学習を知らないと何もできない、国際会議の論文も読めない風潮があります。

ですので、機械学習のアプローチをソフトウエア工学、ソフトウエアの品質、生産性の向上、デバッグ、テスト、そしてコード......と、あらゆるところに使うというのが現在のトレンドと言って良いでしょう。

石原:機械学習が「なぜこれで良いか」といった十分性の問題は、私たち品質保証に携わる人間にとっては命綱となる部分です。「なぜ、これで十分だと言えるのか」を説明できなければテストとして不十分であるということですが、これは私自身、上司から徹底的に叩き込まれました。

AI、機械学習はたいへん有用な道具です。今、これらをどう使うのかといったところで主体性が問われているのだと考えています。先ほど受身のアプローチとの話がありましたが、道具をどう使って品質なり良いものを作るのかと、やはり使う側の主体が問われてきているように感じました。

ソフトウエアエンジニアリングの重要性

石原:井上先生のお立場から、これからのソフトウエアエンジニアリングの方向性として重要なのはどのようなことだとお考えでしょうか?

井上教授:受身から攻めへ転じることが大切だと思っています。先ほど受身のアプローチについて話しましたが、機械学習は攻めていける道具になってくると思っています。仰るように機械学習は道具として、使い方のアイデア次第で生産性がものすごく向上する可能性があるのです。テストにしても、訳のわからないセレクションをやるよりも機械学習でアドバイスを貰った方がマシだというように、人間をサポートする"攻める道具"として有効活用されるようになっていくと考えています。

ソフトウエアエンジニアリングをマスターすれば、ソフトウエアの開発技術、今トレンドとなっているような多種多様な開発技術を当然包含して身につけることができます。ソフトウエアエンジニアリングを学んで最新の開発技術を身につけ、これからの社会に必要とされるソフトウエアを効率よくどんどん生み出していくエンジニアが育っていってくれたらうれしいですね。

石原:ソフトウエアエンジニアリングを知り学ぶことで、何か新しい手段でこれまでにないモノを作ったり、問題を解決したり、社会を前に進めたりする力がつくわけですね。

オープンソースソフトウエアにはどんなリスクがあるのか?

石原:先ほどのトレンドの話に関連しますが、1980年代後半以降オープンソースソフトウエア(OSS)が広まりました。今後のシステムでOSSが使われなくなることは基本的にはないと思っていますが、功罪ある存在だと思います。コードクローン研究などの観点から見て、OSSの功罪とリスクをどう捉えておられますか?

井上教授:OSSは本当に面白いです。私もこの世界に入ってすぐにUNIXなどに触れました。本格的になったのは、やはりネットワークが発達して、インターネットから自由に利用できるようになってからです。ソフトウエアの考え方を一変させるようなものだと思っています。

私たちは、オープンソースの再利用性であるとか、マチュアリティ(maturity:成熟度)、ライセンス問題、コピーライト問題、そしてOSSが形成するコミュニティを研究テーマにしています。

現在、OSSはなくてはならない存在と言えますが、問題の例をあげると一つはセキュリティです。オープンソースで重大な欠陥があれば使っているところ全てに被害が及ぶことがあります。このセキュリティの管理をどうするかという問題です。開発者側がどこまで責任を持てるか、開発側が担保してくれなくても企業側に使う覚悟があるのかといった問題が突きつけられていると思います。この意味ではOSSを使うリスクは大きいと言ってよいでしょう。

現場の"問題意識"が出発点になる

石原:井上先生は、社会のニーズに対してソフトウエアエンジニアリングを研究されてきて、日本の産業に大きく貢献してこられたと思います。私たちのように日々、バグやレガシー資産と格闘する人間からするとありがたいことです。

井上教授:ソフトエンジニアリングでは机上の空論だけでは成り立ちません。やはり、企業の現場の問題意識が出発点になっています。問題意識がないまま単に論文を書くだけでは意味がありません。できるだけ多くの企業の方々と接点を持って、実証的に研究を進めていきたいと考えています。

石原:今後も、私のように現場にいた立場からいろいろな問題点などを相談させていただけたらうれしいです。

井上教授:そういったインプットは、こちらも刺激になりますのでありがたいです。ただ、先に予防線を張っておきますと、そういう問題は多くの場合「うん。今は良い方法がないね」という答えになってしまうケースが多いことですね(笑)。

石原:やはり、厄介な問題を一撃で倒せる「銀の弾丸」はないということですね(笑) 本日はいろいろお話をしてくださり、ありがとうございました。

執筆者:神田 富士晴

ライター

株式会社アスキー、株式会社光栄、株式会社ビレッジセンター等で書籍・ムック・雑誌の企画・編集、ソフトウエア制作を経験。その後、企業公式サイト運営やコンテンツ制作に10年ほど関わる。現在はライター・マンガ原作者として記事の企画・取材・執筆に取り組んでいる。