1アーキテクチャシリーズ
シリーズリーダー

鄭 顕志(東京⼯業⼤学 准教授)

講師陣

⾦⼦ 平祐 (ライフマティックス株式会社)⾼橋 ⻯⼀ (茨城⼤学 講師)
福寄 雅洋 (富⼠通株式会社)
新居 雅⾏ (国⽴情報学研究所)
久保秋 真 (株式会社チェンジビジョン)
位野⽊ 万⾥ (⼯学院⼤学 教授)
⻑岡 武志 (東芝デジタルソリューションズ株式会社)
Copyright (C) 2023 National Institute of Informatics, All rights reserved.

2

アーキテクチャシリーズ
シリーズ全体のゴール

要求を満たすシステム・ソフトウェアアーキテクチャの設計や評価を効率的かつ効果的に実施するための知識や技術を習得
4月

オブジェクト指向分析設計

5月

ソフトウェアパターン

6月

アーキテクチャ設計評価
設計

要求定義

Insights

適用

コア
3科⽬

分析パターン

ユースケース（機能要求）

定義

ホテル予約システム

設計モデル（システムアーキテクチャ）
部屋を予約する
顧客
顧客のチェックインを行う

ホテルカウンタスタッフ

ユーザインタフェース層

顧客のチェックアウトを行う

アプリケーション層問題領域

3.1. notify(data, topic)

HealthCareUI

設計パターン

概念モデル（ドメインモデル）

ユーザー

設計ドキュメント

実装パターン
定義

システム化の範囲
関心の範囲

データベース

ネットワーク

過去の優れた分析・設計
ノウハウの活⽤⽅法を習得

モデル駆動開発

MEMEData
プログラム
Processing

3.1.2 put(stress,topic)

In-Memory
SQLiteDB

3. publish(data, topic)<<broker>>

EclipseBrokerMosquiito

1. subscribe(topic)

AmazonDB
S3

ソースコードソースコードDB/ミドルウェア

基礎となるオブジェクト指向分析，設計を習得

Python<<subscriber>>Python4.1 show(stress[])プログ
ラム
4 get(stress[],topic)
HealthCare
Control

適用
ドメイン層

8月

3.1.1 estimate(data)

分析ドキュメント

適用
定義

ThingsKerasで作成
StressEstimator
したモデル<<publisher>>Android
MEMEDataCollector
アプリ

2. subscribe(topic)

MEME

3.2. notify(data, topic)

PythonAllData
Subscriber
プログラム
3.2.1 put(data,topic)

⾼品質なアーキテクチャを設計・評価する⼿法を習得

10月 ソフトウェア再利⽤演習

飛行船とは・・・
基地局とは・・・

応⽤・演習
2科⽬

WP1
WP2
目的地
出発地

回転の指示があると・・・

CIM

PIM
プロトコルXXXに従い16bitデータ
YYYを受信しPSM

PM
CPU, モータ,OS, 言語・・・

