最終更新時刻:2009年7月7日(火) 7時30分
-

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

公開日時:
2006/08/08 14:39
著者:
kenn

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

近況としては、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 編集部の見解・意向を示すものではありません。

前後の記事

このエントリーへのコメント

11

ナルシストですか?IT系には、経営者として大成したいのか、タレント志望なのか分からん人が多いですね。

  あの on 2006/08/24

10

komuroさんて人良いこと言うね。

  tamago on 2006/08/21

9

失敗はやり直せば良い。
まあ、力まずにやれ。

  tamago on 2006/08/21

8

テストフレームワークは、本当に大事なUser Experienceに開発者が集中するためにこそ必要。
「それ以前」のバグでUser Experienceを台無しにするのは最悪。

テストフレームワークでできないことを「考え、確かめる」のが開発者の仕事。
テストフレームワークにやらせればよいものをいつまでも開発者にやらせるのは怠慢。

開発者がした仕事はそれを受け取る人が安心して受け取れるもの。
開発者は世の中を幸せにするためにいる。自分の幸せは後からついてくる。

・・・なんてね。良い話だったので、つい。

  komuro on 2006/08/17

7

スゲーいい話と思って読んでましたよ。よい相棒、ダニーってステキですねー。:)

  ゾフィ on 2006/08/15

6

江島さん、お久です。
BloggerでBlog、再開してみました。今度は力を抜いて。
「グーグル Google」(文春文庫)で江島さんの記事も紹介されていて面白かったですよ。

  Yasu on 2006/08/13

5

いいわけばっかだな。
人の命がかかってたりすると手は抜けないんだよ。
自分勝手にこの辺でいいやと線引いてんだよ。

  a on 2006/08/12

4

TeamKNOxさん

m(_ _)m マイリマシタ
すごいっす。かっこいいっす。
ギークへの道のりは、かくもはてしない。。。

  kenn on 2006/08/11

3

江島さん、こんばんは

 なかなか更新されていないのでどうしたのかな?と
 少し心配しました。
 ユーザエクスペアリエンスって甘美な響きですよね。
 折角、作ったんですから早く実践投入したいですよね。
 最近はこんなことやってます。
 http://www.teamknox.com/EZ-CNC/EZ-CNCj.html

 工作機械の改造なんですけど、ちゃんとテストしないと
 マジやばいんですよ。最高2500RPMで回転している
 ダイヤモンドの次の次?位に硬い刃が折れて
 飛んでくるかもしれないんです。
 で、テストスクリプトをシコシコ書いて、
 色々とやっています。それも繰り返し。ええ。

 失敗したら、命は無いぞ!!みたいな気持ちで
 やるとテストガンガンやるようになりますよ。

では

 

  TeamKNOx on 2006/08/09

2

ありがとうございます。よしおかさんにエールいただけるとはとっても光栄です。早く自虐ネタを卒業して「人並み」になりたい。。。

  kenn on 2006/08/09

1

いい感じですね。一歩一歩プロフェッショナルに近付いて
いく姿に共感を覚えます。

リグレッションテストは無駄だというエントリーでしたら
釣られて、渾身のチカラを込めてコメントしようと思った
のですが、そうでもないようなので、ひとつ階段をのぼっ
た江島さんにエールをこめて。

  hyoshiok on 2006/08/09

ブログにコメントするにはCNET_IDにログインしてください。

この記事に対するTrackBackのURL: 

CNET_ID

メンバー限定サービスをご利用いただく場合、このページの上部からログイン、またはCNET_ID登録(無料)をしてください。