C++ で Cerium を書いたのは間違いでした。だめな部分に結構引っかかった。OOと並列処理の相性の悪さも。とか、ぐちっても仕方ない。もう寿命なコードでもあるけど、
* 動かないというからには直すしかない
なので、学生が捕まったので、テレビの前でデバッグ開始。SEGV なので、問題としては易しい方です。実際、簡単なテストで引っかかった。
「あれ、ちゃんと動いているはずなんだけどな」で、次の瞬間SEGV。可変長データの書き込みの大きさを考えてなくてオーバーランしたらしい。これは、refactoringした時のテスト不足だな。
もう一つは、タスクをコピーする時のミスだな。これは最初から入っていたらしい。他のミスと重なっていて、動く時は動いていたらしい。こういうのは謎だ。
いろいろ教訓はありますが、
Refactoring した時は test しろ
ってことね。あと、
bisect
つまり、どの変更で動かなくなったかを、版管理システムの版の2分法で見つけるってのを学生に教えておくべきだとおもいました。それには一発コマンドテストを作っておかないと。
学生は自分のテストプログラムしか動かさないものだが、自分では気をつけていたつもりだったんだがな。
6時間ぐらいかかった印象があるけど、5時から9時の4時間だったらしい。
No comments:
Post a Comment