スタブ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
スタブ(stub)とは、複数のモジュールからなるコンピュータプログラムの検査(テスト)時における下位モジュールの代用品のこと。元々の意味は、切り株のこと。
[編集] 概要
呼び出す側(上位)のモジュールを検査する場合に、呼び出される側(下位)の部品モジュールが未完成であることがある。このとき、呼び出される側の部品モジュールの代用とする仮のモジュールを、「スタブ」と呼ぶ。スタブモジュールは設計仕様に定義されている全ての関数を実装してあるが、関数内部は正規の動作をする事無く適当な定数を返すというような作りになっている事が多い。
たとえば複数人でプログラミングをするときなどでは、初めはモジュールごとにプログラムを作成し、後で各モジュールを結合(リンク)して、全体としてうまく動作するかどうかをテストする。この結合テストの前段階で、個々のモジュールは、あらかじめ正当性を検査しておくことが望ましい。その場合、呼び出す部品モジュールがまだ完成していないときには、スタブが用いられる。スタブは、単純で何もしないようなものであってもよく、テストしたい部分とリンクして動作させるのに十分であればよい。
また、このようなスタブは、モジュールの仕様設計の段階で作られる事も多い。とりあえず中身の無いスタブモジュールを書く事によって、モジュール間の結合の設計に問題がないかを具体的に確かめながら仕様設計ができるからである。
一般にテストする対象が上位階層のモジュールであって下位の部品が未完成の場合、その代用となる仮の下位階層モジュールを、「スタブ」と呼ぶ。
逆の場合、すなわち下位階層の部品モジュールをテストするときに、上位階層のモジュールが未完成であるか簡略的に代用したい場合、テスト用の仮の上位階層モジュールを、ドライバ(ソフトウェアの場合)またはコントローラ(ハードウェアの場合)と呼ぶ。ただし、仮のモジュールではなく正規のモジュールについてもドライバ/コントローラと呼ばれる事があるので、区別するために「テストドライバ」や「サンプルドライバ」などと呼ぶ事も多い。
いずれの場合も、全体のプログラムテストを飛躍的に効率よくする役割を果たす。
組み込みシステムのソフトウェアを開発する際には、コンパイラなどの開発ツールを動かすコンピュータ(ホストコンピュータ)と、開発対象となるコンピュータ(ターゲットコンピュータ)は全く異なるものであることが多い。この時、プログラムを実際に動かしながら動作を確かめるデバッガは、ユーザインタフェースを必要とする本体部分をホストコンピュータ上で動作させ、ターゲットコンピュータ上では本体部分から通信線による指示を受けてCPUやメモリの状態を読み書きする小さなプログラムを動かしておくという構成になることが多い。この、ターゲット上の小さなプログラムを「スタブ」と呼ぶ。
このようなデバッガのスタブは、当然の事ながらターゲットコンピュータのCPUに強く依存したものになり、しばしばアセンブリ言語を用いて作成される。スタブが行なわなければならない主な内容は、次のようになる。
- ホストコンピュータとの通信回線を初期化する
- 任意のメモリ内容を読み出して通信回線に送り出す
- 任意のメモリ内容を通信回線から受けたデータで書き換える
- CPUの内部状態(レジスタ)を整えて、実行コードの任意の位置に制御を移す
- 実行コード中にソフトウェア割り込み命令を埋め込みターゲットソフトウェアの実行を一時的に停止させスタブに制御を戻す
- 上記のソフトウェア割り込み発生時にCPUの内部状態を読み取って通信回線に送り出す
組み込みシステム用ソフトウェア開発においては、このスタブを早い段階で安定動作させる事ができるかどうかが、その後の開発作業がスムースに進むかどうかに大きく影響する。なお、スタブ自身のデバッグ作業には、一般にはハードウェア的にCPUの動作を制御するインサーキット・エミュレータを用いる。このインサーキット・エミュレータは比較的高価な装置であるため、開発人員全員の分を用意すると、開発コストが高くなってしまう。このため、スタブを開発する際やソフトウェアデバッガではどうしても検出できない事象を確認する際などの要所にのみインサーキット・エミュレータを用い、それ以外はスタブを活用して開発作業を進める事になる。