34
Architecture Driven Development (ADD)すすめ(仮) 福井 厚 Atsushi Fukui 10.NET勉強会 2015.8.7

Architecture driven development のすすめ

Embed Size (px)

Citation preview

Page 1: Architecture driven development のすすめ

Architecture DrivenDevelopment (ADD)の

すすめ(仮)

福井 厚 Atsushi Fukui

第10回 .NET勉強会

2015.8.7

Page 2: Architecture driven development のすすめ

本セッションの内容について

本セッションの内容は、発表者個人の経験に基づく個人的な意見であり、所属する団体、組織の公式な見解、発表ではありません。

従って、本セッションの内容はその正しさをなんら保証するものではないことをご承知おきください。

本セッションにて提示されるグラフ等で出展の明記のないものは福井のこれまでの経験に基づく感覚的なものであり、数値的な根拠はありませんのでご注意ください。

Page 3: Architecture driven development のすすめ

自己紹介

福井 厚 (ふくい あつし)

@afukui

メーカー系サポートでOS、言語などを担当後、ソフト開発会社でC/S型業務パッケージ、C/C++用ライブラリ等の開発を経験。94年にSIerへ転職しデータベース設計支援、COM+による分散フレームワークの開発などを担当。外資系SIerに転職しソリューションアーキテクトとして.NETによる企業向けフレームワークの構築などを担当。2011年3月株式会社アークウェイに入社、プリンシパル コンサルタントとして企業向けコンサルティングを行う。2015円7月よりアマゾンデータサービスジャパン株式会社でSolutions Architect として活動。

2008年8月、Microsoft Certified Architect for Solutions Certification (MCA) に認定される。

マイクロソフトMVPアワード受賞歴11回(2015年7月にMVP 終了)

Page 4: Architecture driven development のすすめ

個人ロール年表1980 1990 2000 2010

カスタマサポートフィールドSE

ソフトウェアデベロッパー

純国産システムエンジニア

外資系アーキテクト

開発コンサルタント

クラウドソリューションアーキテクト

Page 5: Architecture driven development のすすめ

アジェンダ

コンテキスト

ソフトウェア開発における仕様変更のインパクト

アジャイル開発のメリット

あるアジャイル開発プロジェクトのベロシティ

コストエスカレーション

アーキテクチャの作り方

アーキテクチャの変遷

まとめ

Page 6: Architecture driven development のすすめ

コンテキスト

本セッションのテーマ

ソフトウェア開発におけるアーキテクチャの重要性

用語(アーキテクチャ)

このセッションではアーキテクチャを主にソフトウェアアーキテクチャの意味で使っています。

対象

企業向けアプリケーション開発を行っているアーキテクト、設計者、開発者

Page 7: Architecture driven development のすすめ

お詫び

DDDの話は(ほとんど)しません

.NETの話は(ほとんど)しません

お笑いネタがありません

Page 8: Architecture driven development のすすめ

Eric Evens の DDD におけるアーキテクチャの位置づけ

要求をモデルにマップしたドメイン

ルールエンジンなどオブジェクトでないもの

ファクトリなど特殊な責務のオブジェクト

平べったいRDBの世界

インフラストラクチャ

Page 9: Architecture driven development のすすめ

システム

サービスA

今回お話すするアーキテクチャの位置づけ

アーキテクチャUIレイアウト、認証、認可、例外処理、入力検証、データアクセス、ロギングなど

サービスのデータ処理

サービスロジック

UI可変部

サービスB

サービスのデータ処理

サービス ロジック

UI可変部

サービスC

サービスのデータ処理

サービスロジック

UI可変部

ここ

Page 10: Architecture driven development のすすめ

ソフトウェア開発における仕様変更のインパクト

要求定義 設計 実装・単体テスト

結合・システムテスト

受け入れテスト 展開・本番稼働

Page 11: Architecture driven development のすすめ

アジャイル開発のメリット

ウォーターフォール開発

アジャイル開発の変更管理

短期間のスプリント化

Page 12: Architecture driven development のすすめ
Page 13: Architecture driven development のすすめ

変更の痛みはコストであり生産性に影響

アジャイル開発でも変更のコストが大きいものがある

レイヤリング

スケーラビリティ

ユーザビリティ

セキュリティ

データベーススキーマ

コストが大きいと生産性に影響

作り直しの無駄が発生

Page 14: Architecture driven development のすすめ

あるアジャイル開発プロジェクトのベロシティ

Sprint 1 Sprint 2 Sprint 3 Sprint 4 Sprint 5 Sprint 6 Sprint 7 Sprint 8

非機能要件の見直し

Page 15: Architecture driven development のすすめ

