チュートリアル3B:組込み領域におけるオブジェクト指向設計技術 会場規模: 約150人 参加人数: 約30〜40人 開催時間: 09:00〜10:45 講師: 岸氏(NEC) 講師紹介:  組込み向けオブジェクト指向言語のWGに携わっておられる方。 概要:  組込み分野へオブジェクト指向設計技術の投入についての話。 チュートリアル内容およびQ&A: ●組込みソフトウェアを取り巻く環境の変化  ソフトウェアの開発規模が大きくなってるにも関わらず、開発期間が短くなって きている。限られたリソースのなかで、どのようにして生産性を確保するのか?  オープン化・マルチベンダー化してきている。技術方向を見越して、何を採用す るかを考える必要がある。自分の尺度での「良い」ものを作っても駄目である。  大規模なものを大量に短時間で作っていくには方法論が必要になる。  規模が大きくなっている意味を考えて、方法論を適用することを考える。  →一人で時間などの資源を無制限に使っても良いというのと、資源に制約がある   場合の問題の違いを考える必要がある。  規模が大きくなると、開発の質が変わる。開発はの質(難しさ?)は局所的に見る と比例している部分もあるが、変曲点がかならずあって急激に難しくなる。 ●規模による開発技術の違い 二つ問題がある。 ・管理の問題   一人で作るのと百人で作るのでは方法が全く違う。これを考慮しないと管理面   で破綻する。 ・実装(下流)から分析・設計(上流)への転換   プログラミングから分析・設計へ注力するフェーズを変える。  数千から数万ステップならば、一人の技術者で対応可能であり、最適化も容易で あり、美しく作ることが出来る。しかし、10万以上となれば一人での対応は最早 不可能である。 例えば、  実行時間の9割以上をあるモジュールが消費していた場合。   かつては、プログラミング(ミクロ)の技術を投入していた。   これからは、どこが性能のネックになってるかを戦略的に見分ける必要がある。    即ち対象をどれだけ「分析・設計」するかに、すべてがかかっている。 ※この「あたりまえ」の発想転換が現状ではできてない。 ↑の証拠  ・要求仕様はホワイトボードでかかれたコピーのようないい加減なものが多い。  ・下流のドキュメントはもっと酷い。(無い場合もある)  設計の「目的は何」なのか?オブジェクト指向を「どう」活かそうとしている のか?を認識するのが重要である。 ●ここでのよい設計とは? ・再利用性・拡張性  あなたにとってどういうことができたら良いと言えるのか。(漠然では破綻する)  拡張・再利用を具体的にイメージできることが必要である。具体的に出来なけれ ば無意味。  オブジェクト指向を正しく適用できれば拡張性があることは実証多くの事例で 実証されている。  しかし、メカニズムは正しく適用しない無意味。  (たとえばインヘリタンス。概念(本質的な意味?)がちがうものにインヘリタン  スをつかってはいけない。意味的なつながりにおいてインヘリタンスを使うべき)  方法論などを使うのは問題の特性を正しく理解するためである。UMLとかの方法論 を適用しても、問題の分析が充分でないのに具体的な設計に取りかかる技術者が多い。  また、設計意図が(他者)伝わらない修正、拡張、再利用できない。  オブジェクト指向は構造化プログラミングよりも問題の特性を正確に把握し易い。 ●オブジェクト指向開発フロー  要求 システムの理解(ユースケース)   ↓  分析 対象世界のモデル化(分析モデル)   ↓  設計 受け止める構造の決定(設計モデル)   ↓  実装 実際の構造への反映(コード) Q.上流へのフィードバックはないのか? A.下流で判明した制約の上流へのフィードバックは有っても良い。 ●組込みシステムへオブジェクト指向技術の適用  パソコンではソフトウェア部品、基幹技術(例:CORBA)にオブジェクト指向技術が 適用されているので、(仕方無く)オブジェクト指向を適用している。しかし、分析 ・設計段階からオブジェクト指向(思考)を適用しているかどうかは疑問。  組み込みの世界ではオブジェクト指向は広まっていない。  (しかし、数年までなら少数であったが、最近は珍しく無くなっている)  組み込みで使用するのがなぜ少ないか?   →リアルタイム性、サイズ、信頼性とかの問題(があると信じ込まれている)。  組込みにオブジェクト指向を適用するワーキンググループを立ち上げ、実際に オブジェクト指向を組込みシステムに適用している人(どうすれば正しく適用でき るかといった問題意識を持っている人)をメンバーに選んだ。そこでの討論の結果、 リアルタイム性、サイズ、信頼性とかの問題はオブジェクト指向を適用することと は全く関係ない独立した問題であるとの結論が出た。  例えば、オブジェクト指向で分析・設計して、実装はassemblerなども可能。 C++とか、OSすらない環境でもオブジェクト指向は適用可能である。しかし、あま りギャップが大きいと適用しにくい。  ・組込みシステムの特性としてリアクティブ性、実時間性などの制約に対して。   →リアルタイム性の設計を陽には支援しないがアプローチはある  ・コードサイズの問題は?   →変わる部分とそうでない部分の分離する。マクロな議論なのかミクロなのか    を明確にする。  一つの問題を複数の人で、オブジェクト指向設計を行う実験を行った。  →(なんと)ひとりひとり全く違う設計となった。   これはどこに視点をむけて設計したかよる。   どこにメリハリのある設計をするか?   →ひとによって違う,これに確実な正解はない  指針としては、大局的な視点で設計すべきで、視点を定めないと発散する。  オブジェクト指向設計は万能ではない。 ●結論  組み込みでオブジェクト指向を使えるか?に対しては  →組み込みだからといって、使えないと言うことはない。   なぜならリアルタイム性、サイズ、信頼性の問題は独立した問題であるから。 以下質疑応答: Q. オブジェクト指向言語でのテストをするときの問題について。クラスの独立し  たテストは簡単であるが、様々に組合わせたときのテストはどのようになるのか? A. 本質的に難しい問題。オブジェクト指向がどうこうという問題ではない。 Q. オブジェクト指向で設計・実装したときにテストがしやすくなるか? A. カプセル化がすすむのでインタフェースが確実に定義されるので、テスト容易に  にするのに役に立つのでは? Q キャッシュプロキシでは有用? A.うまく使える部分がある。実装レベルのメリットは無い Q. クラス間のテストはどのように行うのか? A. 自由度は制限しないと難しい。信頼度が必要なら制限。オブジェクト指向に限る  問題ではない。 Q. 組み込みのオブジェクト指向。リアルタイム性、メモリサイズはオブジェクト指向  とは別であるとされたが、包括的に捕らえられないのか? A.各段階でシュリアーミラーの体系付けを行う。組み込みでは使えないわけではない。 3B以上