Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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検索で関連部分を
探す
局所的な修正の積み
重ね
コードの複雑さが増大する
負のスパイラル
設計構造と設計意図
を理解
依存線と配置で関連を
追跡
大局を見て勘所を押さ...
55
ソフトウェアの資産価値 在庫化している?
資産価値が徐々に低下して『在庫化』していませんか?
 組織資産⇒属人資産:最初はドキュメントがあったが、誰も読まなくなり、保守されなくなる
 属人資産⇒在庫:最初は設計ができていたのだが、人が...
6
在庫から脱却し、ソフトウェア資産へ
 資産価値を向上させる
– 最初の一歩を踏み出す勇気が必要
– 日々の開発業務と並行して、着実に向上させていく仕掛けを作る
在庫
半組織
資産
属人
資産 組織資産
戦略
資産
A
B
C
D
名称 特...
7 Copyright BACKSLASH DESIGN Co., Ltd
2.設計意図発掘ツールAtScope
の活用
8
設計意図発掘ツールAtScopeとは
静的解析ツール 設計意図発掘
ツールメトリクス系 図面作成系
主な目的 不具合の検出 設計図面の作成 不具合混入の未然防止
主な機能 複雑度などの定量化 関数コールの図面化 全体構造の俯瞰
規約違反の検...
9
AtScopeの3つの機能+1
力づく開発
func() {
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
・
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
・・
...
10
活用シーン① アーキテクチャ中心開発
1.アーキテクチャ構造に従ってフォルダを作る
Copyright BACKSLASH DESIGN Co., Ltd.
2.コンポーネント構造図を出力する
3.アーキテクチャの崩れを検知する
ui
h...
11
活用シーン② 派生開発での構造設計
 ファイル見取図で設計構造を見える化
 リファクタリングスコアで改善点を洗い出し
Copyright BACKSLASH DESIGN Co., Ltd.
app
UserPersonUserPer...
12
スコアの使い方:資産価値の向上
 相対的なスコアの推移を定点観測
– 徐々にスコアが上がる仕掛けを作る
 設計図でのピアレビュー、など
アドホックな変更の積み
重ね
変更時にリファクタリング
や構造設計を実施
スコア スコア
Copy...
13 Copyright BACKSLASH DESIGN Co., Ltd
3.設計力向上セミナー
14
設計力向上セミナー
Copyright BACKSLASH DESIGN Co., Ltd.
技術経営へ 技術リーダ育成
現場実践トレーニング設計力底上げトレーニング
設計技法の原理原則
レビュー技法
既存コードを資産化する
資産化モデリ...
15 Copyright BACKSLASH DESIGN Co., Ltd
4.ソフトウェアの資産化アプローチ
16
ソフトウェアの資産化アプローチ
既存資産を起点として戦略的な開発の実現へ
 ボトムアップ:既存コードを部品化して、洗練化・資産化していく
 トップダウン:設計意図を明確にして、ソースコードへ反映していく
既存
コード
部品表
設計図
...
Upcoming SlideShare
Loading in …5
×

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

1,820 views

Published on

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

Published in: Business
  • Be the first to comment

  • Be the first to like this

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

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

×