どーもー、現在某IT系の会社でjavaエンジニアとして働ている者です(当ブログの管理人です)
ソフトウェア開発やプログラミングの職業に携わっている方はもちろん、IT業界やゲーム業界にいる方は、「デバッグ」は馴染みのある言葉だと思います。
ただし、以下のようにイマイチ理解できていない方も居るかと思います。
「デバッグと、デバックって、何が違うの?」
「デバッグと、デバッガの違いは?」
というわけで、今回は、それぞれの用語の意味や、デバッグのやり方について。
また実際に、javaプログラミングでよく利用されるデバッガ(Eclipse)を利用して、デバッグ作業をしてみようと思います。
以下、目次。
- デバッグの意味とは?作業の手順・やり方についても
- デバッガとは ~関連用語についても解説します
- javaプログラミングの代表的なデバッガ(デバッグツール):Eclipseの紹介と使い方
デバッグの意味とは?作業の手順・やり方のまとめ ~デバックとの違いも。
デバッグとは・・・コンピュータプログラムに存在する欠陥(バグやエラー)を特定し、その原因を調査して、修正することで正常なプログラムにする作業を意味します。
ちなみに、英語表記だと「debug」で、以下のように訳します。
debug・・・不具合を除去する
ちなみに、同じ意味として、「デバック」ともよく言われていますが、上記の通り「debug」なので、正しくは「デバッグ」となります。
(デバックは間違った使い方なので、覚えておいてください。)
また、ゲーム業界での「デバッグ」については、単なる「テスト」としての意味合いが強く、欠陥や不具合を特定するところまでの作業を指すことが多いようです。
(IT業界とは、言葉の使われ方が少し違っていますね。)
デバッグ作業の手順やポイント、やり方について
デバッグ作業は、以下の5ステップに従って進めていく事が、ポイントとなります。
-
「バグの存在を認識する」
まず最初のステップとして、バグを認識するところからですね。
バグといっても、定義次第で、以下のように様々な種類のものがあるかと思います。
・プログラムを異常終了させるもの
・例外エラー(Exception)を発生させるもの
・プログラム上で、エラーとして扱うもの
・エラーは出ていないけど、想定とは違う結果となったもの等々
また、バグを確認する際に、
「どのような条件の下で問題(エラー)が発生するのか」、「ちゃんと、(そのエラーに)再現性があるのか」
などの確認も重要となります。
それによって、そもそもプログラム上のバグなのか・・
それとも、単に操作方法が間違っているのか、それとも環境依存(PCやブラウザに依存する)のエラーなのか・・
このように、デバッグ作業では、条件や情報を整理することも重要となります。
-
「バグ(エラー)の箇所を特定する」
バグの存在が確定したら、今度は、そのバグ(エラー)がどこで発生するのか。。プログラム上の場所を特定します。
「どのプログラムファイルの、何行目で、エラーが起きているのか」
この時、特定するために、ログを出力させるようにしたり、
同じ環境下(同じプログラムソース、同じデータ、同じ操作手順、)で、プログラムをデバッグ実行(ステップ実行)したりします。
(プログラムのデバッグ実行やステップ実行については、javaをサンプルとして、後述で解説しています) -
「バグの原因を特定する」
エラーがどこで起きているのかを特定できたら、次にその原因を調査します。
※エラーが発生した箇所と、エラーの原因となった箇所は、同じとは限りません。。むしろ、違うケースの方が多いでしょう。
例えを出します。
1、Aというデータがあったとして、Aには、10文字以上の文字列がセットされます。2、Aの値を、画面に出力します。
上記のようなプログラムがあったとして、「2」は、Aに値(文字列)がセットされている前提で動作するとします。
この時、もし仮に、Aに値がセットされていなければ、「2」でエラーとなってしまいますね。
この場合、エラーが起きるのは「2」ですが、その原因は、「1」となります(値がセットされないため)
(プログラミングでは、よくあるエラーの「ヌルポ(NullPointer Exception)」の例です)
このように、エラーの発生場所と、原因は、別々であることが多くのケースであるわけですね。
また、間違っているデータにも関わらず、正しいデータとして処理してしまっている。。なんてケースも、よくあります。
(プログラムのロジック(処理の流れや構成)が、そもそも間違っているケースですね)
-
「プログラムを修正する(バグの原因を取り除く)」
原因の特定が終わったら、次に、そのバグを修正する作業ですね。
この時、注意しなければいけないのが、修正した場合の、影響範囲をちゃんと確認することですね。
プログラムを修正したことによって、別の部分で悪い影響が出て、別のバグが発生してしまう。。
みたいな事にならないよう、修正する際は、事前に影響範囲を確認しておくことが必要となります。
-
「プログラムの修正後、テストする」
修正が終わったら、ちゃんと正常に動作するかテストします。
この時に、できれば、他のプログラムに影響が出ていないか・・などのチェックも合わせてやった方が良いでしょう。
以上、デバッグ作業の手順ややり方のまとめでした。
デバッガの意味とは・・・関連用語についても解説します
続いて、デバッガ(debugger)についてです。
デバッガとは・・・デバッグツールとも呼ばれ、その名の通り、デバッグ作業にて用いられるツール(ソフトウェア)のことで、プログラムの欠陥(バグ)を特定する時に利用します。
単に、「デバッグをおこなう人」と訳されることもありますが、基本的にはツールの事を指しますね。
デバッガの主な機能を、以下にまとめてみました。
- プログラム上の、指定した場所にてプログラムの処理をストップさせ、その時点でのデータの中身を確認する
- プログラムを、1行ずつ処理させる(1行ずつプログラムが処理することで、どの段階でエラーとなっているのか、確認することができます)
- プログラムの処理を、指定した場所へ進めたり(スキップ)、戻したりする
以上です。
デバッガは、プログラミングをする上で欠かせないものであり、開発環境(効率的に開発を進めていけるツール)には、必ず入っている機能になります。
(次の章にて、実際にjavaプログラミングでよく利用される開発環境:Eclipseを利用して、デバッグ作業をするところを解説しています)
あとは、デバッグ作業にて、よく利用される「関連用語」についても、以下にまとめてみました。
-
「ブレークポイント」
プログラムの処理をストップ(一時停止)する場所を、「ブレークポイント」と呼びます。
一時停止することで、その時点でのデータ(変数)の値を、確認することが可能となります。
-
「ステップ実行」
プログラムを、一行ずつ処理実行させることを、ステップ実行と呼びます。
※業界では、プログラムの行数をステップ数と呼び、1行のことを、1ステップと呼びます。
ステップごとに、その時点でのデータ(変数)の値を確認することもできるので、エラーの原因の特定によく利用します。
以上、デバッグ・デバッガ関連の用語まとめでした。
javaプログラミングの代表的なデバッガ(デバッグツール):Eclipseの紹介と使い方
最後に、実際にjavaプログラミングの現場でよく利用される、デバッガ:Eclipseを用いて、デバッグ作業をしてみたいと思います。
※javaやEclipseを知らなくても、デバッグ作業というものが、どういったモノなのか、ある程度理解できるように解説していきたいと思います。
※javaや、Eclipseについては、以下の記事にて詳細に解説しているので、興味のある方はぜひ確認してみてください。
ではまず、デバッグ用のjavaプログラムを作成してみます(以下)
public class Sample2 {
public static void main(String[] args) {
int data = 100;
data = data + 100;
data = data + 100;
data = data + 100;
data = data + 100;
System.out.println(data);
}
}
上記は、dataという変数(データ)に、+100ずつ足していって、最後に、その合計(500)を、出力するという単純なプログラムになります。
プログラムの詳細は割愛しますが、なんとなくイメージはできますよね。
実際に、プログラムを実行すると、以下のように「500」が出力されてますね。
(以下、Eclipse上で実行した画面になります)
では、さっそくデバッグをしてみます。以下の通り、ちゃんと「デバッグ」というメニューがありますね。
以下が、指定した行で、ストップ(一時停止)させ、その時点での「data」の値を確認しています。
(画面の左側の「青い丸」が、ストップさせる行となります。)
「data」の値が、+100されていって、最後には500になっていることが、確認できますね。
このように、プログラムの指定した地点での、データの値を確認することは、デバッグ作業にて最も多い作業となります。
(私も業務中、よくこのデバッグ作業をしていたりします、)
以上、
実際に、javaプログラムと、Eclipseを利用してデバッグ作業をしてみました。
今回の記事で、デバッグ作業について、ちゃんとイメージ・理解していただけていれば、幸いです。
では。