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を使って形式的に設計