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

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

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

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

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

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

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

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

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


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

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



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


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

語源は「bug(虫)」

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

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

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

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

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


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


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

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

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

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


怖いですね。

  • このバグを発見し、潰すために、開発ワークフローの中には「検証フェーズ」があります。

このフェーズでは「検証仕様書」というテストシートを使用しながら、作ったプログラムを様々な角度でテストしてバグを洗い出します。

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


デバッグスキルは超重要


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

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

すぐ解決するバグもあれば、いくら直しても解決せず「丸1日ハマった」なんてこともザラです。

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

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

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


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


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

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

ただ、これで終わってしまうと寂しいので、デバッグのコツを1つ書いておきます。


デバッグのコツ


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

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

  • 現場のコツ
  • 可能性を1つずつ排除しながら、原因を狭めて特定していくということが大事


例)Webサービスの画面でボタンをクリックした際に上手く動かない場合

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


  • ①ボタンをクリックした後のスクリプトが正常にコールされているか。
  • ②.コールされたスクリプトに全てのパラメーターが正しく渡っているか。
  • ③スクリプトは正しくPHPを呼び出しているか。
  • ④PHP側では正しくパラメーターを受け取っているか。
  • ⑤PHPの処理は正しく行われているか(ここも1ステップずつ見ていきます)
  • ⑥PHPからの結果は正しく受け取っているか。
  • 後処理は正しく行われているか。


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

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

そこにバグがあります。




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


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

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

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

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


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


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

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

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

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

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

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


バグを少なくするための第1歩は「分かりやすいソースコードを書くこと」です。以下の記事も是非参考にしてみてください。

関連記事

正しい変数名の付け方


おすすめ記事
無料メルマガ配信中