単体テストの効率化を考える(16)
単体テスト設計書の再考(テスト対象関数について)

2022年11月12日

どもです。

以前投稿した単体テストの効率化を考える(15)で、単体テストの設計書/デシジョンテーブルについて記載しました。
このエントリで書いたのは、「デシジョンテーブルについて」のみです。
テストを実施するためには、テストコードを自動で生成するためには、「テスト対象関数の情報」が必要になります。

そこで今回は、この「テスト対象関数の情報」の書き方を考えてみた内容について書きます。

1. いきなり結論

色々書く前に、まず結論を示します。
テスト対象関数の情報、コレでいいんじゃないか?



2. テーブルの内容

テーブルの内容について、簡単に説明します。

2.1. 「種類」列

先頭の列です。
ココには、各行の内容を記載します。
テスト対象関数に関係する情報は、基本的に以下になると思います。

  • テスト対象関数(関数本体)
  • テスト対象関数が呼び出す別の関数
    子関数/サブ関数
  • テスト対象関数が参照するグローバル変数

他の言語になれば、もっと違う要素が加わると思いますが、C言語に限ればこのくらいかと思います。

2.2. 内容

次に「内容」列です。
この列には、「種類」列の補足的な情報を記載します。
具体的には、「種類」が「テスト対象関数」または「子関数」の場合には、その行の内容が「関数本体」と「関数の引数」のいずれなのかを記載します。
また、「種類」が「グローバル変数」の場合には、「内部」なのか「外部」なのかを設定します。

補足ですが、「グローバル変数」の「内部」と「外部」は、ココでは以下のように定義しています。

  • 外部
    • テスト対象関数が実装されたソースファイルとは別のファイルで定義されたグローバル変数
    • テスト対象関数が実装されたソースファイルでは、"extern"で宣言されているグローバル変数
  • 内部
    • テスト対象関数が実装されたソースファイルで定義/宣言されたグローバル変数

2.3. データ型前置修飾

「データ型前置修飾」列には、データ型の前に記述する修飾子を記載します。
「const」か「static」くらいしか無いと思います…。

2.4. データ型

データ型を記載します。
関数(テスト対象関数/子関数)の場合には、関数の戻り値を記載します。

2.5. データ型後置修飾

「データ型後置修飾子」列には、データ型の後ろに記述する修飾子を記載します。
ポインタ型の場合の「*」は、このセルに記述します。

2.6. 名前

名前を記述します。
関数(テスト対処関数/子関数)の場合には関数名を、変数(引数/グローバル変数)の場合には変数名を記述します。

2.7. 入出力

変数(とくに引数)の「入出力」を記載します。
先頭で示した図では、「in」または「out」で記述しています。
引数が「入力」なのか「出力」なのか、あるいはその両方なのかを記述します。
(表には現れていませんが、「両方」の場合には「in/out」と記述するようにしています。)

2.8. 備考/説明

備考や説明など、追加の補足情報があれば記述します。

3. テーブル作成時のルール

このテーブルは、テストコード(テストドライバ/スタブ)の自動生成の入力となることを前提としています。
そのため、
セルの結合は絶対禁止
です。
これは、以前の投稿でも書いたように、総務省が公開している統計表における機会判読可能なデータの表記方法の統一ルールの策定の内容を参考にしています。
それなりに納得できる、(というか、よくよく考えれば当たり前)の内容が書かれているので、参考にしています。

4. まとめ

今回は、単体テストの対象となる関数の記述について書きました。
本当に簡単な内容と説明のみですが、コレで最低限の条件は満たせているのではないかと考えています。

なお、今回の記述で照会した各列の記述(「テスト対象関数」や「本体」、「引数」など)は、私の「趣味」での記述です。
「この書き方が正解☆」ということでは、全くありません。
現場や状況に合せて、記述内容は適宜変更してください。

今回紹介したテスト対象関数のテーブルの書式が、誰かの助けになれば幸いです。

ではっ!