What Breaks
ソフトウェアは、さまざまな形で壊れる。
現場では、それらが個別のバグや事故として扱われることが多く、
壊れ方そのものが明示的に整理されないまま議論されることも多い。
この章では、「ソフトウェアの壊れ方」を出発点として、
現在どのような破綻が観測されているかを整理する。
ここでの目的は原因や解決策を示すことではなく、
現在どの種類の破綻が観測されているかを、
共通の言葉で指し示せるようにすることにある。
壊れ方の分類
-
データが壊れる
正が一意に定まらず、重複や欠落が観測され、
整合性を前提とした処理が成立しなくなる状態。 -
状態が壊れる
状態遷移の漏れやフラグの増殖が観測され、
画面と内部状態の乖離が生じる状態。 -
時間が壊れる
並行実行や順序逆転、リトライと副作用の干渉により、
二重実行などの不整合が観測される状態。 -
境界が壊れる
外部 API の変更やタイムアウト、入力汚染などにより、
境界の前提が崩れている状態。 -
責務が壊れる
決定主体が不明確となり、判断が分散し、
変更理由が混在している状態。 -
運用が壊れる
デプロイやロールバックが困難となり、
観測不能や設定起因の事故が発生する状態。
各ページでは、壊れている状態と、
現場で観測される兆候を中心に扱う。
原因分析や修復方法は、本章では扱わない。
壊れ方サマリ(参照マップ)
以下は、本章で扱う 6 つの壊れ方を、
それぞれが依存している「暗黙の前提」と対応づけた一覧である。
ここで示す前提は、原因を断定するためのものではなく、
壊れている状態を整理し、指し示すための参照点として用いる。
| 壊れ方 | 崩れている前提 |
|---|---|
| データが壊れる | 正は一つに定まっている |
| 状態が壊れる | 状態と遷移は明示できる |
| 時間が壊れる | 実行順序と回数は制御できる |
| 境界が壊れる | 境界の仮定は守られる |
| 責務が壊れる | 判断と責務は追跡できる |
| 運用が壊れる | 運用は再現・制御できる |
これらの壊れ方は相互に独立ではなく、
一つの前提の破綻が、他の壊れ方を誘発することも多い。
本章ではまず、現在どの前提が崩れているかを問い直し、
どの種類の壊れ方として観測されているかを整理することに集中する。
Notes
本章では、壊れている状態の観測と分類に集中する。
それらがなぜ生じているのか、どのように修復されるかといった議論は、
本章では扱わない。
原因や背景については Why It Breaks の章で、
具体的な失敗の構造については Failure Patterns の章で、
不確実な前提のもとで判断を回復するための考え方は
Restoring Decision-Making の章で扱う。