More Related Content Similar to 実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】 (20) More from Tomoharu ASAMI (15) 実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】2. 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
3. 第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回]
4. 第1部 基本編の構成(2)
• アプリケーション・アーキテクチャ [第34回]
• ドメイン・モデル [第35回]
• アプリケーション・モデル [第36回]
• プレゼンテーション・モデル [第37回]
• ケーススタディ[第38回]
• 要求モデル [第39回]
• 分析モデル [第40回]
• 設計モデル [第41回]
• 実装 [第42回]
• テスト [第43回]
5. 本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• 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部 クラウド・アプリケーション編
6. 原理 (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
• …
7. パターン (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, …
8. 内容
• 実装の位置づけ
• 開発プロセス
• DevOps
• CBD (Component-Based Development)
• TDD (Test-Driven Development)
• CI/CDパイプライン
13. UP (Unified Process)
• 『The Unified Software Development Process』
• 1990年代に乱⽴したオブジェクト指向開発プロセスを統⼀
• UMLが前提とするリファレン・スモデル
• CBD (Component-Based Development)
• アーキテクチャ
• ユースケース駆動 (use-case driven)
• 反復漸進 (iterative/incremental)
• アーキテクチャ中⼼ (architecture centric)
• ⼯程管理⽅式
• 計画駆動
• ⽂書中⼼
第2回 開発プロセス
再掲
14. ユースケース駆動 (UseCase Driven)
• ユースケース
• 価値のあるサービスを提供する外部オブジェクトとの相互作⽤によるアクション列
の仕様
• ユースケース≒物語
• 帰納的、具体例
• ユスケース駆動
≒物語駆動
• ユースケースで:
• 要求の定義
• 優先度を決定
• ユースケースから
• ソフトウェアを作る
• テストケースを作る
• マニュアルを作る
第2回 開発プロセス
再掲
18. アーキテクチャ中⼼ (Architecture Centric)
• アーキテクチャ
• ソフトウェア・システムを様々な側⾯からのビューの集まりで記述し
たもの
• アーキテクチャを軸に開発を進める
• CBD (Component-Based Development)
• アーキテクチャ・ベースライン (Architectural Baseline)
• アーキテクチャの確⽴にフォーカスしたシステムの内部リリース(推敲
フェーズ)
第2回 開発プロセス
再掲
23. CI (Continuous Integration)
• 継続インテグレーション
• すべての開発者の作業コピーを1⽇に数回共有メインラインに
マージするプラクティス
• ワークフロー
• ローカルでテスト、CI上でコンパイル、CI上でテスト、CIから配備
• アジャイル開発/テスト駆動開発(UPでも同様)
• 実際に動作するプログラムを開発の軸にする
• ソースコードの枝分かれのマージによるリスクを軽減(merge hell)
• テストコードを常に活性化状態に維持する
Embrace Change
Travel Light
第9回 物理モデル
再掲
24. CD (Continuous Delivery)
• 継続デリバリー
• ソフトウェアをいつでも確実に⾃動リリースできる環境下で、
短サイクルでソフトウエアを開発するエンジニアリング・アプ
ローチ
• ソフトウェアのビルド、テスト、リリースを⾼速、⾼頻度で⾏
う
• ⾼頻度のソフトウェアの差分更新を可能にすることにより、ソフト
ウェアのデリバリーのコスト、時間、リスクを低減する
第9回 物理モデル
再掲
28. コンポーネント (Component)
• 再利⽤可能な部品
• 明確な外部インタフェースを定め実装を隠蔽
• 新規開発を抑えることで開発期間短縮、品質向上を図る
• 再利⽤性の⾼い部品化は⾃然にできることではないので、コストを掛けて積極的に狙い
に⾏く
• 論理モデルと物理モデルの両⽅の性質を兼ね備える
• 配備の単位
• 物理的な側⾯ ⇒ モジュール
• オブジェクト指向分析設計による開発の様々な側⾯を集約してパッケージ化
• モデリングとプログラミングの結節点
• モデリングはコンポーネントまで。コンポーネントの実現はプログラミングで。
• 再利⽤可能な部品にするための仕掛けが必要
• コンポーネント・フレームワーク
• 実⾏コンテキスト
Travel Light
Travel Light
第5回 静的モデル(2)
再掲
29. オブジェクト指向分析設計の様々の側⾯
をコンポーネントに集約
• 機能の単位
• 機能を凝集(coherent)して実現
• 開発の単位
• コンポーネント単位で開発の管理を
⾏う
• 開発⼯程、担当者など
• モデリングの単位
• コンポーネントの実現はプログラミ
ングで
• 運⽤の単位
• 配備の単位
• バージョン管理
• 仕様書・マニュアルの単位
• 外部仕様、マニュアルの作成
• テストの単位
• テスト仕様の作成単位
• テストの進捗管理の単位
• 障害調査の単位
• 障害発⽣箇所の特定
• 障害調査マニュアルの作成
• 販売・課⾦の単位
• 再利⽤可能な商品
Scaling
第5回 静的モデル(2)
再掲
35. アプリケーション組⽴て
• 責務
• モジュールの読み込み
• コンポーネントのワイヤリング
• 変化点(variation point)の解決
• コンフィグレーション・パラメタ
• 拡張点(extension point)の解決
• アダプタ、ドライバ設定
• 技術
• DIコンテナ (Dependency Injection Container)
• OSGi (Open Services Gateway initiative)
• Docker
第14回 設計
第15回 実装
第9回 物理モデル
再掲
39. TDD (Test-Driven Development)
• テストをプログラミングの前に書く開発⼿法
• CI/CDパイプラインに⾃動テストとして組み込むことで常に⾃
動テストによって品質が保持される
• テストを動く仕様書とする
• プログラミングの前にテストケースを整備することで、テスト
ケースの作成⼯数を確保できる
43. CI/CDパイプライン
• 構成
• CI (Continuous Integration)
• CD (Continuous Delivery)
• Continuous Deployment
• CI/CDパイプラインを構築することでアプリケーション/コン
ポーネントの各種性質を⾼めることができる
• モジュール性 (modularity)
• 凝集性 (cohesion)
• 関⼼の分離 (separation of concern)
• 抽象性 (abstraction)
• 結合性 (coupling)
47. 参考⽂献
• 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)
• Software Engineering, 10th (Sommerville,
2016)
• The Essentials of Modern Software
Engineering: Free the Practices from the
Method Prisons! (Jacobson他, 2019)
• Modern Software Engineering : Doing What
Works to Build Better Software Faster (Farley,
2021)
• Continuous Integration: Improving Software
Quality and Reducing Risk (Duvall他, 2007)
• Continuous Delivery: Reliable Software
Releases through Build, Test, and Deployment
Automation (Humble他, 2010)