いろいろなxx駆動開発があるので、ちょっとメモしておこうかと。
どれもざくっとした内容でしか書いていませんけど。。。
テスト駆動開発 (Test Driven Developmen; TDD)
テストファーストに基づく設計手法で、軽快なフィードバック、きれいで動くコードを作ろうという開発プロセスです。ユニットテストを使ったテスト技法といった程度に見られていますけど、本当はシステムテストも含んだ開発全般を含んでいます。
ビヘイビア駆動開発 (Behavior Driven Development; BDD)
TDDがテストという言葉が先行してしまったので、改めて提唱されたのが振舞駆動開発。システムに期待されている「振る舞い」や「制約条件」を上位レベルからテストしようという開発手法です。JBehaveやxSpecといった自然言語で実装できるフレームワークが登場しています。
品質特性駆動型設計 (Attribute Driven Design; ADD)
品質特性を基にモジュール分割を再帰的に行う開発プロセスです。品質要求もシナリオとして記述し、機能要求や制約と一緒にアーキテクチャーに落とし込んでいきます。アーキテクチャトレードオフ分析方法(Architecture Trade-off Analysis Method; ATAM) というに品質要求に関する判断/選択/決定の結果を評価する手法と一緒に用いられるようです。
ユーザ機能駆動開発 (Feature-Driven Development; FDD)
ユーザーには価値を提供しなければなりません。概念モデルからユーザーに提供する価値を抽出し、インクリメンタルな開発を行う手法。
ドメイン駆動設計 (Domain-driven design; DDD)
ドメインとはシステムが対象とする業務知識や適応範囲です。ユーザー視点の言葉で分析までしていても、システム都合で設計の構造を決めてしまいがちです。分析と設計の間に致命的な亀裂があるようでは開発はままになりません。レイヤーとコンテキスト定義によりモデルと設計に一貫性をもたらします。
モデル駆動開発 (Model Driven Development; MDD)
設計とアーキテクチャがそれぞれ独立して変更するための開発手法。ドメイン固有言語(domain-specific languag; DSL)を使ってシステムに依存しない設計を行い、プラットフォームに特化したモデルに変換する。
ユースケース駆動開発 (use case driven development; UCDD)
システムに関わるアクターを識別し、アクターの振舞をユースケースとして定義します。ユースケースを実現するためにロバストネス分析を行い、システム設計に落とし込んでいきます。
証明駆動開発 (Proof Driven Development; PDD)
証明によってプログラムが期待通りの性質を有しているかを確かめながら開発していきます。数学的な観点ですね。Coq/Gallinaといった定理証明支援系言語を使ってテストを行います。
PDDは、ほにゃらら駆動開発を調べていたら出てきました。
全然知らないですね。