ソフトウェアデバッグスキルの向上-いくつかのヒント





翻訳者から。 多くのコーダーのソフトウェアのデバッグは、退屈で日常的な作業です。 しかし、それでもデバッグなしで行うことは単に不可能です。 この投稿はNick Karnik による元の記事の翻訳であり、初心者のプログラマーだけでなくプロでも見られるデバッグのエラーや欠点に関する彼自身の見解を共有しています。



私たちは皆、時々、残念ながら動作を拒否するコードを書きます。 これは正常であり、開発プロセスの一部にすぎません。 プログラムでエラーが発生した場合、次の対処方法と修正方法がわからない場合があります。 心配しないでください-すべての問題が解決され、経験豊富なコーダーでさえエラーがあります。



Skillboxの推奨事項:実践的な年間コース「PHP開発者からゼロからPROへ」

「Habr」の読者には、「Habr」プロモーションコードを使用してSkillboxコースに登録すると10,000ルーブルの割引があります。


エラーを最小限に抑えるために、プログラミングとデバッグの両方のスキルを開発する必要があります。



それら自体は、論理型と構文型の2つのタイプに分けられます。



最も一般的な開発者の間違い



エラーメッセージが表示されない



最も難しいシナリオの1つは、アプリケーションがクラッシュし、何が起こったのかについてのメッセージがない場合です。 コード内の問題を修正できるようにするには、起動時に発生するのか、プロセスで既に発生しているのかを理解する必要があります。 コードの先頭にアプリケーションメッセージロギングを追加することで確認できます。



ログがない場合、ログに何かが書き出される前であっても、ロード中にプログラムがクラッシュする可能性があります。



メッセージログがある場合は、それを調べて、クラッシュの考えられる原因を見つけます。 検索を絞り込むために、プログラムがその作業の過程でメインイベントをログに書き込むようにすることは価値があります。 この場合、問題は簡単に見つかります。



恐怖症のエラーメッセージ



フロントエンドについて話している場合、通常、エラーはアプリケーション自体、ユーザーインターフェイス、または開発者のコ​​ンソールに表示されます。 端末を使用するバックエンドまたはイベントログでメッセージを確認できる場合があります。 エラーの種類に関係なく、初心者はそのようなメッセージを怖がり、読むことすらしません。



これが、一部の開発者がデバッグに非常に時間がかかる主な理由です。



まず、エラーを調査して、すべてを最も徹底的な方法で分析する必要があります。



システムログを勉強したくない



一部のプログラムは、ログファイルを書き込むか、イベントログを生成します。 これはすべて、有用な情報の保管庫にすぎません。 イベントログでエラーの原因の正確な指示を見つけることができなかった場合は、エラーに関するメッセージ、または逆に何か(モジュール、サービス)の正常な起動を探してみてください。これはエラーの原因を理解するのに役立ちます。



トレースログがありません



トレースは、プログラムのプロセスを追跡し、データを処理するのに役立ちます。 ソフトウェアの実行中にトレースメッセージを記録すると、デバッグプロセスが簡素化されます。 トレースログは、アプリケーションがどのように機能するかを知る簡単な方法です。



段階的に働くことができない



多くの開発者は、大量のコードを作成し、その後アプリケーションの一部としてコンパイルおよびテストします。 しかし、コード内のバグを検索する時間はその量に比例することを覚えておく価値があります。



多くの変更がある場合、突然現れる問題を探すのに多くの時間を費やす必要があります。 段階的に作業するのが最善です。 小さな変更を行い、コードをコンパイルし、アプリケーションをテストしてから、すべてを繰り返します。 変更を小さな反復で実装すると、最終的にアプリケーションの作成プロセスが高速化されます。 何かが機能しない場合は、その理由をすぐに確認できます。



私のコードを書いた後、私はしばしばそれを改訂して、記述を単純化しました。



自動テストを実行したくない



単体テストとエンドツーエンドのテスト自動化により、発生する可能性のあるエラーを特定できます。 エラーの原因の1つは、開発者が徹底的なチェックを実行する前にコードをリファクタリングすることです。つまり、変更は自動的にテストされません。



例外メソッドを使用できない



問題の根本原因を特定できない場合は、例外メソッドを使用する必要があります。 新しいコードブロックをコメントアウトして、エラーがなくなるかどうかを確認できます。 これは問題の診断に役立ちます。



デバッグ中に、特定の仮説を策定し、上記で提案した方法を使用してそれを証明または反証することができます。



StackOverflowを使用したコピーと貼り付け



多くの場合、開発者は、コピーされたセクションが何をしているのか明確に把握することなく、StackOverflowからコードをコピーして貼り付けます。 そのような行動は多くの否定的な結果をもたらし、そのいくつかは暗黙的です。 追加するものに注意を払い、挿入されたコードの実行に関与する関数を理解するようにしてください。



ちなみに、多くの場合、StackOverflowで質問するときは、執筆プロセス中に問題を熟考しているので、少し後で答えます。



チームの一部として問題を議論するときにも同じことが起こります。 問題の原因を考えているからこそ、あなた自身があなたの質問に対する解決策を見つけます。



コードを再検査したがらない



私が知っている最も成功したデバッグ方法の1つは、コードを何度も研究することです。 場合によっては、コードの一部をゼロから作成すると役立ちます。



関数呼び出しを追跡できない



アプリケーションで関数呼び出しを学習することも役立つ場合があります。 変数とその期待値を確認するだけです。 その過程で、プログラムの奇妙な動作につながる問題領域を見つけることができます。



デバッガーの無知



デバッガの使用方法を学ぶ必要があります。 これは時間の最良の投資です。 すべてのIDEには、ほぼ同じように機能する強力なデバッグツールが付属しています。 これらのツールを学ぶと、コードを書くときに問題のほとんどを解決できます。



Skillboxの推奨事項:






All Articles