26. 組み込みアプリケーション開発に関する知識 II

シラバス: 

1. 科目の概要

組み込みシステムで動作するアプリケーション開発について、デバイスドライバの基本、ファイル入出力といった入出力資源管理に加え、J2MEを利用した組み込みJavaによるアプリケーション開発やその他の組み込みアプリケーション実装例を解説する。

2. 習得ポイント

本科目の学習により習得することが期待されるポイントは以下の通り。

3. IT知識体系との対応関係

「26. 組み込みアプリケーション開発に関する知識Ⅱ」とIT知識体系との対応関係は以下の通り。

[シラバス:http://www.ipa.go.jp/software/open/ossc/download/Model_Curriculum_05_02.pdf]

<IT知識体系上の関連部分>

4. OSSモデルカリキュラム固有の知識

OSS モデルカリキュラム固有の知識はJava MEやJava VMのOSSである。また、組み込みLinux上でのJava MEアプリケーションの開発を通して組み込みアプリケーション開発の実践的な知識を習得する。

(網掛け部分はIT知識体系で学習できる知識を示し、それ以外はOSSモデルカリキュラム固有の知識を示している)

II-26-1. デバイスドライバの基本機能

組み込みアプリケーションにおける入出力設計の基礎を成すデバイスドライバの基本機能について解説する。デバイスドライバの基本的な構成と動作の概要を示し、プログラムとのインタフェースや割り込みの取り扱いなどを説明する。

【学習の要点】

* デバイスドライバはデバイスの複雑な動作を隠蔽するブラックボックスとして機能し、組み込みアプリケーションの入出力設計と密接に関連する。

* 一般的なUnix系OSにおけるデバイスドライバのAPIはread、write、ioctlなどに統一されている。

* デバイスは入出力のデータの扱いに応じてキャラクタデバイスとブロックデバイスに分類される。

図II-26-1. デバイスドライバの位置づけ

【解説】

1) デバイスドライバの機能と設計

* デバイスドライバは入出力を実行する機能をタスクから独立する形で実装したソフトウェアである。

* デバイスドライバはデバイスの複雑な動作を隠蔽し、アプリケーションから統一的なアクセスができるインタフェースを提供する。

2) デバイスドライバの動作モデル

デバイスドライバの主要な動作は以下に示す通りである。

* デバイスを初期化する。

* OSからのコマンドを解釈する。

* 複数の要求をスケジューリングする。

* データ転送を管理する。

* プロセスの割り込みを受け付ける。

* ドライバとカーネルのデータ構造の統合性を管理する。

3) アプリケーションプログラミングインタフェース(API)

* 近年のオペレーティングシステムでは、open, read, write, ioctl, closeなどのPOSIX(Portable Operating System Interface for UNIX)で定義されているAPIに統一化されていることが多い。

- Linuxの場合、デバイスドライバは/dev以下のファイルシステムに組み込まれているため、アプリケーションはファイルに対してopenなどの命令を発行することでデバイスドライバへの入出力準備を行うことになる。

- openシステムコールの後、デバイスファイルへのreadシステムコールを発行することによりデータを読み込むことができる。

4) Unix系OSにおけるデバイスドライバの分類

入出力の際にデータをどのような形式で扱うかによって、キャラクタデバイス、ブロックデバイスに分類される。

* キャラクタデバイス

- データを1バイトずつシーケンシャルにアクセスする。

- 端末、モデムなどが該当する。 (/dev/console, /dev/ttyS0など)

* ブロックデバイス

- データを固定長でランダムにアクセスする。ファイルシステムを構築できる。

- ブロックデバイス用のドライバは高速化処理などを含めるため、より複雑になる。

- ハードディスク、CD-ROMドライブなどが該当する。

* 他に、eth0, lo0, wlan0などで表現されるネットワークデバイスがある。

II-26-2. ファイル入出力プログラムの構成

ファイルシステムの概要と、リエントラント性やデバイス独立性などファイルシステムに求められる要件を説明する。さらに実際のファイルアクセスに関する動作の詳細を示し、組み込みアプリケーションからファイルを利用する操作手順の概要について述べる。

