Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
モデリングの費用対効果 2022年5月19日 有限会社システム設計 増田
Slide 2
Slide 2 text
自己紹介 アプリケーション開発者 Java/Springを使った業務系アプリケーション開発 ドメイン駆動設計の開発現場への導入と実践 著書『現場で役立つシステム設計の原則』 ~変更を楽で安全にするオブジェクト指向の実践技法 技術者コミュニティ「現場から学ぶモデル駆動設計」主催 2022/5/19 2
Slide 3
Slide 3 text
ドメイン駆動設計 2022/5/19 3
Slide 4
Slide 4 text
ドメイン駆動設計という開発アプローチ ① 事業活動の複雑さに照準を合わせる設計 ② 変更を楽で安全にするためのモデル駆動設計 ③ 現代的なオブジェクト指向プログラミング ④ XP的な開発の考え方とやり方 2022/5/19 4 カプセル化と契約プログラミング イミュータブル(変更不可) 控えめなサブタイピング コミュニケーション インクリメンタルな開発 リファクタリング 関心を分離する境界の明示 関心の依存関係の単純化 モデル-設計-実装の整合性維持 開発者が事業活動を理解する 事業活動の構造をコードで表現 ドメインモデルパターン
Slide 5
Slide 5 text
なぜドメイン駆動設計か? 2022/5/19 5
Slide 6
Slide 6 text
なぜドメイン駆動設計か? (私への仕事の依頼のパターン) 2022/5/19 6 損保系 基幹システム 通販系 基幹システム 健康管理アプリ サブスク課金向けSaaS 老舗 通信系サービス(ISP) 運用維持の コスト負担 修正拡張の コスト 変更の スピード 200X年から DOA系独自言語 創業から5年 事業の急拡大 創業から10年 PHPで増改築 200X年から JSP/CORBA/C 200X年から COBOL/汎用機 ???
Slide 7
Slide 7 text
なぜドメイン駆動設計か? (私への仕事の依頼のパターン) 2022/5/19 7 損保系 基幹システム 通販系 基幹システム 健康管理アプリ サブスク課金向けSaaS 老舗 通信系サービス(ISP) 運用維持の コスト負担 修正拡張の コスト 変更の スピード 200X年から DOA独自言語 創業から5年 事業の急拡大 創業から10年 PHPで増改築 200X年から JSP/CORBA/C 200X年から COBOL/汎用機 クラウド マイクロサービス ドメイン駆動設計
Slide 8
Slide 8 text
なぜドメイン駆動設計か? ソフトウェア提供サイクルの変化 2022/5/19 8 構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄 20年 × 1回 5年 × 4回
Slide 9
Slide 9 text
2022/5/19 9 構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄 20年 × 1回 5年 × 4回 1年 × 20回 半年 × 40回 3カ月 × 80回 毎月 × 240回 隔週 × 480回 毎週 × 960回 毎日 × 5000回 なぜドメイン駆動設計か? ソフトウェア提供サイクルの変化
Slide 10
Slide 10 text
2022/5/19 10 構想立案~要件定義~設計・開発・テスト~移行~運用保守~廃棄 20年 × 1回 5年 × 4回 1年 × 20回 半年 × 40回 3カ月 × 80回 毎月 × 240回 隔週 × 480回 毎週 × 960回 毎日 × 5000回 クラウド/コンテナ アプリケーション分割 データベース分割 CI/CDパイプライン ドメイン駆動設計 商流のデジタル化/多元化 金流のデジタル化/多様化 物流のデジタル化/多頻度化 事業環境の変化 事業活動の変化 実行環境の変化 アーキテクチャの変化 設計開発手法の変化 なぜドメイン駆動設計か? ソフトウェア提供サイクルの変化 実現可能性 必要性
Slide 11
Slide 11 text
複雑さへの挑戦 2022/5/19 11
Slide 12
Slide 12 text
事業活動/ソフトウェア 2022/5/19 12 さまざまな要素が 複雑に絡み合い 多元的に変化する
Slide 13
Slide 13 text
事業活動/ソフトウェア 2022/5/19 13 さまざまな要素が 複雑に絡み合い 多元的に変化する 理解の負荷 思考の負荷 伝達の負荷 情報量 vs. 人間のワーキング メモリ 状況判断 意思決定 背景知識の違い 注目点の違い
Slide 14
Slide 14 text
モデリング=簡略化 2022/5/19 14 さまざまな要素が 複雑に絡み合い 多元的に変化する 情報量 vs. 人間のワーキング メモリ 状況判断 意思決定 背景知識の違い 注目点の違い 理解を助ける 簡略化 伝達を助ける 簡略化 思考を助ける 簡略化
Slide 15
Slide 15 text
モデル(成果物)とモデリング(過程) ① 組織/チームでソフトウェアを開発する時、効果を生み出すの は、モデル(成果物)よりもモデルを作るための認識合わせを する活動 ② モデルは、状況の変化・理解の変化・判断の変化によって変 わっていく(成果物として固定の完成形/最終形はない) ③ モデリングという「簡略化のための活動」が価値を生み出す 2022/5/19 15
Slide 16
Slide 16 text
モデリング(簡略化活動)の費用対効果 2022/5/19 16 モデリングの時間 モデリングの時間 モデリングの時間 時間をかければ効果が大きくなるわけではない いかに少ない時間で大きな効果をだすか 効果がでていないモデリングの時間をどう減らすか 理解しやすくなった 判断しやすくなった 伝わりやすくなった
Slide 17
Slide 17 text
モデリングスキルの三段階 2022/5/19 17 基礎知識 技法とツール 用途と期待効果 効果の認識能力 費用の認識能力 費用対効果を改善する能力 費用対効果を判断する能力
Slide 18
Slide 18 text
持続的な進化のためのモデリング 2022/5/19 18
Slide 19
Slide 19 text
機敏なモデリング いつでも どこでも 誰でも 少しずつ 繰り返し 持続的に 2022/5/19 19 ソフトウェアの提供サイクルが短い 開発・提供の単位が小さい 変更の影響範囲を限定できている
Slide 20
Slide 20 text
多面的なモデリング(並行&連動) 構想 事業活動の分析 要件定義 設計 • アプリケーション • ソフトウェア • システム(実行環境) 実装 テスト設計 移行 2022/5/19 20 例えば 配送区分を追加するコードの変更は 事業環境の変化、事業活動の変化、 システム化構想の変化と連動している
Slide 21
Slide 21 text
モデリング(簡略化活動)のコントロール 視点の切り替え 構造(関連) 振る舞い(時間軸/循環系) 相互作用 視点を組み合わせた整合性の検証(モデリングの品質改善) 解像度を切り替える 視界を広げる/狭める 照準の対象を変える 2022/5/19 21
Slide 22
Slide 22 text
機敏なモデリングの道具 ① 手書き(いつでも、どこでも) ② お絵描きツール(ネット上で共有) ③ テキストエディタ&可視化(変更容易性・履歴・解析検査) • Plant UML(独自文法) • Mermaid (mark down) • JIG(Java) 2022/5/19 22
Slide 23
Slide 23 text
実際どんな感じでやっているか A) 事業活動を理解するためのモデリング B) 設計のモデリング C) 実行環境や運用設計のモデリング 2022/5/19 23
Slide 24
Slide 24 text
事業活動を理解するためのモデリング 2022/5/19 24 三つの視点 商流 金流 物流 業務フロー (アクティビティ図) ユースケースモデル ユースケース記述(代替コース) イベントシーケンス (時系列分析) (イベントストーミング) 状態マシン ガード条件 情報モデル 識別番号 発生タイミング 制約記述 (OCL→Java) 画面 帳票 価格表/割引条件 契約書/利用規約 業務マニュアル 事業活動の構造や制約に関わる側面を重視した分析・整理をしている
Slide 25
Slide 25 text
設計のモデリング 2022/5/19 25 視点 パッケージ クラス テーブル API ツールでモデルや設計の状態を評価 ・可視化(関連図など)して構造を評価 ・健全性を数値解析(LCOM*, CC, 命名,サイズ, … ) ・要点の抽出・ソート・分類 テキストで記述(Java/DDL) ・ラフスケッチ段階から ・整合性を文法的にチェック ・モデリング/設計が安定してくる=そのまま動く
Slide 26
Slide 26 text
実行環境のモデリング 2022/5/19 26 AWS構成図 (ほぼ配置図+コンポーネント図) 依存管理とビルドスクリプト(gradle/groovy) 環境構築のスクリプト(Terraform) パイプラインのスクリプト(yaml) 実行環境は基本的に仮想化 (クラウド/コンテナ) 「機器」という概念はない OSレベルの操作もない世界 DSLで記述 マクロ化 実行状況の可視化・ログ化 白紙から検討しモデリングという機会がなくなりつつある パターンやテンプレートのカタログからの選択+設定でカストマイズするイメージ
Slide 27
Slide 27 text
モデリングの教え方 2022/5/19 27
Slide 28
Slide 28 text
私の活動範囲で肌で感じていること 開発の現場は モデリングが役に立つ 機会にあふれている モデリングや設計の必要性は なんとなく理解している いつ、何を、どうやるか やり方がわからない それっぽいことをやってみるが あまりうまくできていない ・流通系の基幹システム刷新、損保系の次世代基幹システム構築 ・離陸に成功したスタートアップ(介護、健康、飲食、会計、…)の技術負債との戦い ・「現場から学ぶモデル設計」技術者コミュニティ(4000人超/16回の勉強会)の反応 2022/5/19 28
Slide 29
Slide 29 text
モデリング:何が足りていないのか 知識? 練度? 動機? 2022/5/19 29
Slide 30
Slide 30 text
モデリング:知識が不足しているなら 知識に触れる機会を増やす → 現場の経験談、実践報告 → ライトな解説書(マンガでわかる…) → 教材+座学+知識テスト → 説明役/教え役のロールプレイング 2022/5/19 30
Slide 31
Slide 31 text
モデリング:練度が不足しているなら 実際にやってみて体験知を増やす → 継続的にモデリング(理解度や練度の差分の体験) → 複数モデルを作って比較して気づきを増やす → 教科書的知識と実践とのギャップを体験 → 視点・解像度・視界・照準のコントロールの練習 → 複数モデル間の整合性をチェックして品質改善の練習 2022/5/19 31
Slide 32
Slide 32 text
モデリング:動機が不足しているなら アメ and/or ムチ? → うまみを体験する • 理解しやすくなった • 判断しやすくなった • 伝わりやすくなった → うまみの体験を強化する(ほめる) → モデリング不足の痛みの具体例を見つける(ソフトなペナルティ) → わかりにくい/判断しにくい/伝わりにくいをフィードバック 2022/5/19 32
Slide 33
Slide 33 text
まとめ 2022/5/19 33
Slide 34
Slide 34 text
事業活動/ソフトウェア 2022/5/19 34 さまざまな要素が 複雑に絡み合い 多元的に変化する
Slide 35
Slide 35 text
事業活動/ソフトウェア 2022/5/19 35 さまざまな要素が 複雑に絡み合い 多元的に変化する 理解の負荷 思考の負荷 伝達の負荷 情報量 vs. 人間のワーキング メモリ 状況判断 意思決定 背景知識の違い 注目点の違い
Slide 36
Slide 36 text
モデリング=簡略化 2022/5/19 36 さまざまな要素が 複雑に絡み合い 多元的に変化する 情報量 vs. 人間のワーキング メモリ 状況判断 意思決定 背景知識の違い 注目点の違い 理解を助ける 簡略化 伝達を助ける 簡略化 思考を助ける 簡略化
Slide 37
Slide 37 text
モデリングスキルの三段階 2022/5/19 37 基礎知識 技法とツール 用途と期待効果 効果の認識能力 費用の認識能力 費用対効果を改善する能力 費用対効果を判断する能力