Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ソフトウェア開発の複雑さに立ち向かう
Search
増田 亨
PRO
November 25, 2024
13
13k
ソフトウェア開発の複雑さに立ち向かう
アーキテクチャカンファレンス2024 発表資料
増田 亨
PRO
November 25, 2024
Tweet
Share
More Decks by 増田 亨
See All by 増田 亨
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
9
670
現場で役立つモデリング 超入門
masuda220
PRO
15
3.6k
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
7
1.7k
ソフトウェアの実装と事業戦略を結びつける
masuda220
PRO
19
7.3k
ソフトウェア設計と生成AI
masuda220
PRO
15
3.7k
ドメイン駆動設計の実践
masuda220
PRO
31
12k
いまどきの分析設計パターン10選
masuda220
PRO
39
13k
大きな泥団子に立ち向かう
masuda220
PRO
30
14k
開発活動の参照モデルを使ったベンチマーキングと最適化
masuda220
PRO
6
850
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Visualization
eitanlees
146
15k
Practical Orchestrator
shlominoach
186
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Git: the NoSQL Database
bkeepers
PRO
427
64k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Building an army of robots
kneath
302
44k
GraphQLとの向き合い方2022年版
quramy
44
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
1
110
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.6k
Transcript
ソフトウェア開発の複雑さ に立ち向かう 2024年11月26日 有限会社システム設計 増田 亨 1 アーキテクチャ Conference 2024
自己紹介 業務系アプリケーションソフトウェアの開発者 モデル駆動設計 Java/Spring Boot/IntelliJ IDEA/JIG 有限会社システム設計 代表 since 2003
コミューン株式会社 技術アドバイザ since 2023 2 増田 亨(ますだ とおる) 著書(2017) 訳書(2024)
本日お話する内容 ◆ どんどん複雑になるソフトウェア開発 ◆ 予測しづらい状況でどう設計していくか ◆ 事業視点で設計する:4つのアプローチ ◆ 設計の知識と技能をどう習得するか 3
どんどん複雑になる ソフトウェア開発 4
デジタル化の進展(技術視点) • モバイルデータ通信とクラウドの普及 • データの量と種類が爆発 • それを扱うためのソフトウェアの数と種類も増加 • ソフトウェア開発はますます複雑になってきている 5
「複雑さ」がますます複雑に 6 複雑性 曖昧性 不確実性 変動性 予測しづらい状況でソフトウェア開発に取り組む
予測しづらい状況 変動性 状況が安定しない、変化し続ける 不確実性 予測しにくい要素が増える 複雑性 構成要素の多元化と多様化、つながりの煩雑化 曖昧性 影響範囲の境界がぼやける、因果関係がはっきりしない 7
なぜ予測しづらくなった? 8
デジタル化の進展(事業視点) • 事業活動の広い範囲でデジタル化が進行し 事業活動とソフトウェアシステムの変化が一体化 • この一体化は、ソフトウェアシステムを活用して、 競争優位を確保する機会であり、 競争優位を失う危機である 9
予測しづらい状況での取り組み(事業視点) • 事業活動は、昔も今も、予測しづらい状況での取り組み • 変動性、不確実性、複雑性、曖昧性があたりまえ コンピュータやデータ通信がない時代、おそらく五千年前から、ずっと そうだった • 事業活動が広範囲にデジタル化することで ソフトウェアエンジニアが事業活動の当事者になった
10
予測しづらい状況で どう設計していくか 11
事業活動の当事者として設計する • 事業の中核課題=競争優位の獲得と維持を理解する • ソフトウェアの開発運用を事業視点でとらえる • 競争優位の獲得と維持に焦点を合わせて設計判断する 12
予測しづらい状況下の行動モデル 13 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目
標 状況を変化させる 経験知を増やす 事業活動の行動モデル = ソフトウェアシステム開発運用の行動モデル
予測しづらい状況で設計を駆動するための 4つのソフトウェア品質特性 14 変更容易性 合目的性 経済性 相互運用性
事業課題と設計方針を整合させる 15 複雑性 曖昧性 不確実性 変動性 合目的性 事業視点:中心課題は競争優位の確保と維持 ⇒ 競争優位で設計を判断する
事業利益と設計を整合させる 16 複雑性 曖昧性 不確実性 変動性 経済性 事業視点:利益=売上 – 費用
⇒ ソフトウェアで売上増 and/or 費用減を推進する
事業活動の変化と設計を整合させる 17 複雑性 曖昧性 不確実性 変動性 変更容易性 事業視点:競争優位の確保と維持のために行動を変える ⇒ そのためのモジュール化
事業活動の連動性と設計を整合させる 18 複雑性 曖昧性 不確実性 変動性 相互運用性 事業視点 : 競争優位のための事業活動の効果的連動
⇒ アプリケーション間連係の最適化
4つの品質特性:事業課題と設計方針 19 ソフトウェア 品質特性 事業課題 設計方針 合目的性 競争優位の確保と維持 競争優位の確保と維持を 目指して設計する
経済性 利益 = 売上 - 費用 ソフトウェアで、売上増 and/or 費用減を推進する 変更容易性 競争優位の確保と維持の ために行動を変える 行動の変更(業務ルール変更) を進めるためのモジュール化 相互運用性 競争優位の確保と維持する ために事業活動を連動する アプリケーション間連係を 事業視点で最適化 整合させる
事業視点で設計に取り組む 4つのアプローチ 20
4つのアプローチ ➢ 予測しづらい状況下の行動モデル ➢ 競争優位分析とソフトウェア設計 ➢ 事業視点での関心の分離とモジュール化 ➢ 事業視点でのアプリケーション間連係 21
行動モデル 22
予測しづらい状況下の行動モデル(再掲) 23 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目
標 状況を変化させる 経験知を増やす 事業活動の行動モデル = ソフトウェアシステム開発運用の行動モデル
競争優位分析と ソフトウェア設計 24
購買物流 生産 出荷物流 販売促進 販売 顧客支援 技術開発 人的資源の管理 調 達
競争優位を分析する技法 25 事業活動を8つの領域に分類して競争優位を分析(価値連鎖モデル) 競争優位を確保し維持するために ・差別化する仕組みは? ・コスト優位を生み出す仕組みは? ・各活動の連動方法は?
競争優位とソフトウェア設計方針 26 競合他社との差別化 中核 業務ロジックの複雑さ 対象領域を二軸で分類
業務領域の競争優位と設計方針 中核 一般 補完 競争優位 ◎ × × 複雑さ 〇
〇 × 変化 〇 × × 設計方針 ドメインモデル イベント履歴 外部製品評価 CRUD/ETL 調達方法 内製 購入 外注 27
事業視点での 関心の分離とモジュール化 28
関心の分離とモジュール化の経験則 29 アーキテクチャ スタイル 設計パターン 実装パターン (イディオム) 全体を俯瞰した 関心の分離の 基本方針
部分的な モジュール構造 実装技術依存の 問題解決方法 さまざまな経験則が入手可能 強調する点が異なるが 対立ではなく補完する関係 事業視点から どう利用するかを判断する
事業視点でモジュール設計 • 業務ルールに焦点を合わせる 競争優位を確保し維持するための決め事が業務ルール 複雑かつ変更が多い • 業務ルール記述のモジュール性 競争優位の確保と維持に強く影響する(業務ルール変更への即応性) • 業務ルールモジュールの設計
対象業務で関心のある値とその計算判断ロジックをカプセル化する アプリケーション固有の抽象的なデータ型を体系的に整える 30
事業視点での アプリケーション間連係 31
連係:異なるモデルのつなぎ方 32 対等の関係 力関係が片寄った関係 競争優位の確保と維持のためにどうつなぐか
設計方法:分散型アプリケーション間連係 33 マイクロサービスアーキテクチャ (第14章) イベント駆動型アーキテクチャ (第15章) データメッシュ (第16章) 競争優位の確保と維持のための連係方式
事業視点のソフトウェア設計 どう習得するか 34
予測しづらい状況下のソフトウェア設計 35 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目
標 状況を変化させる 経験知を増やす 事業活動の行動学習モデル = ソフトウェアシステム開発運用の行動学習モデル
終わりのない学習活動 • ソフトウェア設計にあらかじめ決まった答えはない • 予測しづらい状況で、場面に応じて探索と発見を繰り返す つまり • ソフトウェア設計とは継続的で終わりのない学習活動 36
継続的な学習:三つの基本行動 観察する • 選択的注意(何を、なぜ観察するかを意識する) • 多様性:異なる経験と視点を持つ複数メンバーで協働観察する • 一般化されたモデルと関係づける 仮説の立案 •
目的地までのあらすじを考える • あらすじ(予測)と実際の進行(行動の結果)との差分から学ぶ 行動から学ぶ • 行動によって、経験知を増やして、手持ちの判断材料を増やす • 行動によって、状況を変化させて、新たな判断材料を増やす 37
事業視点のソフトウェア設計:学び方 38 共創 経験則 習熟 さまざまな場面の経験を 自分なりに一般化した暗黙知 場面に応じて活性化する 経験によって更新される 書籍など、言語化/可視化された
他者の経験則を、自分が取り組んでいる 個別の状況と対応づけて取り入れる 設計の知識と技能を お互いに持ち寄って 組み合わせる 制約の多い実際の文脈で 手を動かして 体で覚える うまくできるようになる 相乗効果(三つの掛け算) 足し算ではなく掛け算
まとめ ◆ 複雑になるソフトウェア開発、事業活動との一体化 ◆ 予測しづらい状況で事業視点で設計する ◆ 競争優位分析とソフトウェア設計を整合させる ◆ 継続的な探索と発見(観察・仮説・行動) ◆
事業視点で、経験則を増やし、習熟し、共創する 39