【学習の要点】

* 組み込みシステムのファイルシステムには、リエントラント性、デバイス独立性といった要件がある。

* 組み込みアプリケーションからファイルシステム、デバイスドライバを通して外部機器を利用する手順を学習する。

* 組み込みで使われるファイルシステムではJFFS (Journaling Flash File System)などフラッシュデバイス用のファイルシステムの採用が進んでいる。

図II-26-2. ファイルシステムの位置づけ

【解説】

1) ファイルシステムの機能

ファイルシステムはディスク入出力のデータをユーザにとって使いやすい「ファイル」という形式に変更する仕組みを提供する。

* 組み込みシステムのファイルシステムにはリエントラント性、デバイス独立性といった要件がある。

- リエントラント性は、複数のタスクから同期・非同期にアクセスされても正しいデータを返す性質を指す。

- デバイス独立性は、ハードウェアに依存したコードを書かずに済むようにすることであり、ファイルシステムがデバイスドライバを包含する構成を取ることにより実現される。

* カーネルの提供するインタフェースにより、統一的なアクセスが得られる。

- VFS (Virtual File System)という仮想ファイルシステムにより(II-6-5.)、各種ファイルシステムのアクセス方法の差異を吸収する仕組みがLinuxでは採用されている。

- アプリケーションがopen, read, writeなどのシステムコールを発行すると、カーネル内のシステムコールを経て、VFSにより各ファイルシステム固有の処理が実行される。

2) ファイルシステムタスク

* iノードによるファイルとディスクの関連づけ

- VFSでは、iノード(index node)がディスクのインデックスを持ち、ファイルとディスクの情報を関連づける。

* ブロック単位のディスク管理

- Unixでは伝統的にディスクをブロックという固定長の単位(4kbytesなど)で管理する方法をとっていた。Ext2fs(ext2)はその代表例である。

- ext2ファイルシステムでは、作成時に平均的なファイルサイズの予測を行ってブロックのサイズを決定する(1024, 2048, 4096bytesのいずれか)。作成されたブロックをブロックグループとして管理する。

3) 組み込みシステムファイルシステムの具体例

* JFFS (Journaling Flash File System)

- Linuxで初期から使われていたNOR型フラッシュメモリ用のジャーナリングファイルシステムである。近年は、デバイスの寿命を延ばすための改良版であるJFFS2やNAND型フラッシュデバイスに対応したYAFFS (Yet Another Flash File System), およびその拡張であるYAFFS2などが利用される。

* cfamfs

- 読み込み専用の圧縮ファイルシステムである。小さなROMなどに焼き付ける用途の設計であり、ファイルサイズは16MB未満、ファイルシステムは256MB以下に制限される。

* その他

- XFS, Reiserfsなども組み込みシステムで利用される。

II-26-3. J2MEを利用したJavaによる組み込み開発

組み込み向けのJava開発環境であるJava ME (Java Platform, Micro Edition)の歴史、概要と構成について解説する。またJava MEを用いた組み込みアプリケーション開発の事例を紹介し、その効果を示す。

【学習の要点】

* 組み込みJavaの開発環境であるJava ME (Java Platform, Micro Edition)はJavaの適用対象を小型デバイス、モバイル機器に絞った仕様であり、2000年に発表された(当時の名称はJ2ME)。

* Java MEを用いた組み込みアプリケーション開発の事例は増加しており、携帯電話、TV、自動車の機器などに用いられている。

図II-26-3. Java MEの年譜。プラットフォームの動向を丸囲みにより示す。

【解説】

1) Java ME (Java Platform, Micro Edition)の概要

* Java ME (Java Platform, Micro Edition)は一般消費者向け商品や組み込み機器などの要求に適したプラットフォームを作る技術と仕様からなる。

* Java MEの歴史

- 組み込みJavaの開発環境であるJ2ME (Java2 Platform, Micro Edition)はJavaの適用対象を小型デバイス、モバイル機器に絞った仕様であり、2000年に発表された。

- この時、JavaはJ2MEを含めてJ2SE (Java2 Standard Edition), J2EE (Java2 Enterprise Edition)の3つに分割された。J2SEは通常のPC環境用、J2EEはサーバサイド用とされた。

