# Debug（デバッグ）

何かが壊れている時：テスト失敗、リグレッション、クラッシュ、未定義動作。

## 症状

失敗したテストまたは報告された症状から始める。明確に述べる：何が機能しないか、期待値は何か。

## 仮説

症状を引き起こしうるものを列挙する。最も可能性の高いものから始める。

## 隔離

最小の再現可能なケースを実行する。関係のないコードを取り除く。一度に一つの変数を変える。

## 観察

実行し、出力を記録し、状態を確認する。症状が消えたら記録する。続くなら記録する。

## 修正

コードを変更する。症状が消えるまで「隔離」に戻って繰り返す。

## 検証

元の失敗したテストが今は通過する。新しい失敗はない。
