実装(1)
2023年12⽉27⽇
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第30回
作業分野
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回]
• ドメイン・モデル [第35回]
• アプリケーション・モデル [第36回]
• プレゼンテーション・モデル [第37回]
• ケーススタディ[第38回]
• 要求モデル [第39回]
• 分析モデル [第40回]
• 設計モデル [第41回]
• 実装 [第42回]
• テスト [第43回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• 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, …
内容
• 実装の位置づけ
• 開発プロセス
• DevOps
• CBD (Component-Based Development)
• TDD (Test-Driven Development)
• CI/CDパイプライン
実装の位置づけ
第10回 作業分野
作業分野とモデルの関係 第10回 作業分野
開発プロセス
UP (Unified Process)
• 『The Unified Software Development Process』
• 1990年代に乱⽴したオブジェクト指向開発プロセスを統⼀
• UMLが前提とするリファレン・スモデル
• CBD (Component-Based Development)
• アーキテクチャ
• ユースケース駆動 (use-case driven)
• 反復漸進 (iterative/incremental)
• アーキテクチャ中⼼ (architecture centric)
• ⼯程管理⽅式
• 計画駆動
• ⽂書中⼼
第2回 開発プロセス
再掲
ユースケース駆動 (UseCase Driven)
• ユースケース
• 価値のあるサービスを提供する外部オブジェクトとの相互作⽤によるアクション列
の仕様
• ユースケース≒物語
• 帰納的、具体例
• ユスケース駆動
≒物語駆動
• ユースケースで:
• 要求の定義
• 優先度を決定
• ユースケースから
• ソフトウェアを作る
• テストケースを作る
• マニュアルを作る
第2回 開発プロセス
再掲
ユースケース駆動開発
反復漸進 (Iterative/Incremental)
• 反復:イテレーションを繰り返してソフトウェアを開発
• 漸進:イテレーション毎に少しずつ機能を加えていく
• イテレーション毎に動くソフトウェアをデリバリーする
• イテレーションの期間は1週間から2ヶ⽉ぐらい
• 反復漸進することでリスクをコントロールできる
第2回 開発プロセス
再掲
反復・漸進の成果物
• 動くアプリケーション
• テスト可能状態(testable)
• リリース可能状態(releaseable)
• テスト可能状態(testable)なコンポーネント
• マニュアル
• リファレンス・マニュアル
• ユーザー・マニュアル
• 実装(作業分野)と同時並⾏に⾏うテスト(作業分野)の成果物
• テストケース
アーキテクチャ中⼼ (Architecture Centric)
• アーキテクチャ
• ソフトウェア・システムを様々な側⾯からのビューの集まりで記述し
たもの
• アーキテクチャを軸に開発を進める
• CBD (Component-Based Development)
• アーキテクチャ・ベースライン (Architectural Baseline)
• アーキテクチャの確⽴にフォーカスしたシステムの内部リリース(推敲
フェーズ)
第2回 開発プロセス
再掲
実装でのアプローチ
• イテレーションの成果物
• テスト済み実⾏可能なアプリケーション
• アプリケーションを構成するテスト済みコンポーネント
• マニュアル
• アプリケーションのユーザー・マニュアル
• アプリケーション、コンポーネントのリファレンス・マニュアル
• テストケース
• コンポーネントのユニット・テスト
• アプリケーションのシナリオ・テスト
DevOps
DevOps
• ソフトウェア開発(Dev)とITオペレーション(Ops)を結合するプ
ラクティスの集まり。
• システム開発の短縮を⽬的とし⾼品質ソフトウェアの継続デリ
バリーを提供。
• 共同所有、ワークフロー・オートメーション、迅速なフィード
バック
• 組織⽂化の変化まで視野に⼊るスケールの枠組み
• ツールの活⽤が前提
• CI/CD Pipeline
• DevOps as a Service
第9回 物理モデル
再掲
CI (Continuous Integration)
• 継続インテグレーション
• すべての開発者の作業コピーを1⽇に数回共有メインラインに
マージするプラクティス
• ワークフロー
• ローカルでテスト、CI上でコンパイル、CI上でテスト、CIから配備
• アジャイル開発/テスト駆動開発(UPでも同様)
• 実際に動作するプログラムを開発の軸にする
• ソースコードの枝分かれのマージによるリスクを軽減(merge hell)
• テストコードを常に活性化状態に維持する
Embrace Change
Travel Light
第9回 物理モデル
再掲
CD (Continuous Delivery)
• 継続デリバリー
• ソフトウェアをいつでも確実に⾃動リリースできる環境下で、
短サイクルでソフトウエアを開発するエンジニアリング・アプ
ローチ
• ソフトウェアのビルド、テスト、リリースを⾼速、⾼頻度で⾏
う
• ⾼頻度のソフトウェアの差分更新を可能にすることにより、ソフト
ウェアのデリバリーのコスト、時間、リスクを低減する
第9回 物理モデル
再掲
DevOpsとCI/CD
第9回 物理モデル
再掲
実装でのアプローチ
• CI/CDパイプラインを構築する
• ⾃動テスト
• アプリケーション組み⽴ての定義
• アプリケーション配備の定義
CBD
Component-Based Development
コンポーネント (Component)
• 再利⽤可能な部品
• 明確な外部インタフェースを定め実装を隠蔽
• 新規開発を抑えることで開発期間短縮、品質向上を図る
• 再利⽤性の⾼い部品化は⾃然にできることではないので、コストを掛けて積極的に狙い
に⾏く
• 論理モデルと物理モデルの両⽅の性質を兼ね備える
• 配備の単位
• 物理的な側⾯ ⇒ モジュール
• オブジェクト指向分析設計による開発の様々な側⾯を集約してパッケージ化
• モデリングとプログラミングの結節点
• モデリングはコンポーネントまで。コンポーネントの実現はプログラミングで。
• 再利⽤可能な部品にするための仕掛けが必要
• コンポーネント・フレームワーク
• 実⾏コンテキスト
Travel Light
Travel Light
第5回 静的モデル(2)
再掲
オブジェクト指向分析設計の様々の側⾯
をコンポーネントに集約
• 機能の単位
• 機能を凝集(coherent)して実現
• 開発の単位
• コンポーネント単位で開発の管理を
⾏う
• 開発⼯程、担当者など
• モデリングの単位
• コンポーネントの実現はプログラミ
ングで
• 運⽤の単位
• 配備の単位
• バージョン管理
• 仕様書・マニュアルの単位
• 外部仕様、マニュアルの作成
• テストの単位
• テスト仕様の作成単位
• テストの進捗管理の単位
• 障害調査の単位
• 障害発⽣箇所の特定
• 障害調査マニュアルの作成
• 販売・課⾦の単位
• 再利⽤可能な商品
Scaling
第5回 静的モデル(2)
再掲
アプリケーション
スタック
(本講座リファレンス ・モデル)
第9回 物理モデル
再掲
Component-Based Development
第9回 物理モデル
再掲
Docker
• コンテナ仮想化を⽤いてアプリケーションを開発・配置・実⾏
するためのオープンプラットフォーム
• https://www.docker.com/
• OSレベルの仮想化を⾏う
• ホストカーネルを共有することで資源の効率化
• Dockerイメージの共有
• Build safer, share wider, run faster
• Java VMに加えてPythonなどのスクリプト⾔語、各種コマンドをイン
ストールしたDockerイメージを整備することで配備の問題の多くを解
決することができる
• 配備の単位をDockerに集約するのがベスト・プラクティス
第9回 物理モデル
再掲
Kubernetes
• オープンソースのコンテナ・オーケストレーション・システム
• https://kubernetes.io/
• ソフトウェア配備、スケーリング、管理を⾃動化
• クラウド・アプリケーションの管理・運⽤の基盤として有⼒
• Dockerコンテナが配備の単位
• CRI(Container Runtime Interface)でDockerコンテナ以外も可
• Kubernetesの論理動作環境に対する配備情報を作成することで、
クラウド・プラットフォームへの配備を⾏うことができる
第9回 物理モデル
再掲
アプリケーション組⽴て
• 責務
• モジュールの読み込み
• コンポーネントのワイヤリング
• 変化点(variation point)の解決
• コンフィグレーション・パラメタ
• 拡張点(extension point)の解決
• アダプタ、ドライバ設定
• 技術
• DIコンテナ (Dependency Injection Container)
• OSGi (Open Services Gateway initiative)
• Docker
第14回 設計
第15回 実装
第9回 物理モデル
再掲
実装でのアプローチ
• コンポーネントを開発の単位とする
• CIパイプラインを構築
• 成果物
• コンポーネントの物理実体(JARなど)
• テストケース
• マニュアル
• コンポーネントを組み⽴ててアプリケーションを構築する
• CI/CDパイプライン
• 成果物
• アプリケーションの物理実体(JARなど)
• 配備記述
• テストケース
• マニュアル
TDD
Test-Driven Development
TDD (Test-Driven Development)
• テストをプログラミングの前に書く開発⼿法
• CI/CDパイプラインに⾃動テストとして組み込むことで常に⾃
動テストによって品質が保持される
• テストを動く仕様書とする
• プログラミングの前にテストケースを整備することで、テスト
ケースの作成⼯数を確保できる
仕様書の作成場所
実装でのアプローチ
• アプリケーション、コンポーネントをTDDで開発
• ⾃動テストによる品質の確保
• テストケースによる動く仕様書も同時に整備される
• アプリケーション、コンポーネントをテスト可能(testable)に
する
• UI層(Web層)は⾃動テストが難しいケースが多いので、アプリ
ケーション層のサービスをTDDの対象にする
CI/CDパイプライン
CI/CDパイプライン
• 構成
• CI (Continuous Integration)
• CD (Continuous Delivery)
• Continuous Deployment
• CI/CDパイプラインを構築することでアプリケーション/コン
ポーネントの各種性質を⾼めることができる
• モジュール性 (modularity)
• 凝集性 (cohesion)
• 関⼼の分離 (separation of concern)
• 抽象性 (abstraction)
• 結合性 (coupling)
DevOpsとCI/CD
第9回 物理モデル
再掲
実装でのアプローチ
• 実装は個々の成果物を⾃動⽣成するCI/CDパイプラインの構築
を最終成果物とする
• アプリケーション、コンポーネントを常にテスト可状態能(testable)を
保つ
• アプリケーションを常にリリース可能状態(releaseable)を保つ
まとめ
• 開発プロセスとDevOpsの両⾯から実装の枠組みを確認
• CBD (Component-Based Development)の確認
• TDD (Test-Driven Development)の導⼊
• CI/CDパイプラインの構築を最終成果物とする
• アプリケーション/コンポーネント
• マニュアル
• テスト
参考⽂献
• 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)

