Saturday, 3 May 2014

久しぶりに C++

C++ で Cerium を書いたのは間違いでした。だめな部分に結構引っかかった。OOと並列処理の相性の悪さも。とか、ぐちっても仕方ない。もう寿命なコードでもあるけど、

* 動かないというからには直すしかない

なので、学生が捕まったので、テレビの前でデバッグ開始。SEGV なので、問題としては易しい方です。実際、簡単なテストで引っかかった。

「あれ、ちゃんと動いているはずなんだけどな」で、次の瞬間SEGV。可変長データの書き込みの大きさを考えてなくてオーバーランしたらしい。これは、refactoringした時のテスト不足だな。

もう一つは、タスクをコピーする時のミスだな。これは最初から入っていたらしい。他のミスと重なっていて、動く時は動いていたらしい。こういうのは謎だ。

いろいろ教訓はありますが、

Refactoring した時は test しろ

ってことね。あと、

  bisect

つまり、どの変更で動かなくなったかを、版管理システムの版の2分法で見つけるってのを学生に教えておくべきだとおもいました。それには一発コマンドテストを作っておかないと。

学生は自分のテストプログラムしか動かさないものだが、自分では気をつけていたつもりだったんだがな。

6時間ぐらいかかった印象があるけど、5時から9時の4時間だったらしい。

No comments: