システムアーキテクト 2016年 午前2 問13
問題文
ユースケース駆動開発の利点はどれか。
選択肢
ア:開発を反復するので、新しい要求やビジネス目標の変化に柔軟に対応しやすい。
イ:開発を反復するので、リスクが高い部分に対して初期段階で対処しやすく、プロジェクト全体のリスクを減らすことができる。
ウ:基本となるアーキテクチャをプロジェクトの初期に決定するので、コンポーネントを再利用しやすくなる。
エ:ひとまとまりの要件を1単位として設計からテストまでを実施するので、要件ごとに開発状況が把握できる。(正解)
🔒 解説は解答すると表示されます
ユースケース駆動開発【午前2解説】
正解の理由
設問の正答は選択肢エです。ユースケース駆動開発は「ユーザや外部アクターとのやり取り(ユースケース)」を単位にして機能を定義し、そのユースケースごとに設計・実装・テストまでを順に行う方法論です。つまり「ひとまとまりの要件を1単位として設計からテストまでを実施する」ことにより、要件ごとの進捗や品質状況を明確に把握できる点が利点になります。ユースケースは振る舞い(シナリオ)を中心に記述されるため、垂直スライス(設計→実装→テストの一貫した作業)がしやすく、担当単位での管理や受入れが行いやすいことを根拠にエが最も適切です。
※補足:ユースケース駆動は「ユースケースに焦点を当てる」手法ですが、反復開発やリスク管理と組み合わせて用いられることが多く(例:RUP)、それらと排他的ではありません。
解法ステップ
- 各選択肢のキーワードを抽出する
- ア・イ:反復、リスク低減 → 「反復開発」「リスク駆動」に関連
- ウ:プロジェクト初期にアーキテクチャ決定 → 「アーキテクチャ中心」
- エ:要件単位で設計〜テスト → 「ユースケース単位の垂直スライス」
- 「ユースケース駆動」の核を確認する
- ユースケースはユーザ観点の振る舞い記述で、機能の単位化と垂直な作業が特徴
- 最も一致する選択肢を選ぶ
- 垂直スライスで進めるという記述はユースケース駆動の特徴と一致 → エ
選択肢別の誤答解説
- ア: 「開発を反復するので、新しい要求やビジネス目標の変化に柔軟に対応しやすい。」
誤り。反復開発(イテレーティブ)であればこの利点は正しいが、ユースケース駆動そのものが必ず反復を伴うとは限りません。ユースケース駆動は反復と組み合わせて使われることが多いが、設問の記述は「反復の利点」を述べており、ユースケース固有の利点とは言えません。 - イ: 「開発を反復するので、リスクが高い部分に対して初期段階で対処しやすく、プロジェクト全体のリスクを減らすことができる。」
誤り。これも反復的・リスク駆動なプロセス(リスクファースト)に関する利点で、ユースケース駆動の必須特性ではありません。RUPのようにユースケース駆動+反復+リスク管理の組合せなら成立しますが、設問の趣旨では直接的な説明になっていません。 - ウ: 「基本となるアーキテクチャをプロジェクトの初期に決定するので、コンポーネントを再利用しやすくなる。」
誤り。初期にアーキテクチャを固定するのはアーキテクチャ中心/ウォーターフォール的な方針であり、ユースケース駆動はユースケース(シナリオ)を通じてアーキテクチャ上の要求を明らかにしていくことが多く、必ずしも初期固定を推奨しません。したがって選択肢の記述はユースケース駆動の特徴と一致しません。 - エ: 「ひとまとまりの要件を1単位として設計からテストまでを実施するので、要件ごとに開発状況が把握できる。」
正しい。ユースケース単位で垂直に開発・検証を行うことで、要件ごとの進捗・品質のトレーサビリティが向上します。これがユースケース駆動の代表的な利点です。
よくある誤解
- ユースケース駆動 = 反復開発
誤解の一つ。ユースケース駆動は「何を単位に開発するか」の考え方であり、反復性は別のプロセス特性です。多くの実践では両者は併用されますが、同一視は避けるべきです。 - ユースケースは詳細設計そのものを定義する
ユースケースはユーザ視点の振る舞い・シナリオを示します。内部構造やクラス設計まで記述するものではなく、設計に落とすための入力(要件)と考えるのが適切です。 - ユースケース単位でやれば自動的にコンポーネント再利用が進む
ユースケースは機能粒度を決めますが、再利用性はアーキテクチャ設計やモジュール化の方針に依存します。必ずしも再利用が保証されるわけではありません。
補足コラム
ユースケース駆動は「垂直スライス(vertical slice)」を実現しやすい手法です。垂直スライスとは、ある機能(例:商品購入)について、UI → アプリケーションロジック → ドメイン → 永続化 → テストまでを一つの作業単位で完了させる考え方です。これにより、早期に動く機能を作ってフィードバックを得られるため、受入れや優先順位付けが容易になります。
簡単な例(擬似フロー)
- ユースケース: 「商品をカートに入れて購入する」
- ユースケース記述(主要シナリオ、代替シナリオ、前提条件)
- 設計(APIとドメインモデル、トランザクション)
- 実装(機能を実装)
- テスト(ユースケースごとの受入テストケース作成→実行)
この流れをユースケース単位で繰り返すことで、要件ごとの進捗と品質が追跡できます。
FAQ
Q1: ユースケースとユーザストーリーはどう違いますか?
A1: ユースケースはシナリオ中心で振る舞いを詳細に記述する傾向があり、ユーザストーリーは短い文でニーズを表現して後で詳細化するアジャイル的な単位です。どちらも「機能を単位化する」点で類似しますが、粒度と記述方法が異なります。
A1: ユースケースはシナリオ中心で振る舞いを詳細に記述する傾向があり、ユーザストーリーは短い文でニーズを表現して後で詳細化するアジャイル的な単位です。どちらも「機能を単位化する」点で類似しますが、粒度と記述方法が異なります。
Q2: ユースケース駆動はスクラムと併用できますか?
A2: はい。スクラムのスプリント内でユースケースをストーリーやバックログアイテムに落とし込み、スプリントごとにユースケース単位で完了させる運用は一般的です。
A2: はい。スクラムのスプリント内でユースケースをストーリーやバックログアイテムに落とし込み、スプリントごとにユースケース単位で完了させる運用は一般的です。
Q3: ユースケースの粒度はどう決めるべきですか?
A3: 「一貫して設計→実装→テストが可能な大きさ」が目安です。大きすぎると完了まで時間がかかり、管理しづらくなります。小さすぎるとオーバーヘッドが増えます。
A3: 「一貫して設計→実装→テストが可能な大きさ」が目安です。大きすぎると完了まで時間がかかり、管理しづらくなります。小さすぎるとオーバーヘッドが増えます。
関連キーワード: ユースケース、垂直スライス、トレーサビリティ、RUP、反復開発、リスク管理、要件単位テスト、アーキテクチャ中心設計

\ せっかくなら /
システムアーキテクトを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

