本質的複雑性と偶有的複雑性

Fred Brooksが1986年の論文「No Silver Bullet」で提唱したソフトウェア複雑性の分類。

本質的複雑性(Essential Complexity)

ドメインに内在する、避けられない複雑性。問題領域そのものが持つ複雑性であり、どんなに優れた技術や設計を使っても消すことはできない。

例:

偶有的複雑性(Accidental Complexity)

技術的選択や設計の不備から生じる、本来不要な複雑性。適切な抽象化、ツール、設計によって削減可能。

例:

含意

Brooksの主張は、ソフトウェア開発の生産性向上には限界があるというものだった。本質的複雑性は減らせないため、「銀の弾丸」(生産性を劇的に向上させる技術)は存在しない。

しかし、偶有的複雑性の削減には大きな余地がある。型システムによるMake Illegal States Unrepresentableは、不正な状態という偶有的複雑性を排除する手法の一つ。

関連