はじめに
ソフトウェア開発をしているならば避けられないデバッグ。
デバッグすることにより品質保証できますし何よりも将来のインシデント対策にもつながります。
しかし、デバッグは担当者の裁量に左右されるなどコツがあるようです。
この記事では、筆者の経験を元にデバッグのコツをまとめたいと思います。
デバッグする前の心構え
ソフトウェアのバグを探す前に意識しておきたいことがいくつかあります。
- 限られた時間内に全てのバグを見つけることは不可能
ソフトウェアは複雑であり、全てのバグを限られた時間内に見つけ出すことはできないと思ってください。必要十分なテストケースを作成するよう心がけましょう。 - テストが通るテストケース作成はやめよう
テストケースは、なるべくバグを発見するようなものにしましょう。正しく動作するテストケースのみですとデバッグになりません。
基本的なデバッグ方法
よくあるデバッグの方法が以下の通りです。
- 変数の値をprintして確認
変数に正しい値が格納されているのか確認し、バグがあるか判断します。この方法の欠点として、print文を消し忘れるとソフトウェアが正しい挙動をしなくなることです。 - ログを吐かせて変数の値を確認
この方法は、print文と同じように変数の値を確認しますが、ログとして残るだけなのでprint文の欠点のような事態には至りません。 - ブレイクポイントを指定し、その場所でプログラムを実行する
デバッガを使って行ごとにプログラムを実行して、バグを探します。 - 分割統治法と動的計画法を用いてデバッグ
分割統治法のようにプログラムを細分化して、それぞれテストを行い最終的には全てのプログラムのテストを完了します。この時、プログラムの最初、中間とそれぞれの地点で正しい挙動をしているか確認してバグがどこにあるか見つけ出します。
動的計画法の考えをデバッグに取り入れることもよくあります。テストをたくさん作成することは悪くありませんが、テストケース作成の時間も限られているので出来るかぎり簡単に済ませたいですよね。動的計画法では、同じ計算を避け大きな問題を解決するという考え方です。テストケース作成においては、あなたが作成したテストケースが他のテストケースも包含しているが考えてみましょう。 - 自由度を固定してテストケースを作成
数学の問題を解く時にも自由度を固定して調べることがありますよね。テストケース作成においても自由度を固定してバグを探してみましょう。自由度を固定することで複雑なプログラムがよりシンプルになります。
おわりに
上記の基本的なデバッグの方法でもバグが見つからないときは、環境やツールを疑ってみましょう。実行環境を再起動してみたり、DBを最新のものにしてみたり、キャッシュを削除してみたりと試行錯誤してみてください。