ObjectSquare [2002 年 7 月号]

[技術書籍紹介]




組み込みUML

組み込みUML


eUMLによるオブジェクト指向組み込みシステム開発

渡辺博之 / 渡辺政彦 / 堀松和人 / 渡守武和記 著
株式会社翔泳社 2,940円(税抜き 2,800円)
B5変型判 296ページ 付属品:CD-ROM 1枚
ISBN4-7981-0214-8
執筆メンバーより 執筆メンバーより
『推薦のことば』 『推薦のことば』
『はじめに』 『はじめに』
『目次』 『目次』

REFERENCE


執筆メンバーより

そもそもの発端は、「組み込みの現場で使えるオブジェクト指向の教科書がない!」ということでした。 やがて、いろんな人たちと「組み込みに特化したオブジェクト指向のガイドラインをまとめようよ!」という話をするようになり、紆余曲折を経て、この度やっと「本」という形に纏め上げることが出来ました。

この300ページの中には、いままでの教科書にはなかったような「現場で使える」具体的なTIPSを盛り込んだつもりです。なにぶん、キャラクターの違う4人で書いたので、文体・表現が微妙に異なっていますが、まぁそこはご愛嬌ということで(笑)。この本が、手垢にまみれて、開発現場の机の上に広げられていたりでもしたら、それはもう、至上の喜びなのですが...。

オージス総研
渡辺 博之


『推薦のことば』

組み込みUML − eUML によるオブジェクト指向組み込みシステム開発

各種の機械や機器に組み込まれて、その制御を行うコンピュータシステムのことを、組み込みシステムと呼びます。近年の半導体技術やマイクロプロセッサ技術の発展により、組み込みシステムの高機能化・大規模化・複雑化が著しく、ソフトウェア開発工数の増大や品質の低下が大きな問題となっています。この問題を解決ないしは軽減するために、汎用システム(特に業務システム)の分野を中心に研究されてきたソフトウェア工学の成果を、組み込みシステム分野に適用することが緊急の課題となっています。 ソフトウェア工学の代表的な成果に、オブジェクト指向の開発プロセス・方法論と、ソフトウェアのモデル記述のための標準言語としてその中から出てきたUML があります。ところが、それらを組み込みシステム分野に適用するには、様々な考慮や工夫が必要になり、適 用が進んでいないのが現状です。

本書は、UML を適用した組み込みシステム開発に豊富な経験を持つ4 名の著者が、その開発経験から得たベストプラクティスを、eUML (組み込みUML )という開発プロセスの形にまとめたものです。1 つの例題を通してeUML の全プロセスを解説しており、初心者には理解しやすい教科書として、熟練者には実践的な参考書として、自信を持ってお勧めできる1冊です。 UML は元来ソフトウェアのモデル記述を行うためのもので、直接プログラムを記述するものではありませんが、状態遷移図(ステートチャート)をサポートしているために、状態遷移で記述できるソフトウェアに関しては、UML からプログラムコードに変換することができます。各状態からの状態遷移が多い場合に向いた記述方法として状態遷移表があり、例外処理を確実に行わなければならない組み込みシステムに適しています。eUML では、このような組み込みシステムのモデル化、プログラムコード化するためのガイドラインが提供されています。

組み込みシステムは、日本が国際競争力を持つ産業分野を足元で支える極めて重要な技術であり、日本の産業力を強化するためには、組み込みソフトウェア技術を発展させることが極めて重要です。組み込みシステム用のリアルタイムOS のデファクトスタンダードであるITRON 仕様が日本発の技術であるように、弱いと言われている日本のソフトウェア技術を発展させる突破口でもあります。その意味で、eUML という新しい提案が日本から出てきたことは大変喜ばしいことです。 現状の組み込みシステム開発は、ソフトウェアの急速な大規模化・複雑化に対応できていないのが実状です。それに対応するための技術要素の研究・開発が重要なのはいうまでもありませんが、たとえ有用な技術であっても、充分なスキルをもった技術者が不足しているためにそれを活用できない場面も多く見られます。本書により、次世代を担う有能な組み込みシステム技術者が、数多く生まれることを期待しています。また、eUML の今後の発展のために、著者らのより一層の尽力に期待したいと思います。

豊橋技術科学大学
情報工学系
助教授 高田広章

ページのトップへ戻る

『はじめに』

目標

