Skip to main content
要求モデル/BDD
2025年1月30日
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第43回
ケース・スタディ
SimpleModeling2021
• オブジェクト指向分析設計での共通範囲
• UML/UP
• 本講座で使用するUMLプロファイル
• プロファイル:SimpleModeling2021 (SM2021)
• オブジェクト指向分析設計の基本からの拡張部を明確化
• アジャイル開発
• Communication
• Embrace Change
• Travel Light
• Scaling
• Component-Based Development
• クラウド・アプリケーション
• モデル駆動開発
SM2021
Travel Light
Embrace Change
Cloud
Model-Driven
Scaling
CBD
Testability
Serviceability
• 非機能要件
• Testability
• Serviceability
第1部 基本編の構成(1)
• 概論 [第1回]
• 開発プロセス [第2回]
• 基本モデル [第3回]
• 静的モデル(1) [第4回]
• 静的モデル(2) [第5回]
• 動的モデル [第6回]
• 協調モデル [第7回]
• 関数モデル [第8回]
• 物理モデル [第9回]
• 作業分野 [第10回]
• ビジネス・モデリング [第11回]
• 要求 [第12回]
• 要求/ユースケース [第13回]
• 要求/シナリオ [第14回]
• 分析 [第15回]
• 分析/コンポーネント分析 [第16回]
• 分析/イベント駆動 [第17回]
• 作業分野
• 設計 [第18回]
• 設計/アーキテクチャ設計 [第19回]
• 設計/コンポーネント設計(1) [第20回]
• 設計/コンポーネント設計(2) [第21回]
• 設計/コンポーネント設計(3) [第22回]
• 設計/ドメイン設計(1) [第23回]
• 設計/ドメイン設計(2) [第24回]
• 設計/ドメイン設計(3) [第25回]
• 設計/ドメイン設計(4) [第26回]
• 設計/ドメイン設計(5) [第27回]
• 設計/原理 [第28回]
• 設計/ UX/UI設計 [第29回]
• 実装(1) [第30回]
• 実装(2) [第31回]
• 実装(3) [第32回]
• テスト [第33回]
第1部 基本編の構成(2)
• アプリケーション・アーキテクチャ [第34回]
• Cloud Native CBD [第35回]
• ドメイン・サブシステム [第36回]
• アプリケーション・サブシステム [第37回]
• プレゼンテーション・サブシステム [第38回]
• Cloud Native Component Framework [第39回]
• ケーススタディ[第40回]
• ビジネス・モデル [第41回]
• 要求モデル [第42回]
• 要求モデル/BDD [第43回]
• 分析モデル [第44回]
• 設計モデル [第45回]
• 実装 [第46回]
• テスト [第47回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• UML + UP(Unified Process)
• CBD (Component-Based Development)
• 最新技術でアップデート
• クラウド・コンピューティング
• イベント駆動、分散・並列
• ビッグデータ、AI、IoT
• コンテナ
• 関数型
• OFP(Object-Functional Programming), Reactive Streams
• ルール, AI
• DevOps
• アジャイル開発
• DX (Digital Transformation)
第25回 アプリケーション・アーキテクチャ
第2回 開発プロセス
第9回 物理モデル
第11回 ビジネス・モデリング
第2部 クラウド・アプリケーション編
第21回 設計/ドメイン設計
第20回 設計/コンポーネント設計
第2部 クラウド・アプリケーション編
原理 (Principle)
• Agile Software Development [ASD]
• SRP (The Single Responsibility Principle)
• OCP (The Open-Close Principle)
• LSP (The Liskov Substitution Principle)
• …
• GRASP (General Responsibility Assignment Software Patterns or principles)
• Low Coupling
• High Cohesion
• …
• Writing Effective Use Cases [WEUC]
• Scope
• …
パターン (Pattern)
• Design Patterns [DP]
• Observer, Strategy, …
• Domain Driven Design [DDD]
• Ubiquitous Language, Intention-
Revealing Interfaces, …
• Analysis Patterns [AP]
• Party, Quantity, …
• Pattern-Oriented Software
Architecture [POSA]
• Layers, Pipes and Filters, …
• Patterns of Enterprise
Application Architecture [PEAA]
• Unit of Work, Data Transfer Object,
…
• Enterprise Integration Patterns
[EIP]
• Message Bus, Aggregator, …
• Patterns for Effective Use
Cases [PEUC]
• CompleteSingleGoal,
VerbPhraseName, …
• AntiPatterns [AnP]
• Stovepipe System, Analysis
Paralysis, …
内容
• 要求モデル
• “Cloud Native” Use Case
• Use Case Slice
• プラクティス
• System Context Solo
• General Requirement Lite
• Use Case Lite
• BDD with Use Case Slice Lite
• Scrum Solo
ケーススタディ
• ブック・カフェPieris Booksの販売システム
• 新刊・古本などの書籍に加えてアクセサリーや日用品などのセ
レクト商品を販売
• もともと新刊・古本の販売も行うブックカフェでしたが、新し
くアクセサリーや日用品のセレクト商品販売を併設することに
した
• セレクト商品は見本品の展示を基本と考えており、見本品に対
してECでオーダをする方式を主に考えている
• 見本品はECサイトでの販売も行う
再掲 第40回 ケーススタディ
開発体制
• 背景
• オブジェクト指向分析設計に興味を持つ関係者がいない環境
• クラウド・アプリケーション開発、アジャイル開発、
• 自分一人でアジャイル開発によるオブジェクト指向開発を進める
• 登場人物
• A(私) : バックエンド開発
• 開発プロセスをマスターして、より大きな規模の開発につなげたい
• Uさん:フロントエンド開発
• 手練れのUIエンジニア。モデリングには興味がなくプログラミング中心で開発を行う
• Bさん:ブック・カフェPieris Booksの店長
• ビジネスでやりたいことは明確にもっているが、ビジネス・モデリング的なアプロー
チには興味がない
再掲 第40回 ケーススタディ
要求モデル
作業分野とモデルの関係 第10回 作業分野
再掲
PracticeのActivity
(マイ開発プロセス版改2)
再掲
第42回 要求モデル
“Cloud Native” Use Case
“Cloud Native” Use Case
• Cloud Native向けにUse Case技術でも対応が必要
• Event Driven
• CQRS
• Eventually Consistency
• Long Running Process
• ポイント
• ユースケースのアトミック性
• 非同期の扱い
• イベントの扱い
Cloud Nativeへの対応
• ユーザ体験を損なわずCQRSやEventually Concistencyを実現
する脚本にしたい
• ユースケースがアトミックという前提が外れる
• ユースケースがアトミックか否かの設定が必要
• 非同期
• 同期で結果を取得しなければならない場所と結果の確認は後回しにで
きる場所の明確化
• 結果の確認を後回しにするための自然な流れを演出
• イベント
• イベント発生を起点としたユースケース
• Long Running Process内でのイベントの扱い
Use Case Slice
Use Case Slice
• ユースケース内の物語を目的に沿って分割したもの
• イテレーションに適したサイズ
• テストに適した構成
• 関連技術
• User Story – Scrum, Backlog
• One-piece flow – Kanban
• 参考
• 「Use Case 2.0 – The Hub of Software Development」(Jacobson他, 2016)
• Use Case Slice
• 「Aspect-Oriented Software Development with Use Cases」(Jacobson他,
2005)
• Use Case Test Slice
Use Case Sliceの構造
ユースケーススライスとプロジェクト管理&テストの関係
プラクティス
プラクティス
• System Context Solo
• General Requirement Lite
• Use Case Lite
• BDD with Use Case Slice Lite
• Scrum Solo
Requirement Model
再掲 第42回 要求モデル
Use Case Lite
Use Case Lite
• ユースケースを作成
• ユースケースからユースケース・スライスを作成
• アクティビティ
• Find Actors and Use Cases
• Slice the Use Case
• Prepare a Use-case Slice
• Test a Use-case Slice
Travel Light
Use Case Lite / AlphaとWork Product
Use Case Lite / Activity SpaceとActivity
Slice the Use Case
• ユースケースをユースケース・スライスに分割する
• ユースケース・スライス
• ユースケースのシナリオから具体的なパスを抽出
• 1回のスプリント(イテレーション)で実現できる大きさ
• テスト可能な構成
Prepare a Use-case Slice
• ユースケース・スライスからユースケース・スライス・テスト
ケースを作成
• 実現方法
• BDD with Use-case Slice
Test a Use-case Slice
• ユースケース・スライス・テストケースを実行してユースケー
ス・スライス(=要求仕様)通りにシステムが動作するかをテス
トする
• Activity Space
• Test the System
BDD with Use-case Slice
BDD (Behavior-Driven Development)
• 振る舞いモデルを起点に開発を進める開発手法
• 要求仕様となる振る舞いモデルには「シナリオの実行例」を使用す
る
• 「シナリオの具体例」からテストケースを作成
• 要求仕様とテストケースが直結
• 受け入れテスト(Acceptance test)と呼んでいる。ユーザーテストの受け入れ
テストとの混同に注意。
• 開発者、QA担当、顧客代表が「シナリオの具体例」で記述された要
求仕様を共有
• Validation : 要求仕様と実装のずれを防ぐ
• テスト・レポートは最新の要求仕様のドキュメント
• 生きた文書 (living document)
再掲 第33回 テスト
ユースケース駆動開発 再掲 第33回 テスト
テストの位置つけ
• QA (Quality Assurance)
• ソフトウェア・システムの品質を確保
• テスト計画・テスト実行
• 伝統的な枠組み
• 動く仕様書
• 「テスト」の位置つけを変える技術革新
• TDD/BDD
• CI/CDパイプライン
• オブジェクト指向技術
• CBD
• シナリオ分析
• Scala DSL(Domain Specific Language)でさらに使いやすくなった
Travel Light
Embrace Change
再掲 第33回 テスト
仕様とテストとBDDの関係 再掲
第33回 テスト
ユースケースとBDD 再掲 第33回 テスト
BDD with Use-case Slice
• Use Case Liteの成果物ユースケース・スライスをBDD
Specificationとして実現
• 仕様記述とテスト・ケースを両立
• アクティビティ
• Make a BDD Specification
Make a BDD Specification
• Use Case Liteの成果物
• ユースケース・スライス(Slice the Use Case)、
• ユースケース・スライス・テストケース(Prepare a Use case Slice)
• これらの成果物をBDDのSpecificationとして実現する
• ユースケース・スライス(+インスタンス)を直接 BDD Specificationと
して実現することで作業の効率化/軽量化
• Test a Use-Case SliceでUse Case Liteに合流
Travel Light
class PurchaseEcSpec extends AnyFreeSpec
with Matchers
with GivenWhenThen
with ScalaCheckDrivenPropertyChecks
with EcMatchers {
"UC: ECサイトで店舗在庫を購入する" - {
"UCS: 店舗在庫を1個購入する" - {
"Main" in {
val service = EcService.createForTest()
Given("EC顧客はログイン済み")
val user = "U123"
And("店舗在庫が存在")
val addstockcmd = AddStockCommand()
service.addStock(addstockcmd)
PurchaseEcSpec (1/2)
When("EC顧客が購入を開始")
And("問い合わせを行い目的にあった商品の一覧を出力")
val productq = ProductQuery()
val products = service.listProducts(productq)
And("購入する商品をカートに追加")
val addcartcmd = AddCartCommand("P123", 1)
val cart = service.addCart(addcartcmd)
And("カートの一覧を出力")
val cartq = CartQuery()
val carts = service.listCarts(cartq)
Then("カートの商品を購入")
val cartid = carts.get.list(0).id
val cmd = PurchaseCommand(cartid)
service.purchase(cmd) should successPurchase(cmd)
}
}
}
}
PurchaseEcSpec (2/2)
sbt:pieris> test
[info] PurchaseEcSpec:
[info] UC: ECサイトで店舗在庫を購入する
[info] UCS: 店舗在庫を1個購入する
[info] - Main
[info] + Given EC顧客はログイン済み
[info] + And 店舗在庫が存在
[info] + When EC顧客が購入を開始
[info] + And 問い合わせを行い目的にあった商品の一覧を出力
[info] + And 購入する商品をカートに追加
[info] + And カートの一覧を出力
[info] + Then カートの商品を購入
[info] Run completed in 195 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 1 s, completed 2025/01/28 10:35:48
テストを実行
Scrum Solo
Scrum Solo
• Scrum Liteをカスタマイズ
• 個人開発用にチューニング
• アクティビティ
• Sprint Planning Solo
• Daily Scrum Solo
• Sprint Retrospective Solo
• Sprint Review Solo
Scrum
ScrumをEssenceで記述
Scrum Lite / Activity SpaceとActivity
Scrum Lite / AlphaとWork Product
Sprint Planning Solo
• Splint Planning (Scrum Lite)
• スプリントのインクリメントとして提供する内容を決定する
• 合意を実現するために必要な作業をどのように達成するかを決定する
• 成果物
• Sprint Backlog
• Solo
• 開発者一人で提供内容を決めてSprint Backlogに登録
Daily Scrum Solo
• Daily Scrum (Scrum Lite)
• チームは毎日、同じ時間と場所で集まり、進捗を評価し、活動を同期
させ、課題を提起して対応する。
• ミーティングは時間を区切っており、通常は15分。
• Solo
• 朝一番に一人で一日の作業内容を決める
Sprint Review Solo
• Sprint Review (Scrum Lite)
• スプリントの成果をレビューするための時間を区切ったミーティング
で、フィードバックを収集し、次に何を行うべきかを議論する。
• レビュー対象は製品
• レビュー結果をProduct Backlogに反映
• Solo
• ステークホルダー(Bさん)と修正結果について話し合う
Sprint Retrospective Solo
• Sprint Retrospective (Scrum Lite)
• チーム全体が定期的に集まり、自身の働き方を振り返る。
• 改善点を特定して優先順位をつけ、実行する内容について合意する。
• 次の振り返りで結果は評価される。
• レビュー対象は開発プロセス
• レビュー結果は次回のSprintのやり方に反映
• Solo
• Sprint完了後一人で反省
まとめ
• ケーススタディ
• ブック・カフェPieris Booksの販売システム
• 要求モデルとBDD
• ユースケース・スライスを軸にした連携
• 要求モデルとプロジェクト管理
• ユースケース → Product Backlog
• ユースケース・スライス → Sprint Backlog
• プラクティス
• Use Case Lite
• BDD with Use Case Slice Lite
• Scrum Solo
参考文献
• The Unified Modeling Language Reference
Manual, 2nd (Rumbaugh他, 2004)
• The Unified Modeling Language User Guide,
2nd (Booch他, 2004)
• The Unified Software Development Process
(Jacobson他, 1999)
• The Object Constraint Language, 2nd (Warmer
他, 2003)
• UML 2 and the Unified Process: Practical
Object-Oriented Analysis and Design (Arlow
他, 2005)
• OMG Unified Modeling Language Version 2.5
(OMG, 2015)
• 上流工程UMLモデリング (浅海, 2008)
• The Essentials of Modern Software
Engineering: Free the Practices from the
Method Prisons! (Jacobson他, 2019)
• Extreme Programming Explained: Embrace
Change 2nd (Beck, 2004)
• Specification by Example: How Successful
Teams Deliver the Right Software (Adzic,
2011)
• BDD in Action: Behavior-Driven
Development for the whole software lifecycle
(Smart, 2014)
• Use-Case 2.0 - The Hub of Software
Development (Jacobson他, 2016)