システム障害の原因分析で必要な2つの視点
ITシステムをリリースして本番運用開始後に発生してしまうシステム障害は、もちろん発生しないことに越したことはないのですが、現実問題としてゼロにするのはなかなか難しいです。(だからと言って、「システム障害が起きてもしかたない」と言っているわけではありません。)
もちろん開発者もシステム障害を起こそうと思っているわけではないですし、いいシステムを作ろうと努力しています。(障害が起きれば上司や顧客に怒られますし)
ただ、それでもシステム障害が発生してしまうことがあります。
ありがちな例
ひとたびシステム障害が発生してしまうと、関係者は混乱し冷静な判断ができなくなったり、ピリピリした緊張感漂ったりして、いたたまれない現場となります。それでも当然のごとく、すぐに復旧させることを優先して作業が行われます。障害が復旧すればひとまず「やれやれ終わった」という感じですが、もちろんそれで終わりとはなりません。
なぜそのシステム障害が起きてしまったかの原因分析が行われます。この原因分析についてですが、どうも大事な観点が抜け落ちているのではないかと感じることが多いです。
例えば、サーバ環境の何かの設定が漏れていたことで障害が発生してしまったとします。
多くの場合、障害の原因は「サーバ環境の設定に漏れがあったため」、対策は「今度から設定に漏れがないよう再度チェックをします」といった報告がされます。
ありがちなパターンですが、これでは原因と対策がきちんと分析されているとは言えません。この程度の分析では、同様の障害が再発する可能性は高いでしょう。
何が足りないでしょう?
障害を再発させないために必要なこと
一般的にミスを起こさない(ミスを表面化させない)ためには
ミスを減らす工夫
ミスを見つける工夫
の2つが必要になります。
つまり多くの場合は、上記の例のようにシステム障害の事象に対する原因は分析しているものの、なぜその原因を作りこんでしまったかのかまで深堀されていないのです。
ミスを減らす工夫
一つ目の「ミスを減らす工夫」ですが、先ほどの例で言えば「なぜ設定漏れが起きてしまったのか」ということをもう少し深堀して考える必要があります。
例えば、サーバ環境に必要な設定がリスト化されていて、一つずつチェックをつけながら設定作業をしていけばミスは減るかもしれません。
もしくは、サーバ環境設定ツールを用意して必要な設定が自動的に行われるようにするのもいいかもしれません。
そうではなく、担当者が思い付きで「あと何の設定が必要だったっけ」と考えながら設定していれば、当然ミスは増えるでしょう。
このようにどうすればミスを減らすことができるのかまで考えることが分析です。
ここで一番ダメなのは、「あいつはミスが多いから」とか、(ミスを起こした担当者に対して)「おい、ちゃんとチェックしとけよ」と個人に原因を押し付けてしまうことです。
仕事は個人でするものではなく組織でするものです。個人の能力によってミスが増えたり減ったりしてしまうような仕事の仕方はばくちをしているようなものです。ミスの数が担当者の能力に左右されないように「マニュアルを作る」「自動化する」「複数人で作業する」といった組織の仕組み(プロセス)によって対応しないといけません。
ミスを見つける工夫
どんなに一つ目の「ミスを減らす工夫」をしても、やはりミスをゼロにするということは難しいです。そこで二つ目の「ミスを見つける工夫」が必要になります。
もちろん、先の例にあげたような「再チェックします」では対策になっていません。一度目で見つけられなかったミスが二度目で見つけきれるとは到底思えません。
じゃあ、どうやってミスを見つけるのか。ITシステムの例で言えば、普通はシステムのテストを「単体テスト」「結合テスト」「総合テスト」と分けて実施しています。これもミスを見つける工夫の一つと言えるでしょう。(何のために分かれているか意識していますか?)
あとは、「テストの観点」ということも大事になります。さまざまなテスト項目を設定してテストをしていくわけですが、「このテスト項目はどういうミスを見つけるためのテストなのか」ということをよく考える必要があります。この「テストの観点」に漏れがあると必要なテストが行われず、ミスが含まれたまま出荷(リリース)されてしまうということになります。
テストの自動化もいいですよね。
まとめ
失敗は誰にでもあります。障害を作りこんでしまうのは致し方ない部分もあります。
とは言え、その失敗の原因をきちんと分析しないまま次に進んでしまうと、また同じような失敗を繰り返してしまいます。
障害の原因を作りこまないようにどうすればいいか、作りこんだ原因を見つけるにはどうすればいいか、を深く分析することで次に繋がっていくのです。
この記事が気に入ったらサポートをしてみませんか?