- PDAなどの携帯端末で使われたPersonal Javaや組み込み機器用のEmbedded JavaはJ2MEに組み込まれた。

- JavaOne 2005でJava MEと改称された後も、JSR (Java Specification Requests)という形で様々な拡張の提案がなされている。

* Java MEの構成

- Java MEは、Java SEから必要な機能を選択して追加している。

- Java MEにより携帯電話、ICカード、組み込み機器などを統一的に扱うためには、機器間のスペックの差を吸収する仕組みが必要であったため、コンフィギュレーションとプロファイルという仕組みが用意された。

- コンフィギュレーションはCPU、メモリ、ストレージなどの差異により分類されたVMとクラスライブラリ群である。

- プロファイルは特定のデバイス向けのクラスライブラリのAPI群である。

2) Java MEを用いた組み込みアプリケーション開発の事例

* 携帯電話

- Sun Java Wireless Toolkit for CLDC(Sun Microsystems)などのアプリケーション開発支援環境が提供されている。(CLDCはII-26-4参照)

- 国内で流通する大多数の携帯電話がサポートしているが、プロファイルは各社で異なる。

* ICカード

- JavaCard (Sun Microsystems)というJava VMの載った接触型ICカードのプラットフォームが提供されている。

- Javaのライブラリ群の中から、JavaCard用途のAPIを選択して提供されている。

* 自動車車載システム

- リアルタイム要求の比較的厳しくない、ダッシュボード表示やクルーズコントロールなどにJava MEが特に利用される。

II-26-4. J2MEの様々なコンフィギュレーション

Connected Limited Device Configuration (CLDC)、Connected Device Configration (CDC)といったJava MEのコンフィギュレーションや、Mobile Information Device Profile (MIDP)やFoundation Profile (FP)などのJava MEプロファイルについて説明する。

【学習の要点】

* Java MEのコンフィギュレーション(VMと最小のライブラリ群)とプロファイル(特定のデバイス用のライブラリ群)は組み合わせて使われる。

* Java MEのコンフィギュレーションとして、CLDC(Connected Limited Device Configuration)、CDC (Connected Device Configuration)があり、ハードウェアスペックに見合った基本機能を提供する。

* Java MEプロファイルにはMIDP (Mobile Information Device Profile)やFP (Foundation Profile)などがあり、デバイス固有のAPIなどを提供する。

図II-26-4. Java MEの構成

【解説】

1) Java MEのコンフィギュレーション

* CLDC(Connected Limited Device Configuration)

- Java言語仕様、VM、Javaのコアライブラリ、入出力、ネットワーク、セキュリティ、国際化に関するライブラリを備える。

- 携帯電話など、CPUとメモリ容量、およびネットワーク接続が限定的な端末を対象としている。16ビットか32ビットのCPUを持ち、Java VMとCLDCライブラリ用に128KB以上の不揮発性メモリを持つ環境を想定している。またJavaランタイムと各種オブジェクトのために32KB以上の揮発性メモリを持つことも想定している。

- 後述のMIDletの仕様に従うことで、Javaアプリケーションの動的配信ができる。

* CDC(Connected Device Configuration)

- CLDCよりもリソースの豊富な機器向けのコンフィギュレーションである。提供する機能は、CLDCによって定義されているものを全て含む。ファイルI/O、ネットワーク、セキュリティ、オブジェクトのシリアライゼーションなども含む。

- VMやプログラミングインタフェースなど、Java SE仕様に近い実装が要求される。

- アプリケーションモデルは、スタンドアローン型、Xlet、アプレットがある。

2) Java MEのプロファイル

* MIDP (Mobile Information Device Profile)

- CLDC上のプロファイル仕様である。携帯電話などのデバイスにおいてアプリケーション開発に必要なアーキテクチャとAPI群を追加する。

- 環境条件として、最低限のハードウェアスペックが規定されている。これにはディスプレイ、入力デバイス、メモリ容量、ネットワークが含まれる。

