2010年8月18日水曜日

バグと戦う(それとも自分の馬鹿さ加減と,かな)

左の映像は金野がやっている数値解析結果を可視化したものですが,たかがこの絵を出すだけなのに,8月の第1週にえらく苦労しました.

流れの影響の入れ方を変えると,氷片(映像の白い点)の挙動が変わるかどうかを試していたのですが,少なくともちょっとは変化があるはずなのに,最初の解析結果は以前の結果とまったく同じ.何かが間違っている.

このときは,原因はとてもつまらないバグ(設定ミスでちゃんとコンパイルされていなかっただけ)だったので,それを直して再計算すればいいや,と思ったのですが….
今にして思えば,これが躓きの始まりでした.ここでちゃんと専用のテストケースを用意して,腰を据えてちゃんと調査すればよかった.すぐにフルサイズの再計算を回したので,結果が出るまで5,6時間待つことになりました.

もう一度回した結果は,やはり前とまったく同じ.なぜだ!?
今度は座標系の設定がおかしかったので,それを書き直してやり直し.

今度は左半分だけが大きくかわり,右半分は影響なし.なんじゃこりゃ!?
これもまったく不注意なバグで,流れ場の計算では左右対称を仮定して,真ん中に対称境界を張って半分だけ計算していたのに,それを忘れていたのでした.右半分は左側のデータをコピーするようなコードを書いて,再びやり直し.
(この時点でかなりストレスが溜まっていました.)


またしても元に戻って,最初の計算とまったく同じに.あぁもうどうして!?
今度は値の取り扱いの問題.上の左右対称を仮定するコードの中で,-(流れ場データがあるyの最大値)<y<(流れ場データがあるyの最大値)であれば流れ場のデータを使い,それより外側では既定値を与えるコードを書いていました.
ところが今回の流れ場はyがマイナスのところで計算していたので,yの最大値は0にとても近い負の値.ということは上の不等式は常に成り立たず,ありとあらゆるyに対して既定値を返していました.事実上,流れの影響がないのと同じことに. あーもう! 俺って馬鹿だ!

このあたりでやっと自分の馬鹿さ加減を反省し,テスト用の解析条件を作るところまで戻りました.
不等式を書き直して再びやり直し.数回のテストの後,今度は大丈夫だろうと判断してフルサイズの再計算を回したところ,やっとまともな結果を得ました.

いやはや,まるまる2日ほど無駄にしました.木曜日に終わらせるはずの仕事が日曜日の夜までかかりました.
たしか木曜日の夜に,杉山君に「それって簡単なテストはできないんですか?」って聞かれたような気がする.あのとき反省すれば,金曜日をもっと有意義に過ごせたのに….

教訓:ちゃんとテストしよう.

0 件のコメント:

コメントを投稿