TDDBC仙台に参加してきました

2011/7/2に開催されたTDDBC仙台に参加してきました。
非常に充実した内容でしたので簡単にまとめて見ます。

前日

TDD自体は10年ほど前から(当時はテストファースト開発)行っていますが、最近人のコードをレビューしてばかりでTDDどころかコードもあまり書けていない状態だったので、リハビリを兼ねて、id:t-wada さんが書かれた WEB+DB PRESS vol.63の特集1「現場で役立つ実践ノウハウWeb開発の「べし」「べからず」〜危険なコード,腐るテスト,不安定なインフラからの脱却〜」の第2章、 "テスト編 腐らないテストコードにするための「書き方」と「動かし方」" を再読かつ写経して翌日に備えました。

WEB+DB PRESS Vol.63

WEB+DB PRESS Vol.63

  • 作者: 竹迫良範,和田卓人,おにたま,中島聡,角田直行,はまちや2,上谷隆宏,青木俊介,大塚知洋,生尾剛士,大和田純,永安悟史,馬場俊彰,久保達彦,白土慧,じゅんいち☆かとう,太田昌吾,小野修司,ミック,嶋田裕二,個々一番,みやけん,清水亮,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/06/24
  • メディア: 大型本
  • 購入: 20人 クリック: 434回
  • この商品を含むブログ (22件) を見る

TDDBC

受付の際にTDD実習のチーム分けを言われ、私はJavaのBチームでした。全体のチーム構成としては、Javaが6チーム、その他に、RubyC#PHPScalaが1チームずつの合計10チームです。

はじめに

基調講演の前に、id:t-wada さんから今回のTDDBCの経緯についてお話があり、協力者をtwitterで募り地元の沢山の方が協力したいと手を上げて下さったお陰でイベントが成立しているというお話がありました。主催者の id:yuichi_katahira さんを始め、スタッフの皆様本当にありがとうございます。

基調講演

お楽しみの基調講演。id:t-wada さんは紹介するまでも無いですが、TDDについての情報を探す際にはいつもお世話になっております。「プログラマが知るべき97のこと」(通称:きのこ本)の監修をされています。もちろん私は読了ずみです。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

さて、基調講演については、中身で気になったところをピックアップしておきます。

  • テストを再分類

従来のテスト範囲による分類には曖昧さ・限界があるので、誰が何のために行うのかという観点で再分類。TDDは「Developer Testing」に分類され、開発者の開発者による開発者のためのテストである。

  • ソフトウェア開発の三本柱

「バージョン管理」「テスティング」「自動化」の3つ。「三種の神器」ではなく「三脚椅子」のメタファ。「三種の神器」は1つ欠けても大丈夫だが、「三脚椅子」は1つ欠けると倒れてしまう。

  • xUnit の登場

テスト方法が共有され、キャズムを超えた!

  • 動作するきれいなコードへ

完ぺき主義の呪い→私も心当たりがあります。「TDDと黄金の回転」。

  • TDDのこころ

1つずつ、すこしずつ。自分が最初のユーザ。不安をテストに。

  • TDDの真の目的

健康。変更に対応できるのは健康体のコード。変更に対応できるのは健康体のコード。

  • 事例

TDDの導入効果は、ざっくり言うと「工数2割増・欠陥5割減」。
→私の個人的な経験で言うと、欠陥は7〜8割減少という感覚です。

  • 応用

TDDの助けとなる本を3冊+1冊紹介して頂きました。

    • 既にテストの無いコードがたくさんある

レガシーコード改善ガイド→購入済み&読書中

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

    • 既にデータの入ったデータベースがある

データベースリファクタリング→ポチりました

データベース・リファクタリング

データベース・リファクタリング

  • 作者: スコット W アンブラー,ピラモド・サダラージ,梅澤真史,越智典子,小黒直樹
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/03/26
  • メディア: 単行本
  • 購入: 10人 クリック: 211回
  • この商品を含むブログ (53件) を見る

    • テストが脆い+遅い

