JBoss と Arquillian で実現する 究極のテスト環境 レッドハット株式会社 JBoss サービス事業部 コンサルタント 山 田義和
Who am I? Hi, I m glad to see you! 2
Arquillian??? インテグレーションテストのための テスティングプラットフォーム http://www.jboss.org/arquillian.html 3
テスティングプラットフォーム? クールなシステムのためのクールなテストを実現するためのツールです 詳しくはこのセッションで解説します 4
サポートは? JBoss Enterprise Application Platform のサブスクリプションで Red Hat からのサポートを受けられます 使い 方に困ったら Red Hat の親切切なサポートに聞きましょう! 5
Agenda l l l l l l クールなシステムとは何か? クールなシステムをどのように作り込むか? 開発サイクルとテストの 自動化 コンポーネントマップとテスト インテグレーションテスト 自動化の課題 Arquillian のコンセプトと仕組み 6
クールなシステムの定義 使う側の要求に対して 機敏に継続的に適切切なコストで正確に 対応 7
開発サイクル 新規開発 機能修正 追加 バグ テストの 目的 要求 ( 要件 ) を設計 実装が 正確に満たしているかの評価 検証 テスト 設計 実装 8
テストを 自動化すると テスト 設計 実装 l テスト 手順を継続的に正確に再実 行行可能になります l 手動テストに 比べテストの実 行行に必要なコストが圧倒的に 小さくなります l 機敏に設計 実装の評価 検証を 行行うことが可能になります クールなシステムの定義に 完全にマッチ 9
クールなシステムを どのように作り込む? クールなシステムは 自動化されたクールなテスト で作り込む! もちろん良良い設計 実装もと ~っても 大事です 10
本セッションのテーマ クールなテストとは何か? それをどのように実現するか? JBoss Java EE 6 に関する設計 実装のお話も良良いシステムの構築に深く関係しますが別の機会に ごめんなさい 11
コンポーネントマップ component #A JAX- RS JSF CDI EJB JPA JMS Java EE Web Container Transaction DataSource messaging JBoss Enterprise Application Platform Java VM package #A component #B component #C library #A library #B library #C Application Archive package #B Kernel Red Hat Enterprise Linux H/W, N/W component #D package #C 12
コンポーネントマップとテスト 単体テスト component #A インテグレーション テスト 単体テ library #A library #B library #C スト Application スト スト Archive スト JAX- RS JSF CDI EJB JPA JMS ション Java EE ション Web Container Transaction DataSource messaging JBoss Enterprise Application Platform Java VM システム テスト package #A 単体テ component #B インテグレー テスト component #C 単体テ package #B Kernel Red Hat Enterprise Linux H/W, N/W インテグレー テスト component #D 単体テ package #C 単体テスト インテグレーション テスト システム テスト 通常のシステムテストでは DB 等の他システムとの連携のテストも 行行います 13
テストの性質とコスト 単体 テスト 影響範囲 コスト インテグレーション テスト システムテスト 1 影響範囲は主にテストが対象とするコンポーネントの範囲やテストエラーが発 生した際の 手戻りの範囲を想定しています 2 コストは主にテストの実施やテスト結果のフィードバックに必要な 人的リソースや時間的なコストを想定しています 14
テスト 自動化の現状 15
今よりテストが 自動化できたら Cooool! 16
テスト 自動化の問題点 あるインテグレーションテストの場合 テスト対象 テスト対象が依存する コンポーネント component #A component #B component #C component #D library #A library #B library #C Application Archive JAX- RS JSF CDI EJB JPA JMS Java EE Web Container Transaction DataSource messaging JBoss Enterprise Application Platform 17
テストの 自動化の問題点 component #A component #B component #C component #D library コンポーネン #A library #B library #C Application Archive ト間の依存 JAX- RS JSF CDI EJB JPA JMS コンテナ依存 Java EE Web Container Transaction DataSource messaging JBoss Enterprise Application Platform テストコードのコールスタック 18
テスト 自動化の課題 ü ü 依存するコンポーネントをどうするか? 依存するコンテナのサービスをどうするか? 何とか解決しようとすると ü モック地獄! ü コンテナのサービスの制御には かなりの 工夫が必要 ü 軽量量テストコンテナ等を使 用する場合本番環境との違いに注意する必要あり 19
課題だらけ *&# %^@!!+_^$ 20
Arquillian のコンセプト 稼働するコンテナでテスト を実 行行する 21
以下の範囲をテストの プロセスに組込む テスト実 行行時 に制御 テスト実 行行時 に 生成 テストプロセスにデプロイと component #A コンテナの制御を組込む component #B component #C component #D library #A library #B library #C Application Archive JAX- RS JSF CDI EJB JPA JMS Java EE Web Container Transaction DataSource messaging JBoss Enterprise Application Platform 22
Arquillian がテスト実 行行時 に 行行うこと 1. パッケージング (war, ear) 2. コンテナの起動 停 止 3. デプロイ アンデプロイ 4. コンテナ上でのコンポーネントのテスト 23
Arquillian の仕組み パッケージング xx.class yy.class 1. テストに必要なクラスや DD の収集 persistence. beans.xml xml 2. パッケージング テスト実行に必要なテスト制御コンポーネントも パッケージングします test.war, test.ear ~.class ~.xml Control component 24
Arquillian の仕組み コンテナの起動とデプロイ 3. コンテナの起動 JBoss (Container) 4. デプロイ test.war, test.ear test.war, test.ear ~.class ~.xml Control component 25
Arquillian の仕組み テストの実 行行 JBoss (Container) test.war, test.ear ~.class ~.xml Control component 4. テストの実 行行 26
Arquillian の仕組み コンテナの停 止とアンデプロイ JBoss (Container) 5. アンデプロイ & 停 止 27
Arquillian が実現可能にする テスト 1. Java EE に依存するテスト DI, JPA, EJB, etc 2. コンテナのサービスに依存するテスト messaging, DataSource, etc 28
Arquillian では実現できない だけ テスト 1. コンテナより低レイヤのテスト JVM, OS, etc 2. ビューレイヤのテスト JavaScript, CSS, etc 3. パフォーマンス 障害テスト 29
Demo 1 Eclipse から Remote モー ドで Arquillian によるテス トを実 行行する 30
Demo 2 Jenkins から Managed モードで Arquillian による テストを実 行行する 31
さらなるテストの 自動化へ! ご来場頂いた 方々にだけ そっと紹介します 32
まとめ l クールなシステムとは使う側の要求に対して機敏に継続的に適切切なコストで正確に対応可能なシステムである l クールなシステムの開発には 自動化されたクールなテストが実施可能な環境が必要である l Arquillian によりこれまで実現の難しかった真のインテグレーションテストが可能になる 33
まとめ + α Arquillian によりクールなテストを実現できるようになりました ただし クールな ( 必要 十分で意味のある ) テストを設計することは 自動化できません クールなテストを設計して クールなエンジニアになりましょう! 34
What a cool we are! 35
To be continued 次回 JJBug で Arquillian の 技術的な詳細を紹介します https://community.jboss.org/groups/japan- jbug? view=overview#/?tagset=undefined 36
See you later! ご清聴ありがとうございました 山 田義和 :yyamada@redhat.com