Architecture Driven Development(ADD)とは

アーキテクチャを先に開発することで、その後のアプリケーション開発の品質と生産性を向上させるアーキテクチャ駆動開発方式のことである。

Page 16: Architecture driven development のすすめ

アーキテクチャの作り方

Page 17: Architecture driven development のすすめ

アーキテクチャとは ISO/IEC/IEEE 42010(IEEE 1471改定版)

http://www.iso-architecture.org/ieee-1471/cm/

Page 18: Architecture driven development のすすめ

アーキテクチャは階層構造 企業全体のアーキテクチャから実装コードまですべてがアーキテクチャ

Page 19: Architecture driven development のすすめ

アーキテクチャ ≠ フレームワーク

フレームワークを利用することがアーキテクチャを作ることではありません

目的と制約に従って必要な品質特性を満たすソフトウェアの構造を定義し共通利用する機能を提供するものがアーキテクチャ

従って目的と制約が異なれば違うアーキテクチャが必要です。

Page 20: Architecture driven development のすすめ

正しいアーキテクチャを構築するために

要求定義

フィーチャーの抽出

実装検証

Page 21: Architecture driven development のすすめ

アーキテクチャ要求定義

目的の整理

アーキテクチャを構築する目的は何か

ステークホルダーごとに要求は異なる

アーキテクチャが解決すべき課題は何か

満たすべき品質特性

重視するソフトウェアの品質特性は何か

制約

組織、環境、過去の資産、開発者のスキル、政治的なしがらみなど、どのような制約があるか

利用技術の選定

長く使える技術を見極める

Page 22: Architecture driven development のすすめ

ソフトウェア品質特性 ISO/IEC 25010(IEEE9126の改定)

どの品質特性と副特性を重視するか

© 2015 iso25000.com

Page 23: Architecture driven development のすすめ

フィーチャーの抽出

目的に従ってアーキテクチャが提供すべきフィーチャーを抽出

オプションとマンダトリの整理

フィーチャーと品質特性のマッピング

抽出したフィーチャーで重視する品質特性を満たしているかを確認する

Page 24: Architecture driven development のすすめ

実装検証

抽出したフィーチャーがアーキテクチャ要求を満たしていることを検証

セキュリティ

想定されるケースでの認証、認可は必須

パフォーマンス

パフォーマンスは測るまで誰にも分らない

限界点を知る

システムにとって最も難しい機能から検証する

クラウドの新機能活用や新しい認証基盤の利用など、過去にやったことがないものは失敗するかもしれないことを前提に必ず検証する

Page 25: Architecture driven development のすすめ

アーキテクチャの変遷ある視点で見たアーキテクチャの変遷と理由

Page 26: Architecture driven development のすすめ

HOST / Dumb Terminal

HOSTDumb

Terminal

Compute

Build UI

Display /Input

Data

State

Narrow band network

Page 27: Architecture driven development のすすめ

Client / Server

ServerClient

Compute

Build UI

Display /Input

Data

State

Local Area Network

Compute

Page 28: Architecture driven development のすすめ

Web N-Tier Intranet

Web Server /

App ServerBrowser

ComputeBuild UIDisplay /Input

DataState

Compute

DB Server

Auth

Local Area Network

Page 29: Architecture driven development のすすめ

Internet Web / Multi Device

Web/API Server

Browser

/

Mobile

Compute

Build UI

Display /Input

Data

State

Compute

DB Server

Auth

Auth Provider

Internet

Page 30: Architecture driven development のすすめ

Micro Service Architecture

Web/API Server

Browser

/

Mobile

Compute

Build UI

Display /Input

Data

State

Compute

DB Server

Auth

Auth Provider

Internet

Web/API Server DB Server

Web/API Server DB Server

Page 31: Architecture driven development のすすめ

Cloud Native

API Gateway

Browser

/

Mobile

/

IoT

Compute

Build UI

Display /Input

Data

State

Compute

RDB /

NoSQL/

Big Data Analysis /

ML

Auth

Service APIs

Service APIs

Auth Provider

Internet

Page 32: Architecture driven development のすすめ

まとめ

変更に柔軟に対応できるアジャイル開発であっても変更のインパクトが大きいものがある

アーキテクチャを事前に構築することで、その後のイテレーション開発で品質と生産性を大きく向上させることができる

アーキテクチャは容易には変更できないことを肝に銘じて長いスパンで利用できる技術を選択する

アーキテクチャの変更には理由がある。流行っているという理由で選択しない

Page 33: Architecture driven development のすすめ

Q & A

Page 34: Architecture driven development のすすめ

ご清聴ありがとうございました