Upload
b-slash
View
16
Download
1
Embed Size (px)
Citation preview
1 Copyright BACKSLASH DESIGN Co., Ltd
ソフトウェアを資産化する
設計意図発掘ツールAtScope
2016年11月18日
ビースラッシュ株式会社
2
本日の内容
1.ビースラッシュが解決したいこと
2.設計意図発掘ツールAtScopeの活用
ご参考:
3.設計力向上セミナー
4.ソフトウェアの資産化アプローチ
Copyright BACKSLASH DESIGN Co., Ltd.
3 Copyright BACKSLASH DESIGN Co., Ltd
1.ビーラッシュが解決したいこと
4
ビースラッシュが解決したいこと
コードを追いかけて動きを理解
grep検索で関連部分を探す
局所的な修正の積み重ね
コードの複雑さが増大する 負のスパイラル
設計構造と設計意図を理解
依存線と配置で関連を追跡
大局を見て勘所を押さえた修正
コードがシンプルで美しくなる 改善スパイラル
迅速
高品質
資産化 在庫
残業
バグ
在庫化サイクルから、資産化サイクルへ
Copyright BACKSLASH DESIGN Co., Ltd.
5 5
ソフトウェアの資産価値 在庫化している?
資産価値が徐々に低下して『在庫化』していませんか? 組織資産⇒属人資産:最初はドキュメントがあったが、誰も読まなくなり、保守されなくなる
属人資産⇒在庫:最初は設計ができていたのだが、人が変わったり、仕様追加で劣化する
資産名称 特徴
在庫 ソースコードは複雑で説明困難であり、
信頼できる設計ドキュメントは存在していない状態。保守コストが膨れていく傾向にある
属人資産 ソースコードはシンプルで分かりやすい。
ただし、設計ドキュメントが揃っていない状態。
個人主導の開発であり、引継ぎに苦闘する。
半組織資産
設計ドキュメントが揃っているが、
ソースコードが複雑な状態。
マネジメント主導の開発である
組織資産 ソースコードがシンプルで、設計ドキュメントが整備されている状態。
品質・生産性とも予測可能となる。
戦略資産 ソースコードと設計ドキュメントが統合。
戦略的な資産活用ができる。
ソースコード
在庫 半組織資産
属人資産
組織資産
戦略 資産
設計ドキュメント
5 Copyright BACKSLASH DESIGN Co., Lt
d.
引継ぎ
次機種
6
在庫から脱却し、ソフトウェア資産へ
資産価値を向上させる – 最初の一歩を踏み出す勇気が必要
– 日々の開発業務と並行して、着実に向上させていく仕掛けを作る
在庫 半組織 資産
属人 資産
組織資産
戦略 資産
A
B
C
D
名称 特徴
A コード・リファクタリング ソースコードを、管理可能な単位へ分解する
B 再構造化設計 設計図レベルで再構築を行う
C モジュール・リファクタリング
ソースコードの構造を図面化して洗練化する
D フォワード設計 設計図に沿って、ソースコードを修正する
E アーキテクチャ設計 複数視点で図面化し、文書として統合する
6 Copyright BACKSLASH DESIGN Co., Lt
d.
7 Copyright BACKSLASH DESIGN Co., Ltd
2.設計意図発掘ツールAtScopeの活用
8
設計意図発掘ツールAtScopeとは
静的解析ツール 設計意図発掘 ツール メトリクス系 図面作成系
主な目的 不具合の検出 設計図面の作成 不具合混入の未然防止
主な機能 複雑度などの定量化 関数コールの図面化 全体構造の俯瞰
規約違反の検出 設計書の作成 設計構造の劣化検知
効果 不具合の検出 コードの理解促進 ソフトウェアの資産化
品質状況の把握 納品資料の作成 迅速な機能追加
主な利用者 品質保証、プロセス改善 担当エンジニア アーキテクト/設計担当者
が使うことで設計力向上
解析精度 厳密 (コンパイラレベル)
比較的厳密
ゆるいコードでも解析可能 (人の目に映るレベル)
主な使い方 第三者が計測して、 現場の設計改善を行う
担当者の引継ぎ時や 納品時に仕様書を作成
アーキテクチャを分析し、
重要部分から設計改善
品質確保を「メトリクス系ツール」で行い、エンジニアの設計支援として「図面作成系ツール」を使い、組織資産を活用した開発で「設計意図発掘ツール」を使う、ことでトータルな効果が得られます。
Copyright BACKSLASH DESIGN Co., Ltd.
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.
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
飛び越え
逆方向 依存
アーキテクチャに従って配置
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点 可 引継ぎ期間が必要
マイナス点 不可 熟知していないと修正が大変
要素 改善点
総合点
構造 改善点
変更の影響範囲がわかる
⇒検索回数が大幅に減る
12
スコアの使い方:資産価値の向上
相対的なスコアの推移を定点観測 – 徐々にスコアが上がる仕掛けを作る
設計図でのピアレビュー、など
アドホックな変更の積み重ね
変更時にリファクタリングや構造設計を実施
スコア スコア
Copyright BACKSLASH DESIGN Co., Ltd.
13 Copyright BACKSLASH DESIGN Co., Ltd
3.設計力向上セミナー
14
設計力向上セミナー
Copyright BACKSLASH DESIGN Co., Ltd.
技術経営へ 技術リーダ育成
現場実践トレーニング 設計力底上げトレーニング
設計技法の原理原則
レビュー技法
既存コードを資産化する
資産化モデリング オブジェクト指向モデリング
コード中心から設計中心へ
設計図活用 今日から使える
凝集度と結合度 2年目研修:5日間コース
ソフトウェア分析設計
構造化モデリング [静的]
構造化モデリング [動的]
部品化リファクタリング
構造化設計 [派生開発]
コード起点
新人研修:1日コース
設計技法基礎
事業と技術を繋ぐ
目的目標セミナー
アーキテクト育成
アーキテクチャ設計実践
良いアーキテクチャ設計書を作る
ロジカルシンキング
ことづくり ものづくり
ソフトウェア技術者のための
ロジカルライティング
アーキテクチャ設計入門
設計技法と テスト技法
15 Copyright BACKSLASH DESIGN Co., Ltd
4.ソフトウェアの資産化アプローチ
16
ソフトウェアの資産化アプローチ
既存資産を起点として戦略的な開発の実現へ ボトムアップ:既存コードを部品化して、洗練化・資産化していく
トップダウン:設計意図を明確にして、ソースコードへ反映していく
既存 コード
部品表
設計図
開発戦略 アーキテクチャ
ドキュメント 資産開発
機種開発
部品化
変動点
設計方針 目論見
統合資産
部品マスター
洗練化
合わせこみ
既存 コード
既存 コード
資産活用
リバースモデリング 資産化 資産運用
インフラ
①教育 ②指標と計測
洗練化
③プロセス構築 ④ツール導入
プロダクトライン開発
Copyright BACKSLASH DESIGN Co., Ltd.