C言語学習ポータル(無料版) 学習コンテンツ 人間がコンピュータになる訓練 バグを見つける思考法——仮説と検証

🔍 人間がコンピュータになる訓練

バグを見つける思考法——仮説と検証

無料公開版に収録・読む目安 12分

🎯 バグの原因を絞り込む手順(再現→範囲を狭める→仮説→1つずつ検証)を身につける

プログラムが思い通りに動かない。これは失敗ではなく、通常運転です。プロでも1日に何度も起こります。違うのは、その後の動き方です。

バグとは何か

バグとは、プログラムが期待と違う動きをすることです。ここで一つ、大事な確認を。

プログラムは、あなたが思った通りには動きません。書いた通りに動きます。

つまりバグがあるとき、機械は正常です。ずれているのは、頭の中の想定と、実際に書いた文字のほうです。これをデバッグ(虫取り)と呼びます。

師範「なぜ動かん」と嘆く前に、「何が起きておるか」を見よ。順序を逆にする者が多い。

やってはいけないこと

まず、やりがちな失敗から。

正しい手順は4つ

  1. 現象を正確につかむ — 「動かない」ではなく「入力に5を入れると、10と出るべきところが0と出る」。ここが曖昧なままだと、この先の全部が曖昧になります
  2. 確実に再現させる — 毎回同じ操作で同じ結果が出ることを確認する。再現できないバグは直せません
  3. 範囲を狭める — ここが本題です(次で説明)
  4. 仮説を1つ立て、1つだけ変えて確かめる — 予想と結果を必ずセットで記録する

範囲を狭めるは、二分探索でやる

前のトラックで学んだ「半分に割る」がここで効きます。

プログラムの真ん中あたりで、変数の値を表示させてみます。そこまで正しければ、バグは後半にあります。おかしければ前半です。これを繰り返せば、100行のプログラムでも7回ほどで原因の行にたどり着きます。

トレース表と組み合わせる

狭められたら、その範囲を紙の上でトレースします。そして、実際の実行結果と突き合わせます。

この「最初に食い違った行」を見つけたら、勝ちです。第3トラックでトレース表を練習してきたのは、この瞬間のためだと言ってもいいくらいです。

バグには3つの種類がある

種類が分かると、探し方も決まります。

3つ目には、機械は何も言ってくれません。だからトレース表が要るのです。「動いているのに間違っている」を見つけられる道具は、今のところ人間の目と表しかありません。

記録を残す

試したことと結果は、必ずメモしてください。「これを試した→変わらなかった」の積み重ねが、犯人を追い詰めます。記録がないと、同じことを3回試して、3回とも気づかない、という事態が普通に起こります。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

バグばぐ

プログラムに含まれる誤りのこと。意図した動きと実際の動きがずれている状態を指し、プログラミングにつきものの現象として扱われる。「虫」を意味する言葉が由来とされ、古くから使われてきたプログラミング用語。

デバッグでばっぐ

プログラムに潜むバグを見つけて直す作業のこと。「なぜ期待通りに動かないのか」を仮説と検証で突き止めていく、地道だが重要な作業。「バグ(虫)を取り除く」という言葉の成り立ちがそのまま作業内容を表している。

同じトラックのほかの項目

トレース表とは——実行を目で見る道具トレース表の作り方と書き進め方のルールを覚え、自分で表を用意できるようになる 代入をトレースする代入が「右辺を計算して左辺に上書きする」動作だと理解し、値の推移を正確に追える 分岐をトレースする条件の真偽を判定し、通った道だけをトレース表に残せるようになる ループをトレースする繰り返しの1周ごとに条件判定・本体・更新を追い、ループ終了後の値まで正しく求められる ラバーダック・デバッグコードを声に出して説明することで、自分の理解の穴を見つけられるようになる エラーメッセージは敵ではないエラーメッセージの構造を知り、英語のまま読んで対処できるようになる 総仕上げ——紙上プログラム実行代入・分岐・繰り返しが混ざったプログラムを、最後まで自力でトレースできる
‹ ループをトレースする ラバーダック・デバッグ ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH