Skip to content
2009/02/28 / highmt

バグは偏在するか

バグは偏在していることが多い」そうですが、
自分の場合、あまりあてはまらないようです。

最近、お仕事で、データコンバート用のスクリプトをひたすらつくる作業をしています。
どのスクリプトも同じような処理をしているのですが、
見つかるバグはどれも違うところで見つかります。

もっとも、もとの話は、テストする「前」の話なので、
テスト「後」のバグの散らばり具合にはあてはまらないのかもしれません。

テスト後、ということは、難しいところとかややこしいところとかは力を入れてテスト済なわけです。
一方、想定していないこととか、やさしそうであまり深く考えていないところとかはテストが甘くなります。
結果、処理が似たところにバグが起きるわではなく、単にランダムにミスしたところにバグが出る、
という感じなのでしょうか。

今回、ほかにも次のようなバグがありました。

  • テストを間違っていた。
    一時表(他のセッションからは見えない表)を使用するようなデータコンバート処理があり、
    複雑な処理なので当然テストしているわけですが、
    テストデータは、処理と同じセッションから投入しないと意味がないわけで、
    この手続きを間違っていました。
  • コピペを間違っていた。
    スクリプトの制約(だと思う)で、処理の「構造」を共通化できないので、
    「同じように処理してください」という指示があると、
    コピペせざるをえないわけです。
    オリジナルの処理をつくったときは、注意してつくっているので漏れがないのですが、
    それと同じようにする、というときには、どこに注意したかすっかり忘れているので、
    コピペ漏れが出たりするわけです。
    もちろんdiffも見ているわけですが、微妙に違ったりするので、見過ごしてしまう確率が高くなります。
    テストケースも同じようにつくるわけですが、
    処理を1回流せば100%のケースをカバーできる、というデータを目指してデータをつくっても、
    「最後のレコードがxxxだったときはyyyとなる(たとえばブレーク処理とか)」というようなケースは、
    1回の処理ではカバーできないので、なかなか自動化が難しいわけです。
    既にテスト済のコードを流用しているので、
    コスト上プレッシャーがあるとまずここが削られるテストになってくるのですが、
    そうするとはまってしまうわけです。

今回ほんとに猛省。

広告
%d人のブロガーが「いいね」をつけました。