問題の原因を調査をする際には大きく分けて2つのステップに分かれます。
絞込み(どこでおかしくなっているか)→検証(何がおかしくなっているかの)
例えばデバッグツールなどを使えば「何がおかしくなっているかの検証」を進めることができますが、このようなツールは詳細にデータを出す反面、範囲が広すぎると膨大なコードの森でさまようことになります。またトラップを仕掛けるにしても、あまりにもたくさんのトラップ箇所があるために仕掛けるにしても、トラップの結果を検証するにしても時間がかかることになります
絞込みとは、正しいプロセスがあり、そのプロセスのどこでエラーが生じているかを明らかにすることです。
それに対して検証は何がおかしいか、例えばデータがおかしいのか、デザインがおかしいのか手順がおかしいのかを明らかにすることです。
絞込みをどのように進めるかプログラムの移行時に問題が発生した状況を通して考えて見ます。
マシン1で開発したプログラムをマシン2に移行します。マシン1では必要と考えられるすべてのファイルをCDROMメディアに書き込みます。その後マシン2にCDROMから読み込み、対象となるフォルダにすべてリストアします。しかしマシン1で稼動していたプログラムはマシン2では正常に稼動しなかった(プログラムを実行するとプログラム内で発行しているメッセージが出力されて失敗するとします)
まず絞込みをする際に明らかにしなければならないのは「全体的なプロセス」です。このプロセスはほぼ時系列でとってあげれば間違いはないでしょう。必要に応じて業務手順書・OSIレベル・ネットワーク追跡などを利用します。
マシン1からCDROM書き込み -> CDROMをマシン1からマシン2へ移動 ->
マシン2でのCDROM読み込み -> リストア
マシン1では正常にプログラムが動いていたということから、マシン2依存の問題ではないかぎり、上記プロセスのどこかで予期せぬ問題が起きたと仮定できます。
各プロセスアイテム毎に発生しそうなエラーを記述していきます。
= マシン1からCDROM書き込み
書き込みエラー 権限 CDROMのフォーマットエラー CDドライブの破損
= CDROMをマシン1からマシン2へ移動
メディアの物理的破損
= マシン2でのCDROM読み込み
読み込みエラー 権限 CDROMのフォーマットエラー CDドライブの破損
= リストア
ファイルが足りない 権限
次に発生しそうなエラー候補に対して、簡単な検証で済むものについては検証して除外をします。
ここでは
1.別のCDを読み込ませることでCDドライブの破損がマシン1/2では発生していないことを検証したとします。 2.権限はrootを使っており問題がないとします。
残ったエラーの候補については発生しそうなものについて、優先度をつけます。優先度はあくまでどのステップで問題が発生しやすいかを図る目安です。
= マシン1からCDROM書き込み
1.書き込みエラー 3.CDROMのフォーマットエラー
= CDROMをマシン1からマシン2へ移動
2.メディアの物理的破損
= マシン2でのCDROM読み込み
4.読み込みエラー 5.CDROMのフォーマットエラー
= リストア
6.ファイルが足りない 7.権限
各プロセスについて期待している結果を明らかにします。
= マシン1からCDROM書き込み
-> 書き込まれたファイルがlsコマンドの一覧で表示できること -> 書き込まれたファイルをマシン1にリストアしなおすと、オリジナルのファイルとすべて同一になること
= CDROMをマシン1からマシン2へ移動
-> CDROMは緩衝材に包まれていること -> CDROMに傷はついていないこと
= マシン2でのCDROM読み込み
-> マシン2で読み込まれたCDについてオリジナルのファイルがすべて存在すること -> オリジナルのファイルのサイズと同一であること
= リストア
-> リストアした結果のファイルがすべてオリジナルのファイルと同一であること -> オリジナルのファイルから作成したハッシュ値がオリジナルのファイルのハッシュ値と同一であること
期待している結果は、その結果が真であれば作業が問題なく進んだことを示すものでなければなりません。
上記の期待結果と実際の結果を比較することでいづれかのプロセスで、齟齬がでてきます。これによりどこのプロセスで問題が発生したかがはっきりします。
例えばマシン2でのCDROM読み込みで期待した結果がでなかったとすれば、マシン1→マシン2への移動まではうまく実行されたがマシン2でのCDROM読み込みがうまくいっていないことが分かります。
すべてのプロセスで期待結果と実行結果が同一であるにもかかわらず、やはり作業がうまくいっていない場合には、2つのことが考えられます。
プロセス以外の問題(マシン2の不備) 期待結果に不備がある