バグ修正の三つのステップ

記事
IT・テクノロジー

バグ修正の三つのステップ

新年明けましておめでとうございます。本年も宜しくお願いいたします。

今回は、2022 年最初の投稿ということで、バグ修正のコツを紹介します。 プログラミングのバグを修正するには三つのステップが必要です。この記事ではバグ修正の三つのステップについて紹介します!


バグ修正のために必要な三つのステップ

バグ修正を「きちんと」行うには三つのステップが必要です。 実は、バグ修正のステップで多いのが二つのステップで解決しようとしている場合が多いのですが、この方法だとバグを「きちんと」修正できない場合があります。

まずは、必要な三つのステップを紹介します

* 起きている問題
* 問題が起きる原因
* 問題の解決方法
の三つです。

そんなのは当たり前と思うかもしれませんが、かなり多くの場合真ん中の「問題が起きる原因」が飛ばされている場合がとても多いのです。 そうすると、きちんと問題を解決できない場合も結構出てくるというのがこの記事で紹介する事です。

原因がわからないと「有効な対策」が取れない

問題が起きる原因がわからないと、有効な対策を立てるのが難しいというのが「解決できない場合がある」理由です。

問題の解決方法というのは、具体的にどういうことかというと、「原因を取り除く」ことです。 しかし、原因がわからない場合何を取り除いたらよいか分かりませんよね?

真の原因でない物を取り除いても、根本解決にはならない場合があるのは、別の原因(理由)があるからです。 その別の原因が起きれば問題は残るということです。

以前も挙げた例ですが、「熱がある」というのが起きている問題だとします。 本来ならば、何故熱が出ているかをきちんと調べた上で、必要な措置を取るというのが正しい治療になります。しかし、多くの場合は「風邪」で片付けてしまって、風邪薬(解熱剤)で対処する場合が多いのではないかと思います。しかし、原因が風邪でない場合には一時的に熱は下がっても根本治療にはならないので、また熱がぶり返すという事が起きます。

今話題のコロナウイルス(COVID-19)が原因で熱が出ているのに、熱があるのでこれは一般的な「風邪」の症状だということで、コロナに対する治療をしないと、症状が悪化して重症化してしまうというような感じです。

インターネットによる弊害

実は、プログラムのデバッグもインターネットの発達で、この原因をきちんと突き止めずに修正してしまうケースが増えています。 理由は、症状、つまり現在起きている問題を入力すると、それに対応する方法が簡単に見つかるケースが多いからです。最近の検索エンジンは凄くて、エラーメッセージや症状で検索すると大抵は答えが見つかります。

多くの「良くある」ケースでは、検索結果が実際に起きている問題と同じような原因の場合も多いので問題なく修正できる場合が多いのですが、中には、似たような症状でも原因が別にある場合もあります。そうした場合は、真の原因を取り除いていないので問題がきちんと修正されません。

インターネットの検索で安易に修正するとこうした問題が起きる可能性があります。 大切なのは検索で見つけた修正方法は、どんな原因を取り除く対策なのかをきちんと理解して、実際に目の前で起きている問題と照らし合わせて対策をする必要があるということです。

「問題」と「原因」の違い

こうした2つのステップでバグを修正してしまう背景には、意外に問題と原因がゴチャゴチャになっているケースが多いのが理由です。 同じインターネットの検索でも、原因を入れて修正方法を探した方がより良い方法が見つかりますが、最近の検索エンジンは症状を入れてもある程度、対策が見つかるのでこの二つの境界が正しく理解されない場合が増えているのが、こうしたことがおきる原因の一つだと言えます。

少し分かりやすい例を挙げると

a + b x aという計算に

a = 2, b = 3を与えて計算するプログラムがあった場合を考えます。

その場合の実際の数式は以下のようになります
2 + 3 x 2
この数式の計算結果は、「8」ということになりますが、例えば計算の順番を間違えていて、先に「2 + 3」を計算して、その後で「2」を掛けると「10」という結果が出てしまいます。

この場合の問題点は、「計算結果が違う」になります。本来は、「8」になるべき結果が「10」になっているのが「問題」です。 原因は、「計算の順序の間違い」ということになります。従って、対策は、「正しい計算順序に修正する」が対策という事になります。

多くのプログラムの問題は、「期待している処理結果や動作」と「実際の結果」が一致しないという様な場合が殆どです。それは、何らかの形で「表に現れている物」という見方ができます。一方で原因の方は、多くの場合「表に出てこない」「隠れている」ものの場合が多くなります。

極端な話ですが、上の計算の問題を本来は「8」になるはずが、「10」になっているので、結果が「10」になるように修正することも可能です。例えば、結果から「2」を引くように数式を変えてしまえば「a = 2, b = 3」の場合の結果は正しくなりますが、他の数値で計算した場合には正しい答えは出ません。数式を変えているので正し結果が出ないのは当然ですが、ある一つのケースでは答えは一致するようになります。

原因は結果が「8 ではなくて 10 になる」事ではないという事です。 また、計算の順序が違うということはプログラムの中身を見ないと分かりません。つまり、問題は計算の順序が違うことは、ただ計算をしただけではわからないということです。プログラムの外からわかるのは、計算結果が違うということだけという事になります。

これからわかることは、デバッグの基本は、「外から見える問題」から、「プログラムの中で起きている誤った処理という原因」を見つけて、その原因を取り除くというのが正しいステップ、つまり、最初に挙げた三つのステップという事になります。

まとめ
今回は、プログラムのデバッグ(問題修正)の三つのステップについて紹介しました。

「問題をはっきりさせて」、その「原因を探して」、「原因を取り除く」という三つです。 その過程で、問題と原因をごちゃ混ぜにしないのがポイントです。

プログラミング以外でも、同じ様なことが言える場合が多いのでこの考え方はいろいろな事に応用できます。まずは、「問題」と「原因」をハッキリ区別して明らかにすると大抵の問題は解決できます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す