Submit Search
ソフトウェア設計の学び方を考える
•
31 likes
•
25,257 views
増田 亨
Follow
ソフトウェア設計の課題 ソフトウエア設計の品質 学習と成長 設計の初歩を学ぶ 中級者への道 上級者の挑戦
Read less
Read more
1 of 39
Download now
Downloaded 79 times
More Related Content
ソフトウェア設計の学び方を考える
1.
ソフトウェア設計の 学び方を考える 2019年6月23日 ギルドワークス 増田 亨 DevLOVE
X(10周年記念イベント)
2.
アジェンダ 1. 設計という課題 2. ソフトウェア設計の品質 3.
学習と成長 4. 設計の初歩を学ぶ 5. 設計の中級者への道 6. 設計の上級者への挑戦 2019/6/23 2
3.
ソフトウェア設計という課題 2019/6/23 3
4.
複雑さとの戦い 構成要素の数 構成要素間の関係 拡張と変更の繰り返し 2019/6/23 4
5.
人間の知的能力の限界 構成要素の数 構成要素間の関係 拡張と変更の繰り返し 2019/6/23 5
6.
ソフトウェア設計の品質 2019/6/23 6
7.
構造と秩序 2019/6/23 7
8.
時間とともに劣化する構造と秩序 2019/6/23 8
9.
時間とともに進化する構造と秩序 2019/6/23 9
10.
ソフトウェア設計のスキル 構造と秩序を生み出す能力 2019/6/23 10
11.
学習と成長 2019/6/23 11
12.
学習と成長 実験による設計スキルの習得 設計スキルの学習曲線 2019/6/23 12
13.
実験による設計スキルの習得 最初からよい設計はみつからない そのまま使える既存の設計はない 2019/6/23 13
14.
実験による設計スキルの習得 観察 仮説 実験
考察 目の前の設計課題 過去の設計例 他者の設計例 今回設計案の列挙 仮決め コードで検証 収まり具合 まわりとの関係性 全体の調和 2019/6/23 14
15.
設計スキルの向上 設計知識の広さと深さ 設計経験の広さと深さ 着眼点とこだわりポイントの変化 2019/6/23 15
16.
設計スキルの学習曲線 設計の初歩 を学ぶ 中級者への道 上級者の挑戦 知識と経験が広く深くなるにつれ 着眼点とこだわりポイントが変化していく 2019/6/23 16
17.
設計の初歩を学ぶ 2019/6/23 17
18.
設計の基本 関心を分離する モジュールに分割する 2019/6/23 18
19.
分割とモジュール化の方法論 2019/6/23 19
20.
2つの分割アプローチ 機能で分解する 型で分解する 入出力 計算 画面・通信・データベースの操作 トランザクションスクリプト 導出ロジック/判定ロジックの記述 ドメインモデル 2019/6/23
20 B. Liskov B. Meyer M. Fowler K. Beck E. Evans ボトムアップ インクリメンタル トップダウン アップフロント
21.
構造と秩序をもたらす設計の初歩 型(値の種類)で分解する 計算を主役に、入出力をわき役に 問題領域と設計の直接的な写像 2019/6/23 21
22.
型による分解 2019/6/23 22
23.
型(値の種類)による分解 動機は計算ロジックや判定ロジックの複雑さを扱う工夫 計算の結果や計算に使う値を分類する(型の発見) 型ごとに、値の有効な範囲を定義する 型ごとに、その値を使う有効な操作を定義する 値の範囲と操作の定義をカプセル化する(クラス) 2019/6/23 23
24.
計算を設計の主役に 2019/6/23 24
25.
計算が主役、入出力がわき役 Javaの言語、標準ライブラリ、フレームワークを例に 計算ロジックの記述 入出力の記述 かつては、java.io, java.net,
java.sql … 今はフレームワークに隠蔽されている さまざまな実証済の設計パターンの登場 かつては、int, boolean, BigDecimal, Calendar, collection 今でも、int, boolean, BigDecimal, java.time, collection, … かつては、if文, switch文, enum, … 今でも、if文, switch文, enum, … 構造と秩序を生み出すための 設計の主たる関心事ではなくなりつつある 複雑さと戦い、構造と秩序を生み出すための 設計活動の主戦場 2019/6/23 25
26.
問題領域と設計の直接的な写像 2019/6/23 26
27.
怪しげな写像 金額 注文番号 消費税 換算レート 納期 誕生日 割引可能 出荷可能 long型 BigDecimal型 LocalDate型 boolean型 一方通行 N対1 値の範囲 可能な操作 問題領域の関心事 設計実装の関心事 2019/6/23 27
28.
直接的な写像 金額 注文番号 消費税 換算レート 納期 誕生日 割引可能 出荷可能 双方向の対応 1対1 適切な値の範囲 適切な操作 問題領域の関心事 設計実装の関心事 金額型 注文番号型 消費税型 換算レート型 納期型 誕生日型 割引判定型 出荷判定型 2019/6/23 28
29.
構造と秩序をもたらす設計の初歩 型(値の種類)で分解する 計算を主役に、入出力をわき役に 問題領域と設計の直接的な写像 2019/6/23 29
30.
設計の中級者への道 2019/6/23 30
31.
設計の初級者と中級者の違い 初級者にとっては時間のムダに思える活動 中級者は費用対効果が高いと考える活動 2019/6/23 31
32.
設計に関する活動 初級者 中級者 リファクタリング
動けばOK/やらない 動いた後の改善こそ重要 名前の変更 どっちでも同じ 名前たいせつ パッケージ構造の変更 時間のムダ/危険 見通し改善の効果大 設計の選択肢 選択肢はひとつ いろいろあって迷う 業務知識 わからない、興味ない 知っていると強い 設計スキルが高い 複雑なコードが書ける コードを単純にできる 2019/6/23 32
33.
設計の中級者への道 ➢多くに目を向け、複数の選択肢を持つようにする ➢時間の節約と投資を覚える ✓構造と秩序の「核になる20%」に注目する ✓核心の設計課題に、重点的に時間とエネルギーを投資する ✓周辺的な課題の設計は、できるだけ時間とエネルギーを節約する ➢仕様の補完力の必要性と効果を知る ✓詳細仕様はだれも知らない/決められない現実を理解する ✓業務知識の理解と直接的な写像の効果に気がつく ➢パッケージ名とパッケージ構造の威力を知る 2019/6/23 33 「中心」と「周辺」の関係に気づく 影響の大きい要素の発見
34.
設計の上級者への挑戦 2019/6/23 34
35.
設計の上級者 もっともっと広く、もっともっと深く 4%への挑戦 2019/6/23 35
36.
設計の上級者 ➢もっともっと広く、もっともっと深く ✓型による分解 ✓計算を主役に ✓問題領域と設計実装の直接的な写像 ➢4%への挑戦 ✓20%×20% ✓関心の範囲を広げるほど、時間が足りなくなる ✓中核のなかの中核、要点のなかの要点を発見することに焦点をあわせる ✓4%の中心的な関心事に、重点的に投資する ✓周辺の関心事への節約を、さらに徹底する 2019/6/23 36
37.
深く理解し、4%に挑戦する ➢多くに目を向け、複数の視点を持ち、視座をあちこち移動する ➢根底にある構造の発見へのこだわり ➢暗黙の概念の言語化へのこだわり ➢ビジネス活動とソフトウェア構造の直接的な関係性の気づき ✓どちらも構造と秩序が時間とともに変化する ✓両者の直接的な連動性への気づきと設計への反映 2019/6/23 37
38.
本日のまとめ 2019/6/23 38
39.
設計という課題 複雑さへの挑戦 構造と秩序をもたらす能力 設計の品質 変更が楽で安全であること、 進化を続ける秩序 学習と成長 実験による学習 着眼点とこだわりポイントの変化 設計の初歩を学ぶ 型による分解、計算が主役 直接的な写像 中級者への道 設計の費用対効果への気づき 中心と周辺の気づき、節約と投資 上級者への挑戦 4%への挑戦 隠れた概念/関係性の発見と言語化 2019/6/23 39
Download