TDD Boot Camp 札幌 2.0 開催しました
というわけで、昨日は運用編だったので、こちらは通常のレポートになります。
なにはともあれ、今年の1月から半年もたっていないのに2回目の来札になった*1 id:t-wadaさんありがとうございます!やはりTDD Boot Campにはt-wadaさんは不可欠だな、と思いました。
1日目ー午前(1)
1日目の午前では、最初に自分の方からオープニングセッションと言うことで、ソフトウェア開発における単体テストはどんな定義をされているのかという点から、テスト駆動開発をはじめるワケについて簡単に話しました。また、今回のお題であるレガシーコードについて、簡単にポイントを説明しています。講演資料はSlide Shareにアップしていますので、ご覧ください。
1日目ー午前(2)
続いて、各言語でサポートを担当していただいたスタッフによる自己紹介的LTです。Javaは [twitter:@irasally]さん、Rubyは[twitter:@niku_name]さん、Pythonは[twitter:@giginet]さんと[twitter:@nakayoshix] さん、Smalltalkで [twitter:@sumim]さん、C++で[twitter:@h_hiro_]さんにお願いしました。それぞれ特色のあるLTで面白かったですが、今回は最年少の @giginetさんに全てを持って行かれた感がありますwまた、@sumimさんが自己紹介をすると思いきや、Smalltalkの紹介(インストールと実行)という荒技を行っていました。
1日目ー午前(3)
と、オープニングが終わっていよいよ [twitter:@t_wada]さんの基調講演です。安定の基調講演で自分もTDDで聞くのは3−4回目になっていた為、裏でチーム編成に忙しかった時間帯だったりします。この辺りは他の人のレポートにお任せです。ただ、自分の足りない部分は色々と気付かせて頂きました。TDDなどについて、実装レベルであったり実践レベルでのWhyはなんとか言語化して人に説明したりすることは出来るものの、いわゆるTDD論みたいな総論的な部分ではまだまだWhyが言語化出来ない場合があります。この辺りは経験と学習がもっと必要だなーと感じました。
最後に今回は、 [twitter:@irasally]さんと[twitter:@niku_name]さんの2人を中心にTDD/乱取り形式プログラミングのデモを行いました。お題としては、オライリージャパン様よりいただいた本を参加者に抽選するプログラムの作成です。予め参加者リストと抽選対象のほんのリストを用意しておき、それをランダムに割り当てるのですが、予め打ち合わせをしないでやったため、かなりグダグダになってしまいました。後から反省で[twitter:@t_wada]さんも「あれはやっぱり自分でやるべきだったなー、ポイントを話す所とかもあるし」と話されていました。ここはチャレンジして失敗してしまった感じです。尚、午後の演習の合間に自分の方で解いてあったのを説明しながら、抽選を行いました。
1日目ー午後
午後は乱取り形式でのTDD演習です。今回、参加者は43名で、Javaが5チーム(!)、RubyとPythonが2チーム、SmalltalkとC++が1チームの合計11チームとなりました。今回の特徴はなにはともあれPythonです。Pythonおじさんこと[twitter:@nakayoshix]さんと最年少の[twitter:@giginet]さんの年の差は親子でも全くおかしくありません。2チーム作れるほどPython人気があったのも興味深かったです。Smalltalkは札幌名物になりつつありますが、今回も[twitter:@sumim]さんの無双状態でした。あの島だけ「Smalltalk勉強会ーTDD編」だった気がします。Rubyは意外に少なかったのですが、これはRuby使いの人達がまとめてSmalltalkにいってしまったからでしょう。C++はもう少し希望者多いかなと思いましたが、思ったよりはすくなかった印象です。
お題はレガシーコード改善ということで、ファイルI/Oと固定長バイナリデータを扱うちょっと面倒なプログラムです。このプログラムを「1.レガシーコード改善として、仕様化テストを行い、改善していく」か「2.仕様はそのままでゼロからTDDで構築し直す」かのどちらかをチームで選択して進めます。プログラムには幾つかのトラップ(バグ)も仕込んでおり、テストではまっている所をみては「計画通り(にやり」としていましたw
最後に振り返りを兼ねて発表を行いましたが、苦戦しているところもあれば結構簡単にいっている所もあったりという感じです。サポートスタッフがいて、元のJavaのコードを移植して苦労した経験があったチームは仕様化テストまで終わっていたような気がします。やはり予習は重要ですね。お題の難易度としては、みなさん「難しい」との反応でした。うーん、もっと簡単でトラップ仕掛けやすいお題を考える必要がありますね・・・。
1日目ー夜
夜は懇親会です。懇親会の参加者は28名で、こちらは完全に [twitter:@ayumin]さんの無双状態だったと思います。まさかアンダースコアの方のW氏のあんな姿を見られるとは思いませんでした(笑)。今回使ったのは、東札幌の流行屋というお店です。やや高めな値段設定ですが、非常に料理が美味しく、皆さん満足していたようで幸いです。
2日目ー午前
今回のTDD Boot Campでは2日目をやる予定はなかったのですが、趣向を変えてやってみることになりました。というのも1日目で結構疲れがピークに達していて、同じようにチームでガツガツやるには結構厳しいのです(体力的に)。そこでまったりゆるい雰囲気で1日目の反省や続きをやろうという流れを作ってみました。結果、参加者は17名くらいで、だいたい4割くらいの人の参加になっています。
で、内容としては完全にフリータイムなので勝手に色々やっていたわけですが、Smalltalkのペアプロがはじまったり、色々と[twitter:@t_wada]さんに相談をしたり、三本柱であるバージョン管理と自動化にチャレンジしたりと人数が少ない分、じっくりと腰を据えてやれた感じがあります。ぶっちゃけ、かなり贅沢な勉強会だと思いました。こういうハッカソン的な勉強会もテーマを決めてやるのはありですね。ちなみにJavaチームの成果物はこちら、Jenkinsはこちら。
ただし、1つだけ考慮が足りなかったのは開始時間です。9時半には会場を開けましたが、午前中に来たのは4名くらいで、お昼ご飯を境にぞろぞろと・・・。1日目に疲れているわけで、朝に起きられるかを考慮していませんでした。これは次回同じパターンとしたら少し考慮した方が良さそうです。
最後に
今回は4回目ということで、色々とチャレンジも多かったTDD Boot Campですが、なにはともあれ楽しくTDDを広めることができたと思います。色々とTwitterなどで感想もいただいていますが、この発言が一番嬉しかったです。
参加レポート
参加者のレポートやBlogを見つけたらまとめていきます。
- togetterのまとめ
- TDD Boot Camp 札幌 2.0 に登壇させていただきました - t-wadaの日記([twitter:@t_wada])
- TDDBC札幌2.0に参加しました - 寺子屋未満([twitter:@irasally])
- TDDBC札幌2.0-SP1に参加しました - 寺子屋未満([twitter:@irasally])
- _ TDDBC@Sapporo02 に行った - ヽ(´・肉・`)ノログ([twitter:@niku_name])
- TDD BootCamp 札幌 2.0に参加してきた - 5.1さらうどん([twitter:@giginet])
- TDDBC2.0にいってきたので覚え書きなど(午前) - nemomemo([twitter:@EnnuiR])
- TDDBC2.0にいってきたので覚え書きなど(午後/2日目) - nemomemo([twitter:@EnnuiR])
- TDDBC2.0に参加してきた - KodaNote([twitter:@volpe_hd28v])
- 重度のEmacsユーザーがTDDBC 札幌 2.0 に参加してSmalltalkに感動した- tmaeda 日記 ([twitter:@tmaeda])
- TDD Boot Camp 札幌 2.0に行ってきた - How to disappear completely([twitter:@hotwatermorning])
- TDD Bootcamp 2.0に参加しました - Maraigue風。([twitter:@h_hiro_])
- TDDBC 2.0 札幌に参加してきました!!-ひょうたん([twitter:@onjiro_mohyahya])
- TDDBC札幌2.0に参加しました(午前の部) - NsmchMnmの日記([twitter:@HssmMnm])
- TDDBC札幌2.0に参加しました(午後の部) - NsmchMnmの日記([twitter:@HssmMnm])
- TDDBC札幌2.0SP1に参加しました - NsmchMnmの日記([twitter:@HssmMnm])
- TDDBC札幌2.0に参加してきました - hachiNote([twitter:@hachiilcane])
- TDDBC 札幌2.0いってきた - みぃお・くりあゆの平凡日記([twitter:@ayako119])
見つけたら随時追加します。