お使いのブラウザは最新版ではありません。最新のブラウザでご覧ください。

CNET Japan ブログ

レグレッション・テストに逆ギレ

2006/08/08 14:39
  • このエントリーをはてなブックマークに追加

どうも更新が滞りがちですが、いよいよ新サービスのリリース・カウントダウンが始まりました。寝ても覚めても開発とバグ取りにいそしむ中毒状態で、メールにさえろくに返事ができておらず、ゴメンなさい!いましばらくご辛抱下さい!

近況としては、IRS(米国税局)から「キミはちゃんと確定申告を期日までに行わなかったからペナルティじゃ」という、折り目正しくきちんと納税した人間に対してありえない通告があったので、先方が真っ先に小切手を振り出した記録をこれでもかと全部コピーして送りつけて、お前たちはドロボーかと詰問して謝罪をとりつけたり、相棒のダニーが唐突に投票権を持つ米国民の義務であるJury Duty(陪審員義務)に駆り出されて一週間まるまる留守になったり、歯医者に行ってチェックアップしてもらったら$800/月もの医療保険に加入しているにもかかわらず$4,000という高額な治療費の見積もりをもらって開いた口が塞がらないでいると日本人の係の人に「まだ日本で保険が残ってるのなら日本で治療したほうがいいですよ」と耳打ちされたり、相変わらずアメリカという国にビックリ驚きおののきつつ奮闘中です。

そんな日々ですが、またひとつ、過ちを重ねてしまいましたので、懺悔を兼ねて今回はそのお話。

最近、Ruby on Railsのテストフレームワークを使ってレグレッション・テストを行っているのですが、ぼくのローカルの開発環境+ブラウザでは動いていて、でもなぜかテストでは失敗してしまうというソースをコミットして帰ってしまいました。その日は朝8時から夜10時までぶっ通しでガリガリと書いていたので、テストのコードも読んだのだけど問題も見あたらず、それ以上追い込む気力もなく、まぁ動いているのだからいいだろうというわけで帰ってしまったのです。

すると、われらがアーキテクトのダニーが、「おめでとう。あなたはテストに失敗するようなソースをコミットしてしまった最初の人間です。その栄冠を次の人に渡せるよう、すみやかに修正してください。」という嫌みたっぷりなメールをよこしてきたのです。

そこでぶち切れですよ。「テストごときに失敗していようと、実際には動いているんだからいいじゃないか。現実のアプリのユーザエクスペリエンスに集中させてくれ。俺はマシンに食わせるためにコードを書いてるわけじゃない。」と、このあたりでやめておけばいいものを、「こんなテストならやめちまえ」みたいな話まで持っていってしまったのです。

テストフレームワークといっても、よく言われるように、開発者自身が思いつきで書くアサーションなんてのは所詮は八百長というか、ヒューマンリーダブルなコメント未満みたいなのばかりで、本質的にはテストっていうのは実運用を初めてから発見された「変な」ケースを追加したり(これはFlickrのCal Hendersonも言ってた)、開発者の裏をかくようなことを思いつく専門職の人間にやらせないと実効性はほとんどなくて、つまりテストに通るようにテスト自体を書き換えることもできちゃうような状況なのです。だから、まだリリースする前の現時点でのテストの効力については常々疑問があって、テストフレームワークそのものを学習するためだけに費やす時間も左脳的なテストケースを考えるために右脳を使う時間を減らすのもバカバカしい、かける時間にもテストコードの量にも価値が見合ってない、テストドリブンなんて欺瞞だ、Design by ContractなんてStatically Typed Languageのものだ、エンタープライジーだ、Overkillだ!!と、深夜のナチュラル・ハイをいいことに、メールでありったけぶちまけてしまったのです。

そして翌早朝、返信が。

「以下の手順を実際やってみろ。1.トップページに行く、2.ログイン、3.エラー。まさに今お前が全力で否定しようとしているテストのおかげで、バグの再現手順まで特定できた。」

そう、実際にそれはバグだったのです。なぜ、ぼくのブラウザ環境ではそのとき動いていたかは定かではありません。しかし、現時点でやってみると、たしかにエラーなのです。同じ頃に届いたデザイナーのクリスからのメールも猛反発。コテンパンですよ、ええ。大恥ですよ。

急いでバグを特定して、自宅でSVNにコミットしてから出社。スタックトレースを読めばすぐに気がつき修正できるバグでした。でも、前日には動いていたから疑わなかったわけです。ダニーに会って、「昨日は動いてたんだ、ブラウザでは。」「コードにもテストコードにもどちらも問題はなさそうだったし、実際ブラウザでは動いていたのだから、テストフレームワーク自体のバグか何かだろうとたかをくくって、それ以上追わなかった」などと色々と言い訳をして自己弁護してしまう自分。。。自分の弱さを感じながら。

で、色々と激論になったのですが、最後にダニーから一言。「過去のことは過去のことだ。同じ失敗を二度起こさなければそれでいい。今回の件で、お前はテストの有用性を学んだだろう?」

現時点でのテストの有用性にはいまだ疑問を持ち続けていても、今回の結果が示しているのはその有用性です。

くやしいけれど、残念ながら、完敗でした。返事は「イエス」でした。

恥をかくことでしかできない種類の成長というものがある。今回の件を通じて、印象論ではなく、リアルなものとしてレグレッション・テストの価値を真剣に考えました。考えて考えて考え抜きました。その結果、全否定するでもなく、全依存するでもなく、今ぐらいの予備的な運用は結構いい線をいっているかも知れない、実際に大規模運用を始める前のウォーミングアップとして十分価値があるかも知れない、と思うようになってきました。

失敗は、早く犯すに限る。泣きそうなほど悔しい思いを噛みしめながら、またひとつ階段をのぼったのでした。

Maroon 5 vs Beyonce / This Naughty Love (The weirdest mashup ever!)

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。
運営事務局に問題を報告

最新ブログエントリー