Open16

はじめての設計をやり抜くための本を読んで

GOD-oda(t.oda)GOD-oda(t.oda)

本書の特徴の1つは、設計工程を最初から最後まで一貫して説明するところ

期待を込めて読み進める

GOD-oda(t.oda)GOD-oda(t.oda)

設計をやり抜くために最低限必要なこと

  1. 設計の目的を正確に把握すること
  2. 設計を行うために最低限必要なテクニックを知ること
  3. 正常なコミュニケーションをとること

設計に最低限必要な知識

  1. ユースケース
  2. 概念モデル
  3. データベース設計
  4. アーキテクチャ設計
GOD-oda(t.oda)GOD-oda(t.oda)

エンジニアのタイプ

理想主義者

  • 新しい技術に楽観的
  • 早く受け入れる(無条件)

現実主義者

  • 新しい技術に懐疑的
  • 慎重に受け入れる

どちらもそれだけでは優れているエンジニアとは言えないらしい
理想主義者には独創性、現実主義者には寛容さがプラスアルファであると良いとのこと

数ある選択肢の中でベストなものは何かを判断できるスキルがあると良さそうだなぁ(経験からくることもあるだろうし歴史から学ぶこともあるだろうし

GOD-oda(t.oda)GOD-oda(t.oda)

設計と一言に言ってもシステム設計、ソフトウェア設計、アプリケーション設計などがある

システムが一番大きな概念で下記の概念を含み、下にいくほど低レベルな基礎技術になる

  • アプリケーション
  • ミドルウェア
  • データベース
  • OS
  • ハードウェア
  • ネットワーク

で、いろんな設計はこのように紹介されている

  • アプリケーション = アプリケーション設計
  • データベース = データベース設計
  • アプリケーション設計 + データベース設計 = ソフトウェア設計
  • ネットワーク = ネットワーク設計
  • OS + ハードウェア + ネットワーク設計 = インフラ設計
  • ソフトウェア設計 + インフラ設計 = システム設計
GOD-oda(t.oda)GOD-oda(t.oda)

ハードウェアは何かしらのクラウドベンダー使ってると意識しないよなぁ

GOD-oda(t.oda)GOD-oda(t.oda)

移行設計なるものがあるみたいだけど、これって今流行り(?)のストラングラーパターンがうまくハマるようなやつかな

あと移行って言ってもクラウドが整ってる今意識しないといけないのって大抵アプリケーション、ミドルウェア、データベースくらいでOS、ハードウェア、ネットワークはほとんど考えなくても良さそう

ネットワークは考えないといけないか

GOD-oda(t.oda)GOD-oda(t.oda)

要件定義には暗黙的な大目的が隠れています。それは、「開発工数を見積る」ことです。

なかなかに難しいよね(だからこそいろんな手法があるわけだけど

GOD-oda(t.oda)GOD-oda(t.oda)
  • 外部設計とは外部仕様を設計すること(入力と出力の定義)
  • 外部仕様とはユーザーや外部システムに対して提供する機能のこと

webアプリケーションだったら画面があるし、APIだったらそのインターフェースがあるし

GOD-oda(t.oda)GOD-oda(t.oda)

DFDの記号表記は3種類ある

  • ヨードン/コード式
  • ヨードン/デマルコ式
  • ゲイン/サーソン式
GOD-oda(t.oda)GOD-oda(t.oda)

DFDにはレベルがあるらしい

レベル0(コンテキスト図)

https://d2slcw3kip6qmk.cloudfront.net/marketing/pages/chart/seo/data-flow-diagram/discovery/data-flow-diagram-3.svg

レベル1(レベル0を詳細に分解したもの)

https://d2slcw3kip6qmk.cloudfront.net/marketing/pages/chart/seo/data-flow-diagram/discovery/data-flow-diagram-4.svg

レベル2(レベル1をさらに分解したもの)
https://d2slcw3kip6qmk.cloudfront.net/marketing/pages/chart/seo/data-flow-diagram/discovery/data-flow-diagram-5.svg

レベル3以降も書こうと思えば書けるが逆に図が複雑になりすぎるので効率が悪くなとのこと