PoohSunny's blog

生きるために食べるのか、食べるために生きるのか。

2013/05/12 『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編)に参加してきた  #junitbook 

f:id:swimming_pooh:20130512175653j:plain

というわけで、行ってまいりました!

著者の渡辺さんにきていただき、「幻の章」の紹介・実践をするという会です。わーい。
connpassの紹介分には下記のような文章が。

Unitによるユニットテストを実践していますか?
JUnit実践入門では、ユニットテストの概念から基本的なテストの書き方を中心に、テスト駆動開発継続的インテグレーションといった範囲まで紹介しています。

しかしながら、分量の関係と直接的にJUnitとは関係がないため、削ることにした幻の章があるのです。

Selenium

Seleniumは、ウェブアプリケーションの受け入れテストを自動化する超クールなツールです。Selenium単体だとイマイチ使いにくい部分があるのですが、JUnit実践入門で紹介したCucumber-junitと組み合わせると、
とてもとてもスマートに、そして楽しく、テストを進める事ができるようになります。

この勉強会では、JavaEEで実装した簡単なアプリケーションを対象に、Cucumber-junitSeleniumを組み合わせ受け入れテストを実践するためのコツをお伝えします。

実際に手を動かしながら、CucumberとSeleniumを繋ぐステップ定義を作成し、可憐なドライバーを作成しましょう。また、シナリオを記述するときのコツ、シナリオを綺麗にメンテナンスするコツ、そもそも外部設計から仕込むことの重要性、おまけにJenkins/Mavenでの自動化まで全てを1日でやっちゃいますよ。

わくわくが止まりません。

事前準備

今回の勉強会の私の問題意識

まず、今回の勉強会に際して、私が解決したかった問題意識は下記でした。

受け入れテストに使えないか!?

最近、開発業務を部分的にアウトソースしはじめています。
その受け入れテストが結構しんどい、という現場の声があったので、この勉強会で得たものでなんとかできないか、と思いました。

Seleniumを効率的に書きたい!

最近、社内でSeleniumのテストを増やしつつあるところです。
でも、あんまり効率的にかけているような気がしていませんでした。
どうしたら効率的に(≒作成・メンテナンスのコストが低く)Seleniumを、実践できるんだろう。。。

というわけで、マジでどストライクです。ありがとうございます。

予習

環境準備

@shinyaa31さんのブログに、事前のお知らせがありました。
これに基づいて環境構築を進めます。

例によって直前にバタバタと準備をしたのですが、下記のエントリーも参考にさせていただき、
無事環境構築が終わりました。感謝。


内容の予習

そして、当日に扱われそうな話題と、お初にお目にかかるirofさんの予習のため、下記をチェックしていました。


これで、準備万端です。多分。

当日の状況

全体の詳細レポートは、@shinyaa31さんによる公式レポートをご覧頂くと良いと思います。
『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) を開催してきた #junitbook - Shinya’s Daily Report

著者の方だけでなく、レビュアーの方も複数名いらっしゃるという豪華な会でした。
全体を通してみると、
JUnit実践入門』写経・実践会 というよりは、渡辺さんがおっしゃっていたように
Pre Cucumber Boot Campって感じでした。


私は勉強会開始直後は、下記のような状態でした。


文意はなんとかわかるものの意味はまったく通じていないあたりが、頭の働かなさを如実に反映していますね。かっこ悪いw

自己紹介タイム

強く感じたのは、以下二つ。

  • Cucumber,Seleniumに興味ある人すげー多い。
  • レガシーコードと戦ってる人多い。

ということでかなりシンパシーでしたね。
まぁこういう勉強会なので、問題意識が近い人が集まっているということでしょうか。

irofさんの講演

  • テストの価値は失敗にある
  • 「失敗」を「あたりまえ」に扱い、当たり前に対処しよう。

というところに感銘を受けました。

この本の一説思い出しました。

緊急時に安心して守れるような規律を選ぼう。そして、それを常に守ろう。規律を守ることが緊急時から逃れる最善の方法である。
ピンチに陥っても行動を変えてはいけない。規律が最善の方法であれば、緊急時になっても守るべきである。

