これはシステムやプログラムの障害(と思われる現象)に遭遇したとき、あるいは障害解析を依頼された特にはじめに確認することリストです。これ全てが必要だとは限らないし、これで十分だとも限りません。テンプレート代わりにして適宜カスタマイズして利用してもらえればと。
- いつ?
- どこで?
- だれが?
- 何をしようとした?
- なぜ?
- 具体的にどんな操作をした?
- 本来どうなるはず?
- 実際どうなった?
- 再現する?
- 何か思い当たることはある?
質問形式にしてみました。問いかける相手はお客さんかもしれないし、運用チームかもしれないし、後輩かもしれないし、あるいは自分にかも知れない。
テスターの立場の場合この問いかけを参考に報告すれば喜ばれるかもしれない。
いつ
障害に遭遇した時間。大抵は年月日時分がだいたいわかれば良い(秒まであっても時計がずれてたりするし)。
回答例
2017年6月15日8:35頃
質問の狙い
- どのバージョンでの障害かを特定する際のキーとなる
- 膨大なログ解析する時に該当箇所を特定するキーとなる
- 遭遇時期だけで原因が推測できることもある
- その時間はメンテナンス中です とか
- あ、リリース直後だ とか
どこで
障害に遭遇した場所。開発環境なのか、テスト環境なのか、はたまた実働環境か。複数サーバーが立ってたら、何号機でおきたのまでわかると嬉しい
回答例
連結環境B号機
質問の狙い
- ログなどを引っこ抜く場所を特定する
- 再現できる環境を得る
- 改修後にどこでテストしなければいけないか把握する
- 開発環境でのバグなら開発環境で修正が確認できればいいし、実環境なら受け入れテストの環境でテストしないと
だれが
障害に遭遇した人。お客様かテスターか自分かになると思う。可能なら氏名で書くこと。
回答例
山田太郎
質問の狙い
- ヒアリングできるように
何をしようとした?
大きなくくりで何をしようとしたのか。ざっくりでいい。
回答例
商品データゼロ件にして商品検索をしようとした
質問の狙い
- 障害のイメージを把握するため
なぜ?
なぜそれをしようとしたのか。ここは「連結テスト項目表のNo3を実施するため」とかでよい。ここに関してはお客様にはきけないかな(業務のためだろうし)。
回答例
連結テスト項目表のNo3を実施するため
質問の狙い
- 手っ取り早く話をすすめるため(「どうなった?」以外の殆どがここに書いてある)
- すぐ対応する必要があるのかの切り分け
- この障害のせいで他のテストが止まらないか
具体的に何をした?
やったことをはっきりさせる。
場合によるが、概ね下のような情報があればベスト
- どのモジュールを使って
- どんな設定をして
- どんなデータを入れて
- どんな画面操作を行った?
可能ならこの時点で集められるものは集めておいたほうが良い。使ったモジュールのバージョン、設定ファイル、あるならオペレーション時の画面キャプチャ(エクセルに貼りける必要はない)。
回答例
- 使用モジュール:ver1.3
- 設定:application.propertiesの標準データ
- 投入データ: 連結テスト用標準データを投入した後、商品テーブルを全て削除
- オペレーション
- ログイン画面を表示
- TESTUSER, passwordでログイン
- メニューから商品検索画面をクリック
- 「歯磨き粉」で検索実行
質問の狙い
- 再現方法をはっきりさせる
- 操作方法に間違いはないか判断する
本来どうなるはず?
本来期待される挙動。
回答例
画面に「該当する商品がありません」と表示される。
質問の狙い
- オペレータとの認識合わせ
実際どうなった?
実際になにがおきたのか。
- 画面はどうなった?
- システムエラー画面に飛んだ
- 画面にメッセージは表示されていないか
- システムエラー画面に飛んだ
- コンソールには何か出てる?
- とくに何も出ていない
- ログは?
- スタックトレースは出てる?
ログに関しても、残しておくのが良い。どのログかははっきりさせること。「ログって、具体的になにがあります?」とか認識合わせしておいたほうがいい。「(サーバ)ログ見ました?」「(アプリログは)見ました。」というすれ違いは避けたい。
回答例
システム画面に遷移した。エラーメッセージは
「システムでエラーが発生しました。管理者にお問い合わせください。(エラーコード:8080)」
コンソールにはなにも出力されていない。
syse.logに以下のエラーが出力されている
(スタックトレースを貼り付けるが)
質問の狙い
- これがないと始まらない
- 再現させる手間を省ける
再現する?
同じ方法でやってみて、再現するか。
回答例
必ず発生する。
質問の狙い
- もう一度やってみてもらうことで手間を省ける
- オペレータの勘違いをフィルタする
- もう一回やってみたらボタンまちがえてました
- 初期切り分けの判断材料になる
- この内容で常に再現するなら単純なコーディングミスだろう
- たまに発生するとなると厄介な問題かもしれない
- 絶対に発生するならすぐ直さなければならない
- 頻度が少ないなら優先度を下げて一旦再現待ちとするか(見なかったことにはしないこと)
何か思い当たることはある?
ここまでで原因に心当たりがない場合、とにかく何か情報をもらう。
回答例
- リリース直後に発生した
- 設定を変えた直後に発生した
- そういえば午前中には起きなかった気がする
- 実はサーバー起動方法に自信がない
- 2つ前のバージョンではよく発生してました
質問の狙い
- 原因の切り分け
- ああ、新モジュールが原因か
- それは設定不正だな
- 時間が絡んだ処理?もしかいて日付計算間違えてる?
- 起動するときにデバッグオプション渡してる?
- え?デグレ?
ざっとこれくらい情報が集まればスムーズに障害解析にうつれて8割型解決するんじゃなかろうか?