ここ数年の間で、組み込みシステムはどんどん進化を続けています。携帯電話やカーナビ、自動車など、その例は枚挙にいとまがありません。いままでは単にハードを動かすだけでよかった組み込みソフトですが、現在では、データを処理し、音声や画像を再生し、ネットワーク経由でコミュニケーションを図り、そしてユーザー向けに凝ったGUI を提供することが求められるようになってきました。いわゆる、ソフトウェアの大規模化・多様化です。さらに困ったことに、その開発期間はこれと相反するようにどんどん短くなる傾向が進んでいます。現在の組み込みシステム開発はまさにこの大きなジレンマを抱え、その解決策に奔走している状況の真っ只中にあるといってよいでしょう。

そもそも、ハードの付属品からスタートした組み込みソフトですが、製品の進化に伴い、次第にその複雑度を増してきました。今までは、追加・追加で何とか進めてこられたのですが、もうそろそろ限界に近づきつつあるようです。前述したような大規模化・多様化を前にして、今までの開発手法への見直しが必要となっています。従来のようなソースコードを中心としたボトムアップ的な開発では、たとえ、何とか動くものができたとしても、その手直しや修正には莫大なコストがかかってしまいます。これでは、とても現在求められている大規模・複雑化したシステムに対応することはできません。

このような状況のなか、すでにビジネス分野で普及が進んでいるUML を使ったオブジェクト指向開発への期待が高まっています。オブジェクト指向による強靭でわかりやすいアーキテクチャとUML で記述されたモデル中心の開発は、まさに大規模・複雑化するシステム開発への大きな解になるでしょう。実際、組み込み分野への適用も、ここ数年で徐々に広がりを見せつつあります。 しかし、実際に開発に適用した場合、その習得と実践は容易ではないのが実情です。オブジェクト指向は、そのほとんどがデータ処理を中心とするビジネス系のアプリケーションを対象にしており、制御を主体とした組み込みシステムにはそのままフィットさせることが困難です。また、これらを解説した書籍はほとんどなく、多くの実践経験から習得するしかないのが現状でした。さらに、UML 自体も非常に多くの記法が定められており、どのように使いこなすかも熟練を要します。

本書は、多少なりとも組み込み分野で開発経験を持つ著者たちが、これらの問題に対し、自分たちの経験から得られたベストプラクティス(実践原則)を開発のガイドラインという形でまとめた「eUML 」について説明したものです。この「eUML 」に沿って開発を進めていくことで、オブジェクト指向やUML に対する習得コストをできるだけ少なくし、同時に組み込みシステムにフィットしたモデルを構築できることを目標にしています。作成は、情報処理学会の活動などを通して知り合った有志を中心とした4 名で行いました。

対象読者

本書は、オブジェクト指向やUML を開発の現場に適用しようと検討されている方、適用は決まったがどう進めていけばよいか思案されている方、現在適用中だがいろいろと疑問を感じ試行錯誤している方、などに読んでいただくことを想定しています。一方、UML やオブジェクト指向の基本的な話には触れません。もし、それらについて知りたい方は最適な書籍がいくつも存在していますので、ぜひそちらを参考にしてください。

構成

第1 章では、まず、組み込みシステム開発の現状を考察し、今までの開発スタイルの何が問題なのかを明らかにしていきます。それを踏まえたうえで、UML を使ったオブジェクト指向開発で何が改善されるのかを考えていきます。

第2 章以降が、本書の主題となります。第2 章から第4 章までは、eUML の概要を、第5 章以降ではeUML の具体的なガイドラインを詳細に扱っています。

第2 章では、本書で提案する組み込みシステム向けの開発ガイドラインであるeUML についての概要を紹介します。

第3 章では、eUML で提案している組み込み向け開発プロセスのオーバービューを説明し、それぞれの作業に対する簡単な紹介を行います。

第4 章では、これらの組み込みシステムに対するプロジェクト管理のあり方について提案しています。

第5 章以降は、eUML の開発プロセスで定義されている各作業を詳細に説明していきます。第5 章では、要求分析について説明します。特に組み込み分野で扱いが難しいユースケースに関する問題や、ユースケースだけでは表現できない要求に対する記述方法について考えていきます。

第6 章では、分析について記述します。ここでは、オブジェクト指向の勘所とも言えるクラス抽出に関するポイント、大規模なシステムを構築するためのモデル分割の方法、また、組み込みシステムの複雑な制御仕様に対するモデリング方法などについて示していきます。

