デバッグ(Debug)とは、プログラムに潜む誤りを見つけ出し、原因を突き止めて直す作業のことです。誤りのことを「バグ(虫)」と呼び、それを取り除くという意味からこの名が付いています。
現実世界に例えると、デバッグは水漏れの箇所を探す作業のようなものです。床が濡れているのは分かっても、漏れているのは別の階かもしれません。濡れた場所を拭くだけでは直らず、水の道筋をたどって元栓を見つける必要があります。
テストとの違い
| 項目 | テスト | デバッグ |
|---|---|---|
| 目的 | 誤りがあるか調べる | 誤りの原因を直す |
| 始まり | 作り終えたあと | 誤りが見つかってから |
| 成果 | 不具合の報告 | 修正されたプログラム |
| 担当 | 専門の担当者も | ほぼ作った本人 |
「バグ」という言葉の由来
語源には有名な逸話があります。初期のコンピューターが誤動作した際、内部に虫が挟まっているのが見つかり、それを取り除いた記録が残っているという話です。ただしこの言葉自体は、機械の不具合を指す用語としてそれ以前から使われていました。
まず「再現させる」
作業の第一歩は修正ではありません。同じ手順をなぞれば必ず同じ誤りが起きる、という状態を作ることが出発点です。ここができていないと、直したつもりでも本当に直ったのか確かめようがありません。再現できれば、半分は解決したようなものだといわれます。
範囲を半分ずつ狭めていく
原因を探すときの定石があります。全体を眺めるのではなく、怪しい範囲を半分に区切り、どちら側で起きているかを確かめて、また半分に絞るという進め方です。この繰り返しなら、大きなプログラムでも少ない手数でたどり着けます。
デバッガという道具
専用の道具があります。指定した行でプログラムを一時停止させ、その時点での値を覗いたり、一行ずつ進めたりできる仕組みです。頭の中で処理を追うより確実で、思い込みによる見落としを防げます。開発用のソフトにはたいてい備わっています。
ログを出して追う
道具が使えない場面もあります。すでに動いているシステムや、手元で再現しない不具合では、処理の途中経過を記録として書き出させ、あとから読み解くやり方を取ります。何をどこで記録するかの設計が、そのまま調査の速さを左右します。
直したつもりが別の誤りを生む
気をつけたい点です。その場しのぎの修正は、思わぬところに影響して新たな不具合を招きます。症状だけを消すのではなく、なぜそうなったかを理解してから直すこと。そして直したあとは、周辺が壊れていないかを確かめる作業がセットになります。
詰まったら手を止める
経験則として知られていることがあります。行き詰まったときは、いったん離れる、他人に状況を説明してみる、前提を疑い直す。説明しようとした途端に自分で気づく、ということが実際によく起こります。長時間にらみ続けるのは、たいてい遠回りです。
あわせて知っておきたい用語
- バグ:
プログラムに潜む誤りや不具合のことです。 - デバッガ:
プログラムを止めて中身を調べる道具です。 - ログ:
処理の経過を記録として書き出したものです。 - リグレッションテスト:
修正で他が壊れていないか確かめる試験です。

コメント