FEST-SwingでFestival!

802 views
754 views

Published on

第7回 xUnit Test Patterns(xUTP)読書会(http://atnd.org/events/1835)で発表した、GUIテストについての資料です。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
802
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

FEST-SwingでFestival!

  1. 1. FEST-Swing で Festival !!! よう (@youchan)
  2. 2. 自己紹介 <ul><ul><li>ようです! </li></ul></ul><ul><ul><li>イケメン CTO でおなじみの </li></ul></ul><ul><ul><li>株式会社アプレッソで働いてます。 </li></ul></ul><ul><ul><li>DataSpider という EAI のソフトの開発をしています。 </li></ul></ul>
  3. 3. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  4. 4. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  5. 5. 経緯 <ul><li>ユニットテストによる自動テスト </li></ul>GUI のテスティングとは? 単純なユーザー操作で見つかる不具合も検出できない。
  6. 6. 経緯 <ul><li>テスト仕様書を作成して </li></ul><ul><li>手動でテスト </li></ul>GUI のテスティングとは? テストのコスト増加
  7. 7. 経緯 <ul><li>テスト仕様書を元に GUI の自動テスト </li></ul>GUI のテスティングとは? GUI のオートメーションテスト
  8. 8. GUI のテスティングとは? <ul><ul><li>Unit テストではカバーすることのできない、ユーザーの操作とビューの検証 </li></ul></ul><ul><ul><li>  ユーザーの操作をエミュレートすることによって、よりユーザーに近い部分での不具合を早期に発見 </li></ul></ul><ul><ul><li>手間のかかる GUI のテストを自動化 </li></ul></ul><ul><ul><li>ユーザーの操作を再現するため、シナリオ的なテスト </li></ul></ul>GUI のテスティングとは?
  9. 9. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  10. 10. GUI テストに求められるもの <ul><ul><li>ユーザー操作の自動化 </li></ul></ul><ul><ul><ul><li>よりユーザーの操作に近い再現性 </li></ul></ul></ul><ul><ul><ul><li>コンポーネントレベルの記述性 </li></ul></ul></ul><ul><ul><li>ビューの検証 </li></ul></ul><ul><ul><li>モデルの検証 </li></ul></ul><ul><ul><li>ユーザー操作をシナリオ的に実行 </li></ul></ul>FEST-Swing + TestNG
  11. 11. GUI テストのツール <ul><ul><li>Java のツール </li></ul></ul><ul><ul><ul><li>Swing 用と SWT 用とで分かれる。 </li></ul></ul></ul><ul><ul><ul><li>SWT は SWT 自体に GUI テストの仕組みがある。 </li></ul></ul></ul><ul><ul><li>Swing のツール </li></ul></ul><ul><ul><ul><li>Abbot </li></ul></ul></ul><ul><ul><ul><li>FEST-Swing </li></ul></ul></ul><ul><ul><ul><li>UISpec4J </li></ul></ul></ul><ul><ul><ul><li>SwingUnit </li></ul></ul></ul>Fest-Swing + TestNG
  12. 12. FEST-Swing の選定の決め手 <ul><ul><li>開発のアクティビティ </li></ul></ul><ul><li>  ⇔ SwingUnit </li></ul><ul><li>  ⇔ Abbot </li></ul><ul><ul><ul><li>開発が終了していた </li></ul></ul></ul><ul><ul><li>API の使いやすさ </li></ul></ul><ul><li>  ⇔ UISpec4J </li></ul><ul><ul><ul><ul><li>  カスタムの ToolKit を使っていて DataSpider では使えなかった </li></ul></ul></ul></ul>Fest-Swing + TestNG
  13. 13. TestNG の採用 <ul><li>シナリオ的にテストケースを実行するために、 TestNG を採用した。 </li></ul>Fest-Swing + TestNG JUnit4 TestNG グループ ○ ○ 依存関係 × ○ ステートフル × ○
  14. 14. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  15. 15. DataSpiderTestBench <ul><ul><li>DataSpider Client を起動し、 Client を操作するためのテストベンチを作成した。 </li></ul></ul><ul><ul><li>コンポーネントは Client の JFrame からすべて検索することが出来る。 </li></ul></ul>DataSpider チームにおける GUI テスト
  16. 16. 起動のシーケンス DataSpider チームにおける GUI テスト
  17. 17. TestNG によるシナリオ実行 <ul><li>TestNG ではグループと依存関係を記述することが出来る。 </li></ul>DataSpider チームにおける GUI テスト @Test(groups = { &quot;Group1&quot; }) public void TestCase1() throws Exception {      // description of test case } @Test(groups = { &quot;Group1&quot; }, dependsOnMethods = { &quot;TestCase1&quot; } ) public void TestCase2() throws Exception {      // description of test case }
  18. 18. TestNG によるシナリオ実行 <ul><li>グループ間の依存関係を記述することが出来る。 </li></ul>DataSpider チームにおける GUI テスト @Test(groups = { &quot;Group1&quot; }) public void TestCase1() throws Exception {      // description of test case } @Test(groups = { &quot;Group2&quot; }, dependsOnGroups = { &quot;Group1&quot; } , alwaysRun = true) public void TestCase2() throws Exception {      // description of test case }
  19. 19. TestNG によるシナリオ実行 DataSpider チームにおける GUI テスト
  20. 20. EDT とウェイト処理 DataSpider チームにおける GUI テスト <ul><ul><li>名前による検索 </li></ul></ul><ul><ul><ul><li>あらかじめ setName() で名前をつけておく </li></ul></ul></ul><ul><ul><li>クラスによる検索 </li></ul></ul><ul><ul><ul><li>同じクラスのコンポーネントが複数存在しない場合に有効 </li></ul></ul></ul><ul><ul><li>ラベルなどの Text プロパティによる検索 </li></ul></ul><ul><ul><ul><li>ラベルに関連付けられたコンポーネントは setLabelFor() しておく </li></ul></ul></ul><ul><ul><li>その他 </li></ul></ul><ul><ul><ul><li>関連付けられているモデルなどから </li></ul></ul></ul>
  21. 21. コンポーネントの検索 DataSpider チームにおける GUI テスト ソースコード参照
  22. 22. EDT とウェイト処理 DataSpider チームにおける GUI テスト
  23. 23. EDT とウェイト処理 DataSpider チームにおける GUI テスト ソースコード参照
  24. 24. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  25. 25. ComponentFixture Inside FEST-Swing
  26. 26. java.awt.Robot Inside FEST-Swing
  27. 27. Agenda <ul><ul><li>GUI のテスティングとは? </li></ul></ul><ul><ul><li>FEST-Swing + TestNG </li></ul></ul><ul><ul><li>DataSpider チームにおける GUI テスト </li></ul></ul><ul><ul><li>Inside   FEST-Swing </li></ul></ul><ul><ul><li>まとめ </li></ul></ul>
  28. 28. GUI テストの守備範囲 <ul><ul><li>シナリオ的なテストになるので、ユニットテストとはフェーズが異なる。 </li></ul></ul><ul><ul><ul><li>QA チームが従来行っていた </li></ul></ul></ul><ul><ul><li>GUI の状態など、手作業ではコストもかかり、不確実なところに適用できる。 </li></ul></ul>まとめ
  29. 29. 課題 <ul><ul><li>操作感といったところまで踏み込んでテストすることはできない。 </li></ul></ul><ul><ul><ul><li>自動化出来ない </li></ul></ul></ul><ul><ul><li>テスト作成のコストが大きい。 </li></ul></ul><ul><ul><ul><li>ユーザー操作の自動記録の機能がほしい </li></ul></ul></ul><ul><ul><ul><li>あるいは DSL 的なアプローチ(テスト仕様書) </li></ul></ul></ul>まとめ

×