単体テストの効率化を考える(5)
スタブの自動生成への入力

2022年7月3日

どもです。

「単体テストの効率化について考える」の5回目です。
1回目から4回目はコチラ:
単体テストの効率化を考える(1)-はじめに
単体テストの効率化を考える(2)-スタブの戻り値
単体テストの効率化を考える(3)-スタブの引数
単体テストの効率化を考える(4)-スタブの引数(ダブルポインタ)

1.振り返り

前回(4回目)までで、スタブを自動生成して単体テストを効率化するために、スタブで行うべき処理は明確にできたかと思います。
それらを(ざっくりですが)まとめてみると、以下のようになります。

  • 呼び出し回数のカウント
  • 関数(スタブ)に戻り値がある場合には、戻り値用バッファから値を取得し、返す。
  • 引数は、引数保持用バッファに値を格納する。
  • 引数がポインタかつ出力の場合には、ポインタの実体に設定する値用のバッファから値を取得して設定する。
  • 引数がダブルポインタの場合には、ダブルポインタの実体用に用意した2次元配列の特定の領域のアドレスを、ダブルポインタの実体に設定する。

それぞれの詳細については、それぞれ1回目から4回目のエントリを確認してください。
これらの「行うべき処理」を実装したスタブの自動生成について考えます。

2.ツールの概要

まず、ツールの本当の基本的な概要です。
ツールの入力と出力を、下図に示します。
think_about_unit_test_005_01
この図のうち、「生成されるスタブのコード」については、(ほぼほぼ)内容が決定してします。
そこで次に、「対象の関数一覧」、特に「作成するツール」が「処理のしやすいフォーマット」、かつ「ユーザが入力しやすいフォーマット」となるように決定します。

3.対象関数一覧

前項より、対象関数の一覧に求められる要件は、下記の通りです。

  • ユーザが入力しやすいフォーマット
  • ツールが処理しやすいフォーマット

です。

3.1.ユーザが入力しやすいフォーマット

ユーザが入力しやすいフォーマットですが、一番最初に考え付くのは、「エクセル」です。
エクセル上に、入力用の「表のフォーマット」を決定して、そこに必要な情報を入力するのがよいかと考えます。

3.2.処理のしやすいフォーマット

「ユーザが入力し易いフォーマット」として、「エクセルの表」を挙げましたが、これはツールが「処理のしやすいフォーマット」か否かを考えます。
結論からいうと、「Yes!」です。
ずいぶん前ですが、Microsoft Office OpenXMLの内容を解析するためのSDKが公開されています。
また、さらにエクセルの解析に特化したSDK?ライブラリ?としてClosedXMLというライブラリも公開されています。
これらのことから、「エクセルの表」は、「処理のしやすいフォーマット」になり得ると言えます。

3.3.表のフォーマット

以下のように決めます(決めました)。
think_about_unit_test_005_02
実際の入力は、下記のようにします。
think_about_unit_test_005_03
入力している関数の定義は、下記の通りです。

int SubFunction_001(int a, int b, int* c);
int SubFunction_002(int a, int b, int* c);

3.4.表の解説

この表の各セルに入力する場合には、

列名 内容
Name スタブを生成する関数の名前
Data type 関数の戻り値のデータ型
戻り値がポインタの場合は、このセルに「*」を入力する。
Prefix 関数の戻り値の(前置)修飾子
constなど
Postfix 関数の戻り値の(後置)修飾子
constなど
Argument Name 関数の引数名
Data type 関数の引数のデータ型
データ型がポインタの場合には、このセルに「*」を入力する。
Prefix 関数の引数の前置修飾子
constなど
Postfix 関数の引数の後置修飾子
constなど
Mode
(in/
out/
both)
関数の引数の入出力情報
入力:in
出力:out
both:入力かつ出力

関数が引数を複数持つ場合、2番目以降の引数は、各行の関数の情報(関数名や戻り値)には何も入力せず、引数情報を入力します。

4.まとめ

今回は、スタブの自動生成ツールに入力するデータのフォーマットについて考えてみました。
結論としては、エクセルの表に入力していくのが、よいと考えています。
具体的なフォーマットは、前出の画像を確認して下さい。

今回のエントリで、スタブの自動化のための入力と出力が(ほとんど)決定できました。
次回は、いよいよ自動生成のツールについて書きます。

ではっ!

続きはコチラ

単体テストの効率化を考える(6)-スタブの自動生成ツール