16
1 Copyright BACKSLASH DESIGN Co., Ltd ソフトウェアを資産化する 設計意図発掘ツールAtScope 2016年11月18日 ビースラッシュ株式会社

AtScope 3つの活用シーン [ET2016]

  • Upload
    b-slash

  • View
    16

  • Download
    1

Embed Size (px)

Citation preview

Page 1: AtScope 3つの活用シーン [ET2016]

1 Copyright BACKSLASH DESIGN Co., Ltd

ソフトウェアを資産化する

設計意図発掘ツールAtScope

2016年11月18日

ビースラッシュ株式会社

Page 2: AtScope 3つの活用シーン [ET2016]

2

本日の内容

1.ビースラッシュが解決したいこと

2.設計意図発掘ツールAtScopeの活用

ご参考:

3.設計力向上セミナー

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

Copyright BACKSLASH DESIGN Co., Ltd.

Page 3: AtScope 3つの活用シーン [ET2016]

3 Copyright BACKSLASH DESIGN Co., Ltd

1.ビーラッシュが解決したいこと

Page 4: AtScope 3つの活用シーン [ET2016]

4

ビースラッシュが解決したいこと

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

grep検索で関連部分を探す

局所的な修正の積み重ね

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

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

依存線と配置で関連を追跡

大局を見て勘所を押さえた修正

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

迅速

高品質

資産化 在庫

残業

バグ

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

Copyright BACKSLASH DESIGN Co., Ltd.

Page 5: AtScope 3つの活用シーン [ET2016]

5 5

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

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

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

資産名称 特徴

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

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

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

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

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

半組織資産

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

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

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

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

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

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

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

ソースコード

在庫 半組織資産

属人資産

組織資産

戦略 資産

設計ドキュメント

5 Copyright BACKSLASH DESIGN Co., Lt

d.

引継ぎ

次機種

Page 6: AtScope 3つの活用シーン [ET2016]

6

在庫から脱却し、ソフトウェア資産へ

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

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

在庫 半組織 資産

属人 資産

組織資産

戦略 資産

A

B

C

D

名称 特徴

A コード・リファクタリング ソースコードを、管理可能な単位へ分解する

B 再構造化設計 設計図レベルで再構築を行う

C モジュール・リファクタリング

ソースコードの構造を図面化して洗練化する

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

E アーキテクチャ設計 複数視点で図面化し、文書として統合する

6 Copyright BACKSLASH DESIGN Co., Lt

d.

Page 7: AtScope 3つの活用シーン [ET2016]

7 Copyright BACKSLASH DESIGN Co., Ltd

2.設計意図発掘ツールAtScopeの活用

Page 8: AtScope 3つの活用シーン [ET2016]

8

設計意図発掘ツールAtScopeとは

静的解析ツール 設計意図発掘 ツール メトリクス系 図面作成系

主な目的 不具合の検出 設計図面の作成 不具合混入の未然防止

主な機能 複雑度などの定量化 関数コールの図面化 全体構造の俯瞰

規約違反の検出 設計書の作成 設計構造の劣化検知

効果 不具合の検出 コードの理解促進 ソフトウェアの資産化

品質状況の把握 納品資料の作成 迅速な機能追加

主な利用者 品質保証、プロセス改善 担当エンジニア アーキテクト/設計担当者

が使うことで設計力向上

解析精度 厳密 (コンパイラレベル)

比較的厳密

ゆるいコードでも解析可能 (人の目に映るレベル)

主な使い方 第三者が計測して、 現場の設計改善を行う

担当者の引継ぎ時や 納品時に仕様書を作成

アーキテクチャを分析し、

重要部分から設計改善

品質確保を「メトリクス系ツール」で行い、エンジニアの設計支援として「図面作成系ツール」を使い、組織資産を活用した開発で「設計意図発掘ツール」を使う、ことでトータルな効果が得られます。

Copyright BACKSLASH DESIGN Co., Ltd.

Page 9: AtScope 3つの活用シーン [ET2016]

9

AtScopeの3つの機能+1

力づく開発

func() { ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ } func() { ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ }

・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ } } ・・・・・() { { ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ } }

func() { ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ } }

static char time_tick; main () { time_tick = 0; while(1){ if(time_tick == 1){ time_tick = 0; top_module(); } } } void ta0int() { time_tick = 1; }

①アーキテクチャ解析

②クラス解析

C言語

③モジュール解析

コンポーネント単位

ファイル単位

関数とデータの単位

再配置

考える開発

To_uiTo_ctrlFrom_ctrlTo_histFrom_sys

<<...app

To_uiTo_ctrlFrom_ctrlTo_histFrom_sys

To_drvTo_mainteTo_app

<<...s ys

To_drvTo_mainteTo_app

To_drvFrom_sysTo_uiTo_hist

<<...ma int e

To_drvFrom_sysTo_uiTo_hist

