組込みソフトウェアの アーキテクチャ設計の可視化 · 4...

24
組込みソフトウェアの アーキテクチャ設計の可視化 2015年11月18日 山田 大介 ビースラッシュ株式会社 1 Copyright BACKSLASH DESIGN Co., Ltd.

Upload: others

Post on 04-Nov-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

組込みソフトウェアの

アーキテクチャ設計の可視化

2015年11月18日

山田 大介ビースラッシュ株式会社

1 Copyright BACKSLASH DESIGN Co., Ltd.

Page 2: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

内容

1.組込みソフトウェア開発の状況 在庫化、ソフトウェア疲労

2.コード起点アーキテクチャ中心開発 トップダウン&ボトムアップ融合アプローチ

3.アーキテクチャ設計 ~トップダウンアプローチ~ ビューを切り替える、静的構造と動的構造

4.派生開発での構造化設計 ~ボトムアップアプローチ~ リファクタリング、リバース設計

5.まとめ 在庫化サイクルから資産化サイクルへ、アーキテクチャに近づける

Copyright BACKSLASH DESIGN Co., Ltd.2

Page 3: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

1.組込みソフトウェア開発の状況

Copyright BACKSLASH DESIGN Co., Ltd.3

Page 4: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

4

ソフトウェアの資産価値 在庫化している?

資産価値が徐々に低下して『在庫化』していませんか? 組織資産⇒属人資産:最初はドキュメントがあったが、誰も読まなくなり、保守されなくなる

属人資産⇒在庫:最初は設計ができていたのだが、人が変わったり、仕様追加で劣化する

資産名称 特徴

在庫 ソースコードは複雑で説明困難であり、

信頼できる設計ドキュメントは存在していない状態。保守コストが膨れていく傾向にある

属人資産 ソースコードはシンプルで分かりやすい。

ただし、設計ドキュメントが揃っていない状態。

個人主導の開発であり、引継ぎに苦闘する。

半組織資産

設計ドキュメントが揃っているが、

ソースコードが複雑な状態。

マネジメント主導の開発である

組織資産 ソースコードがシンプルで、設計ドキュメントが整備されている状態。

品質・生産性とも予測可能となる。

戦略資産 ソースコードと設計ドキュメントが統合。

戦略的な資産活用ができる。

ソースコード

在庫 半組織資産

属人資産組織資産

戦略資産

設計ドキュメント

4 Copyright BACKSLASH DESIGN Co., Ltd.

引継ぎ

次機種

Page 5: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

ソフトウェア疲労 ソースコードはこんな状況に

症状 別名 現象

1 一筆書き モンスター関数 ひとつの関数やファイルが長い

作った人にしかわからない(作った人も?)

2 クローン 切り貼りプログラミング

同じコード断片が点在。修正漏れが発生する.

grep検索が最も便利な開発ツール

3 神様データ グローバルデータ

フラグ

すべてを支配しているデータが存在する

修正の波及範囲が大きい

4 中央集権 責務過多

肥満児

ひとつのファイルにたくさんの関数がある

いつも同じファイルを修正している

5 スパゲッティ くもの巣

もぐらたたき

いろいろな関数を呼び出している

副作用が発生する(こちらを直すとあちらが)

6 老舗温泉旅館 場当たり的

ルール無用

階層を越えた呼び出し/命名規則がない

引継ぎができない(そもそも説明できない)

7 一枚岩 モノリシック

フレンド

#includeしているファイルが多い/循環依存

分割コンパイルができない

5 Copyright BACKSLASH DESIGN Co., Ltd.

Page 6: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

2.コード起点アーキテクチャ中心開発~トップダウン&ボトムアップ融合アプローチ~

Copyright BACKSLASH DESIGN Co., Ltd.6

Page 7: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

ソフトウェアの資産化アプローチ

既存資産を起点として戦略的な開発の実現へ ボトムアップ:既存コードを部品化して、洗練化・資産化していく

トップダウン:設計意図を明確にして、ソースコードへ反映していく

既存コード

部品表

設計図

