内容

Webアプリケーション・モデルに基づくJSPの動的検証

背景：n

Webアプリケーションの構成
分業によるチーム開発
q JSP開発における問題
qq

Webアプリケーション ・モデル
JSPの動的検証
n ツール・デモn 効果
n 今後の課題nn

根路銘 崇,小野 康一, 田井 秀樹, 安部 麻理
日本アイ・ビー・エム（株）東京基礎研究所

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

背景：分業によるチーム開発

背景：Webアプリケーションの構成
nn

大規模になるほどWebアプリケーション構成単位で，役割分担による分業を行う場合が多い．

n

近年，JSP Model2アーキテクチャに基づいた構成が主流である
q

ページ数で数えると，数十，数百のレベルq

例：Jakarta Struts

JSPは，コンパイルおよび実行時に関連コンポーネントとの依存関係を持つ

n

設計者による設計後に，平行して開発する場合が多い．
開発対象物間の動作確認や設計に不整合にないかのテストは重要！

qModelHTTP(POST/GET)Controller(Actions)

ModelBusinessLogicController(Actions)

HTTP(POST/GET)

Config File

JavaBea {Application,Request, Session,nsPage)
JS
Ps

InvokeView(JSPs) Include
SQL execute

DataBase

ReadWeb Application Server

Scope:

Invoke

実行制御
データ依存

2

背景：JSP開発における問題
n

JavaBea {Application,Request, Session,ns
Page Developer JS Page)
IncludeView(JSPs)
Ps
Database developer
SQL execute
DataBasReade
MessageResourcesJSPの関連コンポーネント
Web Application Server

HTML

MessageResourcesJSPの関連コンポーネント

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

実行制御
データ依存

3

背景：JSP開発における問題

受入れ テスト/統合 テストで以 下のような不具合 が発 生しやすいq
関連コンポーネントとの依存関係部分の不整合
q
文法の誤り
q
画面レイアウトの悪さ

n

主要な原因
q
JSP開発に必要な仕様情報があいまいqq

開発されたJSPの一部<jsp:useBean id=“user ” scope=“session”
type="org.apache.struts.webapp.example.User "/>n<bean:message key="main.title"/><jsp:getProperty name="user" property="uname"/>q

状態に依存したJSP要素 の振る舞い検証
qn関連コンポーネントの依存関係と仕様との整合性検証

人間による実行および実行結果の確認
qメッセージリソース

関連コンポーネントの依存関係＝動的な値の入出力項目 （画面の観点より）

動的実行に基づく自動検証nmainMenu.title メインメニュー

関連コンポーネントの用意の大変さ / 分岐ロジックの検証漏れ

解決策
q JSP要素とその関連 コンポーネントに関する正確かつ漏れのない仕様（モデル）に基づいた開発
q関連コンポーネント呼出の不整合

定義が不十分 / 仕様変更の対応方法に漏れ

JSP検証のための実行方法が複雑
qpublic interface User {public String getUsername();}BusinessLogic

Business Logic
DeveloperConfig File

Scope:

HTML

1

開発したJSPに関して，実行結果における画面レイアウト検証

JavaBean
関連コンポーネント呼出のパラメータ値記述が不整合である例
JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

4

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

51

Webアプリケーション・モデルn

JSPの動的検証

JSPのコンポーネント呼出をモデル化
qnqq

開発したJSPおよびPageDataを入力とした２つの動的検証の自動化
q

PageData

Verifier実行
JSPの記述とPageData との整合性を比較検証§
主要な検証結果: OK / UNKNOWN ERROR （余計な記述）/ MISSING ERROR（記述が不足)
全てのJSPを一括で検証実行および実行結果ログ出力（HTML形式）q

要素：入力項目/出力項目
関連：従属/繰 り返し/分岐<PageData targetPage="Login.jsp" ><Switch><Case><OutputItem name=“welcome_msg”/></Case><Case><OutputItem name=“error”/></Case></Switch><Group name="history_group" multiple="true" maxSize="-1"><OutputItem name="accesshisoty" required="true"><Presentation name=“bean:write"><Param name="output param">param value</Param></Presentation></OutputItem></Group><Form name="MainForm" method="post"><InputItem name="page_hidden_number" multiple="true" ><Presentation name=“html:hidden"><Param name="maxLength">20</Param></Presentation></InputItem><InputItem name="request" multiple="true" ><Presentation name=“html:radio"><Param name="maxLength">20</Param></Presentation></InputItem></Form></PageData>

主要なクラス・ダイアグラム

qq

Viewer実行関連コンポーネントのスタブを用意し，実行結果を出力
利用者は，実行確認，実行結果画面の表示を確認する

qq

Data
Data
Data
Data

Verifier実 行

DataVerifier実行結果（一括検証の自動実行）

開発された JSP

Viewer実 行
PageData+PageDataStub

Web Application Server
Viewer実行結果（スタブを選択して１ページ単位で実行）

XML記述の例

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

6

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

7

効果nJSP１０ページ（平均18個のJSP要 素）に対し，ツールを利用する開発者Aとツールを利用しない開発者Bで検証結果を比較

デモンストレーション-PageDataエディタ-JSPの動的検証ツール

不整合が検出されたJSP要素の記述数

開発者A

16個

検出とその修正に必要とした時間
9分

開発者B

13個40分

表. JSPファイル10枚の検証結果

q

検証にかかった時間は，開発者Bは開発者Aの4.4倍
nq

品質の 向上( 開 発 者A)

開発者Aは，Viewer実行により３ページのレイアウトを修正n8

検証の 高 速 化

結合テストで，開発者B担 当のJSPは不整合要素が２つ発見
nq

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

検証担当者

受入れ テスト/結 合 テスト時の 修正箇所 を削 減

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

9

今後の課題
n

PageDataへの更新
q 不十分なPageData部分を，開発したJSPから更新するという利用形態への対応

nVerifier実行のJSP scriptletサポート
q 任意のJSP要素記述の検証

n

更に多くの利用データに基づく不整合パターン抽出
q 開発物の品質を更にあげるためのフィードバック

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

BACK UP

10

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

112

PageDataStub

問題解決に向けた既存技術

nn

Cactusqqn

PageDataに基づいたスタブデータ
q

PageDataとPageDataStubの関 係は，1対N．

JUnitの拡張．
必要なテスト環境が 用意 されればJSPの単体 テストには便 利である．
しかし，ページ開発者にとってテストのためのロジックをJava で作成する手間が発生する．また，テスト環 境が仕様に沿って作成 される保証はない．

TagUnitqq

JUnitのassertionをJSP内のJSP 要素に対して行 う．
こちらも検証のためのロジックをページ開発者が用意する必要があり，その作 成において誤りが発生する可能性がある．また，対 象となるJSPに対して，検証用 のJSPタグを埋め込む事は好ましくない．そのJSPタグを解除する際に，正しいJSP要素に影響を及ぼす可能性がある．

PageDataエディタの項目定義（型を指定して，スタブデータを自動生成）

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

12

XML表現の例

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

13

JSP検証環境の概要
テスト実行管理機能
実行要求

関連コンポーネント生成機能

PageDataStub

PageData
JSP実行リクエスト機能
Viewer実行

Verifier実行

JSP実行監視機能
Web ブラウザ

関連コンポーネント（スタブ）整合性検証機能
検証対象全て実行済

実行結果
実行結果送信機能
検証対象JSPファイル

JaSST'04 Web アプリケーション・モデルに基づくJSP の動的検証

143