三菱電機メカトロニクスソフトウエア(株)
和歌山支所 岩橋正実
個人依存開発から組織的開発への移行事例
~要求モデル定義と開発プロセスの形式 化
改善効果
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 2006 2007 2008 2009 2010 2011 2012上工数割合分析
システムテスト 総合テスト 単体/結合テスト 実装 ソフトウェア設計 要求分析 残存誤り件数 2009年度 2010年度 2011年度 2012年度品質:フロントローディングが進み流出不具合0継続
生産性:平均130%改善
2
AOO技法のポイント
①要求の発生源と目的定義
②要求のカテゴリによる目的分解整理
③表形式と日本語による要求モデル
④日本語形式記法
⑤製品内と製品間の共通部定義
⑥類型化の推進
⑦自律化による要素間の依存関係の排除
⑧競合/例外/時間制約の解決
⑨重複情報及び重複作業の徹底した無駄取り
⑩プロセス形式化と双方向のトレーサビリティによる定型化と自動化
⑪アジャイル/派生機種/ソフトウェアプロダクトライン開発の対応
自律オブジェクト指向(AOO:Autonomic architecture base Object-Oriented development technique)が
1998年に組込みソフトウェア開発向けオブジェクト指向の開発手法として発表。その後、AOOは、プ
ロセス(AOO_PRS)、プロダクトライン(AOO_SPL)、見積り(AOO_EST)、形式手法(AOO_DSL)と拡張
してツールとして提供準備中。AOOは,オブジェクト指向技術に基づき要求を表形式と日本語により
厳密にモデルを定義した上で分析・設計・実装・テストの双方向のトレーサビリティを確立.開発上で
発生する課題をアーキテクチャ(文書/コードのフレーム)とアーキテクチャに落とし込む開発プロセス
により組織的な課題抑制を可能にする.以下にAOO技法のポイントを示す.
4
個人依存の開発のリスク
国内競争及びグローバル展開の機能量の増加とリードタイム短縮は
個人依存した組織では対応できず事業の衰退化が進むリスクがある。
・過去の資産優先と高年齢化
・情報共有の停滞
・組織の大規模化、役割の制約
①分析/設計精度の低下
限られた要員で規模の増加に対応する為に分析や設計の精度を落として
実装を先行してしまう傾向がある.テストでこれをカバーしようするが分析
や設計の精度が低いためにテストの実行精度も低下することになり品質を
確保することが困難になる傾向がある.
②外注依存による品質低下
作業負荷増加とコスト制約に対応するためにオフショアを含めた外注企業
に委託するケースが多くなる傾向にある.外部依存が進むことにより品質
を確保することが困難になる傾向がある.
要求の発生源と目的を定義する事による組織全体のフロントローディングと要求
の改善提案を可能にして要求の価値と仕様構築スピードの向上を進める。
物理項目
機能仕様 目的 操作 目的 属性 状態 xxxシステム 1.xxx 1.1.xxx1.2.xxx
1.3.xxx
2.xxx 2.1.xxx 2.1.1.xxx
2.1.2.xxx
デバイス
AOO:要求モデリングと目的指向開発
機能項目
機能仕様 目的 操作 目的 属性 状態 xxxシステム 1.xxx1.1.xxx
1.2.xxx
2.xxx 2.1.xxx
2.2.xxx 2.2.1.xxx
2.2.2.xxx
ソフトウェア開発部門
仕様構築
部門
営業
サービス
部門
市場要求
目的の発生源を見極める
①顧客価値に基づく事業目標の定義
顧客に継続的な価値を提供する。
②事業目標に基づくシステム機能目的の定義
事業目的を達成するために、製品ごとにシステム
機能目的を定義する。
※事業目的を達成する為の課題の定義と解決で顧客に価値を提供する。
③システム機能目的に基づく機能目的の定義
システム機能目的を達成する機能目的を定義して製品開発を進める。
AOO_PRS:開発プロセス
ソフトウェア要求分析
ソフトウェア総合テスト
機能項目 目的 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211F111
条件記述
操作記述
<aaa> 機能ブロック記述 XXXタイマーF111
試験手順 期待値条件
記述
操作
記述
オブジェクト 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 P1 P11 P111 P112 P2 P21 P211 ControlManager ObjectManager Kernel 物理項目 目的 属性 操作 時間 P1 P11 P111 P112 P2 P21 P211例外マトリクス E01 E02 E03
F11 F11 F111 ― ― ― F112 ― ― ― F12 F121 ― ― ○ F21 F21 F211 ― ○ ○ 機能項目 目的 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 物理項目 目的 属性 操作 時間 P1 P11 P111 P112 P2 P21 P211 機能マトリクス F1 F2 F11 F12 F21 F111 F112 F121 F211 F11 F11 F111 ○ × ○ F112 ○ ○ ○ F12 F121 ○ × ○ F21 F21 F211 × × ×
例外マトリクス E01 E02 E03
F11 F11 F111 ― ― ― F112 ― ― ― F12 F121 ― ― ○ F21 F21 F211 ― ○ ○ 機能マトリクス F1 F2 F11 F12 F21 F111 F112 F121 F211 F11 F11 F111 ○ × ○ F112 ○ ○ ○ F12 F121 ○ × ○ F21 F21 F211 × × × オブジェクト 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 P1 P11 P111 P112 P2 P21 P211 ControlManager ObjectManager Kernel
6
単体テスト
ソフトウェア詳細設計
ソフトウェアアーキテクチャ設計
ソフトウェア結合および結合テスト
Kernel Object Manager Input Output ControlJuge ControlManger Kernel Object Manager Input Output ControlJuge ControlManger 機能S/W マトリクス F1 F2 3 Fi M 1. 1 M 1. 2 M 1. 3 M 2. 1 M 2. 2 M 3. 1 M 3. 2 M 3. 3 M 3. 4 M 3. 5 1.xxx 1.1.xxx I I 1.2.xxx I R 2.xxx 2.1.xxx I R R 2.2.xxx 2.2.1.xxx I R 2.2.2.xxx I RW 1.xxx 1.1.xxx I R R R 1.2.xxx I R R R R 1.3.xxx I R RW 2.xxx 2.1.xxx 2.1.1.xxx I RW 2.1.2.xxx I RWP111
条件記述
<aaa> 機能ブロック記述 XXXタイマー 入力 処理 出力操作記述
O111(ソースコード) if(xxxx) if(xxx) Aaa(){ Xxxxxxxx; Xxxxxxxxxxx; Xxx_ti=START; } aaa_st=xxxx*2; aaa();実装
P111
条件記述
<aaa> 機能ブロック記述 XXXタイマー 入力 処理 出力操作記述
結果機能仕様で扱う名詞の定義して形式
記法で仕様定義
更に1機能項目内を目的で分解して機
能ブロックを定義
機能ブロックの再利用による要求分
析定義の生産性向上
※文書コード生成検証の実現
1)要求のカテゴリ化と機能ブロック/属性の形式化
2)形式記法を用いた機能仕様の日本語による形式化
3)機能ブロック/属性の再利用によるDSL化の推進
要求
要求
要求
機能項目リスト
物理項目リスト
機能項目 目的 操作 目的 属性 1.xxx1.1.xxx
1.2.xxx
2.xxx 2.1.xxx
2.2.xxx 2.2.1.xxx
2.2.2.xxx
制御マネージャ
物理項目 目的 操作 目的 属性 1.xxx 1.1.xxx
1.2.xxx
1.3.xxx
2.xxx 2.1.xxx 2.1.1.xxx
2.1.2.xxx
デバイス
機能
ブロック
機能
ブロック
①and②
①外気温度>10℃
②運転モード=冷房
・XXX制御状態←制御中
【XXX制御状態=制御中】
DSL
ドメイン
形式記述
AOO_DSL:要求の形式化
AOO_SPL:ソフトウェアプロダクトライン
製品A
要求
製品B
要求
製品間の可変性を分析して可変ポイント(バリエーションポイント)と可変部分(バリアント)を定義する
①要求の物理と目的(機能)で分解整理してソフトウェアと双方向に紐付することでSPL開発を可能にする。
②フレームワークをドメイン依存として構築すると中長期開発で 破綻するリスクがある。
状態遷移、状態に基づく操作、競合解決、バリエーション解決は、 多くの組込み制御システムに共通であ
り、共通フレームワーク上で実現することでSPL開発を成功させる。
オブジェクトに変換(可変性の継承)
1機能項目1目的で
カテゴリで分類整理
製品C
要求
機能項目名称 1.1.xxxx 機能目的 XXXXXXXXXXXXXXXXXXX バリエーションポイント バリアント 機種 A,B 機種C 機種D 開始条件 標準 北米 欧州 条件記述 <<開始条件>> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 操作記述 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <標準> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <北米> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <欧州> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX8
ソフトウェア要求分析
ソフトウェア総合テスト
機能項目 目的 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211F111
条件記述
操作記述
<aaa> 機能ブロック記述 XXXタイマーF111
試験手順 期待値条件
記述
操作
記述
オブジェクト 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 P1 P11 P111 P112 P2 P21 P211 ControlManager ObjectManager Kernel 物理項目 目的 属性 操作 時間 P1 P11 P111 P112 P2 P21 P211例外マトリクス E01 E02 E03
F11 F11 F111 ― ― ― F112 ― ― ― F12 F121 ― ― ○ F21 F21 F211 ― ○ ○ 機能項目 目的 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 物理項目 目的 属性 操作 時間 P1 P11 P111 P112 P2 P21 P211 機能マトリクス F1 F2 F11 F12 F21 F111 F112 F121 F211 F11 F11 F111 ○ × ○ F112 ○ ○ ○ F12 F121 ○ × ○ F21 F21 F211 × × ×
例外マトリクス E01 E02 E03
F11 F11 F111 ― ― ― F112 ― ― ― F12 F121 ― ― ○ F21 F21 F211 ― ○ ○ 機能マトリクス F1 F2 F11 F12 F21 F111 F112 F121 F211 F11 F11 F111 ○ × ○ F112 ○ ○ ○ F12 F121 ○ × ○ F21 F21 F211 × × × オブジェクト 属性 操作 時間 F1 F11 F111 xxx aaa F112 F12 F121 F2 F21 F211 P1 P11 P111 P112 P2 P21 P211 ControlManager ObjectManager Kernel
単体テスト
ソフトウェア詳細設計
ソフトウェアアーキテクチャ設計
ソフトウェア結合および結合テスト
KernelInput ControlJuge Kernel Input ControlJuge
ControlManger 機能S/W マトリクス F1 F2 3 Fi M 1. 1 M 1. 2 M 1. 3 M 2. 1 M 2. 2 M 3. 1 M 3. 2 M 3. 3 M 3. 4 M 3. 5 1.xxx 1.1.xxx I I 1.2.xxx I R 2.xxx 2.1.xxx I R R 2.2.xxx 2.2.1.xxx I R 2.2.2.xxx I RW 1.xxx 1.1.xxx I R R R 1.2.xxx I R R R R 1.3.xxx I R RW 2.xxx 2.1.xxx 2.1.1.xxx I RW 2.1.2.xxx I RW