XUnit Test Patterns (鈍器)→購入済み&未読

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))

xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))

    • さらにもう一冊

Growing Object-Oriented Software Guided By Tests→ポチりました

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

  • この先生「きのこ」るために

acts_as_professional。沢山本を読もう。写経しよう。

ペアプロデモ

id:t-wada さんと太田さんによるペアプログラミングのデモ。お題はFizzBuzzでした。TDDは他の人がやっているのを見ているだけでもワクワクしてきます。

TDD 実習(コーディング道場乱取り版)

我々JavaのBチームは3人構成でした。他のお二人にTDDの経験を伺ったところあまり経験が無いとのことで、形としては私がある程度リードする形で実習を進めることにしました。また、今回は純粋なペアプログラミングではなく、ペアを次々と入れ替えて行う乱取り形式で行われました。私のチームは5分毎にペアを入れ替えたのですが、ペアプロをやっていると5分は本当にあっという間です。

肝心ののお題ですが、「LRUキャッシュ」の実装でした。作成したコードについては別エントリにします。( http://d.hatena.ne.jp/i-takehiro/20110704/1309779205

2回にわけて各チームによる発表とコードレビューがあったのですが、我々は2回目に発表しました。一応私が発表者として作成したコードを説明し、最後に id:t-wada コメントを頂いたのですが、我々のチームのテストの粒度が良いとのコメントを頂けて嬉しかったのと同時に、今まで独学でやってきたTDDの方向性がそんなに間違ってはいなかったとという自信にもつながりました。

最後に id:t-wada さんが実装したJavaScript版のテストコードを見せて頂いたのですが、テストが文脈(コンテキスト)ベースに分類され、非常に洗練されたものでした。私自身TDDでテストコードを書くとつい多すぎるほどのテストを作成してしまい、あとでコントロールに困る場合があるのですが、文脈ベースで作成されたコードはその問題に対する1つの答えを見たようでした。

ふりかえり

「技術書を各チーム1冊ずつプレゼント」コーナーがありました。抽選の結果、我々Java Bチームにはきのこ本が当たったのですが、私は既に購入済みなので他のお二人に権利を譲りました。

その後、スタッフTシャツを先着1名にプレゼントして下さるとのことで勢いよく手を上げたところ、運良くゲット出来ました。DDD本の表紙の絵がプリントしてあるクールなTシャツです。ありがとうございました。

最後にKPTのコーナーということで、各自が付箋に記入して模造紙に張っていきました。私のKTPは以下の通りです。

  • Keep 細かい単位でテストする
  • Problem リファクタリングが十分に出来なかった
  • Try 文脈ベースのテスト

なお、参加した皆さんのKTPは、id:yuichi_katahira さんが TDDBC仙台01 KPT にまとめて下さっています。

懇親会

久しぶりに懇親会にも参加させて頂きました。
会社では技術について熱い話をしてくれる人が殆どいないので、このような機会は本当に貴重です。

きのこ本を持参していたので、ミーハー心で id:t-wada さんにサインをお願いしたところ快く書いて頂きました。ありがとうございます。

また、色々な方とお話している間に、「DDDの勉強会とかやりたいですよね」とつぶやいたりしたのですが、何人かの方から「言い出しっぺの法則」と言われ、さらに id:yuichi_katahira さんから、DDD本の翻訳をされた id:digitalsoul さんをご紹介頂き、勉強会をやるならお手伝いをして頂けるという嬉しいお言葉を頂きました。これはやるしかですね。

最後に

繰り返しになりますが、id:t-wada さん、id:yuichi_katahira さん、その他のスタッフの皆さん、すばらしいイベントを実施して頂きありがとうございました。
また、TDD実習で一緒になったお二人もありがとうございました。私のつたないサポートでお二人が少しでもTDDを好きになって貰えていたら本当に嬉しいです。