somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【TDD】TDDBC Tokyo 2013-03に参加しました【勉強会】

TDD Boot Camp(Tokyo 2013-03)php(PHPUnit)で参加してきました。主催者・TA、会場の株式会社VOYAGE GROUP 8F 社内バー AJITOに感謝です。

勉強会

行きたい行きたいと1年くらい思ってからの勉強会でした。勉強会の温度はtwitterや発表資料などで感じでいましたが、参加してみて目の前にいる人がその人の声で聞くと、勉強に対するモチベーションはだいぶ高くなりました。

ポジションペーパー

受付をすませた後にポジションペーパーのテンプレートをもらいました。以下のような項目を埋めました。

名前
k_somemo
ペアプログラミング経験
なし
TDD経験
あり
言語
php
テスティングフレームワーク
PHPUnit
エディタ・IDE
Eclipse
キーボード配列
日本語

ペアプロデモ

@yattomさんと@grimroseさんによるFizzBuzzペアプロが行なわれました。TDDのデモというよりは、ペアプログラミングのデモでした。以下、印象的であったことです。

  • 挨拶
  • 戻り値の型について話し合う
  • 自分の思っていることを言いながらコーディング
  • それに対応してドライバーも意見を言う
  • 慎重に進めるときと、後回しにするときがある

挨拶重要ですよね。まずはここから。型についてはJavaだったというのもあると思います。phpであれば、型をきにせず与えた数字をそのまま返していたと思います。また、引数だけでなく自然数以外が与えられたときの例外の型はどれがいいかを話していました。

思っていることを言いながらのコーディングは、ペアの人の設計は何を基準にしているかを知るために色々話してみることがいいと思いました。それを聞いて仮実装にするのか明白な実装にするのか、TODOを細かくして追加するのかなどの判断にもつながります。

TDDペアプロ準備

@chiseiさんとペアを組むことになりました。まず、ポジションペーパーを使い、お互いの環境について話しました。

  • お互いにPHPUnitを触ったことがあり、TDDについては問題ないことを確認
  • お互いにmac(ただし自分13、相手11インチ)
  • phpのバージョンは5.3系で同じ
  • 相手Vim+Stagehand_TestRunner
  • 自分はMakeGood環境を整えられなかったのでIDE+ターミナルから手動…(お互いに継続的テスティングに関心があって感動!)
  • 相手USキーボード配列のため、自分のPCを使うことに決定

自分たちはすんなりいきましたが、他にもOSが違う場合や、キーバインドの違い、人数が奇数になって余ってしまう人がいた場合にTAと組むのか、3人でプログラミングをするかなど課題があるなと感じました。

実践

お題は「LTSV」です。あとでぐぐったら【今北産業】3分で分かるLTSV業界のまとめ【LTSV】という記事を見つけました。はてな発祥らしいです。実装のために以下のようなことを進めました。

  • TODO作成(マインドマップツール:XMind を使っていました)
  • get/set/dumpの順にテストと実装
  • とりあえず正常系から
  • 異常系は後で

進めていくうちに知らないassertを教えてもらいました。また、同じテストを書くことになりそうだったので、dataProvider(他の言語で言うparameterized test)を使ってみたり、そのテストが通らなかったときに結果をTAP形式にして一覧性を高めたりもしました。

ペアでなかったらはまりそうっだったtypoや、知らない知識が増えたり、相手に教えることで自分の知識がより深まったりと、とてもいい経験ができました。一応、gitにコミットしたのですがTDDに集中していたので適当になっています。(https://github.com/ksomemo/tddbc_20130316)こうしたほうがいいという指摘があれば是非教えてください!

全体レビュー

各言語の代表ペアがみんなの前で発表をして最後になりました。以下、発表のあった言語です。

以下、印象に残ったこと。

また、Java8にはLinqみたいなものが出るなどの情報や、いろんな実装とテストの実装、テストフレームワークがあって楽しい一日でした。

懇親会

懇親会にも参加しました。食事はアルコールとピザでした。なんと、アルコールはVOYAGEさん提供…。AJITOすごい。

食事をしながらの会話がある程度進んだところで、野良LTになりました。ほぼTA無双でした。このLTで特に印象に残ったことは「ScalaのsbtとSpecs2と実装コード」です。

Scalaペアでは、sbtというビルドツールを使ってTDDをしていたようです。ビルドツールなので、前述したphpの2つとは違いますが、継続的テスティングが各言語に普及していて感動しました。

また、Specs2というテスティングフレームワークではTODOリストをScalaで書くことができ、それをhtmlとして出力できるようです。しかも、そのTODOがテストの結果Green/Redの状態であるかまで分かります…。すごい。

最後に、Scalaの実装コードが10行程度ですんでいることにびっくりしました。型に対する指摘や、valではなくvarを使っていたことなど実際にはこう使われるのかといったところまで見れてとても刺激になりました。

帰り

懇親会も終わり、最後にグリーンバンドを購入しました。今後、TDDを続けていけたらと思います。