第7 章は、アーキテクチャ設計を扱います。ここでは主として保守性や再利用性を意識したモジュール化の進め方と、リアルタイム処理を実現するために不可欠なタスクの設計とそれに対するオブジェクトの割り当てを扱います。

第8 章では、アーキテクチャメカニズム設計を紹介します。アーキテクチャメカニズムとは、モデルを実装するために必要な実装方法を意味し、OS や言語など実装環境に合わせて用意されるものです。ここでは、いくつかの典型的なアーキテクチャメカニズムを説明しながら、その具体的な内容を示していきます。

第9 章は、設計・実装を扱います。ここでは、分析モデルとの比較をしながら、設計で最適化する項目とポイントについて紹介するとともに、それをもとに作成される最終的な実装コードを示します。また、8 章で示したアーキテクチャメカニズムをどのように反映させるのかについても具体的に示します。

第10 章は、デバッグについて記述します。特にハードウェアに依存しない開発を進めるために必要なシミュレータベースのデバッグ方法について紹介します。

第11 章は、テストについて記述します。組み込みシステムの大規模な機能をどのようにテストしていけばよいかを提案しています。

各章を通じ、説明を補足するために、本書のために作成したキャンディソーターという組み込み装置の開発を例題として取り上げました。各章の説明には、随時この例題のモデルを示しながら、より具体的な理解を得られるようにしています。そして、この例題を実装したソースコードを、付録CD- ROM に収録しています。
なお、各章を通じ、説明で特に協調したい部分については、コラムとして別途詳細な記述を行うような形態を取っています。

ページのトップへ戻る

『目次』

推薦のことば
はじめに
      目標
      対象読者
      構成
謝辞
      
第1章:組み込みシステム開発の現状とオブジェクト指向開発
      1.1組み込みシステム開発の現状
      1.1.1  メインフレームと基幹業務システム
      1.1.2  パソコン時代
      1.1.3  マイコン時代
      1.1.4  ユビキタスコンピューティング
      1.1.5  組み込みソフトウェアの量的な変化
      1.1.6  組み込みソフトウェアの質的な変化
      1.2今までの開発スタイルの何が問題なのか
      1.2.1  コード偏重開発
      1.2.2  保守や拡張を考慮しない開発スタイル
      1.2.3  制御とタスク中心の開発スタイル
      1.2.4  経験と勘を偏重する開発
      1.2.5  開発偏重
      1.2.6  ツール軽視偏重開発
      1.3UML を使ったオブジェクト指向開発で何が改善されるのか
      1.3.1  要求仕様の曖昧さ
      1.3.2  部品化再利用
      1.3.3  モデリング範囲
      1.4参考文献
第2章:eUML
      2.1eUML の動機
      2.1.1  問題点
      2.1.2  ベストプラクティスとガイドライン
      2.2eUML の骨子
      2.2.1  開発プロセス
      2.2.2  開発のガイドラインと基本アーキテクチャ
      2.2.3  例題を使ったモデルとソースコードの提示
      2.3今後のスケジュール
第3章:開発プロセス
      3.1開発プロセスの概要
      3.1.1  開発要求分析
      3.1.2  分析
      3.1.3  アーキテクチャ設計
      3.1.4  設計
      3.1.5  実装
      3.1.6  アーキテクチャメカニズム設計
      3.1.7  テスト
      3.2具体的な各作業のフロー
      3.2.1  要求分析から分析までのワークフロー(時系列)
      3.2.2  アーキテクチャ設計から実装までのワークフロー(時系列)
      3.3eUML と繰り返し開発
      3.3.1  開発プロセス
      3.4参考文献
第4章:プロジェクトマネジメントとeUML
      4.1ISO10006
      4.2コミュニケーションに関連するプロセス
      4.3範囲・時間・コスト・経営資源・リスクに関連するプロセス
      4.4戦略決定・相互依存・購買に関連するプロセス
      4.5参考文献
第5章:要求分析
      5.1キャンディソーター
      5.2ユースケース分析
      5.2.1  アクターを定義する
      5.2.2  ユースケースを定義する
      5.2.3  ユースケースを記述する
      5.2.4  ユースケースと状態の関係を考える
      5.3アーキテクチャ要求分析
      5.4参考文献