From_ctrlFrom_sysFrom_mainteFrom_histFrom_ui

<<...drv

From_ctrlFrom_sysFrom_mainteFrom_histFrom_ui

To_uiTo_drvFrom_appTo_app

<<...ct rl

To_uiTo_drvFrom_appTo_app

From_appFrom_mainteTo_drv

<<...h is t

From_appFrom_mainteTo_drv From_appTo_drvFrom_ctrlFrom_mainte

<<...u i

From_appTo_drvFrom_ctrlFrom_mainte

6

8

2

2

4

153

3

3

8

5

3

3 15

PaperHandlingPaperHandling

PatternControlPatternControl

SwInputSwInput

ButtonMonitorButtonMonitor

ToggleDrvToggleDrv

KeyScanKeyScan

CopyAppCopyApp

BlinkAppBlinkApp

MessageOutputMessageOutput

MachineWatchMachineWatch

FusingControlFusingControlDisplayOutputDisplayOutput

OperationPanelOperationPanel

LedOutputLedOutput

LedDrvLedDrv

DisplayDriverDisplayDriver

SystemMainSystemMain

PageStreamPageStream

2

1

1

1

3

2

2

1

11

1

2

2

1

3

1

1

1

1

1

1

1

1

1

1

3

2

app

UserPersonUserPersonDiagnosisStepDiagnosisStep

ReceptionistReceptionist

sys

SysNoticeSysNotice

SysCtrlSysCtrl

mid

InspectionProcessInspectionProcess

drv

TimerTimer

SwSw

VolSensorVolSensor

CurrentMeterCurrentMeter

EepRomEepRom

ui

PushButtonPushButton BuzzerSoundBuzzerSound

PanelDisplayPanelDisplayOperationFlowOperationFlow

NoticePanelNoticePanel

LedLed BuzzerBuzzerLcdLcd

l ib

InspectionHistInspectionHist

mon

ProgramConfirmationProgramConfirmation

LcdInspectionLcdInspectionVolInspectionVolInspection

MaintePanelMaintePanel

VolMeterVolMeter

HistInspectionHistInspection

InspectorInspector

2

2

2

1

3

3

13

3

3

3

4

2

2

5

1

3

1

3 2

41

3

3

3

8

5

2

3

1

3

2

7

22

2

2 2 3

2

2

4

2

1

5

2

1

5

2

3

22

2

main

sc_execsc_exec

rc_initrc_init

ds_finish

rc_finish_diagrc_finish_diag

up_start_inputup_start_input

up_set_weightup_set_height

up_rq_chg_modeup_rq_chg_mode

rc_start_diagrc_start_diag

rc_request

rc_rq_chg_moderc_rq_chg_mode

<<...rcMode

1

1

1

1

1

1

1

11

1

1

1

1

SysCtrl

sc_execsc_exec

main

DiagnosisStep

ds_finish

UserPerson

up_rq_chg_modeup_rq_chg_mode

up_start_inputup_start_input

up_set_weightup_set_height

Receptionist

<<データ>>Receptionist::rcMode

rc_rq_chg_moderc_rq_chg_mode

rc_start_diagrc_start_diag

rc_initrc_init

rc_finish_diagrc_finish_diag

rc_request

1

1

1

1

1 1

1

11

1

1

1

1

再配置

再配置

再配置することで 設計意図が分かります

設計ルール違反が 色付きで表示されます

指定したデータから 関数コールを遡ります

EnterpriseArchitectで動きます

④リファクタリングスコア

Copyright BACKSLASH DESIGN Co., Ltd.

Page 10: AtScope 3つの活用シーン [ET2016]

10

活用シーン① アーキテクチャ中心開発

1.アーキテクチャ構造に従ってフォルダを作る

Copyright BACKSLASH DESIGN Co., Ltd.

2.コンポーネント構造図を出力する

3.アーキテクチャの崩れを検知する

ui

hist

ctrl

drv

mainte

sys app 15

38

3

3

3

6

2

3

5

8

15

34

ui

drv

his t

ct rl

ma int e

sysapp2

3

5

3

2

8

6

1

15

4

3

3

15

8

1

3

飛び越え

逆方向 依存

アーキテクチャに従って配置

Page 11: AtScope 3つの活用シーン [ET2016]

11

活用シーン② 派生開発での構造設計

ファイル見取図で設計構造を見える化

リファクタリングスコアで改善点を洗い出し

Copyright BACKSLASH DESIGN Co., Ltd.

app

UserPersonUserPersonDiagnosisStepDiagnosisStep

ReceptionistReceptionist

sys

SysNoticeSysNotice

SysCtrlSysCtrl

midInspectionProcessInspectionProcess

drv

TimerTimer

SwSw

VolSensorVolSensor

CurrentMeterCurrentMeter

EepRomEepRom

ui

PushButtonPushButton BuzzerSoundBuzzerSound

PanelDisplayPanelDisplayOperationFlowOperationFlow