- MIDPには通信機構が与えられ、外部のHTTPサーバとの通信ができるほか、ユーザインタフェース、永続データ領域などに関してAPIが提供されている。

* FP (Foundation Profile)

- CDC上のプロファイル仕様であり、アプリケーション開発に必要なアーキテクチャとAPI群を追加する。ユーザインタフェースは上位プロファイルであるPBP(Personal Basis Profile)やPP(Personal Profile, PBPのスーパーセット)を利用する必要がある。

- サポートするプロトコルは、CDCでサポートする全てのプロトコルに加え、ソケット通信、HTTP通信などがある。

3) MIDlet, Xlet

* MIDletはCLDCコンフィギュレーション上のMIDPプロファイル上で動作するアプリケーションモデルである。XletはPBPおよびPPのプロファイル上で動作するアプリケーションモデルである。Xlet間通信IXC(Inter Xlet Communication)が定義されている。

* アプリケーションの多くはゲームであり、実時間性の要求が高まっている。ガーベッジコレクションの停止時間による影響を排除する必要がある。

II-26-5. 組み込みJavaの様々な実行環境

組み込みJavaアプリケーションを動作させるVirtual Machine (VM)の様々な実装について説明する。その例として、KVM、Wabaといった現在組み込み環境で利用できるVMのいくつかを紹介する。

【学習の要点】

* 組み込みJavaアプリケーションを動作させる仮想マシン(Virtual Machine: VM)にはコンフィギュレーション毎に何通りかの実装がある。

* 携帯電話向けのJava VMにはKVMの他、オープンソースのWaba、Kaffeなどが利用される。

* MSA (Mobile Service Architecture)はJava MEのAPIの集合であり、携帯電話によって実装するAPIのばらつきを抑える目的がある。

図II-26-5. JSR248, MSA (Mobile Service Architecture)の構成

【解説】

1) 組み込みJava の実行環境

* 代表的な組み込みJava VMとしてKVMが挙げられる。また、オープンソースJava VMの代表例としてWaba、Kaffeが挙げられる。

* 選択のポイントとしては、性能とサイズ(フットプリント)である。

* リアルタイム要求の高まりから、JIT (Just-In-Time)コンパイラの利用が主流になっている。

2) KVM

* KVMはCLDCのコンフィギュレーションで定義されるJava VMの一つであり、Sun Microsystemsにより提供される。KVMは数十“K”(キロバイト)単位のメモリで実行可能なJava VMという意味からKVMと呼ばれている。VM実行時のメモリ消費を抑え、ポータビリティとカスタマイズ性を持たせ、一定のパフォーマンスを得るように設計されている。

3) オープンソースVM

* Waba VMはWabasoftにより提供される携帯電話などの小型デバイス用途のJava VMである。携帯性、機能性、信頼性、移植性の向上を念頭に設計されている。

* Kaffeもまた組み込み用途に利用できるオープンソースJava VMであり、様々なプラットフォームに対してJITコンパイラを提供している。

4) MSA (Mobile Service Architecture)

MSAは次世代携帯電話プロファイルといえるJCP (Java Community Process)が定義したJava MEのAPIの集合であり、携帯電話によって実装するAPIのばらつきを抑える目的がある。

* MSAは携帯電話間の互換性を重視しているため、広範なプロファイルとなっている。

* JSR (Java Specification Requests)がコンポーネントとして含まれている。MSA自体もJSR 248, 249として策定されている。

* MSA 2は、MSA 2.0、MSA 2.0 Subset、MSA 2.0 Limitedの3段階に規模に応じて分かれている。

- MSA2.0 Limited: JTWI 1.0との後方互換を持ち、CLDC/CDC、MIDP、Mobile Media APIなどのJSRから構成される。

- MSA2.0 Subset: MSA 1.1との後方互換を持ち、MSA2.0 Limitedに加えて、Mobile 3D Graphics API、Location APIなどのJSRから構成される。

- MSA2.0: Limited, Subsetに加えて、J2ME Web Services Specification、Security and Trust Services API、SIP API for J2MEなどのJSRから構成される。

