Slide 1

Slide 1 text

ソフトウェア開発の複雑さ に立ち向かう 2024年11月26日 有限会社システム設計 増田 亨 1 アーキテクチャ Conference 2024

Slide 2

Slide 2 text

自己紹介 業務系アプリケーションソフトウェアの開発者 モデル駆動設計 Java/Spring Boot/IntelliJ IDEA/JIG 有限会社システム設計 代表 since 2003 コミューン株式会社 技術アドバイザ since 2023 2 増田 亨(ますだ とおる) 著書(2017) 訳書(2024)

Slide 3

Slide 3 text

本日お話する内容 ◆ どんどん複雑になるソフトウェア開発 ◆ 予測しづらい状況でどう設計していくか ◆ 事業視点で設計する:4つのアプローチ ◆ 設計の知識と技能をどう習得するか 3

Slide 4

Slide 4 text

どんどん複雑になる ソフトウェア開発 4

Slide 5

Slide 5 text

デジタル化の進展(技術視点) • モバイルデータ通信とクラウドの普及 • データの量と種類が爆発 • それを扱うためのソフトウェアの数と種類も増加 • ソフトウェア開発はますます複雑になってきている 5

Slide 6

Slide 6 text

「複雑さ」がますます複雑に 6 複雑性 曖昧性 不確実性 変動性 予測しづらい状況でソフトウェア開発に取り組む

Slide 7

Slide 7 text

予測しづらい状況 変動性 状況が安定しない、変化し続ける 不確実性 予測しにくい要素が増える 複雑性 構成要素の多元化と多様化、つながりの煩雑化 曖昧性 影響範囲の境界がぼやける、因果関係がはっきりしない 7

Slide 8

Slide 8 text

なぜ予測しづらくなった? 8

Slide 9

Slide 9 text

デジタル化の進展(事業視点) • 事業活動の広い範囲でデジタル化が進行し 事業活動とソフトウェアシステムの変化が一体化 • この一体化は、ソフトウェアシステムを活用して、 競争優位を確保する機会であり、 競争優位を失う危機である 9

Slide 10

Slide 10 text

予測しづらい状況での取り組み(事業視点) • 事業活動は、昔も今も、予測しづらい状況での取り組み • 変動性、不確実性、複雑性、曖昧性があたりまえ コンピュータやデータ通信がない時代、おそらく五千年前から、ずっと そうだった • 事業活動が広範囲にデジタル化することで ソフトウェアエンジニアが事業活動の当事者になった 10

Slide 11

Slide 11 text

予測しづらい状況で どう設計していくか 11

Slide 12

Slide 12 text

事業活動の当事者として設計する • 事業の中核課題=競争優位の獲得と維持を理解する • ソフトウェアの開発運用を事業視点でとらえる • 競争優位の獲得と維持に焦点を合わせて設計判断する 12

Slide 13

Slide 13 text

予測しづらい状況下の行動モデル 13 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目 標 状況を変化させる 経験知を増やす 事業活動の行動モデル = ソフトウェアシステム開発運用の行動モデル

Slide 14

Slide 14 text

予測しづらい状況で設計を駆動するための 4つのソフトウェア品質特性 14 変更容易性 合目的性 経済性 相互運用性

Slide 15

Slide 15 text

事業課題と設計方針を整合させる 15 複雑性 曖昧性 不確実性 変動性 合目的性 事業視点:中心課題は競争優位の確保と維持 ⇒ 競争優位で設計を判断する

Slide 16

Slide 16 text

事業利益と設計を整合させる 16 複雑性 曖昧性 不確実性 変動性 経済性 事業視点:利益=売上 – 費用 ⇒ ソフトウェアで売上増 and/or 費用減を推進する

Slide 17

Slide 17 text

事業活動の変化と設計を整合させる 17 複雑性 曖昧性 不確実性 変動性 変更容易性 事業視点:競争優位の確保と維持のために行動を変える ⇒ そのためのモジュール化

Slide 18

Slide 18 text

事業活動の連動性と設計を整合させる 18 複雑性 曖昧性 不確実性 変動性 相互運用性 事業視点 : 競争優位のための事業活動の効果的連動 ⇒ アプリケーション間連係の最適化

Slide 19

Slide 19 text

4つの品質特性:事業課題と設計方針 19 ソフトウェア 品質特性 事業課題 設計方針 合目的性 競争優位の確保と維持 競争優位の確保と維持を 目指して設計する 経済性 利益 = 売上 - 費用 ソフトウェアで、売上増 and/or 費用減を推進する 変更容易性 競争優位の確保と維持の ために行動を変える 行動の変更(業務ルール変更) を進めるためのモジュール化 相互運用性 競争優位の確保と維持する ために事業活動を連動する アプリケーション間連係を 事業視点で最適化 整合させる

Slide 20

Slide 20 text

事業視点で設計に取り組む 4つのアプローチ 20

Slide 21

Slide 21 text

4つのアプローチ ➢ 予測しづらい状況下の行動モデル ➢ 競争優位分析とソフトウェア設計 ➢ 事業視点での関心の分離とモジュール化 ➢ 事業視点でのアプリケーション間連係 21

