アナログなデバッグ、ヤバいソース

メルマガバックナンバー 2018/04/29発行

アナログなデバッグって?

そのバグを語れ!

今回のテーマはアナログなデバッグです。

バグの原因が分からない状況で、有効な方法を一つ紹介します。

バグで悩む学生から相談された時、私がよく用いるテクニック?です。

それは…

バグの内容を、人に説明する

って事です。

つまり「どんな状況に陥ってるか」を、他人に話してみるわけです。

 

私が学生の相談を受ける時、最初の会話はほとんどテンプレになります。

学生「先生、ヤバイです。バグが取れないんです!」
私 「じゃ、まず どんな感じか話してみてー」
学生「ア、ハイ。かくかくしかじか…」

こんな風に、現在の状況を具体的に話してもらいます。

そして、あれこれ喋ってるうちに「あ!」と何かに気付き、解決のカギが見つかります。

こんなケースは驚くほど多いです。

情報の整理

なぜ、こんなことが起きるか?

それは、具体的な言葉にすると、脳内で情報が整理されるからです。

1人で考えている時は、頭の中に色んな刺激が飛び交い、いわゆるカオスな状態です。

やってみると分かるんですが
自分が詳しい事でも他人に説明するのは、なかなか難しいですよね。

「アレだよアレ」
みたいに、ついつい代名詞を多用してしまいます。

好きなアニメやゲームの魅力を、見たことない人へ説明しても上手く伝わらない…
そんな経験ありませんか?

そのカオス状態を具体的な言葉にするには、まず考えている事を分割・統合・並び替えする必要があります。

そうやって情報を整理する過程で、新しい視点が見付かり、解決に向かうカギが表れるのです。

とりあえず友人でも同僚でもいいので、何かを話してみると良いでしょう。

紙に書いたり、身振り手振りも交えると尚良いです。

聞いた話ですが、ある達人プログラマーはフィギュアに話しかけて解決策を探るそうです。
これなら1人でも大丈夫ですが、傍から見るとヤバイ人ですね…

話す視点

説明のコツですが、基本は自由に話せば良いです。

もし言葉に詰まるようでしたら、以下を参考にしてみて下さい。

私が学生に合いの手を入れる時、よく使うアプローチです。

そもそも何をしたいのか?(目的)
 実はこれが分かってないケース、マジで多いです
 私もよく自問自答します

どんな時に発生する?(発生条件)
 バグが起きる条件を説明してみる
 発生確率を100%にできれば占めたもの

いつまで動いた?
 最近変更した箇所を思い出す
 ソースじゃなくて、環境設定のケースも

ここは正常に動いてる?
 正常に動いてる範囲を推測する
 不要な所をコメントアウトして、最小構成で動かす

これ呼ばれてる?
 ifブロックや関数の中に入ってない可能性を検討する
 ブレークポイント、print出力で確認する

上の例は話す時だけでなく聞き手に回る時でも、参考になると思います。

人に分かりやすく説明をする、そして脳内を整理する。

これは非常に強力な方法なので、ぜひ試してみて欲しいです。

私は意識高い系っぽく
 オーラルデバッギング Oral Debugging (訳:口述デバッグ)
と読んでます。

前回クイズの答え アニメOP当て

前回のクイズは、こんな問題でした。

>Twitterに動画を上げました。
>これはラズベリーパイとLEDで「あるアニメ」のオープニングを再現した様子です。
>さて、そのアニメのタイトルとは?

正解はドラゴンボールZでした。人造人間編のOPです。

今回は5件の応募を頂き、正解者は3名でした。おめでとうございます。パチパチパチ。
3名の方には、Amazonギフト券をお送り致します。

クイズ!ヤバいソース

さて今回のクイズは、私が経験した恐ろしい話です。

【 問 題 】
詳細は伏せますが
かつて私は某ソース(C言語)の関数冒頭で、こんな記述に遭遇しました。

// この配列は一度も使ってないけど、消すとクラッシュするので
// 絶対にコメントアウトしない事!
char aaaaa[256];

↑をみた時、思わず失禁…はしなかったですが恐怖で体が震えました。

さて、何故これが恐ろしいのか?
その理由をお答えください。

正解した方の中から3名様に、Amazonギフト券コード(500円分)をメールでお送ります。

応募は本メールに返信すればOKです。
※募集は終了しました

今回はここまでです。読んでいただきありがとうございました。

プログラミング書籍の館 江畑


プログラマの名言・格言・心

もっと知りたい?
C言語_初級 | C言語_中上級 | C++_初級 | C++_中上級 | C#_初級 | C#_中上級 | Java_初級 | Java_中上級 | コンピュータ_サイエンス | アルゴリズム_ | ゲーム_プログラミング | DirectX_ | Unity_ | ゲーム_デザイン | ゲームのしくみ_ | 数学_ | プログラミング_テクニック | 歴史_偉人 | ソフトウェア工学_ | 読み物_エッセー | 人生_生き方 | 創造_発想 | 雑誌_ | 漫画_小説_映画 | メルマガのバックナンバー_

Kuniaki Ebata 登録者

プログラマーで現役のスキー国体選手です。
頭脳と体を動かすのが大好きなフレンズなんだね。専門学校で先生もやってます。

教え子をゲーム会社にどんどん送り込み、世界を面白くする野望を実現中。

プログラミングが上達するメルマガやってます。

ここを見たゲーム業界の卒業生へ
新作が出たら、連絡するか現物を送ってくれると嬉しいです。
ただし18禁・CERO-Dの場合は、厳重に梱包の上、品名をパソコン部品にて送る事(だいじ)。