[達人プログラマー]デバッグの心得

image

参考にした本

達人プログラマという本を参考にしました。

ITエンジニア本大賞2022の大賞に選ばれているので、知っている方も多いと思います。

記事の経緯

達人プログラマーの20章でデバッグ時の心構えとか、どのようにデバッグするかとかを書いてあり、とても面白かったので、自分なりにまとめてみようと思います。

では早速本題へ

デバッグの心理学

デバッグ時にメンタルがおかしくなるのはよくあることです。

そんな時に以下の3点を思い出してください。

  1. 誰かを非難するのではなく、問題を修正すること
  2. 責任転嫁しない
  3. パニクらないこと

誰かを非難するのではなく、問題を修正すること

バグの原因が自分のミスなのか、他人のミスなのかどうかは関係ありません。

いずれにしても自分の問題です。

責任転嫁しない

バグ修正をやらない理由を探したり、プロジェクトのプレッシャーを断ち切り気持ちを切り替える必要があります。

誰々のバグなんだから….みたいなことはやめましょう。

パニくるな

納期が目前に迫っていたり、上司に背後に立たれたりすると簡単にパニックに陥ります。

本来のペースを取り戻すには何がバグを引き起こしている真の原因を考えることが重要なのです。

バグ、バグレポートを最初に目にした時の反応が「そんなことはあり得ない」というものであれば、明らかに自分のミスです。

一刻も早く「実際におこったのだ」という一連の考えに辿り着きましょう。

デバッグ中の注意点

単純にバグを修正したくなる欲望に負けてはいけません。真の原因は自分が見ているレベルとは別の次元で起こっている可能性があります。

問題の外見のみに目を向けるのではなく、常に問題の原因の根を見つけるように努力しましょう

バグの追いかけ方

  1. コンパイラの警告レベルを最大に上げる
  2. 適切なデータを全て集める

コンパイラの警告レベルを最大に上げる

コンパイラが発見できるレベルの問題を骨を追って探すのは時間の無駄です。

目の前に立ちはだかるもっと難しい問題に集中しましょう。

適切なデータを全て集める

バグの報告はいつも正確ではないことを頭に入れておきましょう。

最初に報告された情報よりも多くの情報を集めるには、バグを報告してきたユーザーにインタビューするのが手っ取り早いです。

デバッグ時の戦略 準備編

  1. バグを再現させる
  2. エラーメッセージをよく読む

バグを再現させる

バグを修正するにあたり、最初にやることはバグの再現です。

再現できない限り、本当に修正できたかどうかは確認する方法はありません。

そしてもっとも重要なのは

  • コード修正前にテストを失敗させること

テストを作り出す過程の中で、解決策が見えてくることがあります。

エラーメッセージをよく読む

説明不要でしょうが、いきなりコードを見るのではなく、エラーメッセージをちゃんと読みましょう。

デバッグ時の戦略 実践編

以下のパターン別の紹介します。

  • クラッシュしなかった場合
  • クラッシュした場合

クラッシュしなかった場合

単におかしなデータが帰ってきたことにより起こっています。

デバッガーを使って誤った情報が発生していることを確認しましょう。

またスタックトレースを追いかける場合は、何をどう追いかけたのか、メモをしておくようにしましょう。

記録しておかないと、どこまで作業を遡れば良いかわからなくなります。

クラッシュした場合

クラッシュした場所から遡っていくのも一つの手ですが、データセットから手をつけた方が簡単な場合があります。

やり方

  1. データセットのコピーを入手する
  2. 二分探索法を使い、データセットを半分にしてローカルで稼働しているアプリに入力する
  3. クラッシュしなければ、②を繰り返す

デバッグ時のチェックリスト

  • 報告を受けた問題は、元となるバグの直接的原因でしょうか?それとも単なる症状でしょうか?
  • そのバグは本当に使用しているフレームワークに存在しているものでしょうか?
  • この問題を同僚に説明するとしたら、どのように説明すれば良いでしょうか?
  • 疑わしいコードがユニットテストをパスしていたのであれば、テストは十分だったでしょうか?
  • このバグを発生させた条件が、システム内部の何処か他の部分に残っていないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!