定義
コンピューターのプログラムに生じた誤りである「バグ(Bug)」を見つけ出し、原因を分析して正しく直す一連の過程のことです。プログラムを完成させることと同じくらい、バグを見つけて取り除く作業はソフトウェア開発で大きな比重を占めます。
バグを捕まえる探偵の捜査過程
おいしい料理を作ろうとして、味噌汁がしょっぱくなりすぎたら、どうしますか? 塩をいつどれだけ入れたか、作り方を最初から一つずつ振り返る必要がありますよね。コンピューターのプログラミングもまったく同じです。プログラムが思いどおりに動かなかったり、突然落ちたりしたときは、問題が始まった正確な地点を突き止める作業が必要です。
プログラマーはこのとき、デバッガー(Debugger)という専用ツールを使います。デバッガーを使うと、高速で動くプログラムを、とてもゆっくり、1行ずつ止めながら実行できます。止まった瞬間ごとに、コンピューターのメモリにどんな数字が入っているかを、虫眼鏡でのぞき込むように確認できます。
こうしてコードを一歩ずつ実行していくと、おかしな計算が起きた瞬間をぴたりと見つけられます。「ここは足し算のはずなのに、引き算の記号を間違えて書いていた!」と、犯人が明らかになる瞬間です。問題の場所がわかったら、コードを正しく直して、もう一度実行してみます。
本物の虫から始まった名前の由来
デバッグという名前には、おもしろい歴史的背景が隠れています。実は、機械のちょっとした不具合を「バグ(Bug)」と呼ぶ表現は、19世紀のトーマス・エジソンの時代から、工学の世界で使われていた隠語でした。
この表現がコンピューターの分野で決定的に有名になったきっかけがあります。1947年、部屋ひとつをいっぱいに埋めるほど巨大だった初期のコンピューター(ハーバード・マークII)が、突然誤作動を起こしました。原因を探していた技術者たちは、電気スイッチ(リレー)のあいだに挟まって死んでいた1匹の蛾を見つけました。
技術者たちは蛾をピンセットで取り出して作業日誌に貼りつけ、「本物の虫(Bug)が見つかった最初の事例」という気の利いたメモを残しました。「デバッグ」という言葉自体はそれ以前から工学の分野で使われていましたが、この有名なエピソードが広まったことで、コンピューターの誤りを見つけて取り除く行為を指す言葉として、より身近になりました。
もう少し正確に言うと
デバッグは、単に誤字を直すだけの作業ではありません。コンピューターは、人が書いたコードが論理的に間違っていても、文法さえ合っていれば何も言わずそのまま実行してしまうからです。たとえば「年齢が0より小さければ入場」のようにおかしなルールを書いても、コンピューターは気づきません。
このように、文法は合っているのに結果がおかしくなるものを「論理エラー(Logic Error)」と呼びます。見た目にはプログラムが問題なく動いているので、この種のエラーは見つけるのがずっと厄介です。そのため、開発者はコードを書く時間よりエラーの原因を突き止める時間のほうが長くなることもあります。
今日では、プログラムを自動で点検するテストツールや、記録を残すログ(Log)の分析など、さまざまな現代的なデバッグ手法が使われています。問題を未然に防ぎ、プログラムの完成度を高めるための中核となる技術です。
よくある誤解
デバッグは、初心者の開発者やミスの多い人だけがやることだ。
ベテランの開発者も、開発時間のかなりの部分をデバッグに費やしています。複雑なシステムほど、予想外の相互作用でバグが生まれるものです。
日常で出会う場面
ログインボタンを押しても何も反応しないとき、信号がサーバーにきちんと届いているかを段階ごとに確認する作業です。
ゲームのキャラクターが壁をすり抜ける現象を防ぐために、衝突判定の計算式を探して直す過程です。
つまり ひとことで
デバッグは、プログラムに潜んでいる誤り(バグ)の原因を見つけ出して、正しく直す過程です。