初心者あるある「エラーメッセージの通りやってるのに解決できない><」
エラーメッセージに書いてある通り対処しようとしても解決できない。
その裏に潜むことを考えないといけない。
みたいなのTwitterで見かけました。
でもそんな超能力者みたいなことできません……というかそもそもエラーメッセージって解決方法は教えてくれないんですよ。
注意すべきは「現象」と「理由」と「解決方法」をわけて考えること
エラーメッセージのほとんどは「現象」です。
- ログインできませんでした
- 404ファイルがありませんでした
- シンタックス(構文)がおかしいです
これらはすべて「現象」つまり「エラーが起きましたよ」ということしか言ってないです。
解決策は言ってません。だからここであせっちゃだめなんです。
JavaScript のエラーメッセージの例です。
console.logg("吾輩は猫である")
Uncaught TypeError: console.logg is not a function
まず現象を確認する
このエラーは 「console.logg が function じゃない」 と言ってます。それしか言ってないです。
これがエラーの「現象」です。起きたことを淡々と言ってるだけです。
次に理由を考える
今回の例では console オブジェクトに logg という function がないからエラーになってます。
これがエラーになった「理由」です
こにはある程度の知識が必要です。
そして解決方法を考える
logg は log のスペルミスだ!修正しよう!です。
ここには意思が入ります。
※ひょっとしたら logg という function を作るのが正解かもしれませんが
***
すごい当たり前のこと言ってるように聞こえると思いますがエラーメッセージを見てすぐに解決策を考えてテンパる人はこのステップを理解していないことが多いです。
特にまだ勘所がわからないうちは「エラーだ!どうやって解決しよう!」の前に冷静にこのステップで考えてみることをおすすめいたします。
[ここから中級者向け説明] エンジニアの用語で理解しなおす
少しだけ正しい用語で解説します。
- バグ(欠陥) ・・・プログラム上に埋め込まれた不具合のことです。ここでちょっと注意ですがこれは現象のことではなくプログラム上のミスのことです。
- 故障(フェイラー) ・・・バグのあるプログラムを実行した結果起きた問題です。これがエラーという現象です。
- ミス ・・・バグを埋め込んでしまった要因です。例えば知識不足とか仕様理解不足とかです。
- インシデント ・・・思った通りに動かないことです。
バグがあってもそのバグが実行されなければ故障は発生しません。
実行されないコードにバグがあっても問題おきません。
またはバグが複数あってうまく連携して結果的に故障が発生せずに正しい動きになってしまうこともあります。
テストのやり方が間違っていたら本当は問題ないのにインシデントになることもあります。
バグをなおすだけではなくバグが生まれた原因であるミスの対策も必要です。
などなど
・・・ただ単に「バグ」というざっくりした用語だとざっくり理解しかできませんが、用語やステップを理解することでより細かくバグのことを考えることができます。
※ 用語は ISTQB/JSTQB というソフトウェアテスティング資格の用語です。