SW これから学ぶ人のためのソフトウェアアーキテクチャ入門について
ソフトウェアアーキテクチャ
抽象化と問題の分割によって複雑性を念頭に置いたもの
ただし、厳密な定義は現在はない。
社会的構造物
ソフトウェアのどの部分を重要とみなすかという集団の合意に依存
影響を与えるもの
チーム・組織
技術トレンド
アーキテクトのスキル・知識
チームのスキル・知識
ビジネス目標
制約
品質特性
機能要求
単なる技術以上のものを扱う
人・プロセス・ビジネスニーズをはじめとする技術的・非技術的要因が最終的なソフトウェアシステムに関わってくる
アーキテクトは、設計判断が影響を与える範囲を広く捉え、システム全体について考えていく必要がある
品質要求を満たすための設計
ソフトウェア品質
アーキテクチャ特性
品質特性(これが特に重要)
xxx イリティ
非機能要件
システムの構成に関する設計
ソフトウェアシステムを分割することで、品質特性をはじめとするシステム要求を満たす戦略を立てられる
コンポーネントは、モジュール化されtたアーキテクチャ基本構成要素
さまざまな視点からシステム構成を検討する
論理ビュー
実装ビュー
プロセスビュー
デプロイメントビュー
シナリオ
全てのビューを横断して設計の整合性を保証する
ソフトウェアアーキテクチャへの取り組み方
念頭に置くこと
アーキテクチャにおける全ての影響を事前には把握できない
品質特性の全部入りはできない
アーキテクチャの前提は変化していく
取り組み方
「必要十分な」ソフトウェアアーキテクチャで進む
最小限の実行可能アーキテクチャ
ソフトウェアアーキテクチャのプロセスは「継続的に」回す
continuous architecture
進化的アーキテクチャ
モノリスから始めてアーキテクチャを進化させていく
アーキテクチャに無関心の設計
特に考えなしにアーキテクチャが決定される
過去のプロジェクトのアーキテクチャを単にコピーする
よくあるアーキテクチャ・会社の標準という理由でアーキテクチャが選ばれる
システム運用時に、品質特性の問題が出てくる。
本来であればシステムを通して人が自然に行えていたことが行えなくなる
参照
https://speakerdeck.com/snoozer05/20230727-software-architecture-is-a-tool-to-enhance-our-humanity