ICST2015まるわかりDayと紹介した論文について

標準

7月4日(土)に、ICST 2015 まるわかり Day というイベントが開催されました。

イベントでは、ICST 2015で採録された35本の論文を5分間のLT形式で紹介していきます。ICSTはソフトウェアテスト関連の有名なカンファレンスで、ここに採録された論文を眺めれば、最先端のソフトウェアテスト技術を知ることができるんです。

全体的にはテストケースの自動生成にまつわる話題が多かった印象です。ホワイトボックステストですと、シンボリック実行(コンコリック実行)、ブラックボックステストですと、仕様書(自然言語やビジネスルールなど)を解析してテストケースを導出するとかです。

私も1本論文を紹介しましたのでここに載せます。

紹介した論文

紹介したのは、「Perspectives on White-Box Testing: Coverage, Concurrency, and Concolic Execution」という論文です。日本語に訳すと、「ホワイトボックステストの見通し: 網羅、並行、コンコリック実行」でしょうか。内容は、著者らの研究成果を2つ紹介しています。いちおう共通のテーマでまとめていますが、ちょっと無理矢理感はあります。ただしそれぞれの内容自体はたいへん興味深いものです。1つは、テストの網羅性を制御するためのクエリ言語とその実行環境の開発です。以下の論文紹介のスライドに概要をのせましたが、ソースコードをデータベースとみなし、FQLというクエリによって、網羅したい条件を満たすテストデータをデータベースから取り出します。この概念は、コンコリックテスト(またはモデルベーステスト)を実用的に実施するためにたいへん重要です。現実のソフトウェアを対象としたとき、いまのコンピュータ資源をもってしても全網羅テストはコストが高く、部分網羅にせざるを得ないため、網羅するところを決められる手段が必要なのです。もう1つは、並列(マルチスレッド)プログラムにコンコリックテストを実施する理論と仕組みの構築です。きっと並列プログラムの問題はほかにも研究があるのでしょうけども、考え方が理解できるとナルホドガッテン(古い)でした。これもスライドで説明しましたのでご参照ください。

 


あらためて思いますが、紹介する立場になるとそれなりに読み込まないと説明できないので、理解が深まってよいですね。たいへん勉強になりました。

シンボリック実行を利用したソフトウェアの互換性確認にかんする考察と実験

標準

先日、ソフトウェア・シンポジウム2015というイベントに参加してきました。イベントでは様々なワーキング・グループが、それぞれソフトウェアに関連するテーマで議論をしました。私は「電脳テスト道具の活用」というテーマのグループに参加し、とっても刺激をうけて帰ってきました。その議論の中で、私が考察した内容についてご紹介しました。ここにその内容をまとめます。

はじめに

いまや人間社会は、ソフトウェアなしでは成り立たない状態です。インターネットは当然ながら、電気エネルギーや鉄道などの社会インフラから身の回りの家電製品まで、ソフトウェアは至る所に存在します。今後、車の自動運転、IoT(Internet of Things)や人工知能の応用が進めば、この流れはますます加速するでしょう。

さて、人間社会は変化します。諸行無常です。それゆえ、ソフトウェアが動作している環境(文脈)も変化します。環境の変化に対応するため、ソフトウェアは継続的に更新する必要があります。余談ですが、ソフトウェアはハードウェアと違って物理的な経年劣化がないですけども、ハードあってのソフトウェアなのでハードウェアの変更(64bit環境への移植とか)でソフトウェアのメンテナンスが必要になるってところは忘れがちです。
古いソフトウェアになればなるほど、変更の必要性は高まります。

下記の図は、IPAさんのデータから抜粋させていただきました。日本におけるソフトウェア開発の実態を示したものです。
2000年以降、新規のソフトウエア開発は減少傾向にあり、逆に派生開発(既存ソフトウェアの変更)の割合は増加傾向にあります。2013年では64%が派生開発でした。

trend

派生開発によくある課題ってなんでしょうか。ここでは3つを挙げてみます。

  1. 短い開発期間
    変更に必要な手間は過小に見積もられがち。
  2. 開発情報の不足
    変更前のドキュメントがない、担当者がいない。
  3. 変更前のソフトウェアとの互換性の確保
    互換性があるべきところが確かにある、ことをどうやって確認する?

いろいろ悩みはつきませんが、ここでは3つめの課題をとりあげて、解決の道筋を考察してみたいと思います。具体的には、互換性を確認するテストについてその課題を特定し、シンボリック実行(Symbolic Execution)という技術を応用した解決方法を検討します。

シンボリック実行とは、一言でいうと、ソフトウェア(プログラム)に存在する実行可能なパス(可達パスといいます)を通すような、入力データを自動的に生成する技術です。こちらのブログ記事がわかりやすいです。

なお、対象とする互換性は、ソフトウェアの論理的動作とします。性能など、そのほかの互換性は対象外です。また、変更の範囲は、ユーザーインターフェース(外部インターフェース)に影響のない範囲とします。これは、テストケースを再利用するための条件です。