見出し画像

欠陥から障害までを考えてバグを見つめてみる

※こちらの記事はhayu自身の勉強のために「デバッグの理論と実践」を読んで書いた自己満記事です。ちゃんとした知識を得るには本を読みましょう。
https://www.oreilly.co.jp/books/9784873115931/


エンジニアの中でバグに遭遇したことがない人はおそらくいないでしょう。いや、絶対いないでしょう。

正常に動いていてると思った矢先に「何か」が「外部」から侵入してきて、(あたかもそれは虫のように)あなたの作ったプログラムは急に不具合を引き起こされます。

のように見えますが、幸か不幸かプログラムは書いたとおりにしか動きません。あなたがバグを引き起こしているのです。不思議ですよね。人間の書くプログラムには「欠陥」があります。そうしてその欠陥によりプログラムは「失敗」するのです。

プログラムの欠陥から失敗に至るメカニズム

1. プログラムが欠陥を作る
(ここでいう欠陥とは障害を引き起こすコードのことです)
欠陥を作るプログラムを作成するのはそもそも誰でしょうか?私たちエンジニアです。私たちエンジニアが障害を作っているということになります。
ですが、全ての障害が私たちエンジニアの落ち度というわけではありません。以下の場合があります。

・当初の仕様が、将来起こりうる変更を予測していなかった
・ユーザーがそのプログラムの動作を始めてみるときだけ、「障害」とみなされる
・モジュール化されたプログラムの場合、単体のモジュールで障害が発生しなくても、2つのモジュール間の インターフェースの非互換により障害が発生することがある
・分散型プログラムの場合、いくつかのコンポーネント間の予測不能な相互作用によって、障害が発生することがある

上記の理由で問題が発生するのは技術的問題ではありません。
残念ながら、誰も間違っていなくとも障害は起きるものです。

2. 欠陥は感染する
欠陥のあるプログラムが実行されると、欠陥は感染していきます。
一度欠陥のある状態になった時点で、以降のプログラムの状態は作成者の意図しないものとなっているのです。

3. 感染の伝播
モジュールというのは入力が意図しないものになった場合、出力も意図しないものになりますよね。そのようにして感染は伝播していきます。

4. 感染は障害を引き起こす
障害というのはプログラムの振る舞いのうち「外部から確認できる」エラーのことをいいます。

こうして、プログラムは障害を起こします。

iOS の画像 (2)


次は、TRAFFICというデバッグにおける7つの手順を勉強します。

この記事が気に入ったらサポートをしてみませんか?