単体テストの効率化を考える(7)
単体テストの設計/設計資料

2021年3月20日

どもです。

過去のエントリで、単体テストを効率的に進めるために、スタブの実装について書きました。
最終的には、スタブを自動で生成するツールを公開しました。
しかし、単体テストに必要なのは、スタブだけではありません。
「テストドライバ」が必要です。
今回から、この「テストドライバ」の実装の効率化について考えます。
なお、スタブの実装については、以下のエントリを参照してください。
単体テストの効率化を考える(1)-はじめに
単体テストの効率化を考える(2)-スタブの戻り値
単体テストの効率化を考える(3)-スタブの引数
単体テストの効率化を考える(4)-スタブの引数(ダブルポインタ)
単体テストの効率化を考える(5)-スタブの自動生成への入力
単体テストの効率化を考える(6)-スタブの自動生成ツール

1.「テストドライバ」の実装の効率化

1.1.「テストドライバ」とは

効率化を考える前に、まず「テストドライバ」とは何かを確認します。
スタブの場合にも紹介しましたが、TechMatrixさんのページに分かり易い説明と絵がありますので、これを参考にします。
この説明によれば、テストドライバとは

テスト対象のコードを呼び出すコードを代替するもの

です。
なお、「テスト」なので、入力値の設定や出力と期待値の比較も「テストドラバ」が担当します。

1.2.「テストドライバ」の実装の入力は?

スタブは、「関数定義」を入力として実装します。
関数は、「設計書」を入力に実装します。
では、テストドライバは「何を入力として」実装するのでしょうか?
それは「テスト設計書」だと考えます。
テストは、「入力に対する結果が、期待する結果と一致するか」を確認する工程です。
なので、この「入力」と「期待する結果」を明らかにした「テスト設計書」が必要です。
この「テスト設計書」を入力として、「テストドライバ」を実装します。

1.3.「テスト設計書」、作ってる?

「テストドライバ」を実装するために必要な「テスト設計書」ですが、実際に作成する場面はどの程度あるのでしょうか?
「結合テスト」とか「システムテスト」、「受け入れテスト」といった開発の後半で行われることが多い、開発の上流工程に対応するテストでは当然のように作成されます。
しかし、「単体テスト」では作成されない場面の方が圧倒的に多いと思っていますし、実際に作ったことがありません。
現場レベルで言えば、単体テストの基準として、次に示す目標値が定められていることが多いです。

  • C0カバレッジ100%
  • C1カバレッジ100%
  • MCDC100%
    ※目標値に設定されているのは稀

そして、それを計測する環境/ツールが導入されています。
またテストについて考えるのが実装したエンジニアであることもあり、設計書が無くてもテストができてしまいます…。
まぁ、「実装で手一杯で、テスト設計書を作っている時間なんかねーよっ!」というのが、設計書がない一番の理由であったりしますが…。

1.4.効率化は「テスト設計書」から

そんなわけで、「テスト設計書」の作成を効率化することで「テストドライバ」の作成を効率化できる、ということが考えられます。
即ち、「テスト設計書」から「テストドライバ」を自動で生成することで「単体テストの効率化」を実現できそうです!

2.まとめ

中途半端な感じですが、ここまでにします。
次回は、「どのようなテスト設計書を作るか」について考えます。

ではっ!