2013年7月20日土曜日

『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) #junitbook
http://connpass.com/event/2590/

2013/07/06 『JUnit実践入門』写経・実践会 in 横浜 #8 (最終回) #junitbook
http://togetter.com/li/529598

はじめに

今回は最終回ということで、書籍全体を通してのディスカッションとTDD/ペアプロ実践が内容でした。

最終回

ディスカッションでは、会社で行なっている新人研修でこの書籍を用いてやっているので、その内容についてと個人的な見解を話すことが出来ました。
主な内容については、Javaの研修が終わった新人に対してこの書籍を利用して、JUnitを利用してどうやってユニットテストを書いていけばよいのかを話しました。
この書籍にはサンプルが公開レポジトリに掲載されていますので、これを解答として行き着く手順をこの会で得られた経験も併せて説明しました。
実際にコードを書いてもらってmavenで動かしてみて確認しながら進めて行き方は、評判も良かったように感じました。

最終回ということで、これまでの参加レポートを列挙してみます。


#1には@kyon_mmさんが、#3には@t_wadaさんが、#6には@irofさん、著者の@shuji_w6eさんがゲストとして参加してくださいました。

個人的に印象に残った回を挙げるとすれば、やはり#6の特別編を挙げたいと思います。
cucumberとseleniumを組み合わせることで、ここまで振る舞いをテストが出来るんだよというのが実際に手を動かすことで実感できました。
そのおかげでGebを用いてSpockで似たようなことが出来るようになりました。

おわりに

今回で、この写経・実践会も終わりとなりました。
この本が出た後の半年で自分自身多くのことを学ぶ事ができました。
それもこれもこの会があったおかげだと思います。
書籍は積読では何も身につかないので、こういった会に参加することで他の方が実践している経験や知見を学ぶことが出来る事を実感出来ました。
他にもまだ読んでいない本があるので読書会が開催されていたら、積極的に参加してみたいと思います。



主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。

2013年7月3日水曜日

Javaで実践するリーダブルコード ぷらす に参加してきました #readablecode

Javaで実践するリーダブルコード ぷらす
http://atnd.org/event/E0016341/0

はじめに

アジャイルサムライ横浜道場でお世話になっている@terahide27さんが主催されるということで、なにかお手伝いできることはないかと考え、スタッフとして参加しようと思いお願いしてみたところ承諾を得ることが出来ました。

リーダブルコード自体は購入直後に読んでおり、出来る限りプロジェクトに反映できるよう努力していました。



当日は、多くの人に集まってもらえたのはとてもありがたいと思うのと同時に、出来る限り良い経験をしてもらえるようにしたいと思いました。

ハンズオン

今回のハンズオンでは、ペア毎にお題を含めどのように進めていくのかなどを決めてもらいました。
全てのペアが提案されたボーリングのお題をやっていましたが、リファクタリングを重視しダメなコードから始めたり、初めからTDDで行なっていたりと進めて行き方はバラバラでした。


印象に残ったのは、手続き型でprimitiveな型しか使わないダメなコードから始めたペアは、どこもスペアの実装しようとした時点で破綻していた事でした。

最終的にコードレビューの時間でその違いがはっきりしてました。
途中からリファクタリングを始めたペアは、何とかして綺麗なコードにしようとしたが時間が足りず、修正に手一杯で名前を変える余裕が無かった様に感じました。
初めからリーダブルコードの内容を意識して書くことでリファクタリングやユニットテストのしやすいコードになっていくのではないかと思いました。

JUnitの使い方も経験によってばらつきが見られ、慣れていないとどのように書いたら良いのか分からなかったり、使い方そのものを知らなかったりと様々でした。
JUnit実践入門が出版されたおかげで始めるキッカケが出来たと思うので、これを機会に読みやすいコードにしていく為にもJUnitをどう使えばいいのか知ってもらえればいいなと思いました。

テストを全く書かなかったペアが最後になってテストを書いて実行してみたら、間違った結果を返したまま時間切れになったのを見かけ、やはり実装を確認しながら開発するのは大切なことだと感じました。

おわりに

TDDBC Tokyo 2013-07が開催される前にTAとして良い経験をさせて頂きました。
上手くお手伝いできたか不安ではありますが、参加者の皆様が今回の経験を活かして現場でも読みやすいコードを残していってもらえれば幸いです。

主催の@terahide27さん、スタッフの皆様、参加者の皆様、会場を提供して下さった株式会社アクシスウェア様、ありがとうございました。

2013年6月19日水曜日

SQLアンチパターン読書会 「キーレスエントリー」 に参加してきました #sqlap

SQLアンチパターン読書会 「キーレスエントリー」
http://sqlap.doorkeeper.jp/events/4356

はじめに

今回は、「キーレスエントリー」が対象でした。
これまで外部キーのないプロジェクトばかり参加しており「キーレスエントリー」のデメリットを丸々抱えていたので、どのようにしたら改善できるのかを知るきっかけになればいいなと思い、参加しました。



今回のアジェンダは@makopi23さんが発表してくださいました。
ありがとうございました。

