私が思うに、

  • 初期化していないオブジェクト(単なるintなども含む)がある
  • よくオブジェクトを変更する
  • あっちこっちで一つのオブジェクトを変更する
  • コードのある点における各オブジェクトの正常な状態を把握することが困難である
  • オブジェクト(特に数値型やそれらの単純なaggregate)が多い
  • 一見して現在の処理に関係するかどうかが分からない変数が多い
  • 2行以内でコメントを付けることができない長いコード(私の基準で20行以上、根拠は無い)が多い

以上のような特徴のあるコードは間違いなくバグを含んでおり、バグの原因の特定が困難であり、小手先でバグを修正しようとすると更にエンバグするかあるいは修正済みのバグが復活してしまい、バグを根本的に修正するには大幅な変更が必要であり、その修正でまたエンバグする可能性が高い。なお、バグを混入したくなければ以下の方法を実践してみるといい。

  • 変数を決して変更しない