TDDBC名古屋参加報告

id:a-hisameと同じくBlogを更新するのは久々だったりするわけですが。
7月10日、11日に開催されたTDD Boot Camp 名古屋に参加してきました。
主催のid:bleis-tiftid:t-wadaさん、そしてスタッフの名古屋アジャイルスタッフの皆様、本当にありがとうございました。


以下、あったこと・やったことなどをつらつらと。

1日目

出発

前日に全く準備をしていなかったため朝から準備をする。
6人いたTUT参加組の中で、1人寂しく名鉄で金山へ。(´・ω・`)*1
約1時間後、若干迷いながらも到着。
私のようなヘタレプログラマがいていいのかとgkbrしながら受付を済ませ、席に座る。

午前・TDDについて

TDD自体は、以前に名古屋アジャイル勉強会で経験済みだったため、ある程度基本的なことは知っていたものの、改めて話を聞いて新たな発見や気付かされることが多くありました。
特に興味深かったことは(多いけど)以下のポイント。

  • 複数を相手にせず、1つずつ少しずつ、各サイクルをすばやく回す
  • 自分が最初のユーザである 自分が最初に使う そのコードを最初に『利用』する
  • 祈るのではダメ 安心して飛び込む(飛び込んでいく)
  • TDDはテスト技法ではなく設計技法、目的ではなく手段
  • TDDの最大の理由は心理的なものであり、即座にフィードバックを得ると共に、書いたコード及びこれから書くコードに自身をもつために行う
  • TDDの真の目的は健康
  • 仮実装(Fake it)はテストのテスト
  • 間合いを測ることが大事
  • Lesson 5「一番の近道は遠回りだった」 (荒木飛呂彦スティール・ボール・ラン」より)

以前からおっしゃられていた「黄金の回転(TDDでのRed→Green→Refactoring)」の意味もより掴めた気がします。
どうでもいいですが、この時の「きれいなコードしてるだろ・・・。動かないんだぜ、これ。」という台詞が妙にツボにはまりました。
その他、細かい話の内容をメモした範囲で書こうかとも思いましたが、id:rf0444エントリに細かいメモ、およびid:t-wadaさんのエントリにも当日のスライドがアップされているため、割愛します。

午後・実践

座学が終わり昼食後、TDD実践。言語はJava
まず隣に座っていた@you_akasiroとペアを組む。
・・・と言っても、まずお題のプログラムのクラス仕様を相談しすぎたため、この時手を動かす作業はあまり進まなかったわけですが(^^;
そして各テーブルで各ペアごとに書いたコードのレビューを行った後、お題の仕様変更が発表されペア交代。次のお相手はid:meganiiさん。
先程出来なかった部分をササッと完成させ、テストコードを書きながら実装を進める。
以前の名古屋アジャイル勉強会の時にも感じたことですが、複数人で1つの画面を眺めてプログラミングをしていると、1人でプログラミングをしている間には気がつかないポイント(軽い記述ミスなど)にも気がつくことができるので、プログラミングをしていて楽しかったです。
ただ、Mock等の知識がなかったため、一部テストコードが書けず少し悔しい思いもしましたが。
この後のコードレビューも、他の方達の凝ったコードを見ると同じJavaでプログラムを書いたとは思えなかったぐらいでした。
すごいなぁと思いながら、まだまだ実力が足りてなさすぎだ、と感じました。*2

懇親会

人見知りな性格のため、あまり見知った方としか話が出来ませんでしたが、主にid:bleis-tiftXperia及びiPhoneについての話と、@you_akasiroとゲーム(主にシューティング)の話をしていた気がします。

懇親会後

ホテルに荷物を置きコンビニで梅酒を買った後、@you_akasiroプログラミング言語に関する話と、途中からid:Nagiseさん*3SIerプログラマーにまつわる話をしていました。
その後、他の部屋にプログラマーが集まっているという話が来て、2人はそちらへ。
私はというと、お酒の飲み過ぎと疲労でベッドの上でそのままダウンしてました。
夜の議論に参加出来なかったのは少し残念・・・。

2日目

朝ごはん

味噌汁は根っからの赤味噌派なので、美味しい赤味噌汁が朝ごはんに出てくると幸せな気分になります。

午前・レガシーコード改善について

テストやリファクタリングの重要性や、レガシーコード(テストがないコード)とどう戦うかについての解説が主題でした。
この日の興味深かったポイントは以下。

  • ピラミッドにはパワーがあるが、現実には厳しい→その現実と戦え!
  • コードだけでなく、データとも戦う
  • テストのメンテナンスとかテストのリファクタリングが必要
  • レガシーコードの中にテストできる地点を探し、テストを作る
    • 継ぎ目に注目する
    • 何が正しいかvsどう動いているか これらを切り分けて考える
    • 仕様化テスト(仕様はないけど、今動いている結果から写し取っていく)
    • コンパイラを味方につける
    • カプセル化よりテストの方が大事
  • 細かくテストしてコミットする感じだと、どこまでテストが成功しているかがわかりやすい
昼ごはん

炭水化物大杉。*4

午後・レガシーコード改善

午後は複数人に分かれ、レガシーコード改善実践。
Java組は人数が多かったため、2組に分かれ、5分交代でペアプログラミングを行う内容。
私たちのチームは6人。
レガシーコードはid:Akinekoさん提供の、Twitter APIを利用したプログラム。
ペアプログラミングといえど、もうすでに出来ているコードにテストを追加していくということは初めてのことだったのでしどろもどろしてしまったのですが、id:katzchangさんの手助けもあり、ある程度チームに貢献できたように思います。
結果的に、チームでいい線までコードを改善することが出来、レガシーコードを改善していくというプロセスをはっきりと実感できました。
また、他のチームの成果発表もありましたが、Scalaのチームが一番盛り上がっていました。
これが名古屋Scalaの力か・・・。
その後、1日目と同じくKPTを行い、2日間の全日程終了。

帰宅・晩ごはん

同じ豊橋組といえど、行きのルートが違えば帰りのルートも違うため、1人で名鉄に乗る。(´・ω・`)
その後駅で寄り道した後帰宅し、家で飯食ってました。
あとで聞いた話ですが、他の5人は少し後の電車に乗り、駅到着後に5人で飯食っていたらしい。
合流できる可能性あったのか・・・。(´・ω・`)

最後に

この2日間、とてもいい経験になりました。
id:t-wadaさんの講演に始まり、ペアプログラミングでのTDDやレガシーコードの改善などにおいて、新たな経験や発見を多く見つけることが出来ました。
本当にありがとうございました!

感想などなど

  • もっとコード書かなきゃなぁ。
  • 人見知り&体力が尽きて積極的に議論に参加できなかったのはちょっと残念。
  • TDDについて本を買うなどして今回以上にちゃんと勉強しよう。
  • そのうちレガシーコード改善ガイドも買わねば。
  • id:a-hisameを起こすときにはコツが必要だったりそうでもなかったりします(よく起こしてる人談)。*5
  • みんなもスティール・ボール・ランを読もう!むしろ読め!

*1:私以外のメンバーが、先に合流してJRで会場へ向かっていたことを全く知らなかった・・・。

*2:この日のKPTにも書きましたが。

*3:ホテルの部屋が同室でした。

*4:うどん、そば、ご飯。これだけで昼ごはん全体の6, 7割ほど。

*5:http://twitter.com/akineko/status/18230330483