スタブとは何か?ソフトウェア開発のテストで用いられる手法

スタブとは

IT業界における「スタブ」とは、ソフトウェア開発のテストで利用するデータ上の部品を指します。
スタブは中身を持たない、テスト専用のダミー部品です。

システムの中には、「下流のモジュール(部品)を呼び出す」という機能を持ったモジュールが存在します。
こういった機能は多くの場合はシステム内の上流に位置するため、とくにテストが重要です。
しかし下位モジュールが開発途中の場合、「呼び出す機能」のテストを行えないことがあります。
そのときに作成・使用されるのが「スタブ」です。

スタブのメリットと留意点

スタブは「上位モジュールから呼び出される」という機能だけを持っています。
スタブの中自体に特別な処理はなく、上位モジュールが必要とする返り値・変数のみを定数で持っていることが多いです。
スタブを下位モジュールのダミーとして置くことで、上位モジュールの「呼び出し機能」が使えるようになり、開発序盤であっても上位モジュールのテストを行えるようになります。
システム全体が完成したとき、スタブは正規のプログラムに置き換えられます。

スタブが使われるテストの流れ

スタブは開発において、単体テストや結合テストのシーンでよく使用されます。
とくに上位モジュールから下位モジュールへの流れを確認するトップダウンテストで出番の多い存在です。

トップダウンテストは最上位のモジュールからテストを行うもので、全体に関わる致命的なバグを発見したとき、早めに対処することができます。
ただし、上位のプログラムは多くのモジュールを呼び出すため、テストとプログラミングを並行して行う場合、大量のスタブが必要です。
実際に上位モジュールから開発を行うとき、詳細なロジックをあえて外部に出してスタブ化し、上位モジュールのテストを行うことがあります。
スタブを使って上位モジュールの精度を確認したあと、スタブ部分にした下位モジュールのテストを行うという流れです。

またスタブが活躍する開発手法に、「テスト駆動開発」というものがあります。
これは実装前にテストコードを書き、そのテストコードをクリアできるようプログラミングしていくというものです。
プログラミングとテストを並行して行うため、テスト駆動開発においてスタブの存在は必須と言ってもいいでしょう。
ただしテスト駆動開発は実装前にテストコードを書く手間があるため、コーディングに時間がかかるときがあります。
大量のスタブを用意するというタスクも発生してしまうため、テストとプログラミングを並行する部分・しない部分を区別することもあります。

モックとは

スタブと似たような概念に「モック」と呼ばれるものがあります。
これもスタブと同じく、上位モジュールから下位モジュールへのテストにおいて使用されるものです。
スタブでは上位モジュールが下位モジュールを正しく呼び出せているかという点に注目しますが、モックでは上位モジュールが下位モジュールに対して「行った出力が正しいか」という出力内容の検査を主に行います。
スタブもモックも、どちらもテストでのみ使用するものです。

ただし、スタブ・モックともに、技術者によって捉え方が異なる場合があります。
ある程度の大枠を理解し、実際の現場ではどのようなものがスタブ・モックと呼ばれているのかを判断するといいでしょう。

参考