開発戦略アーキテクチャドキュメント 資産開発

機種開発

部品化

変動点

設計方針目論見

統合資産

部品マスター

洗練化

合わせこみ

既存コード

既存コード

資産活用

リバースモデリング 資産化 資産運用

インフラ

①教育 ②指標と計測

洗練化

③プロセス構築 ④ツール導入

プロダクトライン開発

Copyright

BACKSLASH

DESIGN Co., Ltd.7

Page 8: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

3.アーキテクチャ設計~トップダウンアプローチ~

Copyright BACKSLASH DESIGN Co., Ltd.8

Page 9: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

「アーキテクチャ設計」とは?

複数の視点で図面化を行い

設計意図を明確にすること

ビジネス視点

開発者視点

目論見 設計方針

動的構造 実装構造

静的構造

9 Copyright BACKSLASH DESIGN Co., Ltd.

複数ビューを統合する

Page 10: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

10

静的構造と動的構造の設計図

全体を俯瞰できる粒度で静的構造を表現する

際どい箇所を動的構造であらかじめ明確にする

ビュー粒度

静的構造 動的構造

機能ブロック(コンポーネント)

タスク割込み共有メモリ

状態遷移

ファイル(クラス)

関数

Copyright BACKSLASH DESIGN Co., Ltd.

Page 11: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

静と動のビューを切り替える

静的構造

どこで何をするのか

動的構造

どのように動くのか

11

機能性き

信頼性し

使用性し

効率性こ

保守性ほ

移植性い

仕様変更

イベントの順序

立ちあがり時間

中断・再開動作

パフォーマンス

ROM/RAM容量変動点管理

部品管理

購入ライブラリ

Copyright BACKSLASH DESIGN Co., Ltd.

Page 12: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

アーキテクトの役割

技術視点のリーダーシップを発揮する人

正しく判断し、プロジェクトを成功に導く

経営

技術

HOW

WHAT

いままでの技術リーダ

アーキテクト

固有技術に詳しい人 多面的な

検討と調整

技術と経営をつなぐ

12

アーキテクチャドキュメント

Copyright BACKSLASH DESIGN Co., Ltd.

Page 13: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

静的構造と動的構造の例

Copyright BACKSLASH DESIGN Co., Ltd.13

ユーザインタフェース

ミドル層

ドライバ層

レンズ駆動

CCD駆動画処理エンジン

カードIFモニタドライバ

キースキャン

鏡胴駆動

アプリ層

撮影 再生 設定

画面遷移

モード管理

コンフィグ管理

ウィンドウ管理

画像ストリーム

自動焦点

画像ファイル管理

全体管理

筐体センサ

システム操作

機内監視

ズーム 現像

<<task>>

撮影タスク

<<task>>

カメラタスク

<<task>>

画像操作タスク

<<割込み>>

シャッター全押し<<task>>

カード読書ドライバ

<<task>>

パネル操作ドライバ

静的構造

動的構造

Page 14: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

4.派生開発での構造化設計~ボトムアップアプローチ~

Copyright BACKSLASH DESIGN Co., Ltd.14

Page 15: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

ソフトウェア疲労の例:リファクタリングスコア推移

ファイルや間数の粒度は適切だが、依存関係がスパゲティ化

ある時期から急速に落ちている ⇒プログラマの交代。前任者のクラスを局所的に修正

途中で一旦上がっている リファクタリングを推進

その後また下降傾向 担当者任せだと、徐々に落ちていく⇒仕組みで解消すべき

-40

-20

0

20

40

60

80

100

V010

V020

V030

V041

V055e

V080b

V094g

V100b

V110a

V120

V132

V133c

V140a

V140c

V150c

V200

V210

V221

V230

要素点

構造点

担当者交代で急速な下降

リファクタリングで少し上昇

下降傾向

担当者交代で急速な下降

Copyright BACKSLASH DESIGN Co., Ltd.15

Page 16: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

部品化リファクタリング

データを中心に関数を集めて、別ファイルにする⇒部品化

16

関数

データ

関数

関数

関数

関数

関数

