ソフトウェア工学の法則
概要
ソフトウェアエンジニアリングの法則は、システム設計・チーム運営・意思決定に影響を与える原則やパターンの集まり。
主な法則には、組織構造、計画、品質、スケール、設計、意思決定など幅広い分野が含まれる。
各法則は、現場での実践やプロジェクト運営に重要な示唆を提供。
代表的な法則をカテゴリごとに日本語で要約。
実践的な知識としてエンジニアやマネージャーに有用。
ソフトウェアエンジニアリングの主な法則と原則
- Conway's Law
- 組織のコミュニケーション構造が、その組織が設計するシステムに反映される傾向
- Premature Optimization (Knuth's Optimization Principle)
- 時期尚早な最適化は多くの場合、害となる
- Hyrum's Law
- API利用者が十分に多い場合、すべての観測可能な挙動に依存するユーザーが現れる
- Boy Scout Rule
- コードを改善してからコミットする習慣
- YAGNI (You Aren't Gonna Need It)
- 必要になるまで機能追加を控える原則
- Brooks's Law
- 遅延したプロジェクトに人員を増やすと、さらに遅延する
- Gall's Law
- 複雑なシステムは、動作する単純なシステムから進化する
- Law of Leaky Abstractions
- すべての非自明な抽象化には、どこかで漏れが生じる
- Tesler's Law (Conservation of Complexity)
- 複雑さは消せず、移動しかできないという原則
- CAP Theorem
- 分散システムでは一貫性・可用性・分断耐性のうち2つしか同時に満たせない
- Second-System Effect
- 小さな成功システムの後継は過剰設計になりやすい
- Fallacies of Distributed Computing
- 分散システム設計者がよく陥る8つの誤った前提
- Law of Unintended Consequences
- 複雑なシステムの変更には予期せぬ結果がつきもの
- Zawinski's Law
- すべてのプログラムは最終的にメールを読む機能を持つよう拡張される傾向
- Dunbar's Number
- 一人が維持できる安定した人間関係の上限は約150人
- Ringelmann Effect
- グループが大きくなるほど個人の生産性は低下
- Price's Law
- √n人が全体の50%の仕事をする
- Putt's Law
- 技術を理解する人は管理しない、管理する人は技術を理解しない
- Peter Principle
- 階層組織では無能レベルまで昇進する
- Bus Factor
- 離脱でプロジェクトが危機に陥る最小人数
- Dilbert Principle
- 無能な社員ほど管理職に昇進しやすい
- Parkinson's Law
- 仕事は与えられた時間をすべて使って膨張する
- Ninety-Ninety Rule
- 最初の90%の開発で90%の時間、残り10%でさらに90%の時間が必要
- Hofstadter's Law
- 常に予想より時間がかかる
- Goodhart's Law
- 指標が目標になると、その指標の有効性が失われる
- Gilb's Law
- 測定できるものは、測定しないより良い
- Murphy's Law / Sod's Law
- 失敗する可能性があるものは必ず失敗する
- Postel's Law
- 自分は厳格に、他者には寛容に対応
- Broken Windows Theory
- 小さな問題も放置せず修正する
- Technical Debt
- 開発速度を遅くする全ての負債
- Linus's Law
- 十分な人数が見れば、バグは浅い
- Kernighan's Law
- デバッグはコーディングの2倍難しい
- Testing Pyramid
- 単体テストが多く、統合テストは中程度、UIテストは少数が理想
- Pesticide Paradox
- 同じテストの繰り返しは効果が薄れる
- Lehman's Laws of Software Evolution
- 現実を反映したソフトウェアは進化し続けるが、限界もある
- Sturgeon's Law
- 全体の90%は駄作
- Amdahl's Law
- 並列化による高速化は直列部分で制限される
- Gustafson's Law
- 問題サイズを大きくすれば並列処理の効果は増す
- Metcalfe's Law
- ネットワークの価値はユーザー数の2乗に比例
- DRY (Don't Repeat Yourself)
- 知識は一意に管理
- KISS (Keep It Simple, Stupid)
- 設計はできるだけシンプルに
- SOLID Principles
- 保守性・拡張性を高める5つの設計原則
- Law of Demeter
- 直接の友達(オブジェクト)だけとやり取り
- Principle of Least Astonishment
- 驚きが最小となる挙動を目指す
- Dunning-Kruger Effect
- 知識が浅いほど自信過剰
- Hanlon's Razor
- 悪意よりも愚かさや不注意で説明できる
- Occam's Razor
- 最も単純な説明が正しいことが多い
- Sunk Cost Fallacy
- 投資した分に執着し、撤退できなくなる心理
- The Map Is Not the Territory
- モデルや図は現実そのものではない
- Confirmation Bias
- 自分の信念を補強する情報を重視する傾向
- The Hype Cycle & Amara's Law
- 短期的な効果を過大評価し、長期的な影響を過小評価
- The Lindy Effect
- 長く使われているものほど今後も続く可能性が高い
- First Principles Thinking
- 複雑な問題を基本要素まで分解し再構築
- Inversion
- 逆の結果から問題解決を考える手法
- Pareto Principle (80/20 Rule)
- 80%の問題は20%の原因から生じる
- Cunningham's Law
- ネットで正しい答えを得る最善策は、間違った答えを投稿すること
上記はソフトウェアエンジニアリング分野で広く知られる法則や原則の要約。
実務での意思決定・設計・チーム運営・品質管理など、多岐にわたる場面で活用可能。