8.1 バグの発生
ソフトウェアのデバッグって、プログラム内のエラーとかバグを探して修正するプロセスのこと。これってソフトウェア開発では一番面白くて重要な部分で、プログラムをちゃんと動かすのに必要なんだよ。
「バグ」っていう言葉の由来
「バグ」って言葉がコンピュータプログラムの文脈で初めて使われたのは、1940年代なんだ。でも、「バグ」自体の概念はコンピュータが存在する前からあって、いろんなデバイスの機械的な不具合を指してたんだよね。
初めて「バグ」っていう言葉がコンピュータ技術で使われたのは、1947年にハーバード大学でMark IIっていうコンピュータで作業してたチームのとき。そのチームが、あるリレーが動かない原因が中に蛾が入ってたせいだって気づいたんだ。それでその虫を取り除いて、「初めて本物の虫(literal bug)が見つかった」って記録に残したんだよ。
それが、「バグ」って言葉が有名になったきっかけなんだけど、実際にはそれ以前にも「バグ」をエラーの意味で使ってたんだ。
プログラムのデバッグ
デバッグって、ソフトウェアにあるバグを見つけて診断して修正するプロセスのこと。このプロセスにはいくつかのステップがあるんだ:
- エラーを見つける: プログラムにエラーがあることを示す症状を特定すること。
- エラーを再現する: エラーが再び発生する条件を作り出して、その性質を理解すること。
- 問題の診断: コードを分析してエラーの原因を探るためのツールや方法を使うこと。
- エラーを修正する: エラーを解決するためにコードを修正すること。
- テストを行う: 修正が正しいかどうか、また新たな問題が発生していないか確認すること。
要するに、バグ(bug)はプログラムにあるエラー全般のことを指してて、デバッグ(de-bug)はそのエラーを見つけて修正するプロセスのことなんだ。
8.2 デバッグのツールと方法
ログ記録(Logging)
プログラムのコードにログを追加すると、実行の流れを追跡したり、プログラムの実行中に変数や操作の状態を把握することができるよ。Pythonでは、logging
っていう便利なライブラリがあるんだ。
ログ記録の例:
import logging
# デバッグ情報の出力を設定
logging.basicConfig(level=logging.DEBUG)
def divide(a, b):
# 割り算の試みをログ記録
logging.debug(f"割り算 {a} ÷ {b}")
if b == 0:
# bが0の場合のエラーをログ記録
logging.error("ゼロでの割り算を試みた!")
return None
# bが0でないなら割り算を実行
return a / b
result = divide(10, 2)
print(result)
デバッガーの使用 (Debuggers)
デバッガーってさ、プログラムを1ステップずつ実行したり、breakpoints
(停止ポイント)を設定して、実行中に変数の値を確認したり変更したりできるツールなんだ。
有名なデバッガー:
- GDB: C、C++などのプログラミング言語用のGNUデバッガー。
- PDB: Pythonに組み込まれているデバッガー。
- Visual Studio Debugger: Microsoft Visual Studioに組み込まれているデバッガー。
- PyCharm Debugger: Python用IDEのPyCharmに組み込まれているデバッガー。
PDB
の使用例
import pdb
def faulty_function(a, b):
pdb.set_trace() # 停止ポイントを設定
result = a / b
return result
faulty_function(10, 0)
プログラムがpdb.set_trace()
に到達すると停止して、デバッガーのコマンド(例えばnext
(次のステップ)とかprint
(変数の値を出力)など)を実行できるようになるよ。
PyCharmに組み込まれたデバッガーを使ってプログラムのデバッグを一緒に学んでいく予定だよ。
8.3 debugの使い方
簡単に言うと、debugってデバッグツールや方法を積極的に使って、エラーを見つけて修正することを含むんだ。
停止ポイントの設定: コード上で興味のある箇所でプログラムを停止させる。
ステップ実行: プログラムを1ステップずつ実行して、プログラムの状態や変数の値の変化を確認する。
変数の確認: プログラムの実行中に変数や式の値を確認して、不正なデータや論理エラーを特定する。
エラーの修正: コードを修正して、見つけたエラーを解決する。
再テスト: エラーを修正した後で、プログラムが正しく動作し、新しい問題が発生していないことを確認するためのテストを行う。
簡単そうに聞こえるよね?じゃあ次の講義で、このステップを一つ一つ詳しく見ていこうね:)
GO TO FULL VERSION