組み込み系の例 http://blues.se.uec.ac.jp/mlarchives/swtest/msg09846.html ほんださん 判谷です。 ドライバでは混乱するので「BIOS(BASIC INPUT/OUTPUT SYSTEM)」と呼ぶことにします。 これなら、PCを使う人でもイメージしやすいかも。 [ アプリケーション ] [ OS ][テストプログラム] [ BIOS ] [ H/W(ハードウェア) ] レイヤー的には上記になると思います。 テストプログラムは以下の機能があります。 (テストプログラムはダイアグ(Diagnostic:診断)と呼ばれる場合もあります) 1.BIOSのドライバ(上位コンポーネントの代わりになるテストツール)・・・BIOSのデバッグ時 2.ハード屋さんが、ハードウェアの確認に使うツール 3.ソフト屋さんが、機器の内部設定などを変えたり、デバッグに使うツール 4.工場出荷時に自動検査(ハードウェアの動作確認、フラッシュROMへの出荷設定書き込み、試験ステージをPASSした記録など)で使用 5.出荷後の故障品の解析(サービスダイアグ) OSのある機器でも、OSなしで組まれることが多いです(OSが動く前にハードウェアの確認に使うため) テストプログラムを起動するためには、特定の手順がいることが多いです(詳しくは書きません) テストプログラムはRS232C経由でテストコマンドが来ると応答を返すという、簡易モニタです。 例えばフラッシュのR/W,RAMのR/W、LEDのON/OFF、LCDの表示、EEPROMのR/W,RTCのR/W、FPGAレジスタのR/W,ポートON/OFF、・・・ みたいな「デバイス」「パラメータ」を送ると「読み出し値」が返ります。 例 FROM READ,address=0x10000,length=0x4 を送ると OK,01 02 03 04 と読み出し値が返り FROM WRITE,address=0x10000,length=0x4,DATA=0x12,0x34,0x56,0x78 を送ると OK と返す感じです (上記のコマンドは今適当に作ったものです。実際のテストコマンドのフォーマットは極秘です) > ちゃんと言葉として成立してませんが、垂直方向的な統合テストの代表格かな。 > 組込みでは。 開発時のレイヤーをBIOSとその上位で分けると 上位のアプリケーションはハードウェアを意識しなくてすむのでPC上でプログラミングできるのが利点ですね。 組み込み系開発の経験の無いプログラマがアプリケーション部を組むこともあります。 OSがuITRONの場合はOSの機能をwindos用のTOPPERSを使って、PC上でプログラミングすることもできます。 その場合の結合試験の問題は 1.パフォーマンスの違い:PC上では十分な速度でもCPU能力の落ちる実機では十分な速度が出ないことがある。 2.CPUの違い:PCが32BitCPUで実機が16BITCPUの場合、同じC言語でもint形が32bitと16bitと違うなど。あとエンディアンが違ったり 3.コンパイラの違い:例えばPCでVisual Studioやgccで開発して実機はCPU用の専用コンパイラの場合、色々動きが違ったりする。charがsignedだったりunsignedだったり。 私の方は、上位アプリもイベント駆動のステートマシンで組んでもらうことが多いので メール(uITRONなどのプロセス間通信コマンド)のメールID(イベントID)とパラメータの仕様書を作り メール送信関数をラッパーして、メールを使ったときに「メールの送信元ID,送信先ID,イベントID,パラメータ」をログ出力するようにし 各タスク(uITRONでのプロセス。PCでいうスレッドみたいなもの)はメール受信待ちで、 メールを受け取ると、現在の自分のステータスと受け取ったイベントで遷移するようにしています。 結合テストは上記のログで、 ・タスク+元のステータス ・受け取ったイベント+パラメータ ・タスク+遷移後のステータス をログに出すことで、どのようにタスクが動いていくかをモニターし動作を確認します。 タスクの(BIOS結合後の単体テスト)なら、テストコマンドに擬似的なメールを送信する機能を実装し、 擬似的にメールを送信することで、正しく動くか確認し 実際にタスクが連携して動く結合試験の場合は、ログでタスクが正しくイベントを受けてステータスが遷移したか確認します。 ※後、固定長(可変長)メモリープールとかセマフォー(ミューテックス)とか、OSのシステムコールは基本的にラッパー関数を作ってそれ経由でアクセスさせ、 何かあったらラッパー関数からログを出力させるようにします。 それで、どこでメモリー不足になったとか、メモリの開放漏れ(メモリーリークが無いか)とかデッドロックしてないかとか確認します。 |