* CLDC/CDC、MIDP、グラフィックス、通信、国際化、セキュリティ、位置情報、XML、Webサービスなどのコンポーネントがそれぞれの段階に合わせて組み合わされる。

II-26-6. 組み込みアプリケーションにおける高信頼化実装

組み込みアプリケーションにおける高信頼性を確保する手段として、フォールトアヴォイダンス、フォールトトレランスなどの考え方や高信頼化のために利用される様々な工夫を紹介する。

【学習の要点】

* 組み込みシステムの高信頼性を実現するためには、フォールトアヴォイダンス(Fault Avoidance)、フォールトトレランス(Fault Tolerance)の検討が必須である。

* 高信頼性を実現するための具体的な手法として、N バージョンプログラム、リカバリブロックスキームなどがあり、高度な信頼性を要求される際には検討すべきである。

* 信頼性と汎用性とのトレードオフを考慮する必要がある。

図II-26-6. Nバージョンプログラムとリカバリブロック

【解説】

1) 高信頼性の考え方

* フォールトアヴォイダンス(Fault Avoidance)

- システムの潜在的な問題を低減させるために様々な手段を講じ、システムが故障しないようにすること。

- 組み込みシステムの場合、高品質の部品を積極的に選択するなどが考えられる。

* フォールトトレランス(Fault Tolerance)

- システムの冗長性を高め、システムの障害が起こりにくくなるようにすること。また、障害の際の被害を最小限に抑えられるようにすること。

* フォールトマスキング(Fault Masking)

- システムに障害が起きた際に、他への伝播を防ぐこと。

2) 高信頼性ソフトウェアを実装する技術

フォールトトレラントを実現するために冗長性を高める設計手法としては以下のものがある。

* N バージョンプログラム

- ある一つのタスクを遂行するためのプログラムをN種類用意し、その多数決の結果を出力結果として採用する。(図のPはプログラムを意味する)

* リカバリブロックスキーム

- ある一つのタスクを遂行するためのモジュールをN種類用意する。(図のMはモジュール)

- 1つめのモジュール(主モジュール)を実行してテストを行った結果、誤りを含んでいる場合、代替モジュールを用いて再計算する。再計算した結果も同様にテストを行う。

- テストを通過するまでさらに別の代替モジュールで再実行していく。

3) 高信頼性と汎用性のトレードオフ

* ソフトウェアの信頼性を高めるための機能を盛り込みすぎると、よりリソース制約の厳しい環境下での再利用ができなくなるなど、高信頼性と汎用性にはトレードオフの関係がある。

II-26-7. 誤り検出と誤り回復の実現方法

高信頼化を実現するための手段として典型的に利用される誤り検出と誤り回復の実現方法を説明する。パリティチェックや誤り検出符号の利用などの検出技術と、バックワードエラーリカバリ、チェックポイント、ジャーナルといった誤り回復のための技術について解説する。

【学習の要点】

* システムの高信頼性を高めるため誤り検出と、誤り回復の手法は典型的に用いられる。

* 誤り検出のためにパリティチェックや誤り検出符号が利用される。

* 誤り回復のためにバックワードエラーリカバリ、チェックポイント、ジャーナルなどの手法が利用される。

図II-26-7. 誤り回復:ロールバックとロールフォワード

【解説】

1) 高信頼化のための方式

* 誤り検出

- データに符号誤り(エラー)があった際に検出することを誤り検出という

* パリティチェックによる誤り検出の効果

- パリティビットはある2進数のデータ(ビット列)の各ビットのXORの結果を表す一桁の二進数である。

- パリティビットも含めて、データの転送中に奇数個のビットが変化した場合、エラーとして検出される。これをパリティチェックと呼ぶ。

- パリティチェックでは誤りの検出はできるが訂正はできない。

2) 誤り検出のための符号化

* 組織符号

- 情報ビット列と検査ビット列が明確に分離できる符号を組織符号という。

* バーガー符号

- 情報ビット列の後に、このビット列中の0の数を2進数で表した検査ビットを付加した組織符号のことを開発者の名にちなんでバーガー符号と呼ぶ。

* M-out-of-N 符号

- 1の数がM個の長さNビットの2値からなるベクトルの集合をM-out-of-N符号と呼ぶ。