class Ship{
void move()x = y + 1;

コード

モデル変換・コード⽣成を活⽤した
モデル中⼼の開発を習得

既存資産を活⽤した開発を演習形式で習得
Copyright (C)2023 National Institute of Informatics, All rights reserved.

3

1.オブジェクト指向分析設計
アーキテクチャコースをはじめとする多くのTopSE講義で基礎知識とされるオブジェクト指向分析設計について学ぶ

オブジェクト指向モデリング⾔語

オブジェクト指向開発⽅法論

ユースケース（機能要求）

システムが提供する機能

ホテル予約システム

どんな部品で実現？

どんな内部動作で実現？

設計モデル（システムアーキテクチャ）
部屋を予約する
顧客
顧客のチェックインを行う

ホテルカウンタスタッフ

ユースケース図(+ユースケース記述)

ユーザインタフェース層

顧客のチェックアウトを行う

アクティビティ図システムを構成する部品，構造部品(群)の振る舞い
部品の仕様は？

アプリケーション層

問題領域
概念モデル
（ドメインモデル）

ドメイン層
クラス図
(+オブジェクト図)

どう動く？

相互作用図
(コミュニケーション図，シーケンス図)

ステートマシン図

システム化の範囲
関心の範囲

データベース

ネットワークDB/ミドルウェア

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

42. ソフトウェアパターン

n 情報機器系のシステム開発において有効な代表的既存ソフトウェアパターンの適⽤ノウハウ習得
n パターンの背景・設計原則の理解によるn 代表的パターンのメリット／デメリット、適⽤範囲習得
n 新たなパターンの⾮機能的特性からの取捨選択技術
パターン抽出
成功事例「こういうときに」状況

パターン指向開発
パターン

要求定義

名前

「こういうときに」状況

適用
分析パターン
定義「こうしたかったので」問題「こうしたら」
解決策「こうなりました」
結果「なぜならば」
フォース
似ている／共通部分「こうしたかったら」問題「こうしましょう」
解決策

適用
設計パターン定義「こうなります」
結果「なぜならば」
フォース

分析ドキュメント

設計ドキュメント

適用
実装パターン定義

ソースコードソースコードCopyright (C) 2023 National Institute of Informatics, All rights reserved.

5

3. アーキテクチャ設計・評価

n ソフトウェアアーキテクチャ設計の必要性を理解し、アーキテクチャ設計・評価⼿法を習得

n 代表的なアーキテクチャパターン/参照アーキテクチャ
n アーキテクチャ設計⼿法Attribute Driven Design(ADD)n アーキテクチャ評価⼿法Architecture Tradeoff Analysis Method(ATAM)

Attribute Driven Design(ADD)

IoTシステムを例題とした演習
設計

優先順位

⾼要求1
要求2

要求3

3.1. notify(data, topic)

Iteration

Iteration

HealthCareUI

Systemユーザー

ユーザー

ThingsKerasで作成
StressEstimator
したモデル
3.1.1 estimate(data)

2nd1stユーザー

Insights

低要求4要求5ユーザー

Python<<subscriber>>

MEMEData
プログラム
Processing

Python4.1 show(stress[])プログ
ラム
4 get(stress[],topic)
HealthCare
Control

EclipseBrokerMosquiito

1. subscribe(topic)
3.1.2 put(stress,topic)

In-Memory
SQLiteDBAmazonDB
S3

3. publish(data, topic)<<broker>><<publisher>>Android
MEMEDataCollector
アプリ

2. subscribe(topic)

MEME

3.2. notify(data, topic)

PythonAllData
Subscriber
プログラム
3.2.1 put(data,topic)

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

64. モデル駆動開発 (夏期集中)

n モデル変換およびコード⽣成を経て、抽象度の⾼い表現（モデル）から抽象度の低い表現（コード）までをシームレスに接続する開発を体験
n モデル駆動開発の概念
n モデル変換: ATL, Papyrusを使ったモデル変換ルール作成演習
n コード⽣成: xtUML, BridgePoint, ロボット(LegoMindstorm)を使ったモデル駆動開発の体験
飛行船とは・・・
基地局とは・・・
WP1
WP2
目的地
出発地

回転の指示があると・・・

メタ言語

CIM

PIM
プロトコルXXXに従い16bitデータYYYを受信しPSM

言語

変換規則

PM
CPU, モータ,OS, 言語・・・

PIM

変換ツール

PSM

class Ship{
void move()x = y + 1;

コードCopyright (C) 2023 National Institute of Informatics, All rights reserved.

74. モデル駆動開発 (夏期集中)〜2019年度:
Lego Mindstorm NXTを使った実機演習

遠隔演習対応化

2020年度〜
3Dシミュレータ演習環境をAWS上に構築

BridgePointモデルコンパイラ
を⽤いて実機⽤と同じモデルからコード⽣成可能

⾼性能のEC2上に構築したUnityシミュレータ上で動作確認

NXTロボットを⽤いNII教室内演習環境(オンライン対応不可)

AWS上に構築したUnityシミュレータ演習環境(オンラインでのグループ演習が可能に)
Copyright (C) 2023 National Institute of Informatics, All rights reserved.

8

5. ソフトウェア再利⽤演習

n 開発ライフサイクル全体の開発成果物の体系的な再利⽤を修得
n 演習中⼼の「反転授業形式」で実施
n 事前配布資料を熟読し課題解答案を各⾃準備した上で参加のこと
講義計画（各回でグループ演習、発表、ディスカッションを⾏います）
講義

講義テーマ

演習テーマ

1

開発と再利⽤の全体像

導⼊演習︓再利⽤の体験演習

2

ドキュメントの再利⽤

演習問題1︓ドキュメント再利⽤
演習問題2︓ユースケース再利⽤

3

設計（パターン）の再利⽤

演習問題3︓パターン再利⽤

4設計（フレームワーク）の再利⽤

演習問題4︓フレームワーク再利⽤

5

実装（アプリ）の再利⽤

演習問題5︓アプリ（コンポーネント）の再利⽤

6

⾼度な再利⽤（プロダクトライン）

演習問題6︓⾼度な再利⽤演習（フィーチャーモデリング含む）

7

総合演習・討議

演習問題7︓総合演習（プロダクトライン構築）

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

9

科⽬間の依存関係
オブジェクト指向分析設計

ソフトウェアパターン

アーキテクチャ設計・評価
モデル駆動開発
ソフトウェア再利⽤演習

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

10

⽬的別科⽬選択例 -1ソフトウェア⼯学の基礎科⽬を幅広く受講したいn (4⽉) オブジェクト指向分析設計
余裕と興味があれば，下記を追加
n (5⽉) ソフトウェアパターン

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

11⽬的別科⽬選択例 -2ソフトウェアアーキテクチャに興味がある．
設計⼒を上げたい⽅向け．
n (4⽉) オブジェクト指向分析設計
n (5⽉) ソフトウェアパターン
n (6⽉) アーキテクチャ分析・設計
他の科⽬は，興味に応じて選択．

Copyright (C) 2023 National Institute of Informatics, All rights reserved.

12

⽬的別科⽬選択例 -3設計について深く学習したい．
全科⽬を検討されたい．

Copyright (C) 2023 National Institute of Informatics, All rights reserved.