【よくあるバグの例】プログラミングの基本ルール 「分岐」の分岐間違い

【よくあるバグの例】プログラミングの基本ルール 「分岐」の分岐間違い

こんにちは!
フリーランスエンジニアのかたやまです。

今回は、プログラミングの基本ルール「分岐」のよくあるバグ(前編)を解説します。

バグを学ぶべき理由

よくあるバグを知っておくとプログラミングの間違いに気づきやすくなり、プログラムがうまく動かない原因の特定に役立ちます。

プログラミングをしているとき、バグの原因調査に丸一日かかることもあります。「作る」ための技術ももちろん大切ですが、「直す」ための技術も同じように大切です。

今回の「分岐」では、前半と後半にわけて2つも間違いパターンを解説します。どちらも重要なので理解しておいてください。

よくある分岐間違い

分岐処理では、分岐の条件が間違っていることが原因でバグになっていることがよくあります。2つの例で見ていきましょう!

1.エアコン

バグ

暖房の風量を「自動」に設定したら部屋がうまく温まらない

原因

原因を調査すると、風量の自動処理が以下のように設定されていました。

  1. 室内の温度を確認する
  2. エアコンの設定温度を確認する
  3. もし室内の温度がエアコンの設定温度より低かったら、風量を1下げる
  4. もし室内の温度がエアコンの設定温度より高かったら、風量を1上げる
  5. 1分待ってから反復する

この例では、の条件と行動の組み合わせが間違っています。室内の温度がエアコンの設定温度より低かったら、風量を上げるべきです。同様に、室内の温度がエアコンの設定温度より低かったら、風量は下げても大丈夫です。

ちなみには反復を行うための処理です。風量調整は1回きりではなく、エアコンがオンになっている間は常にやるべきのため、1分ごとに反復するようにしています。

2.カーナビ

バグ

カーナビの「右へ曲がる案内」が分かりにくい

原因

原因を調査すると、カーナビの音声案内が以下のように設定されていました。

  1. 右へ曲がるまで、あと何mか確認する
  2. もし50m以内なら、「次を右です。」と音声案内する
  3. もし以外なら、3秒待ってから反復する

一見、問題ないように思えますが「50m以内」という条件が適切ではありません。理由は、想定できていない状況がいくつもあるからです。例えば以下のような状況では、「次を右です。」といった案内は不適切な案内です。

  • 50m以内に右に曲がる道が3つある場合、どの道を右に曲がるべきか混乱する
  • 時速60kmで運転している場合、約3秒後に曲がらなければいけないため、急ブレーキしなければ曲がれない

このように、分岐の条件が適切ではない場合は、ユーザーにとってはバグと思われます。実際に安いカーナビの場合、こういったことはよくあります。カーナビの分岐はあらゆる状況を想像して、状況に応じて細かく処理を考えるべきです。

例えば以下のように案内することで、より親切な音声案内ができると思います。

  1. 右に曲がるまで、あと何mか確認する
  2. もし300m以内なら、「300m先を右です。」と音声案内する
  3. もし50m以内、かつ、右に曲がる道が複数あったら、「○本目の交差点を右です」と音声案内する
  4. もし50m以内、かつ、右に曲がる右が1つだけなら、「次を右です」と音声案内する
  5. もし2~4以外なら、3秒待ってから反復する

このように細かく条件を分けることで、分岐のバグを減らすことができます。

まとめ

今回の「分岐のよくあるバグを学ぼう」は以上です。分岐は条件と処理(行動)をセットで考えるため、どちらか一方でも間違うとバグになります。

今回はシンプルな例でしたが、実際のプログラミングは手順が何百~何万とあったり、順次処理や反復処理が複雑に組み合わされたりすることがほとんどです。その場合でも「分岐条件が間違っていないかな?」と考えることができれば、問題解決に役立つと思います。

では、また次回!

プログラミングを学ぶカテゴリの最新記事