3) 誤り検出のための仕組み

* 割り込み機能を使って指定時間が経過したことをプログラムに通知するタイマであるウォッチドッグタイマや、監視機能を持つオーディタを利用することで、誤りの検出を自動化する。

4) 誤り回復

* バックワードエラーリカバリ方式

- 変更が行われてエラーが生じた際に、変更前の状態に復帰させる方式。ファイル、システム、データベースなどで使われる。ロールバック方式。

* チェックポイント方式

- システムにエラーが生じた際に、正しく動作していた時点の状態(チェックポイント)に復帰させる方式。

* ジャーナリング方式

- システム動作時に、ジャーナルと呼ばれる記録データを定期的に作成し、エラーが生じた際の復旧に利用する方式。ファイルシステム全体を保護する目的で用いられる。

* リカバリキャッシュ方式

- ディスクなどの障害が発生した際に、バックアップデータによるバックアップ時点までの復旧と、バックアップ時点以降のジャーナルファイルによる復旧とを行う機構。ロールフォワード方式。

II-26-8. 組み込みアプリケーションの実装事例

組み込みアプリケーションの実装事例を紹介する。実際の事例として自動車に組み込まれたアプリケーションの例、携帯電話のアプリケーション例、産業用ロボットの動作制御、カーナビゲーションシステムなどを挙げる。

【学習の要点】

* 組み込みアプリケーションの実装例である、自動車、携帯電話、ロボットなどから組み込みアプリケーションの現状を知る。

* 国際標準化の流れが組み込みアプリケーションの分野でも起きている。JasPar (Japan Automotive Software Platform and Architecture)、AUTOSAR(Automotive Open System Architecture)、OSGi(Open Services Gateway initiative)などが該当する。

図II-26-8. Flex Rayバックボーン(自動車の事例)

【解説】

1) 多様な組み込みアプリケーションの実装仕様の事例研究

* 自動車ボディ制御

- 複数マイコンとのネットワーク連携、センサー制御などを行う際に、ECU(電子制御ユニット)への組み込みソフトウェア開発が行われる。そのコード量は増加の一途を辿っている。

- 自動車ボディから取得される情報は、カーナビゲーションシステムや自動車に積載されるその他の組み込みシステムでも活用すべく車内LAN(CAN)を介して共有されるようになりつつある。

* 携帯電話アプリケーション

- 高機能化、複雑化、大規模化の進む携帯電話アプリケーションの設計に関して、限定された動作環境における機能配分を考えなければならない。

- 携帯電話に組み込まれるソフトウェアはモジュール化が進んでいる。ハードウェアの制約を加味して、モジュールの取捨選択と効果的な実装を考える。

* 産業ロボット動作制御

- 精密動作制御において、リアルタイム性の制約を満たす仕組みを考慮する。リアルタイム性が求められる場合は、リアルタイムOSの利用が効果的である。

- 産業ロボットの稼働環境は悪条件である場合が多い。障害特性を考慮し、エラーリカバリなどソフトウェアで復帰する手段を検討する必要がある場合もある。

* カーナビゲーションシステム制御

- マルチメディア制御に組み込みソフトウェアが利用される。カーナビゲーション、テレビ、ラジオ、車載情報システムなどを制御している。

- マルチメディア系OSの開発もアプリケーションの開発コストを下げるために進められている。

2) 組み込みシステムの実装仕様の国際標準化

* 自動車

- FlexRayは制御系車内LANインタフェース規格の一つであり、X-by-Wireシステムを実現する規格として注目されている。X-by-Wireシステムでは、車内LANにより、ブレーキなどの制御を行う。

- JasPar (Japan Automotive Software Platform and Architecture)やAUTOSAR(Automotive Open System Architecture)による国際標準化の動向にも着目する必要がある。標準的な開発プラットフォームが導入されつつあり、ECUや開発の量を減らす努力がなされている。

* 携帯電話

- 携帯電話の仕様もオープン化が進行している。Java ME, BREW(Binary Runtime Environment for Wireless)の他、OSGi (Open Services Gateway initiative)、Android, Symbianなどがある。

