 Copyright © 2011-2019 j8takagi

 — The Detailed Node Listing —

Autotest.mk インストール

Autotest.mk チュートリアルI - 三角形判定プログラムのテスト

Autotest.mk チュートリアルII - C言語‘sort’関数のテスト

テンプレートディレクトリー マニュアル

グループディレクトリー マニュアル

テストディレクトリー マニュアル

1 Autotest.mk 概要
******************

 Autotest.mkはソフトウェアテスト自動化のための、GNU Makeを利用したフレー
ムワークです。何回か‘make’コマンドを実行し、コマンドファイルとテスト結果
の想定をあらわすファイルを作成すれば、テストの準備は完了です。あとは
‘make’コマンドを1回実行すれば、テストを実行できます。テストが実行される
と、詳細なログが出力されます。

1.1 特徴
========

 Autotest.mkの特徴は次のとおりです。

   • 使い方がシンプル

   • さまざまなプログラムや環境に対応

   • ビルド作業と連携しやすい

   • 無償で使うことができ、自由に改造できる

2 Autotest.mk インストール
**************************

2.1 要件
========

 Autotest.mkは、LinuxやMac OS Xなどで動作します。現在動作を確認している
のは、次のディストリビューションです。

   • Ubuntu Linux 10.10

   • Mac OS X バージョン 10.6.5