関数 関数

関数データ

データ

関数

関数

関数

関数

関数

データ

関数

関数

関数 関数 関数 関数

関数データ

関数

関数

関数

データ

関数

関数

関数

関数

リファクタリング

5000行を超えるようなファイルは、それをひと固まりで管理することが難しい。

データを中心に関数を集め、2000行程度の部品とする。

Copyright BACKSLASH DESIGN Co., Ltd.

Page 17: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

凝集度を高める=単一目的

17

モジュール

機能

データ

モジュール

機能A

データ

機能B

モジュール

機能A

データ

機能B 機能C

1.機能的 2.逐次的 3.通信的

モジュール

機能A

データ1

機能B 機能C

データ2

4.手順的モジュール

機能A

データ1

機能B 機能C

データ2

5.一時的

モジュール

機能A

データ1

機能B 機能C

データ2

モジュール

コード断片A

データ1

コード断片B

コード断片C

データ2

6.論理的 7偶発的

一筆書き 初期化など ディスパッチ処理

Copyright BACKSLASH DESIGN Co., Ltd.

Page 18: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

ソースコードソースコードソースコード

リバース設計

アーキテクチャを発掘する

ソースコードをファイル単位でリバースする前処理としてリファクタリングが有効

似たものをグループ化して構造図を作るアーキテクチャ設計の静的な構造図ができる

18

ソースコード

再配置

グループ化

リバース

構造図

Copyright BACKSLASH DESIGN Co., Ltd.

Page 19: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

構造化設計の基本

19

func() {・・・・・・入力する

・・・・・・演算する

・・・・・・出力する

・・・・・・

}

一筆書き設計ではない

入力する

演算する

出力する

目的

フローチャート/コーリングシーケンスモジュール化はできているが、レベル化はできていない

構造化設計箱:Whatの名称線:利用関係配置:水平垂直分割水平:レイヤー化垂直:STS分割、IO分離

入力する

演算する

出力する

フローチャート

入力する

演算する

出力する

コーリングシーケンス

構造化設計

Copyright BACKSLASH DESIGN Co., Ltd.

箱+線+配置

Page 20: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

リバース設計の例

Copyright BACKSLASH DESIGN Co., Ltd.20

劣化検知

全体を俯瞰 アーキテクチャの違反検出

ソースコードソースコードソースコードソースコード

リバース&再配置

グループ化&構造図

影響範囲を把握し派生開発

Page 21: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

5.まとめ

Copyright BACKSLASH DESIGN Co., Ltd.21

Page 22: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

在庫化サイクルから、資産化サイクルへ

Copyright BACKSLASH DESIGN Co., Ltd.22

コードを追いかけて動きを理解

grep検索で関連部分を探す

局所的な修正の積み重ね

コードの複雑さが増大する負のスパイラル

設計構造と設計意図を理解

依存線と配置で関連を

追跡

大局を見て勘所を押さ

えた修正

コードがシンプルで美しくなる改善スパイラル

高速

高品質

資産化在庫

残業

バグ

設計改善

Page 23: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

在庫から脱却し、戦略資産へ

資産価値を向上させる 最初の一歩を踏み出す勇気が必要

日々の開発業務と並行して、着実に向上させていく仕掛けを作る

在庫半組織資産

属人資産 組織資産

戦略資産

A

B

C

D

名称 特徴

A リファクタリング 既存ソースコードを、管理可能な単位へ再構築する。

B 再構造化設計 既存ソースコードを基に、設計図レベルで再構築を行う。

C リバース設計 既存ソースコードの構造を図面化する。設計構造を洗練化する。

D フォワード設計 設計図に沿って、ソースコードを修正する

E アーキテクチャ設計 重要な視点を図面化し、文書として統合する。

23 Copyright BACKSLASH DESIGN Co., Ltd.

Page 24: 組込みソフトウェアの アーキテクチャ設計の可視化 · 4 ソフトウェアの資産価値在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?

山田 大介Daisuke YAMADA

[email protected]

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

24 Copyright BACKSLASH DESIGN Co., Ltd.