Unit 10-08(STAGE 10 の 8 / 8)

壊して確かめるとはどういうことか

学習状況:未着手

このユニットの結論

正しい入力で正しく動くことを確かめるテストだけでは、本番は守れません。

部品を止め、相手を止め、通信を遅らせ、処理を集中させて、「壊れたときに設計どおり振る舞い、戻るか」を本番の前に確かめる。壊れないことは約束できないので、壊れ方を約束し、それを試験で証明します。

1. 何の話か

このユニットは、システムを意図的に壊して、耐え方と戻り方を確かめる試験の話です。

06-05 「絶対に止まらない」は要件になるのか で、「止まらない」ではなく「止まったら何分で、誰が、どう戻すか」を要件にすることを学びました。要件にしたなら、確かめる必要があります。それがこの試験です。世界で共有されている考え方では「レジリエンス試験」「カオスエンジニアリング」などと呼ばれます。

2. なぜ必要か

壊して確かめないと、

ということが起きます。どれも、本番の前に壊してみれば分かったことです。

3. このユニットで分かること

4. 壊れる状況を選ぶ

状況は、構成図と連携の一覧から選びます。思いつきで選ぶと、都合の良い(軽い)状況だけになります。

種類 状況(一般的な例) 確かめること
部品の故障 計算機 1 台の停止、データベースの主系の停止、記憶領域の満杯 自動で切り替わるか。切り替え中の処理は失われないか
相手の停止・遅延 連携先のシステムが応答しない、30 秒遅れる、誤った応答を返す 自分の業務は続くか。再開後に追いつくか
通信の問題 一部の経路の切断、断続的な失敗 再試行で成功するか。二重に処理されないか
処理の集中 通常の 5 倍の要求、一斉のログイン 受け付けを絞って遅れても失わないか。監視が警告するか
時刻と順序 時刻のずれ、順序の入れ替わり 日付の境目の処理が正しいか。順序に依存していないか

5. 期待を先に書き、結果を戻す

期待する振る舞いを先に書きます。 「利用者は気づかない」「取り込みは止まるが業務は続く」「安全に止まって知らせる」のどれかを、状況ごとに決めてから壊します。結果を見てから期待を書くと、何が起きても「想定どおり」になります。

測るものは、検知までの時間、自動で切り替わるまでの時間、人が気づくまでの時間、戻るまでの時間、失われた処理の有無です。特に「失われた処理」は見落とされます。止まらなくても処理が失われれば、業務は壊れています。

結果は設計と運用に戻します。 期待との差の原因(設計、設定、手順、監視)を書き、直して再試験します。直しきれない弱さは「残っている弱さ」として、障害対応の計画(OPS-004 障害対応計画)に引き継ぎます。計画と結果は TST-008 レジリエンス試験計画・結果 に残します。

CASE FACTFROZEN正本に記載されたアステリア案件の事実

アステリア案件の壊れ方に関する記載

  • 約36本のシステム連携。連携の経路に SYS-06 システム連携基盤を通るものと、直接つなぐものがある。外部サービスとして SYS-03 勤怠・工数管理SaaS がある
  • システムに SYS-11 監視・ログ基盤 がある。Vendor B クラウドブリッジの担当範囲に クラウド基盤、ネットワーク、連携、監視 が含まれる
  • 成果物に TST-008 レジリエンス試験計画・結果、OPS-004 障害対応計画 がある
  • P-010 宮田 直人 — テスト・品質管理リーダー、P-011 山下 恵 — 本番移行・運用リーダー

アステリア案件でどの状況が試され、システムがどう振る舞ったかは、正本に記録がありません。記録なし

6. THINK — 「二重化してあるので試験は不要」

テスト計画のレビューで、基盤の担当者が次のように言いました。

「データベースは二重化してあり、自動で切り替わる設計です。わざわざ止めて試験する必要はありません。」

問題

この説明で、試験を省いてよいでしょうか。

判断例を開く

判断

「設計」は、動くことの証明ではありません。

確認すること:

  • 切り替えの設定が、本番相当の環境で実際に動くことを一度でも見たか
  • 切り替えにかかる時間は何秒か。その間の処理は再試行で成功するか、失われるか
  • 切り替わったことを監視が検知し、人に知らせるか
  • 切り替わったあと、元に戻す手順はあるか。それも試したか
  • 業務アプリの側が、切り替えで接続が切れたときに正しく再接続するか(データベースだけの問題ではない)

二重化は「切り替わるはず」の仕組みです。「切り替わった」を試験の記録で示して初めて、要件を満たしたと言えます。

7. よくある失敗

8. 成果物との接続

9. AI WORKFLOW — 壊れる状況の候補を網羅させる

AIは、部品と連携の一覧から、壊れ方の候補を網羅的に挙げ、計画の抜けを探す下書きに役立ちます。

指示例:

「次の部品と連携の一覧から、部品ごと・連携ごとに起こりうる壊れ方(停止、遅延、誤った応答、切断、集中)を一覧にし、添付の試験計画にある状況と、ない状況を分けて示してください。期待する振る舞いの提案や、優先順位の評価はしないでください。」

10. REVIEW — AIの候補を確認する

  • AIが挙げた壊れ方が、この構成で起こりうるか(一般論をそのまま載せていないか)
  • 「ない状況」について、意図して外したのか、見落としかを人が区別したか
  • 構成の情報を AI に渡してよいか(構成情報の扱い)を事前に確かめたか

11. 人間が判断すること

  • どの状況を、どこまで本番相当の環境で壊すか
  • 期待との差を直すか、残っている弱さとして受け入れるか
  • 試験の結果を稼働判定にどう反映するか

Go / No-Go と重大障害判断は、AIへ最終委任しない事項です(正本の方針)。

12. 判断演習

「夜間に工数を取り込み、翌朝までに原価を集計する」処理について、壊れる状況を 3 つ選んでください(部品の故障、相手の停止、処理の集中から 1 つずつ)。

それぞれについて、「期待する振る舞い」を 1 文で書き、「測るもの」を 2 つ挙げてください。そのうえで、期待どおりにならなかった場合に、翌朝の業務がどうなるかを書いてください。

あなたの記録あなたの考え。事実ではありません

判断ノート

既定では保存しないため、ページを離れると消えます。

このユニットで覚えてほしいこと

壊れ方は試験で証明する。構成から状況を選び、期待する振る舞いを先に書き、壊して測り、差の原因で設計と運用を直す。失われた処理を見落とさない。

次に読むもの

本文で参照している成果物:TST-008 レジリエンス試験計画・結果、OPS-004 障害対応計画

関連成果物:未確定(baselineに対応表なし)

関連危機演習:未確定(baselineに対応表なし)

学習状況

状態:未着手