Web工学

研究内容概要

Webアプリケーションはインターネットを介してブラウザ上で動作するアプリケーションである.開発者が近年のWebアプリケーションを開発する際,クライアント側にAsynchornous JavaScript and XML (Ajax)と呼ばれる非同期技術を利用している.Ajax技術を用いたWebアプリケーション(以下、Ajaxアプリ)は,ユーザの操作に応じて(イベント駆動性)サーバから非同期にデータを受け取り(非同期性)Webページの表示情報を動的に更新することで(動的性)できる.これらの特徴によりAjaxアプリは応答生を向上させ豊かなユーザ体験を提供できるようになった.このことから,Ajax技術は30億人以上とも言われているインターネット人口の増大(2014年6月現在)に一躍を担っていると考えられる.

しかし,Ajaxアプリのイベント駆動性・非同期性・動的性により開発者はアプリの実行状態を把握しきれないため,Ajax技術の特徴はエラー原因となりやすく脆弱性への脅威となりうる.したがって,Ajaxアプリが開発者の期待通りに動作するかテストし,欠陥を十分に検出し修正することが重要課題となっている.Web工学グループでは、そういった課題に対して開発者を支援する手法を開発し提案している.

研究トピックの紹介

Ajaxアプリの予防保守

Webアプリケーションを保守する際の課題はユーザ環境でのエラーの顕在化を防ぐことである.しかし,Ajax技術の特徴により開発者がAjaxアプリの全ての実行状態を把握することは難しく,欠陥のある実行状態を見逃す恐れがあり,ユーザ環境でのエラーの顕在化につながる.Ajaxアプリの実行結果から状態遷移モデルを抽出しテストする動的解析の研究が取り組まれており,実行可能な欠陥を効果的・効率的に検出できることが示されている.しかし,開発者のテスト環境で再現しないが,ユーザ環境で顕在化する"潜在的な欠陥"の検出は難しい.

本研究ではまず,Ajaxアプリから静的に状態遷移モデルを抽出する手法(JSModeler)を提案する.提案手法ではAjaxアプリの状態を変化させる相互作用(例えば,マウスクリックやサーバレスポンス)に着目する.ソースコード上のイベントハンドラから静的に抽出できる相互作用を元にすると,Ajaxアプリの実行可能性に依存しない状態遷移モデルを抽出でき,開発者が振舞いを理解し潜在的な欠陥の発見に役に立つと期待できる.

状態遷移モデル抽出

しかし,複雑な状態遷移モデルが抽出される場合,開発者が人手で精査することは難しくなる.そこで本研究では,抽出された状態遷移モデルの正しさを自動的に検証する手法(JSVerifier)を提案する.状態遷移モデルの正しさの検証にモデル検査技術を利用するには,正しい振舞いを表す不変条件を定義する必要がある.提案手法では,Ajaxアプリの開発事例をまとめたAjaxデザインパターンから相互作用に関わる振舞いを整理する.するとモデル検査器は,状態遷移モデルからAjaxデザインパターンに反する状態遷移列を識別できる.

状態遷移モデル検証

しかし,得られた状態遷移列は抽象的なモデルにおける偽反例の可能性があるため,実際にAjaxアプリのエラーを引き起こすか確かめる必要がある.本研究ではさらに,潜在的な欠陥が原因となるエラーを顕在化することでAjaxアプリの動作を確認する手法(JSPreventer)を提案する.Ajaxアプリの全実行シナリオを全実行環境でテストすればそのエラーを顕在化できるが現実的でないため,予期せぬ通信遅延がエラーの原因となりやすいと仮定する.
この仮定の元,提案手法ではAjaxアプリが同期的・非同期的な通信結果を処理するタイミングを調整する変異操作を定義する.変異操作により通信遅延を繊細に調整でき,通信遅延に依存する潜在的な欠陥が原因となるエラーを顕在化できる.

状態遷移テスト

現実のAjaxアプリを用いた適用事例の結果,提案手法により脆弱性に関わるエラーを顕在化でき,既存の解析・テスト手法ではそれらを検出できないことを確認した.したがって提案手法は,開発者がAjaxアプリの潜在的な欠陥を発見しデバッグする予防保守に役立つと考えられる.

Ajaxアプリのミューテーション解析

