複雑さの分類
本質的か偶有的か?
『人月の神話』の中のエピソード『銀の弾丸はない』で書かれた。銀の弾丸はないでは、複雑さだけに言及したものではないが、後続研究『Out of the Tar Pit』では、複雑さが最も重要だとして、本質的複雑さと偶有的複雑さに分類して言及している。 偶有的複雑さ
Out of the Tar Pitでは
導出可能な状態
コントロール
が偶有的複雑さの要素として挙げられている。
導出可能な状態
例えば、以下のような銀行口座とその口座への入出金を表す取引で構成されるモデルを考える。
https://gyazo.com/37917b7bcad62afb2a1fbba22b965680
取引を集計しさえすれば、現在の残高は求まるので、口座エンティティには「残高」は本質的には不要ではあるが、実際はその算出にそれなりの計算量が必要なので、口座に「残高」を持たせる設計をするだろう。
https://gyazo.com/496c57dc5637abb6cd6a0ca6f3780754
そうすると、以下のような追加の検討事項が発生する。
取引を登録時に口座の残高の値の更新が漏れないようにしなければならない。
取引が同時に複数発生した時に、口座残高の更新に不整合が発生しないように排他制御を考えなくてはならない。
万が一、取引の集計値と口座残高にずれが発生した場合の対応策を考えておく必要がある。
そもそも、そのズレに気付けるようにリコンサイルの処理を定期的に走らせる必要がある。
このように、導出可能な値を状態として持つと気にすることが増える。これが偶有的複雑さとなる。
コントロール
/icons/hr.icon
その他、技術的制約がもととなり意思決定にトレードオフが発生するものは、たいていの場合、偶有的複雑さである。