内容
• 要求モデル
• “CloudNative” Use Case
• Use Case Slice
• プラクティス
• System Context Solo
• General Requirement Lite
• Use Case Lite
• BDD with Use Case Slice Lite
• Scrum Solo
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 Lite
•ユースケースを作成
• ユースケースからユースケース・スライスを作成
• アクティビティ
• Find Actors and Use Cases
• Slice the Use Case
• Prepare a Use-case Slice
• Test a Use-case Slice
Travel Light
BDD with Use-caseSlice
• Use Case Liteの成果物ユースケース・スライスをBDD
Specificationとして実現
• 仕様記述とテスト・ケースを両立
• アクティビティ
• Make a BDD Specification
38.
Make a BDDSpecification
• 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
39.
class PurchaseEcSpec extendsAnyFreeSpec
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)
40.
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)
41.
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
テストを実行
まとめ
• ケーススタディ
• ブック・カフェPierisBooksの販売システム
• 要求モデルとBDD
• ユースケース・スライスを軸にした連携
• 要求モデルとプロジェクト管理
• ユースケース → Product Backlog
• ユースケース・スライス → Sprint Backlog
• プラクティス
• Use Case Lite
• BDD with Use Case Slice Lite
• Scrum Solo
53.
参考文献
• The UnifiedModeling 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)