自分のことについて省みると、会社ではJenkinsをまわして、ビルドこけたら通知してるわけですが、
それで通知くらったときに、「大問題」って受け止めていないかがちょっと心配になりました。
テストがこけたら役立って良かった、って伝えてるようにしてるつもりですが、果たしてうまくいっているか。
というわけで、


社内ブログがあるので、それにガリガリ書こうと思います。

渡辺 修司(@shuji_w6e)さんの講演

『受け入れテストの自動化とユースケース駆動開発 -Pre Cucumber Boot Camp-』

ドキドキ・わくわくの内容でした。

詳細な内容は、前述の@shinyaa31さんのブログにあるので、私はグサッときたことを羅列します。

  • TDDは開発手法 良いものを作ったことは保証できない。

確かにそうですよね。上流が間違っていないことを担保して安心して開発したいものです。
というわけで、「ユースケースにどう落とすか!」というのが次の課題になったので、今回紹介していただいた下記の本を読んでみたいと思っています。
ロバネスト分析とか全く知らなかったので、超やってみたいです。



発売日:2008-10-23

 

SeleniumAPIはう○こ」という発言が飛び交いましたが、確かにイライラされるAPIたちですよね。
それが実践段階であれよあれよとラップされ、イイカンジになっていくのが心地よかったです。
Cucumberってこうやって使えばよかったんだな!!と感じました。

お昼休み

私はカレーもぐもぐ。おいしかったー。


で、その後会場では、例のステッカーたちが振る舞われていたので、私ももれなく恩恵にあずかりました。


大事にします。@sue445さんありがとうございました!

実践タイム

こちらも、ざっくりとした感想だけ。

  • なかなかついていくのが大変。

みんなスピードが速く、アップアップしながら追いついていました。
でも資料がわかりやすくてなんとかついていけました。よかったよかった。

  • データをどう放り込むかについて

渡辺さんがおっしゃっていたのは、「事故らず、楽する」
画面上から入れてしまう、というのがベストですよね。
今回はユニットテストの存在している部分を起点にJPAでデータを投入しました。
全体のバランスを見て、戦略を決めるところがすごく参考になりました!!

  • Seleniumはうまく使えば超強力

私、基本的にSeleniumはキャプチャリプレイツールで作成してるのですが、
それだとどうしても使いにくい部分があったり、変更にかなり脆かったりで悩んでいました。
あと、やっぱり一目見たときにどういう意図でテストを書いているのかがわかりにくい。
それが、Cucumberのシナリオとマッピングされることで、綺麗に解決されることがわかって目からうろこでした。
あと、たとえばログイン処理とかの共通処理の使い回しもこっちの方が楽ですよね。

というわけで、これはぜひ会社に導入しなくちゃ、と思ってもろもろ準備を始めています。

  • サインもいただいた!

私、ミーハーなことに、会社用と自分用の2冊にいただいてしましました。
ありがたや。


懇親会

振り返り込みで行われました。

私個人の振り返りとしては、重複になってしまいますが、

  • P:実践タイム疲れたー
  • T:ユースケース駆動ぜひ実践したいけど方法がわからないので勉強する
  • T:Cucumber + Seleniumは実践する!

というあたりでしょうか。

@irofの部屋

懇親会後半は、@irofさんオンステージ!
次々浴びせられる質問にドキドキしながら答えます。

とりあえず、これの復習しとかなきゃ、と思いました。

日科技連出版社
発売日:2010-10

あと、やっぱりインプットを大量にすることは大事だな。と。
それを活かせないと意味がない、という考え方はその通りだけど、まずちゃんと引き出しと材料をそろえないとな、と思いました。

あと、@irofさんが、締めLTとして、TABOKについてをしてくれました。
紹介していただいたサイトを巡回し、メーリングリストを発見。
参加申し込みさせていただきました。(ホントは勉強会直後にしたつもりだったのだけど、できてなかったので再度申し込み。ブログが後手後手になったけがの功名。。。)

楽しかった

というわけで今回は、体験して楽しい、実入りも大きい、知識が増えて、今後につながり、渡辺さんや@irofさんにも会えて、という大満足の会でした。

というわけで、渡辺さん、いろふさん、@shinyaa31さん、ありがとうございました!!