Slide 22

Slide 22 text

行動モデル 22

Slide 23

Slide 23 text

予測しづらい状況下の行動モデル(再掲) 23 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目 標 状況を変化させる 経験知を増やす 事業活動の行動モデル = ソフトウェアシステム開発運用の行動モデル

Slide 24

Slide 24 text

競争優位分析と ソフトウェア設計 24

Slide 25

Slide 25 text

購買物流 生産 出荷物流 販売促進 販売 顧客支援 技術開発 人的資源の管理 調 達 競争優位を分析する技法 25 事業活動を8つの領域に分類して競争優位を分析(価値連鎖モデル) 競争優位を確保し維持するために ・差別化する仕組みは? ・コスト優位を生み出す仕組みは? ・各活動の連動方法は?

Slide 26

Slide 26 text

競争優位とソフトウェア設計方針 26 競合他社との差別化 中核 業務ロジックの複雑さ 対象領域を二軸で分類

Slide 27

Slide 27 text

業務領域の競争優位と設計方針 中核 一般 補完 競争優位 ◎ × × 複雑さ 〇 〇 × 変化 〇 × × 設計方針 ドメインモデル イベント履歴 外部製品評価 CRUD/ETL 調達方法 内製 購入 外注 27

Slide 28

Slide 28 text

事業視点での 関心の分離とモジュール化 28

Slide 29

Slide 29 text

関心の分離とモジュール化の経験則 29 アーキテクチャ スタイル 設計パターン 実装パターン (イディオム) 全体を俯瞰した 関心の分離の 基本方針 部分的な モジュール構造 実装技術依存の 問題解決方法 さまざまな経験則が入手可能 強調する点が異なるが 対立ではなく補完する関係 事業視点から どう利用するかを判断する

Slide 30

Slide 30 text

事業視点でモジュール設計 • 業務ルールに焦点を合わせる 競争優位を確保し維持するための決め事が業務ルール 複雑かつ変更が多い • 業務ルール記述のモジュール性 競争優位の確保と維持に強く影響する(業務ルール変更への即応性) • 業務ルールモジュールの設計 対象業務で関心のある値とその計算判断ロジックをカプセル化する アプリケーション固有の抽象的なデータ型を体系的に整える 30

Slide 31

Slide 31 text

事業視点での アプリケーション間連係 31

Slide 32

Slide 32 text

連係:異なるモデルのつなぎ方 32 対等の関係 力関係が片寄った関係 競争優位の確保と維持のためにどうつなぐか

Slide 33

Slide 33 text

設計方法:分散型アプリケーション間連係 33 マイクロサービスアーキテクチャ (第14章) イベント駆動型アーキテクチャ (第15章) データメッシュ (第16章) 競争優位の確保と維持のための連係方式

Slide 34

Slide 34 text

事業視点のソフトウェア設計 どう習得するか 34

Slide 35

Slide 35 text

予測しづらい状況下のソフトウェア設計 35 現在の状況を観察 (新たな材料を獲得) 経験知の取り出し (手持ちの材料を利用) 状況の判断 仮説の立案 行動 目 標 状況を変化させる 経験知を増やす 事業活動の行動学習モデル = ソフトウェアシステム開発運用の行動学習モデル

Slide 36

Slide 36 text

終わりのない学習活動 • ソフトウェア設計にあらかじめ決まった答えはない • 予測しづらい状況で、場面に応じて探索と発見を繰り返す つまり • ソフトウェア設計とは継続的で終わりのない学習活動 36

Slide 37

Slide 37 text

継続的な学習:三つの基本行動 観察する • 選択的注意(何を、なぜ観察するかを意識する) • 多様性:異なる経験と視点を持つ複数メンバーで協働観察する • 一般化されたモデルと関係づける 仮説の立案 • 目的地までのあらすじを考える • あらすじ(予測)と実際の進行(行動の結果)との差分から学ぶ 行動から学ぶ • 行動によって、経験知を増やして、手持ちの判断材料を増やす • 行動によって、状況を変化させて、新たな判断材料を増やす 37

Slide 38

Slide 38 text

事業視点のソフトウェア設計:学び方 38 共創 経験則 習熟 さまざまな場面の経験を 自分なりに一般化した暗黙知 場面に応じて活性化する 経験によって更新される 書籍など、言語化/可視化された 他者の経験則を、自分が取り組んでいる 個別の状況と対応づけて取り入れる 設計の知識と技能を お互いに持ち寄って 組み合わせる 制約の多い実際の文脈で 手を動かして 体で覚える うまくできるようになる 相乗効果(三つの掛け算) 足し算ではなく掛け算

Slide 39

Slide 39 text

まとめ ◆ 複雑になるソフトウェア開発、事業活動との一体化 ◆ 予測しづらい状況で事業視点で設計する ◆ 競争優位分析とソフトウェア設計を整合させる ◆ 継続的な探索と発見(観察・仮説・行動) ◆ 事業視点で、経験則を増やし、習熟し、共創する 39