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.
設計図で仕事をしよう
〜3ヶ⽉で3年⽬の設計スキルが習得できる〜
2017年11⽉ ET2017
ビースラッシュ株式会社
Copyright BACKSLASH DESIGN Co., Ltd.1
ソフトウェア設計をいつ学ぶのか
 どこでも学んでいない⼈が⼤半
◦ ⼤学・専⾨学校で、学ばない
◦ 新⼈研修で、学ばない
◦ OJTでも、学ばない
 多くの⼈が通る道
◦ ⼤学・専⾨学校で、プログラミングすらしない
◦ 新⼈研修で、プログラ...
ソフトウェア設計の失われた10年
三⼤理由 症状
1
下請け構造
(特に多重下請け構造)
⾔われたことだけやれば良い
余計なこと(設計)はしない
そもそも設計を知らない
2 動くソースコードがある
設計しなくても、コードを修正すれ
ば動く
(そ...
設計ができない理由
三⼤理由 処⽅箋
1
ソースコードでしか説明で
きない(設計図がない)
今のソースコードから設計図を書いてみ
る。常にそれを使う。
2 設計を議論する場がない
OJTとして、設計レビューをする。
3
そもそも設計の⽅法を知ら...
設計を学ぶことで実践と理論を繋ぐ
〜設計の学び直し〜
Copyright BACKSLASH DESIGN Co., Ltd.5
現状の課題と解法
 今の開発現場の三⼤問題
1.プログラミング⾔語から学ぶと、設計への道のりが遠くなる
2.そもそも、ソフトウェアの設計を学んだことがない
3.配属後のOJTでの教育が形骸化
 それぞれの解法
1.ソフトウェア設計を先に学び...
解法:設計から習得する
今までのソフトウェア研修
 プログラミングという道具か
ら⼊る⇒理系スキル
問題ドメイン
設計起点のソフトウェア研修
 ⽂章表現の代わりに、図解表
現で⼈に伝える⇒⽂系スキル
分析
設計
実装
技術ドメイン
問題ドメ...
3ヶ⽉で3年⽬スキル教育
3ヶ⽉で3年⽬の設計スキルを習得
今までの社員教育
レベル1
ETSS
レベル2
レベル3
レベル4 製品開発全体
の先導
設計図の活⽤
と設計品質の
作り込み
判断の連続で
リーダーシップ
設計図の
読み書き 3年⽬...
ビースラッシュの新サービス
1.3ヶ⽉で3年⽬の設計スキル習得コース
2.双⽅向eラーニング
Copyright BACKSLASH DESIGN Co., Ltd.9
3ヶ⽉の研修コース概要
 1ヶ⽉単位で、
◦ 5⽇間の、リアル研修(新横浜)
◦ 3週間の、双⽅向eラーニング(⾃宅もしくは新横浜)
◦ ⽉末に、到達レベルチェック
1ヶ⽉⽬
研修
双⽅向eラーニング
到達レベルチェック
2ヶ⽉⽬
研修
双⽅...
設計⼒を鍛える:双⽅向eラーニング
対象者 学習マテリアル 双⽅向eラーニング概要
1 新⼈ 設計活⽤セミナー ソースコードから設計図を作り、設計と
プログラミングを同時に覚える。
例:モジュール構造図⇒関数呼び出し⇒関数
定義と引数と戻り値の...
設計ドリルのコンテンツ
 設計ドリル[初級]・・・若⼿エンジニア向け
 設計ドリル[中級]・・・スキルアップしたいエンジニア向け
 設計ドリル[上級]・・・アーキテクト向け
Copyright BACKSLASH DESIGN Co., ...
設計意図発掘ツールAtScope
コード起点から設計起点への体質変換
設計図で開発/レビュー/納品ができる
⇒ “もっと速く、もっと楽に“開発できる
Copyright BACKSLASH DESIGN Co., Ltd.13
AtScopeの3つの機能+1
コード起点
func() {
・・・・・・・・・・・
・・・・・・・・・・
・・・・・・・
・・・・・・・・・・・・・
・・・・・・・・・
・・・・・・・・・・・・
・・・・・・・
・・・・・・・・・・・・・・
...
設計⼒向上セミナー
Copyright BACKSLASH DESIGN Co., Ltd.15
設計⼒向上セミナー
Copyright BACKSLASH DESIGN Co., Ltd.16
技術経営へ 技術リーダ育成
現場実践トレーニング設計力底上げトレーニング
設計技法の原理原則
レビュー技法
資産化モデリングオブジェクト指向モデリ...
ソフトウェアの設計とは
知っておきたい3つのこと
1.構造設計(ファクタリング)
2.リファクタリング
3.凝集度
Copyright BACKSLASH DESIGN Co., Ltd.17
構造設計の基本
func() {
・・・
・・・
⼊⼒する
・・・
・・・
演算する
・・・
・・・
出⼒する
・・・
・・・
}
⼀筆書き
設計ではない
フローチャート/コールグラフ
モジュール化はできているが
レベル化はできていない
⇒設計...
リファクタリングの原則
 データを中⼼に関数を集めて、別ファイルにする⇒部品化
関数
データ
関数
関数
関数
関数
関数
関数 関数
関数
データ
データ
関数
関数
関数
関数
関数
データ
関数
関数
関数 関数 関数 関数
関数
デー...
設計品質の原則:凝集度
Copyright BACKSLASH DESIGN Co., Ltd.20
モジュール
機能
データ
モジュール
機能A
データ
機能B
モジュール
機能A
データ
機能B 機能C
1.機能的 2.逐次的 3.通信的
...
ソフトウェアの資産価値 在庫化している?
資産価値が徐々に低下して『在庫化』していませんか?
 組織資産⇒属⼈資産:最初はドキュメントがあったが、誰も読まなくなり、保守されなくなる
 属⼈資産⇒在庫:最初は設計ができていたのだが、⼈が変わっ...
ソフトウェア疲労[静的]ソースコードはこんな状況に
Copyright BACKSLASH DESIGN Co., Ltd.22
参考
ID 症状 原因 現象
S1 ⼀筆書き
そもそも設計し
ていない
ひとつの関数やファイルが⻑い
作った⼈にし...
Upcoming SlideShare
Loading in …5
×

Bslash ET2017

2,955 views

Published on

3ヵ月で3年目の設計スキルが習得できる

Published in: Business
  • Be the first to comment

  • Be the first to like this

Bslash ET2017

  1. 1. 設計図で仕事をしよう 〜3ヶ⽉で3年⽬の設計スキルが習得できる〜 2017年11⽉ ET2017 ビースラッシュ株式会社 Copyright BACKSLASH DESIGN Co., Ltd.1
  2. 2. ソフトウェア設計をいつ学ぶのか  どこでも学んでいない⼈が⼤半 ◦ ⼤学・専⾨学校で、学ばない ◦ 新⼈研修で、学ばない ◦ OJTでも、学ばない  多くの⼈が通る道 ◦ ⼤学・専⾨学校で、プログラミングすらしない ◦ 新⼈研修で、プログラミング⾔語を学ぶ ◦ OJTでは、プログラムの動きを教えてもらう  ソフトウェア設計を習得している⼈は ◦ 配属の運 =運よく、先輩が設計図を書いていた ソフトウェア設計は、 教えられる⼈も少なく、 学ぶ機会は極めて少ない Copyright BACKSLASH DESIGN Co., Ltd.2
  3. 3. ソフトウェア設計の失われた10年 三⼤理由 症状 1 下請け構造 (特に多重下請け構造) ⾔われたことだけやれば良い 余計なこと(設計)はしない そもそも設計を知らない 2 動くソースコードがある 設計しなくても、コードを修正すれ ば動く (その⽅法しか知らない) 3 担当が細分化している 全体を⾒なくても、部分的に修正す れば動く (その⽅法しか知らない) 設計を習ったことがない⼈ が⼤多数 Copyright BACKSLASH DESIGN Co., Ltd.3
  4. 4. 設計ができない理由 三⼤理由 処⽅箋 1 ソースコードでしか説明で きない(設計図がない) 今のソースコードから設計図を書いてみ る。常にそれを使う。 2 設計を議論する場がない OJTとして、設計レビューをする。 3 そもそも設計の⽅法を知ら ない 設計技法の本を⾃⼰学習する。 (設計本を読んでいない⼈の多い) 「設計の学び直し」が必要 Copyright BACKSLASH DESIGN Co., Ltd.4 設計意図発掘ツールAtScopeを使う! 設計意図発掘ツールAtScopeを使う! ビースラッシュのセミナーを受ける!
  5. 5. 設計を学ぶことで実践と理論を繋ぐ 〜設計の学び直し〜 Copyright BACKSLASH DESIGN Co., Ltd.5
  6. 6. 現状の課題と解法  今の開発現場の三⼤問題 1.プログラミング⾔語から学ぶと、設計への道のりが遠くなる 2.そもそも、ソフトウェアの設計を学んだことがない 3.配属後のOJTでの教育が形骸化  それぞれの解法 1.ソフトウェア設計を先に学び、プログラミング⾔語は使いな がら習得 • 設計図から、ソースコードに⼿動で変換 2.設計図の事例をたくさん⾒る • 理論からではなく、事例から学ぶ 3.設計図でのピアレビューで成⻑する  設計図を⽤いたピアレビューがOJT ⇒ 新⼈研修+配属後OJTをワンセットにした講座 Copyright BACKSLASH DESIGN Co., Ltd.6
  7. 7. 解法:設計から習得する 今までのソフトウェア研修  プログラミングという道具か ら⼊る⇒理系スキル 問題ドメイン 設計起点のソフトウェア研修  ⽂章表現の代わりに、図解表 現で⼈に伝える⇒⽂系スキル 分析 設計 実装 技術ドメイン 問題ドメイン 分析 設計 実装 技術ドメイン 設計習得の機会 がない 3年⽬でも設計で きない⼈が⼤半 新⼈研修で⾔語教育、 配属後にソースコー ドを渡される 設計図から習得 設計図との対⽐ で⾔語を覚える デバッガで動か しながらCPU周 りも体験 「分析」の勘所 も体験 Copyright BACKSLASH DESIGN Co., Ltd.7 ⽂系でも できる
  8. 8. 3ヶ⽉で3年⽬スキル教育 3ヶ⽉で3年⽬の設計スキルを習得 今までの社員教育 レベル1 ETSS レベル2 レベル3 レベル4 製品開発全体 の先導 設計図の活⽤ と設計品質の 作り込み 判断の連続で リーダーシップ 設計図の 読み書き 3年⽬ 2年⽬ OJT ⾔語教育 プログラ ミング ギャップ 3ヵ⽉2ヵ⽉1ヵ⽉ OJTが形骸化。 実務を通したスキ ル向上が困難 設計⼒が⾝につくか どうかは本⼈次第 実践演習 実習教育 基本演習 図⾯教育 図⾯の読み書き 設計起点で、プロ グラム⾔語を学習 設計の試⾏訓練 図⾯でのレビュー レベル2の達成 プログラム⾔語教 育で、配属後もプ ログラムを部分的 に変更する仕事 Copyright BACKSLASH DESIGN Co., Ltd.8
  9. 9. ビースラッシュの新サービス 1.3ヶ⽉で3年⽬の設計スキル習得コース 2.双⽅向eラーニング Copyright BACKSLASH DESIGN Co., Ltd.9
  10. 10. 3ヶ⽉の研修コース概要  1ヶ⽉単位で、 ◦ 5⽇間の、リアル研修(新横浜) ◦ 3週間の、双⽅向eラーニング(⾃宅もしくは新横浜) ◦ ⽉末に、到達レベルチェック 1ヶ⽉⽬ 研修 双⽅向eラーニング 到達レベルチェック 2ヶ⽉⽬ 研修 双⽅向eラーニング 到達レベルチェック 3ヶ⽉⽬ 研修 双⽅向eラーニング 到達レベルチェック C⾔語 構造図 LED点滅ボート ライントレースLEGO IoTシステム(スマホAndroid連動) C⾔語 UML ・クラス図 ・コミュニケーション図 C⾔語/Java(読める程度) UML ・状態遷移図 SysML ・ブロック図 中級認定 初級認定 猶予期間 Copyright BACKSLASH DESIGN Co., Ltd.10
  11. 11. 設計⼒を鍛える:双⽅向eラーニング 対象者 学習マテリアル 双⽅向eラーニング概要 1 新⼈ 設計活⽤セミナー ソースコードから設計図を作り、設計と プログラミングを同時に覚える。 例:モジュール構造図⇒関数呼び出し⇒関数 定義と引数と戻り値の書き⽅ 2 中堅 設計技法セミナー ⾃分のソースコードから設計図を作り、 設計意図を説明できるようになる。他の ⼈の設計の良さと改善点を指摘すること で、チームでの設計⼒をつける。 3 アーキテ クト候補 アーキテクト育成 セミナー 設計⼒の問題集/参考書/添削。 中間成果物としての設計図で話ができる。 トレードオフを考察できる。 ⽬的を考えて提案ができるようになる。 Copyright BACKSLASH DESIGN Co., Ltd.11 設計ドリル[初級] 設計ドリル[中級] 設計ドリル[上級]
  12. 12. 設計ドリルのコンテンツ  設計ドリル[初級]・・・若⼿エンジニア向け  設計ドリル[中級]・・・スキルアップしたいエンジニア向け  設計ドリル[上級]・・・アーキテクト向け Copyright BACKSLASH DESIGN Co., Ltd.12 1ヶ⽉⽬ 2ヶ⽉⽬ 3ヶ⽉⽬ フォローアップ [初級] モジュール構造 データ構造 設計と実装の同 期 ソースコードと 設計図に関する 相談 [中級] 分析技法 設計技法 リバース技法 開発現場での問 題解決に関する 相談 [上級] 抽象化 概念化/粒度 構造化 アーキテクチャ ドキュメントに 関する相談
  13. 13. 設計意図発掘ツールAtScope コード起点から設計起点への体質変換 設計図で開発/レビュー/納品ができる ⇒ “もっと速く、もっと楽に“開発できる Copyright BACKSLASH DESIGN Co., Ltd.13
  14. 14. 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 再配置 再配置 ④リファクタリングスコア 設計意図 試作駆動 30点 設計スコア 構造遵守 劣化検知 Copyright BACKSLASH DESIGN Co., Ltd.14
  15. 15. 設計⼒向上セミナー Copyright BACKSLASH DESIGN Co., Ltd.15
  16. 16. 設計⼒向上セミナー Copyright BACKSLASH DESIGN Co., Ltd.16 技術経営へ 技術リーダ育成 現場実践トレーニング設計力底上げトレーニング 設計技法の原理原則 レビュー技法 資産化モデリングオブジェクト指向モデリング 設計図活用 凝集度と結合度 ソフトウェア分析設計 構造化モデリング [静的] 構造化モデリング [動的] 部品化リファクタリング 構造化設計 [派生開発] コード起点 新人研修:1日コース 設計技法基礎 事業と技術を繋ぐ 目的目標セミナー アーキテクト育成 アーキテクチャ設計実践 エンジニアのため論理思考 アーキテクチャ分析 C言語 セキュア コーディング ことづくりものづくり モデリングをはじめよう 聴く力と伝える力 良い設計構造を作る 抽象化トレーニング アーキテクチャ改善 アーキテクチャ 設計入門 新人研修:11日コース 設計基礎トレーニング リバースモデリング PSPトレーニング MISRA C ひとめぐり 構造化モデリング [データ構造] 3時間コース アーキテクト ひとめぐり 画像解析ひとめぐり リファクタリング基礎/実践 アジャイル開発プロセス実践
  17. 17. ソフトウェアの設計とは 知っておきたい3つのこと 1.構造設計(ファクタリング) 2.リファクタリング 3.凝集度 Copyright BACKSLASH DESIGN Co., Ltd.17
  18. 18. 構造設計の基本 func() { ・・・ ・・・ ⼊⼒する ・・・ ・・・ 演算する ・・・ ・・・ 出⼒する ・・・ ・・・ } ⼀筆書き 設計ではない フローチャート/コールグラフ モジュール化はできているが レベル化はできていない ⇒設計ではない ⼊⼒する 演算する 出⼒する フローチャート ⼊⼒ する 演算 する 出⼒ する コールグラフ ⼊⼒ する 演算 する 出⼒ する ⽬的 構造設計 箱:Whatの名称 (抽象化と粒度) 線:利⽤関係 配置:⽔平垂直分割 ⽔平:レイヤー化 垂直:IO分離/STS分割 構造設計 Copyright BACKSLASH DESIGN Co., Ltd.18 BOSS関数 暗黙の⼿続き を明確にする この形を体得
  19. 19. リファクタリングの原則  データを中⼼に関数を集めて、別ファイルにする⇒部品化 関数 データ 関数 関数 関数 関数 関数 関数 関数 関数 データ データ 関数 関数 関数 関数 関数 データ 関数 関数 関数 関数 関数 関数 関数 データ 関数 関数 関数 データ 関数 関数 関数 関数 リ フ ァ ク タ リ ン グ 5000⾏を超えるようなファ イルは、それをひと固まり で管理することが難しい。 データを中⼼に関数を集め、 2000⾏程度の部品とする。 Copyright BACKSLASH DESIGN Co., Ltd.19
  20. 20. 設計品質の原則:凝集度 Copyright BACKSLASH DESIGN Co., Ltd.20 モジュール 機能 データ モジュール 機能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偶発的 ⼀筆書き 初期化など ディスパッチ処理
  21. 21. ソフトウェアの資産価値 在庫化している? 資産価値が徐々に低下して『在庫化』していませんか?  組織資産⇒属⼈資産:最初はドキュメントがあったが、誰も読まなくなり、保守されなくなる  属⼈資産⇒在庫:最初は設計ができていたのだが、⼈が変わったり、仕様追加で劣化する Copyright BACKSLASH DESIGN Co., Ltd.21 資産名称 特徴 在庫 ソースコードは複雑で説明困難であり、 信頼できる設計ドキュメントは存在していない 状態。保守コストが膨れていく傾向にある 属⼈資産 ソースコードはシンプルで分かりやすい。 ただし、設計ドキュメントが揃っていない状態。 個⼈主導の開発であり、引継ぎに苦闘する。 半組織 資産 設計ドキュメントが揃っているが、 ソースコードが複雑な状態。 マネジメント主導の開発である 組織資産 ソースコードがシンプルで、設計ドキュメント が整備されている状態。 品質・⽣産性とも予測可能となる。 戦略資産 ソースコードと設計ドキュメントが統合。 戦略的な資産活⽤ができる。 ソ ー ス コ ー ド 在庫 半組織資産 属⼈資産 組織資産 戦略 資産 設計ドキュメント 引継ぎ 次機種 参考
  22. 22. ソフトウェア疲労[静的]ソースコードはこんな状況に Copyright BACKSLASH DESIGN Co., Ltd.22 参考 ID 症状 原因 現象 S1 ⼀筆書き そもそも設計し ていない ひとつの関数やファイルが⻑い 作った⼈にしかわからない(作った⼈も?) S2 クローン 同じコード断⽚が点在。修正漏れが発⽣する grep検索が最も便利な開発ツール S3 神様データ 設計技法を使い こなしていない すべてを⽀配しているデータが存在する 修正の波及範囲が⼤きい S4 中央集権 ひとつのファイルにたくさんの関数がある いつも同じファイルを修正している S5 スパゲッティ いろいろな関数を呼び出している 副作⽤が発⽣する(こちらを直すとあちらが) S6 ⽼舗温泉旅館 全体が⾒えない (アーキテクト 不在) 階層を越えた呼び出し/命名規則がない 引継ぎができない(そもそも説明できない) S7 ⼀枚岩 #includeしているファイルが多い/循環依存 分割コンパイルができない

×