Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
分析・設計・テストで活きる ユースケースシナリオの書き方と使い方
Search
男爵
December 08, 2021
Programming
4
9k
分析・設計・テストで活きる ユースケースシナリオの書き方と使い方
『現場から学ぶモデル駆動設計 ユースケース駆動開発をやってみた』の発表資料です。
https://modeling-how-to-learn.connpass.com/event/229330/
男爵
December 08, 2021
Tweet
Share
More Decks by 男爵
See All by 男爵
デッドロックを回避するリポジトリ実装の勘所
dnskimo
3
430
Scalaで始める表明プログラミング
dnskimo
3
820
JIRAとGASで半自動化!カンバンメトリクス
dnskimo
3
1.1k
PHPではじめるCQRSっぽいやつ
dnskimo
9
2.8k
ユースケースシナリオのススメ
dnskimo
7
7.5k
PofEAAで考えるSaaSバックエンドの作り方
dnskimo
3
6.6k
契約による設計事始め
dnskimo
19
7.3k
PHPではじめるCQRS
dnskimo
5
3.4k
PofEAAで読み解くDoctrine2
dnskimo
3
1.7k
Other Decks in Programming
See All in Programming
良いユニットテストを書こう
mototakatsu
7
2.2k
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
360
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
380
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
5
1.2k
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
130
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
540
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
3
370
たのしいparse.y
ydah
3
120
Security_for_introducing_eBPF
kentatada
0
110
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
40
2.4k
Why Our Code Smells
bkeepers
PRO
335
57k
Agile that works and the tools we love
rasmusluckow
328
21k
Rails Girls Zürich Keynote
gr2m
94
13k
Gamification - CAS2011
davidbonilla
80
5.1k
The World Runs on Bad Software
bkeepers
PRO
65
11k
GitHub's CSS Performance
jonrohan
1030
460k
Site-Speed That Sticks
csswizardry
2
190
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Bash Introduction
62gerente
608
210k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Designing Experiences People Love
moore
138
23k
Transcript
分析・設計・テストで活きる ユースケースシナリオの書き方と使い方 @dnskimox 2021/12/08 ユースケース駆動開発をやってみた
自己紹介 本名:丹賀健一 ハンドルネーム:男爵 Twitter:@dnskimox 所属:Alp, Inc. / Scalebase 業務経験:イラストSNS、C2Cショップ作成サービ ス、ソシャゲバックエンド、サブスク管理SaaS
好きな話題:OOP、DDD、アジャイル 好きな言語:Scala、PHP
Alpの開発プロセス *Product Requirement Document *
コンテンツ 1. コーバーン流 ユースケースシナリオ 2. 創作とコミュニケーションの協調ゲーム 3. クラスの候補に責務を割り当てる 4. 機能のスライスをテストする
5. 次のゲームの準備
1. コーバーン流 ユースケースシナリオ
アリスター・コーバーン アジャイルマニフェストを作った17人のう ちの1人。軽量開発手法のクリスタルファ ミリーの提唱者。クリーンアーキテクチャ に影響を与えたヘキサゴナルアーキテク チャを考えた人。
ユースケース実践ガイド ユースケースについて体系的に学べる一 冊。本当に一冊丸々を使ってユースケー スについて語っている。特にユースケー スシナリオ(ユースケース記述)に非常に 重点を置いているのが特徴。ユースケー スの構造化、ユースケースを使ったプロ ジェクトマネジメントなど応用的な内容も。
ユースケースは、システムの振る舞いに関する利害 関係者間の契約を表現するものです。(中略)なんら かの目的を達成するために、主アクターはシステムと の相互作用を開始します。すべての関係者の利益を 守りながら、システムはそれに応答します。 『ユースケース実践ガイド』
コーバーンのシナリオフォーマット • 主アクター、支援アクター • 設計スコープ • 目的レベル • 事前条件 •
主成功シナリオ(主シナリオ、基本コース) • 拡張(副シナリオ、代替コース) • 成功時保証(事後条件) • etc...
商品をカートに追加する 主アクター:買い物客 支援アクター:なし 設計スコープ:システム(ブラックボックス) 目的レベル:ユーザー目的レベル 事前条件: • 対象の商品は販売停止されていない 主シナリオ: 1.
買い物客は「カートに追加する」ボタンを押す 2. システムは対象商品の在庫を確認する 3. システムはカートに対象商品を一つ追加する 4. システムは「カートに追加しました」というメッセージを表示する 副シナリオ: 3a. 在庫切れだった場合: 3a1. システムは「在庫切れにつきご購入できません」というエラーを表示する 3a2. ユースケースを終了する 4a. 同一の商品がすでにカートに入っていた場合: 4a1. システムはカートに入っている商品の個数を 1増加させる 事後条件: • カートの中には一つ以上の商品が入っている
設計スコープ(Design Scope) 主アクター 支援アクター
ヘキサゴナルアーキテクチャ 主アクター 支援アクター ユースケース& ドメインモデル
目的レベル(Goal Levels)
ユーザー目的レベル(User Goal) • それを終わらせた後、席を立ってコーヒーを飲みにいけるか? ◦ 「検索ボックスにテキストを入力する」は細かすぎる • いくつ終わらせるかによって、その日の仕事の成果が変わるか? ◦ 何度ログインを繰り返しても成果は変わらない
• 連続した時間内に完了するか? ◦ オークションは数日間に渡り、断続的に操作が発生する
シナリオ記述のポイント • 設計スコープを定義する • ユーザー目的レベルにフォーカスする • 各ステップの主語を明記する • 主シナリオをシンプルに保つ •
読み手と共通の語彙(ユビキタス言語)を使う • UIの詳細ではなくアクターの意図を書く • 事前条件を書いて冗長な副シナリオを減らす • 事後条件はステップとは別の言葉で書く
ICONIXとの比較
2. 創作とコミュニケーションの 協調ゲーム
アジャイルソフトウェア開発 「ソフトウェア開発とはいかなる活動か」と いうことをひたすら掘り下げている一冊。 コミュニケーション、個人、チーム、方法 論について。特定の開発手法に閉じた内 容ではなく、クリスタルファミリーを生み出 すに至ったコーバーンの思想が詰まって いる。
ソフトウェア開発のゲームは協調的である。チーム内 のメンバは、ゴールに到 達するために協 力し合う。 チームの品質を測定する材料は、ゲーム中、チーム 内のメンバがどのように協調し、コミュニケーションを 取るかということである。これは、ゴールへの確 実な 到達に影響する(後略) 『アジャイルソフトウェア開発』
コミュニケーションの流れ
完 全かつ完 結したコミュニケーションはまったく不 可 能だ。自分では自分の意図する内容がわかっていた としても、コミュニケーションの 受 け 手 はどこかで
ギャップを埋めなければならない。しかも受け手だけ で行わなければならない。 『アジャイルソフトウェア開発』
コミュニケーションの成功は、結局、送り手と受け手 が共有している経験の有無に依存する。他人と経験 を十分に共有していると、相手の経験を呼び起こす だけでよくなる。(中略)中間成果物は、参照可能な 共有経験や、新しいアイデアを構築する支えになる。 『アジャイルソフトウェア開発』
参照可能な共有経験を作る
ユースケースを共に作り、 理解のギャップを埋める
エクストリーム・プログラミングの5つの価値 • コミュニケーション • シンプル • フィードバック • 勇気 •
尊重
3. クラスの候補に責務を割り当てる
ユースケースはクラスを見つけるのに最適の道具で はない。(中略)優秀なオブジェクト指向分析者および 設 計 者は、「システムはaを実 行し、次にbを実 行す る」という形式に見られる性質に注目しないように心 がけている。代わりに、「抽象Aのインスタンスに許さ れる操作は何か、それらの操作に対する制限は何
か」を問う。 『オブジェクト指向入門 第2版 方法論・実践』
オブジェクト指向とユースケース オブジェクト指向分析設計 • 抽象データ型が持つ振る舞い • 順序に依存しない性質を考える • ボトムアップで積み上げる • ネットワーク構造
• etc… ユースケース • ユーザーとシステムの境界を描き出す • ステップの順序を明記する • 機能をトップダウンで分解 • ツリー構造 • etc…
ユースケースは 分 析 ツールではなくむしろ 確 認 (validation)ツールである。(中略)提示された分析モ デルあるいは試験的な設計に欠けている属性がある かどうかを検査する方法としてユースケースは有効 なツールだろう。
『オブジェクト指向入門 第2版 方法論・実践』
CRCカードワークショップ
CRCカード:表面 『オブジェクトデザイン』より
CRCカード:裏面 Candidate Responsibility Colaborator
シナリオを使ったウォークスルー 1. コンピュータになったつもりで、カードをオブジェクトに見立てて動かす 2. オブジェクトは自分の責務以外のことはできない 3. オブジェクトはコラボレーター以外と対話できない 4. シナリオの最後のステップに到達したら、事後条件を達成しているかどうかを確認 する
5. 最後のステップまで到達できなかったり、事後条件を達成できなかった場合、カード を書き換えてリトライする
ドメインモデルの 構造と振る舞いを検証できる
ICONIXとの比較
4. 機能のスライスをテストする
テスト駆動開発の二重のサイクル http://www.growing-object-oriented-software.com/figures.html
受け入れテストに求められる性質 • ステークホルダーが内容を読んで理解できる • ユーザーの要求を満たしているかどうかを検証する • エンドツーエンドのテストである
ユースケースシナリオが持つ性質 • ユビキタス言語で書かれている • ユーザーが目的を達成するまでのシナリオである • システムはブラックボックスとして扱われる
そのままの形で 受け入れテストに使える
機能のスライスごとの受け入れテスト 1. 主シナリオが動くところまで実装する 2. 主シナリオの受け入れテスト 3. 1つ目の副シナリオが動くところまで実装する 4. 1つ目の副シナリオの受け入れテスト 5.
2つ目の副シナリオが動くところまで実装する 6. (以下略) 外側の1巡目のサイクル 外側の2巡目のサイクル 外側の3巡目のサイクル *これはまだ実践できてません
ICONIXとの比較
5. 次のゲームの準備
プロジェクトには2つの目 標がある。ソフトウェアを納 品すること、および次のゲームで有利な位置を占め ることである。次のゲームでは、システムの変更や置 換、関連システムの作成などを行う。 『アジャイルソフトウェア開発』
システムの要求や設計を次のチームに知らせるため の目印を作るべきである。(中略)この目印は、次の チームのメンバが、 前 のシステムを 完 成 させたチー ムメンバの思考に合理的に近づけるようにしなけれ ばならない。
『アジャイルソフトウェア開発』
その点、RDRAは強い
RDRAのいいところ • 情報同士のリレーション • 重複した記述の除去 • 情報粒度に応じた階層化 • 影響範囲の機械的な算出 •
etc…
\Notionならできる/
適正なドキュメントの量とは、ドキュメントを読む人が ゲームで次の作業をするために必要な量である。そ の量を超えると、モデルを完成、修正、更新する労力 は、すべて資金の浪費になる。 『アジャイルソフトウェア開発』
プロジェクト毎に軽量十分な やり方を見つける
Alpの開発プロセス(最新版) ( ) Optional
まとめ 1. ユースケースの作成を通じて共有経験を獲得する 2. ウォークスルーでドメインモデルの正しさを検証する 3. シナリオのスライスを受け入れテストに使う 4. ユースケースを構造化しておけば次のプロジェクトで役立つ(かもしれない)
参考文献 • ユースケース実践ガイド • ユースケース駆動開発実践ガイド • アジャイルソフトウェア開発 • オブジェクトデザイン •
実践テスト駆動開発 • RDRA2.0 ハンドブック • オブジェクト指向入門 第2版 方法論・実践 • Alistair Cockburn - Wikipedia • ヘキサゴナルアーキテクチャ(Hexagonal architecture翻訳)