実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】

  • 1.
  • 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) • AgileSoftware 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) • DesignPatterns [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パイプライン
  • 9.
  • 10.
  • 11.
  • 12.
  • 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回 開発プロセス 再掲
  • 15.
  • 16.
    反復漸進 (Iterative/Incremental) • 反復:イテレーションを繰り返してソフトウェアを開発 •漸進:イテレーション毎に少しずつ機能を加えていく • イテレーション毎に動くソフトウェアをデリバリーする • イテレーションの期間は1週間から2ヶ⽉ぐらい • 反復漸進することでリスクをコントロールできる 第2回 開発プロセス 再掲
  • 17.
    反復・漸進の成果物 • 動くアプリケーション • テスト可能状態(testable) •リリース可能状態(releaseable) • テスト可能状態(testable)なコンポーネント • マニュアル • リファレンス・マニュアル • ユーザー・マニュアル • 実装(作業分野)と同時並⾏に⾏うテスト(作業分野)の成果物 • テストケース
  • 18.
    アーキテクチャ中⼼ (Architecture Centric) •アーキテクチャ • ソフトウェア・システムを様々な側⾯からのビューの集まりで記述し たもの • アーキテクチャを軸に開発を進める • CBD (Component-Based Development) • アーキテクチャ・ベースライン (Architectural Baseline) • アーキテクチャの確⽴にフォーカスしたシステムの内部リリース(推敲 フェーズ) 第2回 開発プロセス 再掲
  • 20.
    実装でのアプローチ • イテレーションの成果物 • テスト済み実⾏可能なアプリケーション •アプリケーションを構成するテスト済みコンポーネント • マニュアル • アプリケーションのユーザー・マニュアル • アプリケーション、コンポーネントのリファレンス・マニュアル • テストケース • コンポーネントのユニット・テスト • アプリケーションのシナリオ・テスト
  • 21.
  • 22.
    DevOps • ソフトウェア開発(Dev)とITオペレーション(Ops)を結合するプ ラクティスの集まり。 • システム開発の短縮を⽬的とし⾼品質ソフトウェアの継続デリ バリーを提供。 •共同所有、ワークフロー・オートメーション、迅速なフィード バック • 組織⽂化の変化まで視野に⼊るスケールの枠組み • ツールの活⽤が前提 • CI/CD Pipeline • DevOps as a Service 第9回 物理モデル 再掲
  • 23.
    CI (Continuous Integration) •継続インテグレーション • すべての開発者の作業コピーを1⽇に数回共有メインラインに マージするプラクティス • ワークフロー • ローカルでテスト、CI上でコンパイル、CI上でテスト、CIから配備 • アジャイル開発/テスト駆動開発(UPでも同様) • 実際に動作するプログラムを開発の軸にする • ソースコードの枝分かれのマージによるリスクを軽減(merge hell) • テストコードを常に活性化状態に維持する Embrace Change Travel Light 第9回 物理モデル 再掲
  • 24.
    CD (Continuous Delivery) •継続デリバリー • ソフトウェアをいつでも確実に⾃動リリースできる環境下で、 短サイクルでソフトウエアを開発するエンジニアリング・アプ ローチ • ソフトウェアのビルド、テスト、リリースを⾼速、⾼頻度で⾏ う • ⾼頻度のソフトウェアの差分更新を可能にすることにより、ソフト ウェアのデリバリーのコスト、時間、リスクを低減する 第9回 物理モデル 再掲
  • 25.
  • 26.
    実装でのアプローチ • CI/CDパイプラインを構築する • ⾃動テスト •アプリケーション組み⽴ての定義 • アプリケーション配備の定義
  • 27.
  • 28.
    コンポーネント (Component) • 再利⽤可能な部品 •明確な外部インタフェースを定め実装を隠蔽 • 新規開発を抑えることで開発期間短縮、品質向上を図る • 再利⽤性の⾼い部品化は⾃然にできることではないので、コストを掛けて積極的に狙い に⾏く • 論理モデルと物理モデルの両⽅の性質を兼ね備える • 配備の単位 • 物理的な側⾯ ⇒ モジュール • オブジェクト指向分析設計による開発の様々な側⾯を集約してパッケージ化 • モデリングとプログラミングの結節点 • モデリングはコンポーネントまで。コンポーネントの実現はプログラミングで。 • 再利⽤可能な部品にするための仕掛けが必要 • コンポーネント・フレームワーク • 実⾏コンテキスト Travel Light Travel Light 第5回 静的モデル(2) 再掲
  • 29.
    オブジェクト指向分析設計の様々の側⾯ をコンポーネントに集約 • 機能の単位 • 機能を凝集(coherent)して実現 •開発の単位 • コンポーネント単位で開発の管理を ⾏う • 開発⼯程、担当者など • モデリングの単位 • コンポーネントの実現はプログラミ ングで • 運⽤の単位 • 配備の単位 • バージョン管理 • 仕様書・マニュアルの単位 • 外部仕様、マニュアルの作成 • テストの単位 • テスト仕様の作成単位 • テストの進捗管理の単位 • 障害調査の単位 • 障害発⽣箇所の特定 • 障害調査マニュアルの作成 • 販売・課⾦の単位 • 再利⽤可能な商品 Scaling 第5回 静的モデル(2) 再掲
  • 30.
  • 31.
  • 33.
    Docker • コンテナ仮想化を⽤いてアプリケーションを開発・配置・実⾏ するためのオープンプラットフォーム • https://www.docker.com/ •OSレベルの仮想化を⾏う • ホストカーネルを共有することで資源の効率化 • Dockerイメージの共有 • Build safer, share wider, run faster • Java VMに加えてPythonなどのスクリプト⾔語、各種コマンドをイン ストールしたDockerイメージを整備することで配備の問題の多くを解 決することができる • 配備の単位をDockerに集約するのがベスト・プラクティス 第9回 物理モデル 再掲
  • 34.
    Kubernetes • オープンソースのコンテナ・オーケストレーション・システム • https://kubernetes.io/ •ソフトウェア配備、スケーリング、管理を⾃動化 • クラウド・アプリケーションの管理・運⽤の基盤として有⼒ • Dockerコンテナが配備の単位 • CRI(Container Runtime Interface)でDockerコンテナ以外も可 • Kubernetesの論理動作環境に対する配備情報を作成することで、 クラウド・プラットフォームへの配備を⾏うことができる 第9回 物理モデル 再掲
  • 35.
    アプリケーション組⽴て • 責務 • モジュールの読み込み •コンポーネントのワイヤリング • 変化点(variation point)の解決 • コンフィグレーション・パラメタ • 拡張点(extension point)の解決 • アダプタ、ドライバ設定 • 技術 • DIコンテナ (Dependency Injection Container) • OSGi (Open Services Gateway initiative) • Docker 第14回 設計 第15回 実装 第9回 物理モデル 再掲
  • 37.
    実装でのアプローチ • コンポーネントを開発の単位とする • CIパイプラインを構築 •成果物 • コンポーネントの物理実体(JARなど) • テストケース • マニュアル • コンポーネントを組み⽴ててアプリケーションを構築する • CI/CDパイプライン • 成果物 • アプリケーションの物理実体(JARなど) • 配備記述 • テストケース • マニュアル
  • 38.
  • 39.
    TDD (Test-Driven Development) •テストをプログラミングの前に書く開発⼿法 • CI/CDパイプラインに⾃動テストとして組み込むことで常に⾃ 動テストによって品質が保持される • テストを動く仕様書とする • プログラミングの前にテストケースを整備することで、テスト ケースの作成⼯数を確保できる
  • 40.
  • 41.
    実装でのアプローチ • アプリケーション、コンポーネントをTDDで開発 • ⾃動テストによる品質の確保 •テストケースによる動く仕様書も同時に整備される • アプリケーション、コンポーネントをテスト可能(testable)に する • UI層(Web層)は⾃動テストが難しいケースが多いので、アプリ ケーション層のサービスをTDDの対象にする
  • 42.
  • 43.
    CI/CDパイプライン • 構成 • CI(Continuous Integration) • CD (Continuous Delivery) • Continuous Deployment • CI/CDパイプラインを構築することでアプリケーション/コン ポーネントの各種性質を⾼めることができる • モジュール性 (modularity) • 凝集性 (cohesion) • 関⼼の分離 (separation of concern) • 抽象性 (abstraction) • 結合性 (coupling)
  • 44.
  • 45.
  • 46.
    まとめ • 開発プロセスとDevOpsの両⾯から実装の枠組みを確認 • CBD(Component-Based Development)の確認 • TDD (Test-Driven Development)の導⼊ • CI/CDパイプラインの構築を最終成果物とする • アプリケーション/コンポーネント • マニュアル • テスト
  • 47.
    参考⽂献 • 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) • 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)