# インターフェース仕様の齟齬による障害 ## 定義 インターフェース仕様の齟齬による障害とは、二つのサブシステム間の接続仕様(Interface Control Document, ICD 等)が、実際に必要な制約の一部だけを記述し、残りを曖昧なまま(あるいは暗黙の前提のまま)残したことにより、双方の実装が個別には仕様を満たしているにもかかわらず、統合時に予期しない相互作用を引き起こす障害クラスである。Apollo 11 の 1201/1202 プログラムアラームでは、PGNS と ATCA 間の ICD が「28V 800Hz 信号の周波数同期(frequency locked)」のみを規定し「位相同期(phase synchronized)」を規定しなかったため、位相差がランダムな値を取り、たまたま90°/270°付近になった場合に CDU カウンタが暴走的に増減して CPU 時間の約13%を奪った。(Source: [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]] §RR ICD 記述) ## 横断的知見 - **「コンピュータエラー」という表層的帰属が根本原因(ドキュメントの不備)を覆い隠す**: 本ソースは LM-1 の delta-V monitor 誤作動(実際は手順変更が仕様書に反映されなかったことが原因)と、Apollo 11 の RR インターフェース問題(ICD の記載漏れが原因)の両方について、当時のメディア・報道が「コンピュータエラー」「チェックリストエラー」という不正確なラベルで片付けたことに異を唱えている。これは [[根本原因分析]]における「表層的な帰属先(ヒューマンエラー、ソフトウェアバグ)への性急な収束が真因調査を止めてしまう」という一般的な失敗パターンの、1969年時点での実例である。(Source: [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]]) - **既知の不具合が「修正されないまま」次のミッションに持ち越される**: RR インターフェースの位相同期問題は Apollo 11 より前の LM-3 射場試験で既に検出・記録されていたが、修正されずに Apollo 11 に持ち越された。事前に発見された不具合がリスク評価の結果「許容範囲内」と判断されて未修正のまま残り、後続ミッションで予期しない条件が重なって顕在化する構図は、[[@1998__CtL__How Complex Systems Fail]]が指摘する「複雑なシステムは複数の潜在的な失敗要因(latent failures)を内包した状態で稼働し続ける」という観察と一致する。(Source: [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]], [[@1998__CtL__How Complex Systems Fail]]) - **ドキュメント不備がソフトウェアの正しさを無効化する**: AGC の Executive/Waitlist 実装自体は仕様通りに正しく動作していた。障害は「ソフトウェアのバグ」ではなく「入力として与えられた前提(RR インターフェースの信頼性)が誤っていた」ことに起因する。これは、耐障害システムにおいてソフトウェアの正しさの検証だけでは不十分で、依存する外部インターフェースの契約(contract)そのものの完全性も検証対象に含める必要があることを示す。(Source: [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]]) ## 未解決の問い - ICD のような形式仕様書における「暗黙の前提」を体系的に検出する手法(契約による設計、形式検証、インターフェースファジングなど)は、Apollo 時代には存在しなかったが、現代のマイクロサービス間 API 契約(OpenAPI, protobuf 等)ではどこまで自動化されているか。本 wiki には契約テスト(contract testing)関連ソースが未収録。 - 「既知だが未修正の不具合」をリスク評価してミッション続行を許可する意思決定プロセス(Apollo 11 の RR モード運用手順)と、現代の SRE におけるエラーバジェット/リスク許容の意思決定プロセスは、どの程度構造的に類似しているか。 ## 関連 - ソース: [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]] / [[@1998__CtL__How Complex Systems Fail]] / [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]] - エンティティ: [[Apollo Guidance Computer]] - 概念: [[根本原因分析]] / [[ポストモーテム]] ## 出典 - [[@2004__AAS__Tales from the Lunar Module Guidance Computer|Tales from the Lunar Module Guidance Computer]](§RR ICD 記述)