俺のプロジェクトがアジャイル開発でドメイン駆動設計をユースケース駆動開発で行った件

####件の開発の考え方・進め方
**TL;DR.**
ユースケース駆動開発の各マイルストーンをアジャイル開発でのストーリーと捉えイテレーションを回す

####アジャイル型開発
ビジネス要件をユーザーストーリーとしてリストアップして短期サイクルで納品をする
なぜ、「ビジネス要件をユーザーストーリーとしてリストアップし短期サイクルで納品する」かは割愛
[アジャイルソフトウェア開発の奥義から学ぶ](https://qiita.com/minarai/items/07d580368db02a2f32dc)

####ドメイン駆動設計（DDD）とは
顧客が抱える問題は何か（業務の関心ごと、問題領域）にひたすら注目し、解決領域（ソフトウェア）で解決を図る設計手法

####ユースケース駆動開発とは
ビジネス要件からユースケースを洗い出しドメインモデルにマッピングを行う設計手法

####共通項

|共通項|アジャイル開発|ドメイン駆動設計|ユースケース駆動開発|
|:-----------------|:------------------|:------------------|:------------------|
| ビジネス要件  |ユーザーストーリー|ドメインモデル|ユースケース|

####解決しなければいけない問題
- アジャイル開発では実働する納品物を提示し続けることに重点を置いている点がユースケース駆動開発と大きく乖離しているため、ユースケース駆動開発の各ステップのマイルストーンでの成果物をアジャイル開発のストーリーの納品物として顧客に同意を得る

####考え方・進め方
- プロジェクトの屋台骨（進行）はアジャイル開発で行い、ビジネス要件の分析はユースケース駆動開発で行い、解決領域はドメイン駆動設計で行う
- アジャイル開発でのストーリーをユースケース駆動開発でのユースケースに置き換え、プロジェクトの初期段階での分割では「実践ユースケース駆動開発ガイド」で推奨している「主語、述語、目的語」のようなシンプルなユースケースに落とし込む
- ユースケース駆動開発の各ステップをストリーとしてリストアップする



####プロジェクトの初期段階
| STEP     |内容 |    説明    |
|:-----------------|:------------------|:------------------|
| 1|ユーザーストーリーの洗い出し |プロジェクトの最初の段階で顧客と開発者は重要なユーザーストーリーを可能な限り洗い出す<br>ユーザーストーリーは後で追加される可能性があることを両者で同意する|
| 2|コストの見積もり|開発者はストーリー実装の相対時間を表すポイント数で算出する|
| 3|スパイク|ストーリーポイントの絶対値（速度）を知るためにプロトタイプを作成する|
| 4|分割 |最大でもイテレーションサイズ内で実装ができるサイズに分割する<br>長すぎるストーリーは小さく見積りがちだし、小さすぎるストーリーは大きく見積もがちになる<br>「実践ユースケース駆動開発ガイド」では主語、述語、目的語でシンプルにユースケースを記述することを推奨している|
| 5|リリースプランニング |リリース期間のサイズを定める<br>リリースサイクルの理想的なサイズは２ヵ月から４ヶ月と言われている<br>顧客がリリース期間中にどのストーリーを実装したいか選択<br>ストーリーポイントの合計がリリース期間を超えてはならない|

####ユースケース駆動開発でのストーリー
洗い出されたユーザーストーリーはユースケース駆動開発のために少なくとも４つのストーリーの分割する

| STEP     |内容 |    説明    |ストーリーポイント|
|:-----------------|:------------------|:------------------|:------------------|
|1|要求|ドメインモデリング<br>ユースケースモデリング<br>要求レビュー|-pts|
|2|分析と予備設計|ロバストネス分析<br>予備設計レビュー|-pts|
|3|詳細設計|シーケンス図作成<br>静的モデルの整理<br>詳細設計レビュー|-pts|
|4|実装|実装<br>受入テスト|-pts|


####イテレーション開始後
| STEP     |内容 |    説明    |
|:-----------------|:------------------|:------------------|
| 1|イテレーションサイズ |イテレーションサイズを定める<br>イテレーションの理想的なサイズは2週間前後と言われている<br>顧客はイテレーション期間で実装したいストーリーを選択する<br>ストーリーポイントの合計がイテレーションサイズを超えてはならない|
| 2|タスクプランニング|ストーリーをタスクサイズに分割しタスクポイントを設定する<br>開発者にはタスクポイントが割り振られタスクを消化するごとにタスクポイントを消費する<br>タスクポイントがなくなったらイテレーション内でのタスクがいったん終了となる|
| 3|中間ミーティング|ストーリーの進捗確認|
| 4|中間ミーティング|イテレーションの最後にレビューを行い、必要であれば新しいストーリーを追加|

####タスクプランニング
#####要求ストーリー
- 要求ストーリーでのタスクプランニングの例

| STEP     |内容 |    説明    |    タスクポイント    |
|:-----------------|:------------------|:------------------|:------------------|
| 1|ドメインモデリング|最初のドメインモデルの作成|-pts|
| 2|ユースケースモデリング|ユースケース記述とユースケース図の作成|-pts|
| 3|要求レビュー|ドメインモデルとユースケースが成果物|-pts|

#####分析と予備設計ストーリー
-分析と予備設計ストーリーでのタスクプランニングの例

| STEP     |内容 |    説明    |    タスクポイント    |
|:-----------------|:------------------|:------------------|:------------------|
| 1|ロバストネス分析|ユースケースからロバストネス分析|-pts|
| 2|予備設計レビュー|ロバストネス図と更新されたドメインモデル|-pts|

#####詳細設計ストーリー
-詳細設計ストーリーでのタスクプランニングの例

| STEP     |内容 |    説明    |    タスクポイント    |
|:-----------------|:------------------|:------------------|:------------------|
| 1|シーケンス図|シーケンス図を作成|-pts|
| 2|静的モデル|静的モデルを整理|-pts|
| 3|詳細設計レビュー|シーケンス図と静的モデル|-pts|

#####実装ストーリー
-実装ストーリーでのタスクプランニングの例

| STEP     |内容 |    説明    |    タスクポイント    |
|:-----------------|:------------------|:------------------|:------------------|
| 1|実装|コーディング|-pts|
| 2|受入テスト|受入テスト|-pts|