身内で楽しくペアプロTDDする会をやってみた
はじめに
おばんです、学生時代以来久々にやる、バスケットボールというスポーツで膝をやってしまった田中です。
仲間内10人ちょいでペアプロTDDを楽しむ会というのをやったので、振り返ります。 会の趣旨は以下の通り。
内容
- t_wadaさんの講演動画をみんなで見て、田中が情報を補足
- FizzBuzz問題をペアプロTDDでやってみる
参加したグループの言語はSwift, JavaScript, TypeScript, Goなど。
特に盛り上がったのは言語ごとの書き方の違いと、テスト環境の違いなど。最終結果をいくつかのグループが前で発表する形式をとりました。
VSCodeのLive Sharing機能が便利そうだったし、Goのコンパイル速度が速すぎて自分の組みのSwift/Xcode環境が言い訳できなかったのが面白かった。
ソースコード
Swift組のコードはこちら。
ペアプロTDDを楽しむ会 in DarkでやったFizzBuzzのお題。 · GitHub
こだわりのポイント
最初はIntの入力値をもとに、FizzBuzz判定の結果をStringで返す実装をしようとしていたが、「Stringで欲しいかどうかというのはPresentation層の話ではないか」「FizzBuzzの本質に迫るならば、Stringではなく別の型で範囲を絞った方が良いのではないか」という、ペアプロならではの着眼点と相談から、enumでFizzBuzzの結果を判定したところ。
enum FizzBuzzResult: Equatable { case number(Int) case fizz case buzz case fizzBuzz static func ==(lhs: FizzBuzzResult, rhs: FizzBuzzResult) -> Bool { switch (lhs, rhs) { case (.fizz, .fizz), (.buzz, .buzz), (.fizzBuzz, .fizzBuzz): return true case (.number(let lhsValue), .number(let rhsValue)) where lhsValue == rhsValue: return true default: return false } } }
func judge() -> FizzBuzzResult { if number % 3 == 0 && number % 5 == 0 { return .fizzBuzz } if number % 3 == 0 { return .fizz } if number % 5 == 0 { return .buzz } return .number(number) }
FizzBuzzにおいて設計的観点がここまで入りこむのは初めてでアツかった。TDDならではの見直しができて、ペアプロの力を実感できたのでとても有意義だった。