NoticePanelNoticePanel

LedLed BuzzerBuzzerLcdLcd

l ib

InspectionHistInspectionHist

mon

ProgramConfirmationProgramConfirmationLcdInspectionLcdInspectionVolInspectionVolInspection

MaintePanelMaintePanel

VolMeterVolMeter

HistInspectionHistInspection

InspectorInspector

1

2

3

1

2

2

3

3

2

2

2

3

2

3

1

2

3

5

4

8

5

2

3

2

45

2

1

3

2

4

3

2

2

3

2

3

1

2

2

3

7

3

2

1

3

1

1

2

3

5

2

2

<<スコア>>総合 : 94点

要素 : 99点

構造 : 89点

<<構造の警告リスト>>

/* ファンアウト数 */

17 : InspectionProcess.c

15 : DiagnosisStep.c

14 : EepRom.c

14 : Lcd.c

12 : Inspector.c

/* 循環依存 */

2 : InspectionProcess 8 : CurrentMeter

3 : InspectionProcess 3 : DiagnosisStep

1 : Receptionist 3 : DiagnosisStep

2 : UserPerson 1 : Receptionist

<<要素の警告リスト>>

/* 関数の長さ */

44 : Lcd lc_init()

MaintePanelMaintePanel

OperationFlowOperationFlow

LedLed

InspectionHistInspectionHist

NoticePanelNoticePanel

InspectionProcessInspectionProcess

ReceptionistReceptionist

UserPersonUserPerson

CurrentMeterCurrentMeter

VolSensorVolSensor

EepRomEepRom

TimerTimer

DiagnosisStepDiagnosisStep

HistInspectionHistInspection

PushButtonPushButton

InspectorInspector

VolInspectionVolInspectionLcdInspectionLcdInspectionProgramConfirmationProgramConfirmation

PanelDisplayPanelDisplay

VolMeterVolMeter

SysCtrlSysCtrl

SysNoticeSysNotice

SwSw

BuzzerSoundBuzzerSound

BuzzerBuzzerLcdLcd

2

1

2

1

5

3

3

1

4

3

2

3

1

2

3

3

1

5

12

3

2

2

2

3

1

3

2

1

5

3

7

1

2

2

3

1

2

22

3

23

2

2

2

8

4

2

2

3

3 4

5

2

劣化検知

飛び越え

逆方向依存

スコア目安 評価 コメント

80点~100点 優 他の人でも変更可能

60点~79点 良 引継ぎ説明が少しで済む

0点~59点 可 引継ぎ期間が必要

マイナス点 不可 熟知していないと修正が大変

要素 改善点

総合点

構造 改善点

変更の影響範囲がわかる

⇒検索回数が大幅に減る

Page 12: AtScope 3つの活用シーン [ET2016]

12

スコアの使い方:資産価値の向上

相対的なスコアの推移を定点観測 – 徐々にスコアが上がる仕掛けを作る

設計図でのピアレビュー、など

アドホックな変更の積み重ね

変更時にリファクタリングや構造設計を実施

スコア スコア

Copyright BACKSLASH DESIGN Co., Ltd.

Page 13: AtScope 3つの活用シーン [ET2016]

13 Copyright BACKSLASH DESIGN Co., Ltd

3.設計力向上セミナー

Page 14: AtScope 3つの活用シーン [ET2016]

14

設計力向上セミナー

Copyright BACKSLASH DESIGN Co., Ltd.

技術経営へ 技術リーダ育成

現場実践トレーニング 設計力底上げトレーニング

設計技法の原理原則

レビュー技法

既存コードを資産化する

資産化モデリング オブジェクト指向モデリング

コード中心から設計中心へ

設計図活用 今日から使える

凝集度と結合度 2年目研修:5日間コース

ソフトウェア分析設計

構造化モデリング [静的]

構造化モデリング [動的]

部品化リファクタリング

構造化設計 [派生開発]

コード起点

新人研修:1日コース

設計技法基礎

事業と技術を繋ぐ

目的目標セミナー

アーキテクト育成

アーキテクチャ設計実践

良いアーキテクチャ設計書を作る

ロジカルシンキング

ことづくり ものづくり

ソフトウェア技術者のための

ロジカルライティング

アーキテクチャ設計入門

設計技法と テスト技法

Page 15: AtScope 3つの活用シーン [ET2016]

15 Copyright BACKSLASH DESIGN Co., Ltd

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

Page 16: AtScope 3つの活用シーン [ET2016]

16

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

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

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

既存 コード

部品表

設計図

開発戦略 アーキテクチャ

ドキュメント 資産開発

機種開発

部品化

変動点

設計方針 目論見

統合資産

部品マスター

洗練化

合わせこみ

既存 コード

既存 コード

資産活用

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

インフラ

①教育 ②指標と計測

洗練化

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

プロダクトライン開発

Copyright BACKSLASH DESIGN Co., Ltd.