Riverside Learning LABO(Skill/Idea/Code)

よりよいシステムのため工学系と人間系の学習下書きメモ

プログラミング作法5

第5章 デバッグ
・コーディングと同じ時間をデバッグにかけ過ちから学ぶ
(またバグを見つけたら同じ過ちを犯さないような方法、
再び発生したときの突き詰める方法を学ぶ)
・やみくもにデバッガを使うよりもプリント文とチェックコードの方が融通が利く
・おなじみのパターンを見つける (見慣れた問題かどうかのチェック)
・最新の変更点のチェック (最後に何を変更したか)
・同じ間違いを繰り返さない (同じ間違いが他の場所にないか)
デバッグは今すぐ放置せずに行う
スタックトレースを取得する
・打つ前に読んでみる (印刷してみる、休憩してみる)
・自分のコードを他人に説明してみる
・バグを再現できるようにする
・分割統治する (可能性の範囲を狭めていく)
・誤作動を特定の数値パターンから検証する
・出力表示でバグの検索範囲を狭める
・自己検証コードを記述する (問題の発生前に行うのがポイント)
・ログファイルを出力する
・作図する (度数分布図など)
・ツールを使う (diff、grep など)
・記録を取る (何を行ったのか)
・デバッガによって思い込みではない動作による検証ができる
・対象コードやバージョンを間違えている場合も往々にしてある
メモリリークが原因の場合
・極めて稀にライブラリやハードによる原因という場合もある
・再現性の難しいバグでは逆に動的に変化する部分やメモリが怪しい
・他人のバグのときは受け取る側に分かりやすいテストケースで知らせる