It's a wonderful life !

日常のつぶやきや、病気のことを語ります

スタブとドライバについて

IT関連の話です。

 

アプリケーションの試験をするときに、スタブとドライバというものが必要となることがあります。

プログラムを書いている人ならスタブとドライバ、その役割について当然知っていると思うんですが、テスターはどうもピンとこないことがあるようです。

特に、完成したアプリケーションの受け入れ試験しかしたことが無い人は理解に苦しむようで、「なんでこんな訳の分からないものを使わないといけないわけ?」と、ブツブツと文句を言う声がよく聞こえます。

 

簡単に説明します。

 

あなたはプログラマーです。Bという機能を作ることを指示されました。仕様は次の通りです。

 

Aという機能から顧客名簿を渡されます。
渡された顧客名簿から条件に合う顧客を抽出し、一覧表を作成します。
出来上がった一覧表を、Cという機能へ渡します。
渡した一覧表はCで処理され、処理結果が送られてきます。
その処理結果をAに通知します。

 

さて、あなたは機能を作成しました。しかし、AもCも作成が遅れており、AとB、BとCの連携部分が正しく動くかどうか確認することができません。どうしましょう。

 

というところで出てくるのが、スタブとドライバです。

Bから見て、Aにあたるものがドライバ、Cにあたるものがスタブとなります。自分を呼び出すものがドライバ、逆に自分が呼び出すものがスタブということになりますね。これを使って(作って)連携部分の動作を確認していきます。

 

AとCの開発が遅れていなければ、動作確認ではそれを使えばいいんじゃないの?と思うかもしれません。ですが、いきなり結合して試験すると不具合があったときに、問題がA、B、Cのどこにあるのかが分かりづらく、少なくとも単体テストレベルではスタブとドライバを作成するのが一般的です。

 

連携部分だけ確認できればいいので、スタブもドライバも中身は必要最小限で問題ありません。

ドライバは顧客名簿をBに渡すところとBから処理結果を受け取る処理、スタブは一覧表を受け取るところと処理結果をBに渡す処理だけ実装すれば良いですかね。

 

Cは一覧表を処理するという機能がありますが、スタブでは任意の処理結果だけBに渡せれば存在していればよいので、一覧表を実際に処理するところは作りこむ必要はありません。そこまで作りこんだら、Cを作ったのと同じことになるので。

 

上の方で「簡単に説明します。」と言っておきながら、意外と長かった……。

そんな話なのですが、難しいのかなぁ……。