II-26-9. 組み込みアプリケーションの設計手順

携帯電話の機能を利用するアプリケーションを題材に、仕様の検討、前提条件調査、ソフトウェアの配置方法、ハードウェア構成の分析、機能設計と制御設計、タイミングチャートによる検証など、組み込みアプリケーションの設計手順を解説する。

【学習の要点】

* 携帯電話アプリケーションの事例を通して要求仕様定義、ソフトウェアの配置、ハードウェア構成の分析、など設計の手順を学習する。

* 組み込みアプリケーションの設計においてはリソース制約が関心事となる。

図II-26-9. 携帯電話アプリケーションの開発

【解説】

1) 携帯電話上で動作するアプリケーションの設計

* 仕様の提示

- 開発するアプリケーションの仕様を提示する。

- (例)携帯電話上でカメラやバックライトを操作するアプリケーションを設計する。

* 前提条件の把握

- 前提条件を提示する。

- (例)組み込みLinux、Java MEの利用し、MIDPアプリケーションであるMIDletを作成する。

* ソフトウェアの配置と役割分担

- 開発に用いるソフトウェアと担当を決定する。

- (例)開発環境:EclipseなどJavaアプリケーションが開発できる環境を用意する。

- (例)エミュレータ:Sun Java Wireless Toolkit for CLDCなどを用いる。

- (例)UML描画ツール:JUDE, ArgoUMLなどのOSSを用いる。

* ハードウェアの構成とその機能の分析

- 現状、携帯キャリア各社によってプロファイルが異なるが、それぞれのプロファイルで提供されている機能を把握する。

- 実機でのリソースの制約を満たすよう検討する。

* 機能設計

UMLを用いた分析・機能設計を行う。その際、UML描画ツールを利用する。

- クラス図作成

特に、利用するAPIを含むクラス階層、作成するクラスなどを記述する。

- 状態遷移図作成

排他制御の必要性を認識するために、アプリケーションの起動から実際に動作、終了させるまでを状態遷移図として表現する。

* 制御設計、タイミングチャート作成

- カメラやバックライトなど、同時に利用できるプロセスに制約があるリソースの排他制御を行う。

- ユーザの動作とアプリケーションの動作とをUMLのタイミングチャート図に記述し、デッドロックが起きないように考慮する。

II-26-10. 組み込みアプリケーションの実装手順

特定の組み込みアプリケーションの設計を前提として、実際の組み込みプログラミング手順や検証方法、仕様の充足性確認と性能評価方法など、組み込みアプリケーションの実装手順を説明する。

【学習の要点】

* 携帯電話アプリケーションの事例を通して、設計情報を基にプログラミング、検証を行う手順を学習する。

* 組み込みアプリケーションの実装・テストにおいてはリソース制約が関心事となる。

図II-26-10. 検証すべき制約の例

【解説】

1) 設計評価

* 受講生間でインスペクションを行う。

2) プログラミング

* UMLの設計情報を基にJava言語で実装する。

* 実装したコードは、Sun Java Wireless Toolkit for CLDCなどのエミュレータ上で動作の確認をする。

3) テスト・検証

* 妥当性確認(Validation)

要求仕様に見合う動作が行われることを確認する。ユーザに不利益を与えるような不具合がないことを確認する。

* 検証(Verification)

設計仕様通りに実装されているかを確認する。特に形式的検証ではモデル検査ツール(SPIN)などにより、網羅的にアプリケーションの取り得る状態を調べ上げる。

- Safety検証

仕様から離れたことがおきないことを検証する。アプリケーションの動作モデルを専用の記述言語を用いて記述し、デッドロックなどの起きないことを検証する。

- Liveness検証

イベントへの対応など、指定したことが起きることを検証する。

4) 評価

* プログラムの評価

- 受講生間でのプログラミングのレビューを行う。

* テストの評価

- 網羅度などを評価する。

* 性能の評価

- プロファイラにより、メモリ利用などの状況を可視化し、最適化する際の手順などを確認する。

* 制約条件

- メモリ、消費電力、コストなどの制約と照らし合わせる。