デバッグとはプログラム内のバグを探して取り除く作業のことを指します。適切なデバッグができないとエラーが多発してしまい、実務レベルでは使えないシステムが出来上がってしまいます。
本記事では、デバッグとは何か、デバッグの重要性、テストとデバッグの違いなどについて解説していきます。
デバッグとは
デバッグ(debug)とはプログラムを動かしたときに起こる不具合を修正し、正常に動くようにするための作業のことです。
プログラムの不具合のことを「バグ(bug)」と呼びます。バグとは日本語で「虫」を指します。なので、デバッグはプログラム内に潜む悪い虫を取り除いていくようなイメージです。具体的にはデバッガというプログラムを使ってバグを発見・修正します。基本的に主要なプログラミング言語であれば、公式・第三者問わずデバッガが開発・公開されています。
テストとデバッグの違い
プログラムを作ったら実際に動くかどうかテストしますが、厳密にはプログラムのテストとデバッグは異なります。
テストとは、プログラムの仕様(そのプログラムを作った目的や動作)に基づいてちゃんと動くかどうかを一通りチェックすることです。
一方、デバッグは実際にプログラム内のバグを取り除く作業です。実際の現場ではテスト仕様書を作成し、全てのテストを消化しながらバグを発見し、デバッガでバグの原因を探して除去するという流れが一般的です(その後再度テストを実施し、またバグを見つけたら取り除き...と繰り返します)。
具体的なデバッグの流れ
次にデバッグの流れを詳細に追ってみましょう。
1.バグを見つける
まずはバグを見つけます。バグを見つけるのはどちらかというとテスト側の役割ですが、デバッグの最初のステップとも解釈できます。
また、開発中はよく不具合が起こります。よくあるバグは例外の発生です。
プログラムを俯瞰しながら例外が発生しそうな場所を探したり、予期せぬ値が変数に格納されそうな場所を探したりして、重点的にテストしてみましょう。
2.バグの原因を特定する
次にバグの原因を特定します。
各プログラミング言語にはバグの原因を特定するためのエラーメッセージが用意されており、エラーが発生するとメッセージを出力し、プログラマーにヒントを与えてくれます。エラーメッセージは次の要素に分かれていることが多いです。
- 発生したファイル名
- エラーが発生した行
- 発生時刻
- 発生したエラーの名前
- エラーメッセージ
エラーメッセージはプログラミング言語ごとに異なります。エラー内容が分かりにくい場合はGoogleで検索して同じような場面に遭遇・解決している人を探したり、公式リファレンスを参照することが良くあります。
3.バグを取り除く →1.バグを見つける から再チェック
エラー内容からバグの原因を特定できたら、あとはソースコードを修正してバグを取り除きます。
バグを取り除いたらもう一度プログラムを実行し、正常に動作することを確認しましょう。正常に動けばバグを除去できたことになりますが、バグを取り除いたことで新しいバグが発生している可能性があります。
プログラミングをするとき「コードを修正する=バグが発生している可能性がある」という点を理解する必要があります。コードを修正したら新しいバグが発生していないかチェックするために、再度「1.バグを見つける」に戻って不具合を洗い出しましょう。
この「プログラムを修正したことで他の箇所に影響が出ていないことを確認する」ためのテストを「リグレッションテスト」と呼びます。リグレッションテストまで完了したらバグの除去作業は完了です。
デバッグの目的は「品質向上」
個人で使うシステムを開発するだけなのであれば問題ありませんが、実務レベルのシステム開発であれば「テスト→デバッグ→再テスト」の流れは絶対に必要です。
なぜなら、この作業がシステムの品質を向上・担保することに繋がるからです。私達が常日頃使っているアプリケーションは数百・数千パターンのテストを実施してバグを抽出し、品質を向上させています。
デバッグは誰がやるのか?
当然開発したプログラマーだろうと思う方もいらっしゃると思いますが、実際には開発したシステムの規模によって変わってきます。
小・中規模のシステムであれば開発者とテスター(テスト・デバッグをする人)は同じであることが多いですが、ゲームや想定ユーザー数が多いアプリケーション、さらにはミスの許されないシステム(官公庁や銀行、航空機の管制システムなど)は開発者とテスターが分かれていることが多いです。
ゲームテスターの求人は求人サイトを見てみるとよくありますが、まさしくテスターの仕事という印象ですね。
デバッグができるようになってこそ一人前
プログラマーとテスターは分かれる場合もありますが、やはり基本は自分で作ったシステムは自分でデバッグして品質を上げていくのが一般的でしょう。
その意味でもプログラマーとして、エラーメッセージを見たら大体何が問題で、どこをどう直せば良いかなんとなく分かるようになれば一人前と言えるのではないでしょうか。デバッグは地道な作業ですが、一つずつ問題を解決してしっかり動くシステムを作れるようになるのはわくわくしますし、すごく面白いですよ!
- カテゴリ:
- キーワード: