フルスタックエンジニアのノウハウ
2020.01.27    2020.03.17

プログラマーはデバッグスキルを磨け!

プログラマーはデバッグスキルを磨け!

こんにちは、徳田 啓です。
Webプログラマー歴20年、【フルスタックエンジニア マスター講座】を運営しています。(生徒数1,800名突破)


プログラミングには「バグ」はつきものです。


プログラマーは、常に何かを作っているイメージがあるかもしれませんが、実際には作ったものが上手く動かずバグの原因を調べたり、直したりしている時間もかなり多いです。


プログラマーはバグと上手く付き合っていく必要があります。


あなたはバグが嫌いですか?


僕はバグが出ると「さあ、見つけてやるぜ!」とむしろワクワクします。


今日はそんな「バグ」についてお話します。



この記事の動画版はこちら

チャンネル登録お願いします!

システムの中に実際に「虫」がいた!


バグとは、プログラムの中に潜む「欠陥」のことです。


語源は「bug(虫)」


プログラムの中で悪さをする虫という意味で、コンピュータに限らず機械の不調を表す言葉として昔から使われてきました。


1947年にハーバード大学の大型コンピューターで誤動作が起こり、原因を調べてみると、中に本物の虫(蛾)が入り込んでいました。
その虫を取り除いたところ、動作が正常に戻ったという話があります。(虫を取り除く=デバッグ)

これが語源という訳ではないですが、実際にコンピュータの中に「バグ」がいた例として有名な話です。


Webサービスのプログラムの中には、実際の虫はいませんが(笑)、バグ(欠陥)は常に存在しています。


これを生み出しているのは他でもない「プログラマー自身」です。


プログラマーの仕事の半分は「バグを潰す」こと


なぜ、バグが発生するのか?


原因は、単純なコードの打ち間違いやスペルミスもあれば、設計上のミスやサーバーやプログラミング言語自体のバグもあります。


開発時やテスト時に気付くバグもあれば、Webサービスを実際に公開し、運用してみて初めて発覚するバグもあります。


バグが発生すると、プログラムが期待通りに動かないだけでなく、プログラムが無限ループしてしまったり、最悪の場合、サーバーのリソースをどんどん食い潰してクラッシュさせてしまったり、個人情報が流出してしまったりと、様々な危険性があります。

怖いですね。


このバグを発見し、潰すために、開発ワークフローの中には「検証(テスト)フェーズ」があります。
このフェーズでは「検証仕様書」というテストシートを使用しながら、作ったプログラムを様々な角度でテストしてバグを洗い出します。


しかし、バグを潰すためにソースコードに手を入れれば、また「新たなバグ」が生まれたりします。


デバッグスキルは超重要


プログラムを作れば作るほど発生する「バグ」


プログラマーは常にバグを潰しながらプログラムを作っています。

すぐに解決できるバグもあれば、直しても直しても解決せず「丸1日ハマった」なんてこともよくあります。


なので、バグを早く解決できるスキル=「デバッグスキル」はプログラマーにとってかなり重要です。


デバッグが速いプログラマーは結果的に開発スピードが速い。


プログラミングの学習では、コーディングスキルの説明がほとんどですが、デバッグスキルもそれと同じくらい「超重要」です。


では、デバッグスキルを高めるにはどうすれば良いのか?


正直なところ「経験」が大事です。


多くのバグを経験することで、「あ、これは〇〇が原因だな」「これは、ここが怪しい」といったように勘所が分かるようになってきます。


ただ、これだけだと身も蓋もないので、デバッグのコツを1つ書いておきます。


デバッグとは、数多くある可能性の中から「原因を特定していく」作業です。


ここを意識しないでやっていると、何から手を付けて良いか分からずパニックになります。


まず、可能性を1つずつ排除しながら、原因を狭めて特定していく、ということが大事です。


例えば、Webサービスの画面で、あるボタンをクリックした際の処理にバグがあり、上手く動かないとします。


この時、いきなり全体を見ようとせず、まずは「ボタンをクリックした直後の処理」から1つずつ追っていきます。


1.ボタンをクリックした後のスクリプトが正常にコールされているか。

 ↓ OK

2.コールされたスクリプトに全てのパラメーターが正しく渡っているか。

 ↓ OK

3.スクリプトは正しくPHPを呼び出しているか。

 ↓ OK

4.PHP側では正しくパラメーターを受け取っているか。

 ↓ OK

5.PHPの処理は正しく行われているか(ここも1ステップずつ見ていきます)

 ↓ OK

6.PHPからの結果は正しく受け取っているか。

 ↓ OK

7.後処理は正しく行われているか。


このように、頭から1つずつ、正常動作を確認していきます。


すると、必ずどこかで上手くいっていない箇所にぶつかります。


そこにバグがあります。


上手く動かないからと、闇雲に修正を試していくのではなく、まずは落ち着いて、原因を絞り込みましょう(ここ重要!)


また、プログラマーは「ポジティブに自分を疑うこと」も重要です。


経験上、プログラムが上手く動かない原因のほとんどは「自分の打ち間違え」です。

丸1日悩んだ結果、単純なスペルミスで「原因これ!?」みたいなことも多いです。


何か問題が起こると、他人や外部を真っ先に疑ってしまいがちですが、プログラミングで上手く動かないことがあったら、まずは自分のスペルミスを疑いましょう。

結果、デバッグが速くなると思います。


真のプログラマーはバグを未然に回避する


経験を積んでくると、「この辺はバグを生みそう」というのが、コードを書いている段階で分かるようになってきます。


変数の名前の付け方だったり、スコープの考慮や条件分岐処理のマッチ順序の工夫など、バグの匂いがする部分を嗅ぎ分けて、本能的にバグを未然に防ぐコーディングが出来るようになっていきます。


とはいえ、バグがないプログラムは存在しません。

人間はミスをする生き物である以上、必ずバグは存在します。


その「前提」を認識しているかどうかも重要です。


プロのプログラマーは、バグがある前提、事故が起こる前提に立ち、それが起こったときに最小限の被害で済むようにコーディングしていくことが大切なんです。

無料メルマガ配信中