2006-02-01

バグの少ないコード バグの少ないコード - Nao_uの日記 を含むブックマーク はてなブックマーク - バグの少ないコード - Nao_uの日記 バグの少ないコード - Nao_uの日記 のブックマークコメント

少し前に combat の田中さんが、バグの少ないコードを記述するなんて話をしてゐた。自分にとつては当たり前の話なのだけど、(おもいきり要約して)「無理をしない」「自明なコードだけを書く」「影響の出る範囲を極力少なくする」といふ3点を守れば、バグなんてなかなかでない。そして、これらのことは Haskell, OCaml などの関数型言語を勉強すると、自然に身に付いてしまふ事柄ばかりである。



バグのないプログラムの書き方 バグのないプログラムの書き方 - Nao_uの日記 を含むブックマーク はてなブックマーク - バグのないプログラムの書き方 - Nao_uの日記 バグのないプログラムの書き方 - Nao_uの日記 のブックマークコメント

これに対する私の見解であるが、一言で言ってしまえば、

「無理をしない」である。

あらゆることについて無理をしない。

無理をせずに自明なコードだけ書いていればバグの入る余地がなくなる。

プログラムが純粋関数的であるならば、

入力により出力が決まるのでバグの入る余地は圧倒的に

少なくなるはずである。

その最たるものとして、変数に代入を許さない、

これをC++でもなるべく守るようにする。

もちろん、C++変数に代入をせずにプログラムを作るのは

とても難しい。だから、完全に排除するのではなくて、

代入によってプログラムの見通しが悪くならないように心掛ける。

プログラムの離れた場所で同じ変数に代入を行わないとか、

変数の内容が掌握しやすければしやすいほど

プログラムから考える余地は減ると思う。

同じような理由で変数の生存区間を小さくするのも有効だろう。

同じ変数をいろいろなところで使わないのも重要だ。



バグを潜伏させない工夫 バグを潜伏させない工夫 - Nao_uの日記 を含むブックマーク はてなブックマーク - バグを潜伏させない工夫 - Nao_uの日記 バグを潜伏させない工夫 - Nao_uの日記 のブックマークコメント

一般的にバグの発生箇所と発現箇所が離れれていると、デバッグは難しくなり、時間もかかりがちです。今回のお話は、このような「バグの潜伏」を抑制し、「バグ」にいち早く気付かせるための実装上の工夫についてです。

と、ここまでIDの値という点で書きましたが、話の趣旨は次の二点に集約されます。

  • 外部仕様に出ない部分でも、ちょっとした工夫をするかしないかでデバッグ効率は大きく変わる
  • バグを含むコードであっても「偶然」や「なんとなく」で動作を継続させるとデバッグが難しくなる。バグのある地点にできるだけ近い地点でバグに気付かせることで、デバッグ効率は上がる