10

14

プロダクトラインへいたる道

2010.10.14(22:20)

プロダクトライン開発へいたる道は以下のようなイメージになります。

productline1.jpg

プログラムが非常に小さいうちは、mainから呼び出される単一タスクで構造化設計されたもので動作させることができます。

それが1万行を超えて数万行になると、センサやアクチュエータが増え、複数の責務を並行処理しなければならなくなり、RTOSを使ったマルチタスクで設計することが必要になります。そのとき、過去の構造化設計の一部分を取り外して、マルチタスク設計されたモジュールで入れ替えます。

さらにそれがどんどん複雑になり、それまでの一部分を取り外して、オブジェクト指向設計されたモジュールで入れ替えます。タスクはデータ隠蔽とメッセージ通信による独立した並行処理単位として有効ですが、タスクの数は無限には増やすことができないので、データ隠蔽とメッセージ通信をより小さい単位で実現できるクラスによって、オブジェクト指向開発するのが有効な手段となります。

オブジェクト指向設計の規模がさらに大きくなってくると、オブジェクト指向設計と相性がよいモデル駆動開発ツールを使って、モデルからのソースコード自動生成を活用すると、より開発が加速できます。この場合は、オブジェクト指向設計されている一部分を取り外して、モデル駆動開発ツールで自動生成したモジュールで入れ替えます。それまで手書きしていた状態マシンは、その大部分が機械によってコード生成されます。

これに対し、プロダクトライン開発は、オブジェクト指向設計やモデル駆動開発したものがさらに大規模化してきたときに対応するものです。ソースコード行数がおよそ50万行を超え、派生機種開発が従来までの方法では限界を感じるようになったとき、プロダクトライン開発が有効な解決方法となります。

プロダクトライン開発は、それまでの設計手法とは切り口が異なり、構造化設計、RTOSを使った設計、オブジェクト指向開発、モデル駆動開発しているそれぞれの範囲を横断的に2つに分けようとする開発方法です。

その2つが、共通部(図ではフレームワーク)、可変部(図ではアプリケーション)になります。複数の製品を複数世代にわたって効率よく開発できるように、共通部と可変部を分けた設計にします。

さらにこの図で強調しておきたいのが、構造化設計は最後まで残るし、すべての基本になっている、ということです。またRTOSを使った設計で解決すべきところを、オブジェクト指向で解決するのも無理です。それぞれその解決方法を正しく使うことがとても大切です。UMLで描けないところもとても大切です。

逆にいうと、オブジェクト指向やモデル駆動開発をいれればすべてうまくいく、というのは間違っているということです。構造化設計やRTOSを使った設計の全面置き換えにはなりません。ごく一部分を置き換えるだけです。

きちんと構造化設計とRTOSを使った設計ができるなら、ほんの少し、オブジェクト指向とモデル駆動開発で加速するだけで大きな効果が出るといえます。

プロダクトライン開発では、共通部と可変部を分けて作る切り口が大切になります。続く。
プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示