2.2 ダウンロード
================

 Autotest.mkのサイト (http://www.j8takagi.net/autotest_mk/)または
githubのダウンロードページ
(http://github.com/j8takagi/Autotest.mk/downloads/)から最新版の
‘tar.gz’ファイルをダウンロードします。

2.3 検証
========

 ダウンロードが完了したら、‘openssl’と‘diff’で正しくファイルがダウンロー
ドができているかを検証します。

     $ openssl md5 autotest_mk.tar.gz | diff -s autotest_mk.tar.gz.md5sum -
     Files autotest_mk.tar.gz.md5sum and - are identical

2.4 展開
========

 ‘autotest_mk’ファイルをダウンロードしたら、展開先のディレクトリーに移動
してから、展開します。 次のコマンドでは、現在ログインしているユーザーの
ホームディレクトリーに展開します。

     $ cd ~
     $ tar xvzf autotest_mk.tar.gz

 展開したら、Autotest.mkは使えるようになります。多くのプログラムをインス
トールするときに必要なコンパイルやビルド、システムディレクトリーへのイン
ストール（‘./configure’や‘make’、‘make install’）は必要ありません。

2.5 ディレクトリー
==================

 Autotest.mkでテストを実行するときは、次の3つのディレクトリーを使います
。

‘テンプレートディレクトリー’
     テストグループとテストのテンプレートとなるディレクトリー

‘テストグループディレクトリー’
     1つまたは複数のテストを含むディレクトリー

‘テストディレクトリー’
     テスト実行のためのファイルと、実行結果をあらわすファイルを含むディ
     レクトリー

3 Autotest.mk チュートリアルI - 三角形判定プログラムのテスト
************************************************************

概要
====

 ここでは、Glenford J Myers『ソフトウェア・テストの技法』（近代科学社、
1980）の記載を元にした、次の仕様の三角形判定プログラムをテストする手順を
取り上げます(1)。

     プログラムtriangleは、整数をあらわす3つの引数をとる。この3つの値は
     、それぞれ三角形の3辺の長さをあらわすものとする。プログラムは、三角
     形が不等辺三角形の場合は‘scalene triangle’、二等辺三角形の場合は
     ‘isosceles triangle’、正三角形の場合は‘equilateral triangle’を印字
     する。

 この三角形判定プログラムの動作を検証するには、次のテスト・ケースが必要
です(2)。

       1. 有効な不等辺三角形をあらわすテスト・ケース

       2. 有効な正三角形をあらわすテスト・ケース

       3. 有効な二等辺三角形をあらわすテスト・ケース

       4. 有効な二等辺三角形で2つの等辺を含む3種類の組合せすべてをためす
          ことができる3つのテスト・ケース

       5. 1つの辺がゼロの値をもつテスト・ケース

       6. 1つの辺が負の値をしめすテスト・ケース

       7. ゼロより大きい3つの整数をもち、そのうち2つの和がそれ以外の1つ
          と等しいようなテスト・ケース

       8. 1辺の長さが他の2辺の長さの和に等しいことを3種類の順列のすべて
          に対してためすことのできるテスト・ケース

       9. ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数
          より小さくなるテスト・ケース

       10. ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数
          より小さくなることにおいて、3種類の順列すべてを考慮することの
          できるテスト・ケース

       11. すべての辺がゼロであるテスト・ケース

       12. 整数でない値をもつテスト・ケース

       13. 数値の個数が間違っていることをためすテスト・ケース

 三角形判定プログラムは、サンプルとして用意されているものを準備.
するか、または自作してください。

 準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。

  1. グループディレクトリーの作成

  2. テストディレクトリーの作成

  3. テスト説明ファイルの作成

  4. テストコマンドファイルの作成

  5. テスト想定ファイルの作成

  6. テストの実行

  7. テストログファイルの確認

  8. テストグループの実行

  9. テストグループログファイルの確認

   ---------- Footnotes ----------

   (1) 『ソフトウェア・テストの技法』では「カードから3つの整数を読む」と
なっているのを、「3つの引数をとる」に変更しています。

   (2) 『ソフトウェア・テストの技法』では下記の13個に加え、「それぞれの
テスト・ケースについて、入力の値に対して予想される値をしめしたか」という
テスト・ケースが記載されています。このテスト・ケースは、Autotest.mkを実
行している場合は自動的に満たされると考えています。

準備
====

作業用ディレクトリーの作成
--------------------------

 まず、Autotest.mkのパッケージに含まれている‘sample/triangle’以下のファ
イルを、任意の作業用ディレクトリーにコピーします。ここでは、
‘~/triangle’（‘~’は、現在ログインしているユーザーのホームディレクトリー
）を作業用ディレクトリーにします。また、‘autotest.mk’は、‘~’に展開されて
いるものとします。

     $ cd
     $ mkdir triangle
     $ cd autotest.mk/sample/triangle
     $ cp triangle.c triangle_bug.c Makefile ~/triangle

 作業用ディレクトリーに移動し、中のファイルを確認します。

     $ cd ~/triangle
     $ ls
     Makefile  triangle.c  triangle_bug.c

三角形判定プログラムのビルド
----------------------------

 三角形判定プログラムをビルドします。

     $ make
     rm -f triangle
     gcc -o triangle triangle.c

 テストもかねて、三角形判定プログラムを手動で実行します。

     $ ./triangle 3 4 5
     scalene triangle
     $ ./triangle 4 4 4
     equilateral triangle
     $ ./triangle 2 4 4
     isosceles triangle

バグを含む三角形判定プログラムのビルド
--------------------------------------

 バグを含み一部のテストに失敗する三角形判定プログラムをビルドする場合は
、次のコマンドを実行します。

     $ make bug
     rm -f triangle
     gcc -o triangle triangle.c

 テストもかねて、三角形判定プログラムを手動で実行します。

     $ ./triangle 3 4 5
     futohen sankakukei
     $ ./triangle 4 4 4
     equilateral triangle
     $ ./triangle 2 4 4
     isosceles triangle

 ‘./triangle 3 4 5’で、仕様で‘scalene triangle’となるべきところが、
‘futohen sankakukei’となっています。

3.1 グループディレクトリーの作成
================================

 テンプレートディレクトリーで‘make’を実行し、グループディレクトリーを作
成します。このとき、テストグループのディレクトリーを変数‘GROUPDIR’で指定
します。ここでは、‘~/triangle/test’をテストグループのディレクトリーにし
ます。

     $ cd ~/autotest.mk/template
     $ make GROUPDIR=~/triangle/test

 次のコマンドでグループディレクトリーに移動し、その中を確認します。

     $ cd ~/triangle/test
     $ ls
     Define.mk  Makefile  Test.mk

3.2 テストディレクトリーの作成
==============================

 グループディレクトリーで‘make create’を実行し、テストディレクトリーを作
成します。このとき、変数‘TEST’でテスト名を指定します。テスト名は、小文字
のアルファベットと数字で指定します。ここでは、1つめのテスト・ケースに対
応するテストディレクトリーを、‘01_scalene’という名前で作成します。

     $ make create TEST=01_scalene

 次のコマンドでテストディレクトリーに移動し、その中を確認します。

     $ cd 01_scalene
     $ ls
     Makefile

3.3 テスト説明ファイルの作成
============================

 テスト説明ファイル‘desc.txt’はテストに関する説明をあらわし、テストの結
果と一緒にログに出力されます。 ‘desc.txt’をテキストエディターを使って次
の内容で作成します。

     有効な不等辺三角形をあらわすテスト・ケース

3.4 テストコマンドファイルの作成
================================

 テストコマンドファイル‘cmd’は、テスト時に実行されるコマンドをあらわしま
す。 このコマンドにより、標準出力とエラー出力にテストの結果が出力される
ようにします。

 ここでは、‘cmd’をテキストエディターを使って次の内容で作成します。

     ../../triangle 3 4 5

3.5 テスト想定ファイルの作成
============================

 テスト想定ファイル‘0.txt’は、テストが正しく実行された場合の結果をあらわ
します。‘0.txt’の作成方法は、次の3つがあります。

   • 手動で作成

   • ‘make set’

   • ‘make reset’

 エラーが発生するテストでは、標準出力想定の下にエラー出力想定を続けます
。

3.5.1 手動で作成
----------------

 テスト想定ファイル‘0.txt’をテキストエディターを使って次の内容で作成しま
す。

     scalene triangle

3.5.2 ‘make set’
----------------

 ‘make set’を実行すると、コマンドファイル‘cmd’が実行されます。実行結果は
‘0.txt’ファイルに出力され、その内容が表示されます。

     $ make set
     scalene triangle

 この方法で‘0.txt’を作成する場合は、作成された内容がテスト想定として本当
に正しいかよく検討する必要があります。例えば、バグを含む三角形判定プログ
ラムを準備して‘make set’を実行すると、仕様と異なる次のようなテスト想定と
なり、テストを正しく実行できません。

     $ make set
     futohen sankakukei

 ‘0.txt’がすでに存在する場合は‘make set’を実行するとエラーになり、
‘0.txt’は更新されません。

3.5.3 ‘make reset’
------------------

 ‘0.txt’がすでに存在する場合は、‘make reset’で更新できます。

     $ make reset
     scalene triangle

3.6 テストの実行
================

 コマンドファイルとテスト想定を用意したら、‘make’または‘make check’でテ
ストを実行できます。

     $ ls
     0.txt  Makefile  cmd  desc.txt
     $ make
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Success 2011-01-10 10:09:55
     Detail in /home/foo/triangle/test/01_scalene/detail.log

 表示される項目は、次のとおりです。

   • <テスト説明ファイル‘desc.txt’の内容>

   • <テスト名>: <テスト結果（Test SuccessまたはTest Failure）> <テスト
     実行日時>

   • Detail in <テスト詳細ログファイルの絶対パス>

バグを含む三角形判定プログラムの場合
------------------------------------

 正しいテスト想定を作成していた場合にバグを含む三角形判定プログラムでテ
ストを実行すると、次のように表示されます。

     $ make
     make: [diff.log] Error 1 (ignored)
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Failure 2011-01-10 20:25:16
     Detail in /home/foo/triangle/test/01_scalene/detail.log

3.7 テストログファイルの確認
============================

 テストを実行して作成されたファイルを確認します。‘1.txt’ ‘summary.log’
‘detail.log’が作成されています。

     $ ls
     0.txt  1.txt  Makefile  cmd  desc.txt  detail.log  summary.log

 テストを実行すると作成されるファイルは、次のとおりです。必要に応じてフ
ァイルの内容を確認します。

‘1.txt’
     テスト結果をあらわします。エラー発生時は、標準出力のあとにエラー出
     力が続きます

‘err.log’
     エラー発生時に、エラーが出力されます。エラーが発生しない場合は作成
     されません

‘diff.log’
     テスト想定ファイル‘0.txt’とテスト結果ファイル‘1.txt’の差分をあらわ
     します。想定と結果が同一の場合は、作成されません

‘summary.log’
     テストの実行結果を表します。テスト実行時に表示される項目です。

‘detail.log’
     テストの詳細ログを表します。上記の内容がすべて出力されます

 ‘detail.log’は、次のようになります。

     == summary.log ==
     ----------------------------------------------------------------------
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Success 2011-01-10 10:09:55
     Detail in /home/foo/triangle/test/01_scalene/detail.log
     ----------------------------------------------------------------------

     == cmd ==
     ----------------------------------------------------------------------
     ../../triangle 3 4 5
     ----------------------------------------------------------------------

     == 0.txt ==
     ----------------------------------------------------------------------
     scalene triangle
     ----------------------------------------------------------------------

     == 1.txt ==
     ----------------------------------------------------------------------
     scalene triangle
     ----------------------------------------------------------------------

バグを含む三角形判定プログラムの場合
------------------------------------

 バグを含む三角形判定プログラムを準備してテストを実行した場合、‘1.txt’
‘summary.log’ ‘detail.log’のほかに、テスト想定とテスト結果が異なるため
‘diff.log’が作成されます。

     $ ls
     0.txt  1.txt  Makefile  cmd  desc.txt  detail.log  diff.log  summary.log

 ‘detail.log’は次のようになります。

     == summary.log ==
     ----------------------------------------------------------------------
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Failure 2011-01-10 20:25:16
     Detail in /home/foo/triangle/test/01_scalene/detail.log
     ----------------------------------------------------------------------

     == cmd ==
     ----------------------------------------------------------------------
     ../../triangle 3 4 5
     ----------------------------------------------------------------------

     == 0.txt ==
     ----------------------------------------------------------------------
     scalene triangle
     ----------------------------------------------------------------------

     == diff.log ==
     ----------------------------------------------------------------------
     *** 0.txt    Mon Jan 10 20:12:14 2011
     --- 1.txt   Mon Jan 10 20:25:16 2011
     ***************
     *** 1 ****
     ! scalene triangle
     --- 1 ----
     ! futohen sankakukei
     ----------------------------------------------------------------------

     == 1.txt ==
     ----------------------------------------------------------------------
     futohen sankakukei
     ----------------------------------------------------------------------

3.7.1 テストのクリア
--------------------

 ‘make clean’を実行すると、テストの結果作成されたファイルがクリアされま
す。

     $ make clean
     $ ls
     0.txt  Makefile  cmd  desc.txt

3.8 テストグループの実行
========================

 2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクト
リーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファ
イルを作成します。

 ここでは、先に作成した‘01_scalene’も含めて、次のようなディレクトリーと
ファイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの
‘sample/triangle/test’以下にあります。

   • 01_scalene

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 02_equilateral

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 03_isosceles

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 04_isosceles_c

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 05_zero

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 06_minus

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 07_line

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 08_lines

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 09_less

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 10_lesses

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 11_zeroall

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 12_notint

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

   • 13_argcnt

        • ‘Makefile’ ‘desc.txt’ ‘cmd’ ‘0.txt’

 テストグループディレクトリーでは、‘make’または‘make check’で複数のテス
トをまとめて実行できます。

     $ cd ~/triangle/test
     $ make
     test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
     test: All tests are succeded.

 表示されるのは、次の項目です。
   • <テスト名>: <成功テスト数>/<全テスト数> test passed.  Detail in <テ
     ストグループログファイルの絶対パス>

   • （すべてのテストに成功した場合）<テスト名>: All tests are succeded.

バグを含む三角形判定プログラムの場合
------------------------------------

 バグを含む三角形判定プログラムを準備してテストグループを実行した場合、
次のように表示されます。失敗したテストがあることをあらわしています。

     $ cd ~/triangle/test
     $ make
     test: 11 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log

3.9 テストグループログファイルの確認
====================================

 テストグループを実行すると作成されるファイルは、次のとおりです。

‘<テストグループ名を大文字にした文字列>.log’
     テストグループに含まれるテストとその実行結果の一覧をあらわします。

‘Summary.log’
     テストの実行結果を表します。テストグループ実行時に表示される内容で
     す。

 ここではテストグループ名は‘test’なので、‘TEST.log’が次の内容で作成され
ます。

     01_scalene/
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/01_scalene/detail.log

     12_notint/
     整数でない値をもつテスト・ケース
     12_notint: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/12_notint/detail.log

     03_isosceles/
     有効な二等辺三角形をあらわすテスト・ケース
     03_isosceles: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/03_isosceles/detail.log

     02_equilateral/
     有効な正三角形をあらわすテスト・ケース
     02_equilateral: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/02_equilateral/detail.log

     05_zero/
     1つの辺がゼロの値をもつテスト・ケース
     05_zero: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/05_zero/detail.log

     13_argcnt/
     数値の個数が間違っていることをためすテスト・ケース
     13_argcnt: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/13_argcnt/detail.log

     10_lesses/
     ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数より小さくなることにおいて、3種類の順列すべてを考慮することのできるテストケース
     10_lesses: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/10_lesses/detail.log

     07_line/
     ゼロより大きい3つの整数をもち、そのうち2つの和がそれ以外の1つと等しいようなテスト・ケース
     07_line: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/07_line/detail.log

     06_minus/
     1つの辺が負の値をしめすテスト・ケース
     06_minus: Test Success 2011-01-10 12:14:23
     Detail in /home/foo/triangle/test/06_minus/detail.log

     11_zeroall/
     すべての辺がゼロであるテスト・ケース
     11_zeroall: Test Success 2011-01-10 12:14:24
     Detail in /home/foo/triangle/test/11_zeroall/detail.log

     08_lines/
     1辺の長さが他の2辺の長さの和に等しいことを3種類の順列のすべてに対してためすことのできるテスト・ケース
     08_lines: Test Success 2011-01-10 12:14:24
     Detail in /home/foo/triangle/test/08_lines/detail.log

     09_less/
     ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数より小さくなるテストケース
     09_less: Test Success 2011-01-10 12:14:24
     Detail in /home/foo/triangle/test/09_less/detail.log

     04_isosceles_c/
     有効な二等辺三角形で2つの等辺を含む3種類の組合せすべてをためすことができる3つのテストケース
     04_isosceles_c: Test Success 2011-01-10 12:14:24
     Detail in /home/foo/triangle/test/04_isosceles_c/detail.log

 テストをまとめて実行した場合も、個別のテストを実行した場合と同様に、テ
ストディレクトリーにテストログが出力されます。特定のテスト結果を詳細に検
討する場合は、そのテストのテストディレクトリーを開いてテストログファイル
の確認をします。

バグを含む三角形判定プログラムの場合
------------------------------------

 バグを含む三角形判定プログラムを準備してテストグループを実行した場合、
‘TEST.log’は次のように表示されます。01_scaleneのほか、11_zeroのテストで
失敗しています。すべての辺がゼロである場合に表示が正しくないバグがあるこ
とがわかります。

     01_scalene/
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Failure 2011-01-10 21:45:52
     Detail in /home/foo/triangle/test/01_scalene/detail.log

     12_notint/
     整数でない値をもつテスト・ケース
     12_notint: Test Success 2011-01-10 21:45:52
     Detail in /home/foo/triangle/test/12_notint/detail.log

     03_isosceles/
     有効な二等辺三角形をあらわすテスト・ケース
     03_isosceles: Test Success 2011-01-10 21:45:52
     Detail in /home/foo/triangle/test/03_isosceles/detail.log

     02_equilateral/
     有効な正三角形をあらわすテスト・ケース
     02_equilateral: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/02_equilateral/detail.log

     05_zero/
     1つの辺がゼロの値をもつテスト・ケース
     05_zero: Test Failure 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/05_zero/detail.log

     13_argcnt/
     数値の個数が間違っていることをためすテスト・ケース
     13_argcnt: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/13_argcnt/detail.log

     10_lesses/
     ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数より小さくなることにおいて、3種類の順列すべてを考慮することのできるテストケース
     10_lesses: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/10_lesses/detail.log

     07_line/
     ゼロより大きい3つの整数をもち、そのうち2つの和がそれ以外の1つと等しいようなテスト・ケース
     07_line: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/07_line/detail.log

     06_minus/
     1つの辺が負の値をしめすテスト・ケース
     06_minus: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/06_minus/detail.log

     11_zeroall/
     すべての辺がゼロであるテスト・ケース
     11_zeroall: Test Failure 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/11_zeroall/detail.log

     08_lines/
     1辺の長さが他の2辺の長さの和に等しいことを3種類の順列のすべてに対してためすことのできるテスト・ケース
     08_lines: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/08_lines/detail.log

     09_less/
     ゼロより大きな3つの整数のうち、2つの数の和がそれ以外の1つの数より小さくなるテストケース
     09_less: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/09_less/detail.log

     04_isosceles_c/
     有効な二等辺三角形で2つの等辺を含む3種類の組合せすべてをためすことができる3つのテストケース
     04_isosceles_c: Test Success 2011-01-10 21:45:53
     Detail in /home/foo/triangle/test/04_isosceles_c/detail.log

3.10 ビルドとの連携
===================

 三角形判定プログラムでは、‘~/triangle’など作業用ディレクトリーのトップ
で‘make’を実行すればプログラムをビルドできました。作業用ディレクトリーの
‘Makefile’を次のように編集すると、ビルドと連携してテストを実行できるよう
になります。

     CC = gcc

     .PHONY: all check clean

     all:
     	$(CC) -o triangle triangle.c

     check:
         $(MAKE) -c test

     clean:
     	rm -f triangle

 ビルドとテストは、次のように実行します。

     $ make
     gcc -o triangle triangle.c
     $ make check
     make -C test
     test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
     test: All tests are succeded.

 こうした設定をしておけば、プログラムを変更するたびに簡単にビルドとテス
トを実行することができます。

4 Autotest.mk チュートリアルII - C言語‘sort’関数のテスト
********************************************************

概要
====

 ここではC言語の関数テストの例として、‘sort’関数をテストします。CUnit
(http://cunit.sourceforge.net/)のわかりやすい日本語チュートリアルCUnit チ
ュートリアル (http://homepage3.nifty.com/kaku-chan/cunit/index.html)で使
われている関数です。

 ‘sort_normal.c’は、次の内容です。

     void sort(int array[], int num) {
         int i;
         int j;
         int val;

         for(i=0; i<(num-1); i++) {
             for(j=(num-1); j>i; j--) {
                 if (array[j-1] > array[j]) {
                     val = array[j];
                     array[j] = array[j-1];
                     array[j-1] = val;
                 }
             }
         }
     }

 バグを含む‘sort_bug.c’は、次の内容です。

     void sort(int array[], int num) {
         int i;
         int j;
         int val;

         for(i=0; i<(num-1); i++) {
             for(j=(num-1); j>i; j--) {
                 if (array[j-1] > array[j]) {
                     val = array[j];
                     array[j] = array[j]; /* 本当は array[j] = array[j-1]; */
                     array[j-1] = val;
                 }
             }
         }
     }

 プログラムは、サンプルとして用意されているものを準備.
してください。

 準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。

  1. グループディレクトリーの作成

  2. テストディレクトリーの作成

  3. テスト説明ファイルの作成

  4. 関数テスト用プログラムのソース作成

  5. ‘Makefile’の編集

  6. テスト想定ファイルの作成

  7. テストの実行

  8. テストログファイルの確認

  9. テストグループの実行

  10. テストグループログファイルの確認

準備
====

作業用ディレクトリーの作成
--------------------------

 まず、Autotest.mkのパッケージに含まれている‘sample/sort’以下のファイル
を、任意の作業用ディレクトリーにコピーします。ここでは、‘~/sort’（‘~’は
、現在ログインしているユーザーのホームディレクトリー）を作業用ディレクト
リーにします。また、‘autotest.mk’は、‘~’に展開されているものとします。

     $ cd
     $ mkdir sort
     $ cd autotest.mk/sample/sort
     $ cp sort_normal.c sort_bug.c Makefile ~/sort

 作業用ディレクトリーに移動し、中のファイルを確認します。

     $ cd ~/sort
     $ ls
     Makefile  sort_normal.c  sort_bug.c

‘sort’関数ファイルの準備
------------------------

 ‘make’または‘make normal’で、‘sort_normal.c’が‘sort.c’にコピーされます
。

     $ make
     rm -f sort.c
     cp sort_normal.c sort.c

バグを含む‘sort’関数ファイルの準備
----------------------------------

 ‘make bug’で、‘sort_bug.c’が‘sort.c’にコピーされます。 この場合、
‘sort.c’はバグを含みます。

     $ make bug
     rm -f sort.c
     cp sort_bug.c sort.c

4.1 グループディレクトリーの作成
================================

 テンプレートディレクトリーで‘make’を実行し、グループディレクトリーを作
成します。このとき、テストグループのディレクトリーを変数‘GROUPDIR’で指定
します。ここでは、‘~/sort/test’をテストグループのディレクトリーにします
。

     $ cd ~/autotest.mk/template
     $ make GROUPDIR=~/sort/test

 次のコマンドでグループディレクトリーに移動し、その中を確認します。

     $ cd ~/sort/test
     $ ls
     Define.mk  Makefile  Test.mk

4.2 テストディレクトリーの作成
==============================

 グループディレクトリーで‘make create’を実行し、テストディレクトリーを作
成します。このとき、変数‘GROUPDIR’でテスト名を指定し、さらにC言語の関数
テスト用の‘Makefile’を作成するため変数‘SRC=c’を指定します。ここでは、1つ
めのテストを‘sort_001’という名前で作成します(1)。

     $ make create TEST=sort_001 SRC=c

 次のコマンドでテストディレクトリーに移動し、その中を確認します。

     $ cd sort_001
     $ ls
     Makefile

   ---------- Footnotes ----------

   (1) 「CUnit チュートリアル」の「テスト関数1」と「テスト関数2」を、チ
ュートリアルを説明しやすくするため入れ替えています。

4.3 関数テスト用プログラムのソース作成
======================================

 C言語の関数をテストするためのプログラムをC言語で記述した、プログラムの
ソースファイル‘cmd.c’をテキストエディターで作成します。テスト対象の関数
‘sort’を呼び出してソートを実行し、その結果を表示するプログラムです。

     #include <stdio.h>
     #ifndef ARRAYSIZE
     #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
     #endif

     void sort(int array[], int num);

     int main() {
         int i, array[] = {11, 7, 5, 3, 2};

         sort(array, ARRAYSIZE(array));
         for(i = 0; i < ARRAYSIZE(array); i++) {
             printf("%d\n", array[i]);
         }
         return 0;
     }

4.4 ‘Makefile’の編集
====================

 ‘Makefile’をテキストエディターで編集し、テスト対象ファイルをあらわす変
数‘TESTTARGET_FILES’を指定します。 ここでは、‘../../sort.c’を指定します
。

     include ../Define.mk
     include ../Test.mk

     CC := gcc
     CFLAGS := -Wall

     .INTERMEDIATE: $(CMD_FILE)

     CMDSRC_FILE := cmd.c
     TESTTARGET_FILES := ../../sort.c      # Set test target files

     COMPILE_FILE := compile.log

     $(CMD_FILE): $(CMDSRC_FILE) $(TESTTARGET_FILES)
     	$(CC) $(CFLAGS) -o $ $^ >$(COMPILE_FILE) 2>&1
     	cat $(COMPILE_FILE)

4.5 テスト説明ファイルの作成
============================

 テスト説明ファイル‘desc.txt’はテストに関する説明をあらわし、テストの結
果と一緒にログに出力されます。 ‘desc.txt’をテキストエディターを使って次
の内容で作成します。

     テスト関数1

4.6 テスト想定ファイルの作成
============================

 テスト想定ファイル‘0.txt’は、テストが正しく実行された場合の結果をあらわ
します。‘0.txt’の作成方法は、次の3つがあります。

   • 手動で作成

   • ‘make set’

   • ‘make reset’

 エラーが発生するテストでは、標準出力想定の下にエラー出力想定を続けます
。

4.6.1 手動で作成
----------------

 テスト想定ファイル‘0.txt’をテキストエディターを使って次の内容で作成しま
す。

     3

4.6.2 ‘make set’
----------------

 ‘make set’を実行すると、‘Makefile’の設定に従い関数テスト用のプログラム
ソース‘cmd.c’と関数ファイル‘../../sort.c’からコマンドファイル‘cmd’が作成
されます。そのあと‘cmd’が実行され、実行結果は‘0.txt’ファイルに出力されま
す。実行後、次回のテストのため、‘cmd’は自動的に削除されます。

     $ make set
     gcc -Wall -o cmd cmd.c ../../sort.c
     2
     3
     5
     7
     11
     rm cmd

 この方法で‘0.txt’を作成する場合は、作成された内容がテスト想定として本当
に正しいかよく検討する必要があります。

 ‘0.txt’がすでに存在する場合は‘make set’を実行するとエラーになり、
‘0.txt’は更新されません。例えば、バグを含む‘sort’関数ファイルを準備して
‘make set’を実行すると、仕様と異なる次のようなテスト想定となり、テストを
正しく実行できません。

     $ make set
     gcc -Wall -o cmd cmd.c ../../sort.c
     2
     2
     2
     2
     2
     rm cmd

4.6.3 ‘make reset’
------------------

 ‘0.txt’がすでに存在する場合は、‘make reset’で更新できます。

     $ make reset
     gcc -Wall -o cmd cmd.c ../../sort.c
     2
     3
     5
     7
     11
     rm cmd

4.7 テストの実行
================

 コマンドファイルとテスト想定を用意したら、‘make’または‘make check’でテ
ストを実行できます。

     $ ls
     0.txt  Makefile  cmd.c  desc.txt
     $ make
     sort_001: Test Success 2011-01-24 11:13:04
     Details in /home/foo/sort/test/sort_001/detail.log
     rm cmd

 表示される項目は、次のとおりです。

   • <テスト説明ファイル‘desc.txt’の内容>

   • <テスト名>: <テスト結果（Test SuccessまたはTest Failure）> <テスト
     実行日時>

   • Detail in <テスト詳細ログファイルの絶対パス>

バグを含む‘sort’関数の場合
--------------------------

 正しいテスト想定を作成していた場合にバグを含む‘sort’関数でテストを実行
すると、次のように表示されます。

     $ make
     gcc -Wall -o cmd cmd.c ../../sort.c
     make: [diff.log] Error 1 (ignored)
     テスト関数1
     sort_001: Test Failure 2011-01-24 11:09:34
     Details in /home/foo/sort/test/sort_001/detail.log
     rm cmd

4.8 テストログファイルの確認
============================

 テストを実行して作成されたファイルを確認します。‘1.txt’ ‘summary.log’
‘detail.log’が作成されています。

     $ ls
     0.txt  1.txt  Makefile  cmd  desc.txt  detail.log  summary.log

 テストを実行すると作成されるファイルは、次のとおりです。必要に応じてフ
ァイルの内容を確認します。

‘1.txt’
     テスト結果をあらわします。エラー発生時は、標準出力のあとにエラー出
     力が続きます

‘err.log’
     エラー発生時に、エラーが出力されます。エラーが発生しない場合は作成
     されません

‘diff.log’
     テスト想定ファイル‘0.txt’とテスト結果ファイル‘1.txt’の差分をあらわ
     します。想定と結果が同一の場合は、作成されません

‘summary.log’
     テストの実行結果を表します。テスト実行時に表示される項目です。

‘detail.log’
     テストの詳細ログを表します。上記の内容がすべて出力されます

 ‘detail.log’は、次のようになります。

     == summary.log ==
     ----------------------------------------------------------------------
     テスト関数1
     sort_001: Test Success 2011-01-24 11:13:04
     Details in /Users/kazubito/2011_01/sort/test/sort_001/detail.log
     ----------------------------------------------------------------------

     == cmd.c ==
     ----------------------------------------------------------------------
     #include <stdio.h>
     #ifndef ARRAYSIZE
     #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
     #endif

     void sort(int array[], int num);

     int main() {
         int i, array[] = {11, 7, 5, 3, 2};

         sort(array, ARRAYSIZE(array));
         for(i = 0; i < ARRAYSIZE(array); i++) {
             printf("%d\n", array[i]);
         }
         return 0;
     }
     ----------------------------------------------------------------------

     == 0.txt ==
     ----------------------------------------------------------------------
     2
     3
     5
     7
     11
     ----------------------------------------------------------------------

     == 1.txt ==
     ----------------------------------------------------------------------
     2
     3
     5
     7
     11
     ----------------------------------------------------------------------

バグを含む‘sort’関数の場合
--------------------------

 バグを含む‘sort’関数を準備してテストを実行した場合、‘1.txt’
‘summary.log’ ‘detail.log’のほかに、テスト想定とテスト結果が異なるため
‘diff.log’が作成されます。

     $ ls
     0.txt  1.txt  Makefile  cmd  desc.txt  detail.log  diff.log  summary.log

 ‘detail.log’は次のようになります。

     == summary.log ==
     ----------------------------------------------------------------------
     テスト関数1
     sort_001: Test Failure 2011-01-24 11:09:34
     Details in /home/foo/sort/test/sort_001/detail.log
     ----------------------------------------------------------------------

     == cmd.c ==
     ----------------------------------------------------------------------
     #include <stdio.h>
     #ifndef ARRAYSIZE
     #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
     #endif

     void sort(int array[], int num);

     int main() {
         int i, array[] = {11, 7, 5, 3, 2};

         sort(array, ARRAYSIZE(array));
         for(i = 0; i < ARRAYSIZE(array); i++) {
             printf("%d\n", array[i]);
         }
         return 0;
     }
     ----------------------------------------------------------------------

     == 0.txt ==
     ----------------------------------------------------------------------
     2
     3
     5
     7
     11
     ----------------------------------------------------------------------

     == diff.log ==
     ----------------------------------------------------------------------
     *** 0.txt	2011-01-24 11:07:39.000000000 +0900
     --- 1.txt   2011-01-24 11:09:34.000000000 +0900
     ***************
     *** 1,5 ****
       2
     ! 3
     ! 5
     ! 7
     ! 11
     --- 1,5 ----
       2
     ! 2
     ! 2
     ! 2
     ! 2
     ----------------------------------------------------------------------

     == 1.txt ==
     ----------------------------------------------------------------------
     2
     2
     2
     2
     2
     ----------------------------------------------------------------------

4.8.1 テストのクリア
--------------------

 ‘make clean’を実行すると、テストの結果作成されたファイルがクリアされま
す。

     $ make clean
     $ ls
     0.txt  Makefile  cmd.c  desc.txt

4.9 テストグループの実行
========================

 2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクト
リーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファ
イルを作成します。

 ここでは、先に作成した‘sort_001’も含めて、次のようなディレクトリーとフ
ァイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの
‘sample/sort/test’以下にあります。

   • sort_001

        • ‘Makefile’ ‘desc.txt’ ‘cmd.c’ ‘0.txt’

   • sort_002

        • ‘Makefile’ ‘desc.txt’ ‘cmd.c’ ‘0.txt’

   • sort_003

        • ‘Makefile’ ‘desc.txt’ ‘cmd.c’ ‘0.txt’

   • sort_004

        • ‘Makefile’ ‘desc.txt’ ‘cmd.c’ ‘0.txt’

   • sort_005

        • ‘Makefile’ ‘desc.txt’ ‘cmd.c’ ‘0.txt’

 テストグループディレクトリーでは、‘make’または‘make check’で複数のテス
トをまとめて実行できます。

     $ cd ~/sort/test
     $ make
     test:        5 / 5 tests passed. Details in /home/foo/sort/test/TEST.log
     test: All tests are succeded.

 表示されるのは、次の項目です。
   • <テスト名>: <成功テスト数>/<全テスト数> test passed.  Detail in <テ
     ストグループログファイルの絶対パス>

   • （すべてのテストに成功した場合）<テスト名>: All tests are succeded.

バグを含む‘sort’関数の場合
--------------------------

 バグを含む‘sort’関数を準備してテストグループを実行した場合、次のように
表示されます。失敗したテストがあることをあらわしています。

     $ cd ~/sort/test
     $ make
     test: 1 / 5 tests passed. Details in /home/foo/sort/test/TEST.log

4.10 テストグループログファイルの確認
=====================================

 テストグループを実行すると作成されるファイルは、次のとおりです。

‘<テストグループ名を大文字にした文字列>.log’
     テストグループに含まれるテストとその実行結果の一覧をあらわします。

‘Summary.log’
     テストの実行結果を表します。テストグループ実行時に表示される内容で
     す。

 ここではテストグループ名は‘test’なので、‘TEST.log’が次の内容で作成され
ます。

     sort_001/
     テスト関数1
     sort_001: Test Success 2011-01-24 11:37:46
     Details in /home/foo/sort/test/sort_001/detail.log

     sort_002/
     テスト関数1
     sort_002: Test Success 2011-01-24 11:37:46
     Details in /home/foo/sort/test/sort_002/detail.log

     sort_003/
     テスト関数3
     sort_003: Test Success 2011-01-24 11:37:46
     Details in /home/foo/sort/test/sort_003/detail.log

     sort_004/
     テスト関数4
     sort_004: Test Success 2011-01-24 11:37:46
     Details in /home/foo/sort/test/sort_004/detail.log

     sort_005/
     テスト関数5
     sort_005: Test Success 2011-01-24 11:37:47
     Details in /home/foo/sort/test/sort_005/detail.log

 テストをまとめて実行した場合も、個別のテストを実行した場合と同様に、テ
ストディレクトリーにテストログが出力されます。特定のテスト結果を詳細に検
討する場合は、そのテストのテストディレクトリーを開いてテストログファイル
の確認をします。

バグを含む‘sort’関数の場合
--------------------------

 バグを含む‘sort’関数を準備してテストグループを実行した場合、
‘TEST.log’は次のように表示されます。sort_001、sort_003、sort_004、
sort_005のテストで失敗していることがわかります。

     sort_001/
     テスト関数1
     sort_001: Test Failure 2011-01-24 12:03:02
     Details in /home/foo/sort/test/sort_001/detail.log

     sort_002/
     テスト関数1
     sort_002: Test Success 2011-01-24 12:03:02
     Details in /home/foo/sort/test/sort_002/detail.log

     sort_003/
     テスト関数3
     sort_003: Test Failure 2011-01-24 12:03:02
     Details in /home/foo/sort/test/sort_003/detail.log

     sort_004/
     テスト関数4
     sort_004: Test Failure 2011-01-24 12:03:02
     Details in /home/foo/sort/test/sort_004/detail.log

     sort_005/
     テスト関数5
     sort_005: Test Failure 2011-01-24 12:03:04
     Details in /home/foo/sort/test/sort_005/detail.log

4.11 開発とテストの反復
=======================

 あとはテスト対象となっている関数を変更するたびに、テストを実行できるよ
うになります。つまり、関数の単位で開発とテストを反復してできます。

 関数の実装だけが変更されて仕様が変わっていない場合は、テストグループの
ディレクトリーで‘make’を実行するだけでテストができます。

 関数の入力または出力の仕様が変わった場合には、‘0.txt’と‘cmd.c’の変更を
検討します。関数のコンパイル方法（依存するファイル）が変わった場合は、
‘Makefile’の変更を検討します。

5 テンプレートディレクトリー マニュアル
***************************************

 テンプレートディレクトリーは、Autotest.mkをインストールするときに展開に
より作成された‘template’ディレクトリーです。

5.1 ‘make’または‘make group’ - グループディレクトリーの作成
===========================================================

 変数‘GROUPDIR’で指定されたディレクトリーをテストグループディレクトリー
として作成し、テストの実行に必要な次のファイルを配置します。

   • ‘Define.mk’

   • ‘Makefile’

   • ‘Test.mk’

 通常、テストに必要なファイルテンプレートディレクトリーからグループディ
レクトリーにコピーされます。変数‘LINKMK’を指定した場合は、シンボリックリ
ンクが作成されます。

5.1.1 変数
----------

‘GROUPDIR’
     テストディレクトリーを指定します。指定しない場合や既存のディレクト
     リーを指定した場合は、エラーが発生してテストグループディレクトリー
     は作成されません。

‘LINKMK’
     指定した場合、グループディレクトリーにテストの実行に必要なファイル
     のシンボリックリンクが作成されます。値は任意です。シンボリックリン
     クのリンク先は、テンプレートディレクトリーの中です。

使用例
------

 グループディレクトリーとして‘~/triangle/test’を作成します。

     $ make GROUPDIR=~/triangle/test

5.2 テンプレートのファイル
==========================

 テンプレートディレクトリーには、次のファイルが含まれます。
‘Makefile’
     テンプレートディレクトリーのMakefile

‘Group.mk’
     グループディレクトリーのMakefile。‘make’または‘make group’で、グル
     ープディレクトリーに‘Makefile’として配置されます。

‘Test.mk’
     テストディレクトリーから参照されるMakefile。‘make’または‘make
     group’で、グループディレクトリーに配置されます。

‘Define.mk’
     テストとテストグループに関する項目を定義したMakefile。‘make’または
     ‘make group’で、グループディレクトリーに配置されます。

6 グループディレクトリー マニュアル
***********************************

 See グループディレクトリーの作成.後、グループディレクトリ
ーに移動すると次の操作ができます。

6.1 ‘make create’ - テストの作成
================================

 変数‘TEST’で指定されたディレクトリーをテストディレクトリーとして作成し
、ディレクトリーの中に‘Makefile’を作成します。

 テスト名は、小文字のアルファベットと数字で指定します。大文字ではじまる
名前を指定した場合、ディレクトリーや‘Makefile’は作成されるものの、テスト
グループ実行の対象になりません。

 変数‘SRC=c’を指定した場合は、C言語の関数テスト用の‘Makefile’が作成され
ます。

6.1.1 変数
----------

‘TEST’
     テストディレクトリー名を指定します。

‘SRC’
     値‘c’を指定すると、C言語の関数テスト用の‘Makefile’が作成されます。

使用例
------

 テストディレクトリーを、‘01_scalene’という名前で作成します。

     $ make create TEST=01_scalene

6.2 テスト名の変更とコピー
==========================

 テスト名を変更したりテストをコピーしたりする場合は、‘mv’や‘cp’などでテ
ストディレクトリーを移動、コピーします。

使用例
------

 テスト名‘01_scalene’を‘01’に変更します。

     $ mv 01_scalene 01

 テスト‘01’をコピーし、テスト‘02’を作成します。

     $ cp -r 01 02

6.3 テストの削除
================

 テストを削除する場合は、‘rm’などでテストディレクトリーを削除します。

使用例
------

     $ rm -rf 01_scalene

6.4 ‘make’または‘make check’ - テストグループの実行
===================================================

 ‘make’または‘make check’で、グループ内にあるすべてのテストの実行.
をし、次の項目を表示します。

   • <テスト名>: <成功テスト数>/<全テスト数> test passed.  Detail in <テ
     ストグループログファイルの絶対パス>

   • （すべてのテストに成功した場合）<テスト名>: All tests are succeded.

 テストグループを実行すると次のファイルが作成されます。

‘<テストグループ名を大文字にした文字列>.log’
     テストグループに含まれるテストとその実行結果の一覧をあらわします。

‘Summary.log’
     テスト実行結果の概要を表します。テストグループ実行時に表示される内
     容です。

使用例
------

     $ make
     test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
     test: All tests are succeded.

6.5 ‘make checkall’ - グループ内にあるすべてのテストの実行、計時
================================================================

 ‘make checkall’でグループ内にあるすべてのテストを、see 実行.
し、see 計時.します。See
テストグループの実行.と同じ項目を表示し、出力される
ファイルの種類も同じです。‘<テストグループ名を大文字にした文字列>.log’に
は、テストと実行結果に加え、計時結果が一覧として出力されます。

 テストの実行と計時は別に行われるため、通常にテストを実行するよりも2倍程
度の時間がかかります。

使用例
------

     $ make checkall
     test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
     test: All tests are succeded.

6.6 ‘make clean’ - グループの実行結果をクリア
=============================================

 ‘make clean’で、see ‘make’または‘make check’.や
‘make checkall’.により作成されたファイルをすべて削
除します。グループディレクトリーのほか、テストディレクトリーのファイルも
削除されます。

使用例
------

     $ make clean

6.7 ‘make time’ - グループ内にあるすべてのテストを計時
======================================================

 ‘make time’で、グループ内にあるすべてのテストを計時し、その結果が表示さ
れます。計時結果は、‘<テストグループ名を大文字にした文字列>_time.log’に
格納されます。

使用例
------

     $ make time
     01_scalene/
     real    0m0.007s

     02_equilateral/
     real    0m0.007s

     03_isosceles/
     real    0m0.007s

     04_isosceles_c/
     real    0m0.013s

     05_zero/
     real    0m0.010s

     06_minus/
     real    0m0.007s

     07_line/
     real    0m0.008s

     08_lines/
     real    0m0.024s

     09_less/
     real    0m0.009s

     10_lesses/
     real    0m0.024s

     11_zeroall/
     real    0m0.007s

     12_notint/
     real    0m0.007s

     13_argcnt/
     real    0m0.012s

6.8 ‘make time-clean’ - グループの計時結果をクリア
==================================================

 ‘make time-clean’で、‘make time’により作成されたテストグループディレク
トリーと各テストディレクトリーのファイルをすべて削除します。

使用例
------

     $ make time-clean

6.9 グループディレクトリーのファイル
====================================

 グループディレクトリーには、テストディレクトリーに加えて、次のファイル
が含まれます。

‘Makefile’
     グループディレクトリーのMakefile

‘Test.mk’
     テストディレクトリーから参照されるMakefile

‘Define.mk’
     テストとテストグループに関する項目を定義したMakefile

‘<テストグループ名を大文字にした文字列>.log’
     See ‘make’または‘make check’.や‘make checkall’.
     を実行したときに作成されます。‘make’や
     ‘make check’の場合は、テストグループに含まれるテストと実行結果の一
     覧です。‘make checkall’の場合は、テストと実行結果と計時結果の一覧で
     す。

‘Summary.log’
     テスト実行結果の概要です。See ‘make’または‘make check’.
     や‘make checkall’.を実行すると
     作成され、その内容が表示されます。

7 テストディレクトリー マニュアル
*********************************

7.1 ‘make set’ - テスト想定の作成
=================================

 ‘make set’で、テストコマンド‘cmd’が実行され、テスト想定ファイル
‘0.txt’が作成されます。また、実行時に‘0.txt’の内容が表示されます。
‘0.txt’がすでにある場合は、エラーが発生して‘0.txt’は更新されません。

使用例
------

     $ make set
     scalene triangle

7.2 ‘make reset’ - テスト想定の作成または更新
=============================================

 ‘make reset’で、テストコマンド‘cmd’が実行され、テスト想定ファイル
‘0.txt’を作成されます。また、実行時に‘0.txt’の内容が表示されます。
‘0.txt’がすでにある場合、‘0.txt’が更新されます。

使用例
------

     $ make reset
     scalene triangle

7.3 ‘make’または‘make check’ - テストの実行
===========================================

 ‘make’または‘make check’で、テストコマンド‘cmd’が実行され、テスト結果フ
ァイル‘1.txt’が作成されます。また、実行時にテストの結果をあらわす次の項
目が表示されます。

   • <テスト説明ファイル‘desc.txt’の内容>

   • <テスト名>: <テスト結果（Test SuccessまたはTest Failure）> <テスト
     実行日時>

   • Detail in <テスト詳細ログファイルの絶対パス>

使用例
------

     $ make
     有効な不等辺三角形をあらわすテスト・ケース
     01_scalene: Test Success 2011-01-10 10:09:55
     Detail in /home/foo/triangle/test/01_scalene/detail.log

7.4 ‘make clean’ - テスト結果のクリア
=====================================

 ‘make clean’で、テストの実行または計時の結果作成された次のファイルが削
除されます。

   • ‘1.txt’

   • ‘diff.log’

   • ‘err.log’

   • ‘summary.log’

   • ‘time.log’

使用例
------

     $ make clean
     $ ls
     0.txt  Makefile  cmd  desc.txt

7.5 ‘make all-clean’ - テストの想定と結果をクリア
=================================================

 ‘make clean’で次の、テストの想定ファイルとテストの実行または計時の結果
作成されたファイルが削除されます。

   • ‘0.txt’

   • ‘1.txt’

   • ‘diff.log’

   • ‘err.log’

   • ‘summary.log’

   • ‘time.log’

使用例
------

     $ make all-clean
     $ ls
     Makefile  cmd  desc.txt

7.6 ‘make time’ - テストの計時
==============================

 ‘make time’で、テストを計時しその結果が表示されます。計時結果は、
‘time.log’に格納されます。

使用例
------

     $ make time
     real  0m0.006s

7.7 ‘make time-clean’ - テスト計時結果のクリア
==============================================

 ‘make time-clean’で、テストの計時の結果作成された次のファイルが削除され
ます。

   • ‘time.log’

使用例
------

     $ make time-clean

7.8 テストディレクトリーのファイル
==================================

‘Makefile’
     テストディレクトリーのMakefile

‘cmd’
     テスト時に実行されるコマンドをあらわすテストコマンドファイル。手動
     で作成します。

‘desc.txt’
     テストに関する説明をあらわし、テストの結果と一緒にログに出力されま
     す。手動で作成します。

‘0.txt’
     テストが正しく実行された場合の結果をあらわすテスト想定ファイル。エ
     ラー発生時は、標準出力のあとにエラー出力を続けます。手動か、‘make
     set’か、‘make reset’で作成します。

‘1.txt’
     テスト結果をあらわします。エラー発生時は、標準出力のあとにエラー出
     力が続きます。‘make’または‘make check’で作成されます。

‘diff.log’
     テストの想定と結果の差分をあらわす差分ファイル。‘make’または‘make
     check’でテストを実行した結果、想定と差分が異なる場合に作成されます
     。想定と結果が同じ場合は作成されません。

‘err.log’
     テストのエラー出力をあらわすエラーファイル。‘make’または‘make
     check’でテストを実行した結果、エラー出力がある場合に作成されます。
     なお、エラー出力は‘1.txt’にも含まれます。

‘summary.log’
     テスト実行結果の概要です。‘make’または‘make check’で作成され、その
     内容が表示されます。

‘detail.log’
     テスト実行結果の詳細です。‘summary.log’ ‘cmd’ ‘0.txt’ ‘err.log’
     ‘diff.log’ ‘1.txt’の内容がコピーされます。‘make’または‘make check’で
     作成されます。