本質的複雑性と偶有的複雑性
Fred Brooksが1986年の論文「No Silver Bullet」で提唱したソフトウェア複雑性の分類。
本質的複雑性(Essential Complexity)
ドメインに内在する、避けられない複雑性。問題領域そのものが持つ複雑性であり、どんなに優れた技術や設計を使っても消すことはできない。
例:
- 税率計算における商品カテゴリ・地域・顧客種別の組み合わせ
- 会計システムにおける複式簿記のルール
- 医療システムにおける診断ロジック
偶有的複雑性(Accidental Complexity)
技術的選択や設計の不備から生じる、本来不要な複雑性。適切な抽象化、ツール、設計によって削減可能。
例:
- 不適切なデータ構造による冗長なコード
- レガシーシステムとの互換性維持
- 言語やフレームワークの制約による回避策
含意
Brooksの主張は、ソフトウェア開発の生産性向上には限界があるというものだった。本質的複雑性は減らせないため、「銀の弾丸」(生産性を劇的に向上させる技術)は存在しない。
しかし、偶有的複雑性の削減には大きな余地がある。型システムによるMake Illegal States Unrepresentableは、不正な状態という偶有的複雑性を排除する手法の一つ。
関連
- Make Illegal States Unrepresentable
- 構造と振る舞い:型とテストによるアジリティと品質の両立
- 銀の弾丸症候群 - 「銀の弾丸はない」の派生
- 技術的負債 - 偶有的複雑性の蓄積