「仕様駆動開発(Specification Driven Development, SDD)」について

1. 定義

仕様駆動開発は、システムの仕様(要件や振る舞いの定義)を中心に据えて開発を進める手法のことです。
プログラムの実装よりも先に「仕様」を形式的に記述し、それを基準として設計・実装・テストを行います。

2. 特徴

  • 仕様が第一級の成果物
    コードやテストは仕様の従属物とみなされる。
  • 自動化との親和性
    仕様からテストコードやスタブを生成するツールと組み合わせやすい。
  • 変更に強い
    仕様が明確なら、実装を入れ替えても影響範囲が把握しやすい。

3. 他手法との違い

  • テスト駆動開発(TDD)
    TDDでは「テスト」が最初に書かれる。テストは仕様の断片を表現するが、仕様自体を網羅的に記述するわけではない。
    → TDDが 例示ベース なのに対し、SDDは 仕様ベース
  • モデル駆動開発(MDD)
    MDDではUMLなどのモデルを中心に生成する。SDDはより形式的/動作仕様に近い。
  • 振る舞い駆動開発(BDD)
    BDDは自然言語に近い形でユーザー要求を記述し、テストに結びつける。
    → SDDの一種とみなす考え方もある。

4. 代表的な技術

  • 形式仕様記述言語
    Z言語、VDM、Alloy、TLA+ など。安全性や並行性の検証に強い。
  • API仕様駆動
    OpenAPI (Swagger)、GraphQL SDL → 仕様からサーバ/クライアントコード生成。
  • 契約による設計 (Design by Contract)
    事前条件・事後条件・不変条件を明文化。

5. メリット

  • 仕様と実装の乖離が少なくなる
  • 不具合の早期発見(実装前に仕様段階で整合性チェック)
  • 複雑なドメイン(金融・医療・組込みなど)で有効

6. デメリット・課題

  • 仕様記述にコストがかかる
  • 開発者に形式仕様やツールの知識が必要
  • 要件が流動的な場合、仕様を維持するコストが高い

7. 適用例

  • APIファースト開発:OpenAPI で仕様 → 自動生成 → 実装
  • 分散システム:TLA+ で並行動作や障害時挙動を検証
  • 組込み・安全領域:VDMやZを使って形式的に設計