Ajaxアプリが大規模・高機能化するに伴い,欠陥の検出は困難化し情報漏洩などの脆弱性への脅威が高まっている.そこで欠陥を十分に検出するようAjaxアプリを適切にテストする必要がある.

テストの適切さを効果的に測定する手法としてミューテーション解析が知られている.
ミューテーション解析では,開発者が実際に作りうる欠陥をテスト対象プログラムに埋め込み誤ったプログラム(ミュータント)を生成する.テストが適切ならば埋め込まれた欠陥を検出できると期待されるため,検出された欠陥の比率(ミューテーションスコア)でテストの適切さを測定できる.

本研究では,Ajaxアプリのテストに向けたミューテーション解析を提案する.ミューテーション解析の課題は,開発者が実際に作りうる欠陥を埋め込むルール(ミューテーション操作)を定義することである.ミューテーション操作は実欠陥を元に定義できるがAjaxアプリの実欠陥は収集が難しいと指摘されている.そこでAjaxアプリのイベント駆動性・非同期性・動的性に着目しフィーチャ分析を行う.分析された必須フィーチャに応じてミューテーション操作を定義することで,Ajaxアプリに特化したミューテーション解析(AjaxMutator)を実現する.

AjaxMutator

オープンソースのAjaxアプリを用いた適用事例の結果,被験者はAjaxMutatorを用いて測定されたミューテーションスコアを向上させるようテストを改善し,その結果より多くの欠陥を検出できたことを確認した.したがって,AjaxMutatorは開発者が高信頼のAjaxアプリを開発するために役立つと期待できる.

メンバー

  • 前澤 悠太(特任助教)
  • 中岡 淳登(M2)
  • 片木 智也(M2)
  • 瀬嵜 康大(M1)
  • 本多 和幸(M1)

連絡先

前澤 悠太:maezawa@nii.ac.jp

研究成果

主な発表文献

  1. Yuta Maezawa, Kazuki Nishiura, Hironori Washizaki, Shinichi Honiden,"Validating Ajax Applications Using a Delay-Based Mutation Technique",The 29th ACM/IEEE International Conference on Automated Software Engineering (ASE'14),pp. 491-502, September 2014.
  2. 澤野宏貴,前澤悠太,高橋竜一,本位田真一,"MVC Webアプリケーションの機能縮退を考慮した振舞い検証",ソフトウェアエンジニアリングシンポジウム2014論文集,pp. 54-59,2014年9月.
  3. Yuta Maezawa, Hironori Washizaki, Yoshinori Tanabe, Shinichi Honiden,"Automated Verification of Pattern-based Interaction Invariants in Ajax Applications",The 28th IEEE/ACM International Conference on Automated Software Engineering (ASE'13),pp. 158-168, November 2013.
  4. Kazuki Nishiura, Yuta Maezawa, Hironori Washizaki, Shinichi Honiden, "Mutation Analysis for JavaScript Web Application Testing",The 25th International Conference on Software Engineering and Knowledge Engineering (SEKE'13),pp. 159-165, June 2013.
  5. 前澤 悠太,鷲崎 弘宜,本位田 真一, "インタラクションに着目したステートマシン抽出による Rich Internet Applications の欠陥発見の支援", 情報処理学会論文誌 特集「ソフトウェア工学」, Vol.54(No.2), pp. 820-834, 2013年02月.
  6. Kazuki Nishiura, Yuta Maezawa, Fuyuki Ishikawa, Shinichi Honiden,"Supporting View Transition Design of Smartphone Applications Using Web Templates",The 12th International Conference on Web Engineering (ICWE'12),pp.323-331, July 2012.
  7. Yuta Maezawa, Hironori Washizaki, Shinichi Honiden,"Extracting Interaction-Based Stateful Behavior in Rich Internet Applications",In Proceedings of the 16th European Conference on Software Maintenance and Reengineering (CSMR'12),pp.423-428, March 2012.

開発ソフトウェア

  • JSModeler:Ajaxアプリの相互作用に着目した状態遷移モデル抽出ツール
  • JSVerifier:Ajaxアプリのパターンに基づく相互作用の不変条件に関する自動検証するツール(公開準備中)
  • JSPreventer:遅延に基づくプログラム変異を用いたAjaxアプリの妥当性確認ツール(公開準備中)
  • VTRoid:Webテンプレートを用いたスマートフォンアプリの画面設計支援ツール
  • AjaxMutator:Ajaxアプリのミューテーション解析ツール