ようやくファンクショナルテスト - by makotoi
ようやくファンクショナルテスト
今日も昨日に続きうだるような暑さでしたが、お昼から共同開発者のAbdelとペアプログラミングしました。彼の家はロンドンの町のど真ん中にあるのですが、やはり私の家と同様エアコンがありません(っていうかロンドンでエアコン装備の家って聞いたことありません、地下鉄さえないですから)そこで近所の冷房がギンギンに冷えたスタバで6時間近く粘っていました(電源プラグがあったので、2時間しかバッテリーのもたない私のラップトップは大変助かりました。でも冷えすぎておなか壊しました)。 まわりのパブでは冷えたビールをパイントグラスであおりながら、日光浴にいそしんでいる人たちを横目に「なんでこんな真昼間からプログラミングなんかしなくちゃいけないの?」と思いつつ、この前やり残したテストに取り掛かりました。
私達は今までウェッブ上の情報を収集するためのテストを作り続けていました。データーベースを活用する作業だったらRailsのフレームワークでスムーズにことが進むのですが、海千山千のネットの世界ではバリエーションが多く、「簡単かな」と思えた部分でもやってみると意外と奥が深く、次々とテストの分量が増えていきます。
通常Railsを使うと、サクサクっと開発が進むはずなのですが、まだ1つもコントローラーやビューができていない状況では、目に見える部分がなく、もどかしい日々が続いています。
「まだ1つもコントローラー作っていない」といましたが、それはペアプログラミングをしているときの話で、自分で別につくっている試作品の中では着々と進んでいます。ただ私のコードそのままだと汚すぎて使い物にならない(あるいはデバッグが大変)ため、Abdelと一緒に「まずFailさせて、Passした後から見やすくなるまでRefactoring」というXP開発手法をかたくなに守りながら続けています。 これをすることでコードは格段にきれいになるし、後々のメンテナンスも楽になるのはわかっているのですが、なかなかつらいです。これを貫き通すことにXPが「エキストリーム」と呼ばれる所以なのでしょう。
今日もようやくモデルのテストが終わったときに「そういえばこのプログラムで処理できない場合に備えてのエラーハンドリングまだ書いていなかったね」とAbdelが言い出し追加することに。Rubyでのエラーハンドリングの方法を本で調べることから始めて、2時間くらいかけてようやく簡単なエラー処理を書きました。
これも当初予定していなかった作業だったので、どんどん時間がすぎていくのを横目にしながら「ちょっとぐらい飛ばしながらやろうよ〜」と恨めしい気持ちになりました。
本当は今日の6時間はまるごとコントローラーの作成に宛てる予定だったのですが、モデルの追加ユニットテストを始めたのは残り一時間をきってからでした。
ここでもまず「コントローラーのテストってどうやってやるんだろう」と「RailsによるアジャイルWebアプリケーション開発」の本を読みながら作り始めます。モデルをテストするときはほとんどassert_equalだけだったのですが、コントロールをテストするときはRailsはRails特有の機能をサポートするためのテストがたくさんあり、理解するのも大変です。
ようやく最後の最後に「インプット画面に何も入力されないままサブミットされたらエラーメッセージ、それ以外の場合は次メソッドを読み出す」という極めて簡単なテストをつくり成功。一応ViewもFormHelperを使いながら簡単な画面をブラウザ上に出すことができました。
一番最初のゲームプランニングでは12の機能を書き出しましたが、たぶんコンテストまで間に合うのは2つの機能だけになりそうです。残念。