第6章:分析
      6.1ドメイン定義
      コラム ドメインのカテゴリ
      6.2サブシステム分割
      コラム なぜドメインやサブシステムが必要なのか
      6.3エンティティ分析
      コラム エンティティ分析のクラスカテゴリ
      6.4オブジェクト構造分析
      6.4.1  下位ドメインのクラス定義
      6.4.2  下位ドメインのクラス定義
      コラム オブジェクト構造分析のクラスカテゴリ
      6.5システムビヘイビア分析
      6.6オブジェクトコラボレーション分析
      コラム コラボレーション図は詳細すぎない
      6.7オブジェクトビヘイビア分析
      コラム 1 つのクラスには1 種類の責務
      6.8エラー処理の分析
      6.9参考文献
第7章:アーキテクチャ設計
      7.1ノードマッピング
      7.2モジュール設計
      7.2.1  ドメインのインターフェイスの見直し
      7.2.2  サブシステム構成の見直しとパッケージ分割
      7.3タスクマッピング
      7.3.1  UML でのタスクの扱い
      7.3.2  タスク候補とアクティブオブジェクトの検討
      7.3.3  タスク候補のプロパティを決める
      7.3.4  タスクをマージする
      コラム 組み込みシステムの典型的な制御方法とタスクの割り当て方法
      7.3.5  アクティブオブジェクト間の同期や通信
      7.3.6  パッシブオブジェクトの排他制御
      7.4参考文献
第8章:アーキテクチャメカニズム設計
      8.1アーキテクチャメカニズムが提供するもの
      8.2アーキテクチャメカニズムの種類
      8.3アーキテクチャメカニズムについて
      8.3.1  インスタンス管理
      8.3.2  インスタンス生成の管理
      8.3.3  関連の管理
      8.3.4  有限状態機械実行エンジン
      8.3.5  イベントの送受信
      8.3.6  アクティブオブジェクト
      8.3.7  プロキシ
      8.3.8  タスククラス
      8.3.9  オブザーバ
      8.3.10  ユーティリティ
      8.4C 言語のためのアーキテクチャメカニズム
      8.4.1  静的な構造の設計
      8.4.2  静的な呼び出しの設計
      8.4.3  コンストラクタ、デストラクタの設計
      8.4.4  動的な呼び出し(ポリモルフィズム)の設計
      8.4.5  その他
第9章:設計・実装
      9.1プログラミングを前提としたモデル仕様を定義する
      9.1.1  クラス構成や関連を最適化する
      コラム 実装サイズに関する考察
      コラム オブジェクトをROM とRAM に配置する
      9.2アーキテクチャメカニズム設計をモデルに組み込む
      9.2.1  データ管理
      コラム オブジェクトの生成に関する考察
      9.2.2  OS の隠蔽
      9.2.3  並行性の実現
      9.2.4  クラスの実行状態管理
      9.2.5  タイマー
      9.3ビヘイビアモデリング
      9.3.1  オブジェクトコラボレーション設計
      9.4設計モデル
      9.5参考文献
第10章:デバッグ
      10.1概要
      10.2ソフトウェアシミュレータ
      10.3ソフトとハードの境目
      10.4ソフトウェアシミュレータの作成条件
      10.5ソフトウェアシミュレータの作成方法
      10.6シミュレータと組み込みソフトの結合方法
      10.7CandySorter のシミュレータ
第11章:テスト
      11.1組み込みソフトウェアのクオリティクライシス
      11.2クオリティを向上させるには
      11.32001 年はテストドリブン開発スタイル元年
      11.4eUML におけるテストとは
      11.4.1  テストスペクトラム
      11.4.2  実行可能モデル
      11.4.3  テスト用語定義
      11.4.4  eUML テスト用語定義
      11.5実行可能モデルの実現方法
      11.5.1  アニメーション
      11.5.2  シミュレーション
      11.5.3  エミュレーション
      11.6eUML テストフロー
      11.6.1  利用モデル分析
      11.6.2  テストケース設計
      11.6.3  テストケースカバレッジ
      11.7状態遷移表によるテストケース
      11.7.1  モデラの状態図からテスターの状態遷移表への変換
      11.7.2  アクター特性の付加
      11.7.3  テストケースカバレッジ
      コラム 状態遷移表記法解説
      11.8参考文献
付録A:CandySorterSimulator 使用説明書
      A.1はじめに
      A.2ファイル構成
      A.3ファイルの格納場所
      A.4リンク方法
      A.5実行方法
      A.6終了方法
      A.7操作方法
      A.8オプション設定
付録CD- ROM のご案内
索引
著者紹介
ページのトップへ戻る

© 2002 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP