エラー解決できない時・バグ対応する時の対処法【SE・プログラマー向け】
SEが教えるエラー解決・バグ対応する時の解決手順を踏んだ対処法を紹介
プログラミングをしているとエラーがなかなか解決できないことがあります。
プログラミング初心者だけがエラーやバグに苦しむと思いがちですが、そんなことはありません。プログラマーやSEとして働いていると、しばしばエラー解決やバグ対応が求められる機会があります。簡単に解決できる問題から、根が深くエラー解析を長時間に渡りおこなわなければならない問題もあります。
WEB・IT業界で働くならエラーやバグと向き合い、解決していく力が求められます。はじめは苦労するかもしれませんが、慣れてくると解決するための重要なポイントやステップがわかるようになってきます。
そこで、私がSEとして働いてきた経験を活かし、エラーやバグへの対処法を紹介したいと思います。
- 目次 -
エラー解析やバグ対応の解決ステップ
エラーやバグを解決するためには、ある程度決まったルーチンワークがあります。そのステップを行うことで少しずつ解決に近づいていきます。
そこでエラーやバグを解決するための解決ステップを紹介します。
手順1:情報収集・観察
第1におこなうのが「状況把握」です。
エラーやバグの内容を正確に把握することに努めます。
発動タイミングや、アクションなど、どんな条件下でどのような挙動をみせるのかを正確に把握するのです。
昔、戦争では敵や己を知ることが大事だと言われていました。エラーやバグについても、まずは解決しようとしているエラーやバグがどういうものかを詳しく知ることが大切です。問題を把握できるように努めましょう。
主に必要なアクションとしては以下のようなものになります。
- 挙動を観察する
- 聞き込みをする
- 設計書などから正常時・異常時の仕様上の動作を把握する
手順2:情報の事実確認
手順1で情報を収集できれば、次に情報の真偽を確認します。
気を付けなければいけないのが、収集したそれぞれの情報が
- 事実
- 思い込み
- 考察
のいずれに該当するのかを仕分けすることです。
この中で正しいと考えるべきは事実だけです。思い込みや考察に当てはまるような情報は、本当にそうなのかを疑うことで、背景に重要な情報が隠されていることがあります。
情報ごとに正しく扱って、間違った情報に振り回されないようにすることがとても大切です。
手順3:情報の解析・分析による原因追及
正しい情報が認識できれば、正しい情報を基に情報を解析・分析していきます。
手順1,2で明確になった「エラーやバグが何者なのか」ということを基に、なぜそれが発生したのかを分析してください。
有名なメソッドで言えば、自動車メーカー大手のトヨタで採用されている「なぜなぜ分析」というものがあります。「なぜ○○なのか?」を5回繰り返し問いかけて、堀深めて物事を考えなさいというものです。
以下に、実際に開発プロセスを改善する時の「なぜなぜ分析」を使った例を紹介してみます。
開発プロセス改善のためのなぜなぜ分析
例:A社がプログラミング開発をしている際、多くのエラーが作り込まれていたので、今後できるだけエラーを作り込まないようにしたいと考えた。そのために開発プロセスを見直すためになぜなぜ分析を使ってエラー予防をおこなってみた。
疑問1回目:なぜそのエラーは作り込まれたのか?
回答1回目:考慮されずに作り込まれていたから
疑問2回目:なぜ考慮されずに作り込まれていたのか?
回答2回目:複雑な条件下で発生するため見逃されていた
疑問3回目:なぜ複雑な条件下では見逃されていたのか?
回答3回目:動作パターンを全て考慮しなかった
疑問4回目:なぜ動作パターンを全て考慮しなかった?
回答4回目:考慮するだけの時間がなかった
疑問5回目:なぜ考慮するだけの時間がなかった?
回答5回目:低予算で見積もりすぎていて時間・人件費がとれなかった
上記例のとおり、5回なぜを繰り返していくと物事を深く考えることができます。その結果、本質的なエラー予防・開発プロセス改善につながることができるのです。
もちろんプログラミングにおいても同じように考えることでエラーやバグの解決に繋がります。
エラー出力を解決したい時のなぜなぜ分析例
例:プログラムでエラーが発生すると相談があった。そのためエラー出力が起きる理由を突き詰めると共に、改善策を考えることになった。
疑問1回目:なぜエラーが出力されたのか
回答1回目:ある関数でエラールートを通ったから
疑問2回目:なぜプログラムはそのエラールートを通ったのか
回答2回目:関数に誤った引数が渡されていたから
疑問3回目:なぜ誤った引数が渡されていたのか
回答3回目:別の関数から誤った引数が渡されたから
疑問4回目:なぜ別の関数から誤った引数が渡されたのか
回答4回目:別の関数で入力チェックが実装されていなかったから
上記のプログラムでは「なぜ?」を5回繰り返すまでもなく原因がわかりました。入力チェックが実装されていなかったのが原因ですね。
このように、「なぜ?」を掘り下げていくことで原因の追究を行うことができるのです。
手順4:対策の考案・実施
原因がわかれば、原因に対する対策案を考え、実施していきます。
この手順の際に気を付けなければいけないことが2点あります。
- バックアップをとる
- 対策案を実施したときの影響範囲を考えなければいけない
ということです。
1.バックアップをとる
対策案を実施するまえに、ソースコードや影響しうるもの(DBなど)のバックアップを取ることを忘れないようにしましょう。
2.対策案を実施したときの影響範囲を考える
たとえば、ある関数で入力チェックが実装されていなかったバグが発見されたとき、入力チェックを実装することで対策しようとしますよね?
この際、何も考えずに実装してはいけません。入力チェックを実装することで、他の正常パターンが上手く働かなくなるかもしれないということを充分に検討してから直すようにしてください。
そうしなければ、当初のエラー以上の問題が発生したり症状が悪化することもあります。
エラーというのは考慮不足で作り込まれているものが多いので、直す際に考慮不足だと同じように新たなエラーが出てしまうということを認識し、丁寧に修正するようにしましょう。
手順5:実施後のフィードバック確認
対策案を実施した後は、実際に動作確認を行い、挙動のフィードバックを確認しましょう。
その際は影響するパターンケースを洗い出し、動作確認するようにしましょう。手順5で話したように、パターンケースを甘くみていると、当初のエラー以上の問題が発生することもあります。充分に注意して直すようにしましょう。
手順を踏むことで順序立てて解決に近づこう
エラーやバグの解決は、なかなか先が見えず困難な壁に思えることも少なくありません。しかしながら、丁寧に手順を確実にこなしていくことで少しずつ解決していくことができます。
特に、今回紹介した手順では手順1の情報収集は甘く見られがちですが非常に重要です。エラーやバグの解決に長けている人は、観察力が非常に優れていたり、仕様を正しく理解していたりと、とにかく手順1の情報収集で得られる情報量がとても多く的確です。
それぞれの手順を丁寧に踏んでいき、エラー・バグの解決に努めていきましょう。