ディスカッション

DSC_0327.jpg

外部キー制約を貼らない理由として上げられていた、テストデータについてはDB毎に実装されている機能を用いて制約を遅延することができます。

MySQLの場合

13.5.6.4. FOREIGN KEY 制約
http://dev.mysql.com/doc/refman/5.1/ja/innodb-foreign-key-constraints.html

PostgreSQLの場合

SET CONSTRAINTS
http://www.postgresql.jp/document/9.2/html/sql-set-constraints.html

既に外部キー制約が無い場合は、データクレンジングを行い、外部キー制約を貼るのが望ましいですが、コストとの兼ね合いがあるのでやるべきとは言えないというのが、現状ではないかと感じました。

外部キー制約を外すのは、ハイパフォーマンスを得るために已むを得ない場合や、シャーディングをする場合などで、単一のDBを扱うような場合は、初めから付けておくのが必須であるということでした。

DBのマイグレーションや、DDLの作成方法など、モデリングとDBの周辺のお話もいろいろと聞けて、勉強になりました。

おわりに

次回の「EAV(エンティティ・アトリビュート・バリュー)」では、アジェンダを担当することになりました。
「EAV」は、身近なアンチパターンでもあるので楽しみです。

主催の@natsu_nananaさん、参加者の皆様、会場を提供してくださった株式会社アルティネット様ありがとうございました。
次回もまたよろしくお願いします。

2013年6月12日水曜日

アジャイルサムライ読書会 横浜道場 「ユニットテスト:動くことがわかる」 に参加してきました #agilesamurai #横浜道場

アジャイルサムライ読書会 横浜道場 「ユニットテスト:動くことがわかる」
http://yokohama-dojo.doorkeeper.jp/events/3963

ユニットテスト

DSC_0326.jpg





静的解析ツールがOSSで出るようになったり、Jenkinsで実行できるようになったおかげで、どこに潜在的なバグが潜んでいるのかを継続的に見られるようになったと思います。

また、レビューの対象もプロダクトコードよりテストコードを重視することでテストケースの漏れ等を共有できる様になるということを知りました。
これもユニットテストが全てGreenであることが前提となっているからこそだと思います。

また、ユニットテストを自動実行出来る事によって、手動で行わなければならないテストにコストを費やすことが出来るので、自動化出来るテストは自動化するのが望ましいのではないかと思いました。

ユニットテストを積み上げていくことで、変更の影響範囲を可視化出来るので、今までのような不正確な見積もりよりマシな見積もりが出来ると思いました。

おわりに

参加者の皆さん、横浜道場のスタッフの方々、会場を提供してくださった株式会社アットウェア様、ありがとうございました。
次回もまた、よろしくお願いします。

2013年6月2日日曜日

『JUnit実践入門』写経・実践会 in 横浜 #7 に参加してきました #junitbook

『JUnit実践入門』写経・実践会 in 横浜 #7
http://connpass.com/event/2248/

2013/06/01 『JUnit実践入門』写経・実践会 in 横浜 #7 #junitbook
http://togetter.com/li/511975

はじめに

前回の写経・実践会のレポートはこちら→『JUnit実践入門』写経・実践会 in 横浜 #6 (特別編) に参加してきました #junitbook

今回は、「第14章 コードカバレッジ -テスト網羅率の測定-」、「第15章 継続的テスト -すばやいフィードバックを手に入れる -」が対象ということで、主にカバレッジの負の側面とそれに対してどうしたら良いのかのディスカッションと、githubのようなレポジトリとtravis-ciのようなサービスと連携するハンズオンをやりました。

カバレッジについて

「カバレッジ100%」という呪いは、もしかしたら、開発側より品質管理やマネジメント層の方が、なまじダイレクトな数字が見えてしまうが故に重症なのではないかと思います。他の指標と組み合わせて、現在の状況を判断する材料なのに、「100% = 正義」という目的と手段が摩り替わってしまっているプロジェクトは残念としか言えません。
カバレッジの元になっているテスト自体が間違っていたり、アサーションフリーの様に目的としているアサーションがなかったり、そもそも顧客が欲しいものが出来ていない時点で例えカバレッジ100%だったとしても、なんの意味もありません。
そういった内容が14.4に書かれていたので、このJUnit実践入門を他の人に勧めるのには、この第14章はいい材料になると思います。

travis-ci & Drone.io

@sue445さんによるGithubにあるリポジトリをTravis CI連携する手順 #junitbookのハンズオンを聞いた後、以前#tokyomercurialで教えていただいたdrone.ioを紹介しました。

drone.ioは、github以外にbitbucketが使えますし、設定も
Quickstartの手順に沿って設定するだけで使えるようになります。
特にdrone.ioは、mercurialで連携できるサービスとして数少ない一つなので、ありがたいと思います。

おわりに

残りの章もだいぶ少なくなりました。
最後までやりきりたいと思います。

主催の@shinyaa31さん、参加者の皆さん、会場の横浜タネマキさん、ありがとうございました。
次回もよろしくお願いします。