TDD Boot Camp 長岡 1.0でTAやってきました #tddbc

タイトルの通り、5/18(土)に開催されたTDD Boot Camp 長岡 1.0に参加してきました。

Keynote

前回のTDDBCにも参加して @t_wada さんの話は聞かせていただいていたので、いくつか要点だけ。

リファクタリングに意思の力が必要

  • リファクタリングは根性だけで何とかなるものではない。
  • 動作する/しないというサイクルを繰り返すたびにフィードバックを得ることができるので、これは貴重な学びの機会である。ただし、それを継続的に行うためにコードが健全である必要があり、リファクタリングなしではいつかフィードバックサイクルが鈍る。

不安をテストに

  • 「どれくらいテストを書けばいいですか?」という質問に対するTDD的な答え。
  • 義務感によってテストを書く必要は(少なくともTDDという文脈の中では)ない。

TDDは健康のため

  • 要求変更に耐え得る健全なコード。
  • 要求変更に耐え得る健全なチーム。
  • 「僕がTDDは健康のためとか言うと皮肉だと言われる*1んですけど、レッドブルを飲みながらやるのがTDDだと思われたくないんですよ!」

お題: Javaの奇妙なバージョン

最近話題のJavaのバージョン番号問題が今回のお題でした。 http://news.mynavi.jp/news/2013/05/17/044/

お題1: validかどうか調べる

Version.isValid("JDK7u40")
    #=> true

Version.isValid("hoge")
    #=> false

Version.isValid("JDK7u9x")
    #=> false

お題2: parseしよう

v = Version.parse("JDK7u40")
    #=> JDK7u40を示すオブジェクトを返す

v.familyNumber #=> 7
v.updateNumber #=> 40

Version.parse("JDK7u9x") #=> 例外

お題3: 大小比較しよう

u40 = Version.parse("JDK7u40")
u51 = Version.parse("JDK7u51")
jdk8u0 = Version.parse("JDK8u0")

u40.lt(u51)      #=> true
u40.gt(u51)      #=> false
u40.lt(jdk8u0)   #=> true
jdk8u0.gt(u51)   #=> true
#↑言語に応じて演算子オーバーロード等はご自由に

お題4: 次の番号を計算しよう

u45 = Version.parse("JDK7u45")

u60 = u45.nextLimitedUpdate()
u60.updateNumber #=> 60

u51 = u45.nextCriticalPatchUpdate()
u51.updateNumber #=> 51

u46 = u45.nextSecurityAlert()
u46.updateNumber #=> 46
## next~メソッドはすべて、新たなバージョンを表すオブジェクトを返す
## (selfのバージョンを変えて返すのではない)

ペアによってどこまでできたかは結構バラツキがありましたけど、だいたいお題2かお題3くらいまでできたペアが多かったみたいです。

コードレビュー

ペアプロのあとは各言語から1ペアずつ発表してもらってコードレビューをしました。 時間が短かったのであまりじっくりとは見れなかったんですが本当に率直な感想だけ書くと

と言った感じでした。

クロージング

クロージングでは何で今回のお題を選んだかについて @t_wada さんより解説が。

  • 真偽値のみを返すステートレスな処理と新しいオブジェクトを生成するステートフルな処理でロジックが重複してしまう。これにどう立ち向かうか考えて欲しかった。
    • isValidは状態を持たない。
    • prarseという内部状態を変える。
  • Javaのバージョンを表すオブジェクトはValueObjectであるということに気づいて欲しい。
    • 生成後に内部状態は変更されない。
    • 問い合わせに対しては状態を変えるのではなく、新しいオブジェクトを生成して返す。

なるほどなーという感じです。

はじめてのTAをした感想

今回僕ははじめてTAとして参加させてもらったのですが、いろいろ僕にとっても学びの機会がありました。

  • 担当したペアがPHPC言語だったのですが、C言語に関してははるか昔に学校の授業でやったくらいで業務使用経験ないですし、TDD経験など皆無でしたので不安でしたが何とかなって安堵しました。xUnitは共通語。
  • TDDBCはプログラミング言語の知識を持って帰ってもらう場ではなくTDDとペアプロを経験してもらうための場なので、実装の詳細(例えばある言語で正規表現ってどう書くの?とか)に悩む必要はないですよ。
    • TAとしてそのあたりはもっとガツガツいってもよかったかも。
  • 「不安をテストに」ということをもっと上手く伝えることはできたかも知れない。
  • ペアプロの魅力は伝わったかな。伝わってるといいな。

次回の福岡にもTAとして参加する予定なので今回の経験を活かしていきたいと思います。

最後に

お名前を失念してしまったのですが、懇親会の席で参加者*2が「今までの中で一番プログラミングを楽しいと感じました」と言っていたのですが、この言葉は決して忘れません。本当に嬉しいです。 僕はTA初経験でしたが、次回以降もぜひやらせてもらおうと思いました。ありがとうございます。*3

*1:よく体調を崩しているらしい…

*2:確かJavaペアとして発表した人

*3:初TAの僕でさえ嬉しかったので、他の方やt_wadaさんは本当に感無量だと思います…