<ul class="menu">
<li><a accesskey="1" href="#About">About</a>: Autotest.mk 概要
<li><a accesskey="2" href="#Install">Install</a>: Autotest.mk インストール
-<li><a accesskey="3" href="#Tutorial">Tutorial</a>: Autotest.mk チュートリアル
-<li><a accesskey="4" href="#Template-dir">Template dir</a>: テンプレートディレクトリー マニュアル
-<li><a accesskey="5" href="#Group-dir">Group dir</a>: グループディレクトリー マニュアル
-<li><a accesskey="6" href="#Test-dir">Test dir</a>: テストディレクトリー マニュアル
+<li><a accesskey="3" href="#Tutorial-triangle">Tutorial triangle</a>: Autotest.mk チュートリアルI - 三角形判定プログラムのテスト
+<li><a accesskey="4" href="#Tutorial-sort">Tutorial sort</a>: Autotest.mk チュートリアルII - C言語<code>sort</code>関数のテスト
+<li><a accesskey="5" href="#Template-dir">Template dir</a>: テンプレートディレクトリー マニュアル
+<li><a accesskey="6" href="#Group-dir">Group dir</a>: グループディレクトリー マニュアル
+<li><a accesskey="7" href="#Test-dir">Test dir</a>: テストディレクトリー マニュアル
</ul>
<li><a href="#Expand">2.4 展開</a>
<li><a href="#Dir">2.5 ディレクトリー</a>
</li></ul>
-<li><a name="toc_Tutorial" href="#Tutorial">3 Autotest.mk チュートリアル - 三角形判定プログラムのテスト</a>
+<li><a name="toc_Tutorial-triangle" href="#Tutorial-triangle">3 Autotest.mk チュートリアルI - 三角形判定プログラムのテスト</a>
<ul>
-<li><a href="#Tutorial-About">概要</a>
-<li><a href="#Prepare">準備</a>
+<li><a href="#Tutorial-triangle-About">概要</a>
+<li><a href="#Prepare-triangle">準備</a>
<ul>
-<li><a href="#Prepare">作業用フォルダの作成</a>
-<li><a href="#Prepare">三角形判定プログラムのビルド</a>
-<li><a href="#Prepare">バグを含む三角形判定プログラムのビルド</a>
+<li><a href="#Prepare-triangle">作業用フォルダの作成</a>
+<li><a href="#Prepare-triangle">三角形判定プログラムのビルド</a>
+<li><a href="#Prepare-triangle">バグを含む三角形判定プログラムのビルド</a>
</li></ul>
-<li><a href="#Create-Group">3.1 グループディレクトリーの作成</a>
-<li><a href="#Create-Test">3.2 テストディレクトリーの作成</a>
-<li><a href="#Edit-desc">3.3 テスト説明ファイルの作成</a>
-<li><a href="#Edit-cmd">3.4 テストコマンドファイルの作成</a>
-<li><a href="#Test-Setting">3.5 テスト想定ファイルの作成</a>
+<li><a href="#Create-triangle-group">3.1 グループディレクトリーの作成</a>
+<li><a href="#Create-triangle-test">3.2 テストディレクトリーの作成</a>
+<li><a href="#Edit-triangle-desc">3.3 テスト説明ファイルの作成</a>
+<li><a href="#Edit-triangle-cmd">3.4 テストコマンドファイルの作成</a>
+<li><a href="#Set-triangle-test">3.5 テスト想定ファイルの作成</a>
<ul>
-<li><a href="#Test-Setting">3.5.1 手動で作成</a>
-<li><a href="#Test-Setting">3.5.2 <kbd>make set</kbd></a>
-<li><a href="#Test-Setting">3.5.3 <kbd>make reset</kbd></a>
+<li><a href="#Set-triangle-test">3.5.1 手動で作成</a>
+<li><a href="#Set-triangle-test">3.5.2 <kbd>make set</kbd></a>
+<li><a href="#Set-triangle-test">3.5.3 <kbd>make reset</kbd></a>
</li></ul>
-<li><a href="#Test-Execute">3.6 テストの実行</a>
+<li><a href="#Execute-triangle-test">3.6 テストの実行</a>
<ul>
-<li><a href="#Test-Execute">バグを含む三角形判定プログラムの場合</a>
+<li><a href="#Execute-triangle-test">バグを含む三角形判定プログラムの場合</a>
</li></ul>
-<li><a href="#Check-Test-Log">3.7 テストログファイルの確認</a>
+<li><a href="#Check-triangle-log">3.7 テストログファイルの確認</a>
<ul>
-<li><a href="#Check-Test-Log">バグを含む三角形判定プログラムの場合</a>
-<li><a href="#Check-Test-Log">3.7.1 テストのクリア</a>
+<li><a href="#Check-triangle-log">バグを含む三角形判定プログラムの場合</a>
+<li><a href="#Check-triangle-log">3.7.1 テストのクリア</a>
</li></ul>
-<li><a href="#Group-Execute">3.8 テストグループの実行</a>
+<li><a href="#Execute-triangle-group">3.8 テストグループの実行</a>
<ul>
-<li><a href="#Group-Execute">バグを含む三角形判定プログラムの場合</a>
+<li><a href="#Execute-triangle-group">バグを含む三角形判定プログラムの場合</a>
</li></ul>
-<li><a href="#Check-Group-Log">3.9 テストグループログファイルの確認</a>
+<li><a href="#Check-triangle-group-log">3.9 テストグループログファイルの確認</a>
<ul>
-<li><a href="#Check-Group-Log">バグを含む三角形判定プログラムの場合</a>
+<li><a href="#Check-triangle-group-log">バグを含む三角形判定プログラムの場合</a>
</li></ul>
-<li><a href="#Associate">3.10 ビルドとの連携</a>
+<li><a href="#Associate-triangle">3.10 ビルドとの連携</a>
</li></ul>
-<li><a name="toc_Template-dir" href="#Template-dir">4 テンプレートディレクトリー マニュアル</a>
+<li><a name="toc_Tutorial-sort" href="#Tutorial-sort">4 Autotest.mk チュートリアルII - C言語<code>sort</code>関数のテスト</a>
<ul>
-<li><a href="#make-group">4.1 <kbd>make</kbd>または<kbd>make group</kbd> - グループディレクトリーの作成</a>
+<li><a href="#Tutorial-sort-About">概要</a>
+<li><a href="#Prepare-sort">準備</a>
<ul>
-<li><a href="#make-group">4.1.1 変数</a>
+<li><a href="#Prepare-sort">作業用フォルダの作成</a>
+<li><a href="#Prepare-sort"><code>sort</code>関数ファイルの準備</a>
+<li><a href="#Prepare-sort">バグを含む<code>sort</code>関数ファイルの準備</a>
+</li></ul>
+<li><a href="#Create-sort-group">4.1 グループディレクトリーの作成</a>
+<li><a href="#Create-sort-test">4.2 テストディレクトリーの作成</a>
+<li><a href="#Create-sort-src">4.3 関数テスト用プログラムのソース作成</a>
+<li><a href="#Edit-sort-Makefile">4.4 <samp><span class="file">Makefile</span></samp>の編集</a>
+<li><a href="#Edit-sort-desc">4.5 テスト説明ファイルの作成</a>
+<li><a href="#Set-sort-test">4.6 テスト想定ファイルの作成</a>
+<ul>
+<li><a href="#Set-sort-test">4.6.1 手動で作成</a>
+<li><a href="#Set-sort-test">4.6.2 <kbd>make set</kbd></a>
+<li><a href="#Set-sort-test">4.6.3 <kbd>make reset</kbd></a>
+</li></ul>
+<li><a href="#Execute-sort-test">4.7 テストの実行</a>
+<ul>
+<li><a href="#Execute-sort-test">バグを含む<code>sort</code>関数の場合</a>
+</li></ul>
+<li><a href="#Check-sort-log">4.8 テストログファイルの確認</a>
+<ul>
+<li><a href="#Check-sort-log">バグを含む<code>sort</code>関数の場合</a>
+<li><a href="#Check-sort-log">4.8.1 テストのクリア</a>
+</li></ul>
+<li><a href="#Execute-sort-group">4.9 テストグループの実行</a>
+<ul>
+<li><a href="#Execute-sort-group">バグを含む<code>sort</code>関数の場合</a>
+</li></ul>
+<li><a href="#Check-sort-group-log">4.10 テストグループログファイルの確認</a>
+<ul>
+<li><a href="#Check-sort-group-log">バグを含む<code>sort</code>関数の場合</a>
+</li></ul>
+<li><a href="#Iteretive">4.11 開発とテストの反復</a>
+</li></ul>
+<li><a name="toc_Template-dir" href="#Template-dir">5 テンプレートディレクトリー マニュアル</a>
+<ul>
+<li><a href="#make-group">5.1 <kbd>make</kbd>または<kbd>make group</kbd> - グループディレクトリーの作成</a>
+<ul>
+<li><a href="#make-group">5.1.1 変数</a>
<li><a href="#make-group">使用例</a>
</li></ul>
-<li><a href="#Template-Files">4.2 テンプレートのファイル</a>
+<li><a href="#Template-files">5.2 テンプレートのファイル</a>
</li></ul>
-<li><a name="toc_Group-dir" href="#Group-dir">5 グループディレクトリー マニュアル</a>
+<li><a name="toc_Group-dir" href="#Group-dir">6 グループディレクトリー マニュアル</a>
<ul>
-<li><a href="#make-create">5.1 <kbd>make create</kbd> - テストの作成</a>
+<li><a href="#make-create">6.1 <kbd>make create</kbd> - テストの作成</a>
<ul>
+<li><a href="#make-create">6.1.1 変数</a>
<li><a href="#make-create">使用例</a>
</li></ul>
-<li><a href="#Rename-and-Copy">5.2 テスト名の変更とコピー</a>
+<li><a href="#Rename-and-Copy">6.2 テスト名の変更とコピー</a>
<ul>
<li><a href="#Rename-and-Copy">使用例</a>
</li></ul>
-<li><a href="#Delete">5.3 テストの削除</a>
+<li><a href="#Delete">6.3 テストの削除</a>
<ul>
<li><a href="#Delete">使用例</a>
</li></ul>
-<li><a href="#make-check-at-group">5.4 <kbd>make</kbd>または<kbd>make check</kbd> - テストグループの実行</a>
+<li><a href="#make-check-at-group">6.4 <kbd>make</kbd>または<kbd>make check</kbd> - テストグループの実行</a>
<ul>
<li><a href="#make-check-at-group">使用例</a>
</li></ul>
-<li><a href="#make-checkall">5.5 <kbd>make checkall</kbd> - グループ内にあるすべてのテストの実行、計時</a>
+<li><a href="#make-checkall">6.5 <kbd>make checkall</kbd> - グループ内にあるすべてのテストの実行、計時</a>
<ul>
<li><a href="#make-checkall">使用例</a>
</li></ul>
-<li><a href="#make-clean-at-group">5.6 <kbd>make clean</kbd> - グループの実行結果をクリア</a>
+<li><a href="#make-clean-at-group">6.6 <kbd>make clean</kbd> - グループの実行結果をクリア</a>
<ul>
<li><a href="#make-clean-at-group">使用例</a>
</li></ul>
-<li><a href="#make-time-at-group">5.7 <kbd>make time</kbd> - グループ内にあるすべてのテストを計時</a>
+<li><a href="#make-time-at-group">6.7 <kbd>make time</kbd> - グループ内にあるすべてのテストを計時</a>
<ul>
<li><a href="#make-time-at-group">使用例</a>
</li></ul>
-<li><a href="#make-cleantime-at-group">5.8 <kbd>make cleantime</kbd> - グループの計時結果をクリア</a>
-<li><a href="#Group-Files">5.9 グループディレクトリーのファイル</a>
+<li><a href="#make-cleantime-at-group">6.8 <kbd>make cleantime</kbd> - グループの計時結果をクリア</a>
+<ul>
+<li><a href="#make-cleantime-at-group">使用例</a>
+</li></ul>
+<li><a href="#Group-files">6.9 グループディレクトリーのファイル</a>
</li></ul>
-<li><a name="toc_Test-dir" href="#Test-dir">6 テストディレクトリー マニュアル</a>
+<li><a name="toc_Test-dir" href="#Test-dir">7 テストディレクトリー マニュアル</a>
<ul>
-<li><a href="#make-set">6.1 <kbd>make set</kbd> - テスト想定の作成</a>
+<li><a href="#make-set">7.1 <kbd>make set</kbd> - テスト想定の作成</a>
<ul>
<li><a href="#make-set">使用例</a>
</li></ul>
-<li><a href="#make-reset">6.2 <kbd>make reset</kbd> - テスト想定の作成または更新</a>
+<li><a href="#make-reset">7.2 <kbd>make reset</kbd> - テスト想定の作成または更新</a>
<ul>
<li><a href="#make-reset">使用例</a>
</li></ul>
-<li><a href="#make-check-at-test">6.3 <kbd>make</kbd>または<kbd>make check</kbd> - テストの実行</a>
+<li><a href="#make-check-at-test">7.3 <kbd>make</kbd>または<kbd>make check</kbd> - テストの実行</a>
<ul>
<li><a href="#make-check-at-test">使用例</a>
</li></ul>
-<li><a href="#make-clean-at-test">6.4 <kbd>make clean</kbd> - テスト結果のクリア</a>
+<li><a href="#make-clean-at-test">7.4 <kbd>make clean</kbd> - テスト結果のクリア</a>
<ul>
<li><a href="#make-clean-at-test">使用例</a>
</li></ul>
-<li><a href="#make-cleanall-at-test">6.5 <kbd>make cleanall</kbd> - テストの想定と結果をクリア</a>
+<li><a href="#make-cleanall-at-test">7.5 <kbd>make cleanall</kbd> - テストの想定と結果をクリア</a>
<ul>
<li><a href="#make-cleanall-at-test">使用例</a>
</li></ul>
-<li><a href="#make-time-at-test">6.6 <kbd>make time</kbd> - テストの計時</a>
+<li><a href="#make-time-at-test">7.6 <kbd>make time</kbd> - テストの計時</a>
<ul>
<li><a href="#make-time-at-test">使用例</a>
</li></ul>
-<li><a href="#make-cleantime-at-test">6.7 <kbd>make cleantime</kbd> - テスト計時結果のクリア</a>
-<li><a href="#Test-Files">6.8 テストディレクトリーのファイル</a>
+<li><a href="#make-cleantime-at-test">7.7 <kbd>make cleantime</kbd> - テスト計時結果のクリア</a>
+<ul>
+<li><a href="#make-cleantime-at-test">使用例</a>
+</li></ul>
+<li><a href="#Test-files">7.8 テストディレクトリーのファイル</a>
</li></ul>
</li></ul>
</div>
<h2 class="chapter">1 Autotest.mk 概要</h2>
-<p>Autotest.mkは、GNU Makeを利用したソフトウェアテスト自動化ツールです。何回か<kbd>make</kbd>コマンドを実行し、コマンドファイルとテスト結果の想定をあらわすファイルを作成すれば、テストの準備は完了です。あとは<kbd>make</kbd>コマンドを1回実行すれば、テストを実行できます。テストが実行されると、詳細なログが出力されます。
+ <p>Autotest.mkは、GNU Makeを利用したソフトウェアテスト自動化ツールです。何回か<kbd>make</kbd>コマンドを実行し、コマンドファイルとテスト結果の想定をあらわすファイルを作成すれば、テストの準備は完了です。あとは<kbd>make</kbd>コマンドを1回実行すれば、テストを実行できます。テストが実行されると、詳細なログが出力されます。
<h3 class="section">1.1 特徴</h3>
-<p>Autotest.mkの特徴は次のとおりです。
+ <p>Autotest.mkの特徴は次のとおりです。
<ul>
<li>使い方がシンプル
<div class="node">
<a name="Install"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Tutorial">Tutorial</a>,
+Next: <a rel="next" accesskey="n" href="#Tutorial-triangle">Tutorial triangle</a>,
Previous: <a rel="previous" accesskey="p" href="#About">About</a>,
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
<h3 class="section">2.1 要件</h3>
-<p>Autotest.mkは、LinuxやMac OS Xなどで動作します。現在動作を確認しているのは、次のディストリビューションです。
+ <p>Autotest.mkは、LinuxやMac OS Xなどで動作します。現在動作を確認しているのは、次のディストリビューションです。
<ul>
<li>Ubuntu Linux 10.10
<h3 class="section">2.2 ダウンロード</h3>
-<p><a href="http://www.j8takagi.net/autotest_mk/">Autotest_mkのサイト</a>または<a href="http://github.com/j8takagi/Autotest.mk/downloads/">githubのダウンロードページ</a>から最新版の<samp><span class="file">tar.gz</span></samp>ファイルをダウンロードします。
+ <p><a href="http://www.j8takagi.net/autotest_mk/">Autotest_mkのサイト</a>または<a href="http://github.com/j8takagi/Autotest.mk/downloads/">githubのダウンロードページ</a>から最新版の<samp><span class="file">tar.gz</span></samp>ファイルをダウンロードします。
<div class="node">
<a name="Verify"></a>
<h3 class="section">2.3 検証</h3>
-<p>ダウンロードが完了したら、<kbd>openssl</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
+ <p>ダウンロードが完了したら、<kbd>openssl</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
-<pre class="example"> $ <kbd>openssl md5 autotest_mk.tar.gz | diff -s autotest_mk.tar.gz.md5sum -</kbd>
- Files autotest_mk.tar.gz.md5sum and - are identical
+<pre class="example">$ <kbd>openssl md5 autotest_mk.tar.gz | diff -s autotest_mk.tar.gz.md5sum -</kbd>
+Files autotest_mk.tar.gz.md5sum and - are identical
</pre>
<div class="node">
<a name="Expand"></a>
<h3 class="section">2.4 展開</h3>
-<p><samp><span class="file">autotest_mk</span></samp>ファイルをダウンロードしたら、展開先のディレクトリーに移動してから、展開します。
+ <p><samp><span class="file">autotest_mk</span></samp>ファイルをダウンロードしたら、展開先のディレクトリーに移動してから、展開します。
次のコマンドでは、現在ログインしているユーザーのホームディレクトリーに展開します。
-<pre class="example"> $ <kbd>cd ~</kbd>
- $ <kbd>tar xvzf autotest_mk.tar.gz</kbd>
+<pre class="example">$ <kbd>cd ~</kbd>
+$ <kbd>tar xvzf autotest_mk.tar.gz</kbd>
</pre>
<p>展開したら、Autotest.mkは使えるようになります。多くのプログラムをインストールするときに必要なコンパイルやビルド、システムディレクトリーへのインストール(<kbd>./configure</kbd>や<kbd>make</kbd>、<kbd>make install</kbd>)は必要ありません。
<h3 class="section">2.5 ディレクトリー</h3>
-<p>Autotest.mkでテストを実行するときは、次の3つのディレクトリーを使います。
+ <p>Autotest.mkでテストを実行するときは、次の3つのディレクトリーを使います。
<dl>
<dt><samp><span class="option">テンプレートディレクトリー</span></samp><dd>テストグループとテストのテンプレートとなるディレクトリー
</dl>
<div class="node">
-<a name="Tutorial"></a>
+<a name="Tutorial-triangle"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Template-dir">Template dir</a>,
+Next: <a rel="next" accesskey="n" href="#Tutorial-sort">Tutorial sort</a>,
Previous: <a rel="previous" accesskey="p" href="#Install">Install</a>,
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
</div>
-<h2 class="chapter">3 Autotest.mk チュートリアル - 三角形判定プログラムのテスト</h2>
+<h2 class="chapter">3 Autotest.mk チュートリアルI - 三角形判定プログラムのテスト</h2>
<ul class="menu">
-<li><a accesskey="1" href="#Tutorial-About">Tutorial About</a>: 概要
-<li><a accesskey="2" href="#Prepare">Prepare</a>: 準備
-<li><a accesskey="3" href="#Create-Group">Create Group</a>: グループディレクトリーの作成
-<li><a accesskey="4" href="#Create-Test">Create Test</a>: テストディレクトリーの作成
-<li><a accesskey="5" href="#Edit-desc">Edit desc</a>: テスト説明ファイルの作成
-<li><a accesskey="6" href="#Edit-cmd">Edit cmd</a>: テストコマンドファイルの作成
-<li><a accesskey="7" href="#Test-Setting">Test Setting</a>: テスト想定ファイルの作成
-<li><a accesskey="8" href="#Test-Execute">Test Execute</a>: テストの実行
-<li><a accesskey="9" href="#Check-Test-Log">Check Test Log</a>: テストログファイルの確認
-<li><a href="#Group-Execute">Group Execute</a>: テストグループの実行
-<li><a href="#Check-Group-Log">Check Group Log</a>: テストグループログファイルの確認
-<li><a href="#Associate">Associate</a>: ビルドとの連携
+<li><a accesskey="1" href="#Tutorial-triangle-About">Tutorial triangle About</a>: 概要
+<li><a accesskey="2" href="#Prepare-triangle">Prepare triangle</a>: 準備
+<li><a accesskey="3" href="#Create-triangle-group">Create triangle group</a>: グループディレクトリーの作成
+<li><a accesskey="4" href="#Create-triangle-test">Create triangle test</a>: テストディレクトリーの作成
+<li><a accesskey="5" href="#Edit-triangle-desc">Edit triangle desc</a>: テスト説明ファイルの作成
+<li><a accesskey="6" href="#Edit-triangle-cmd">Edit triangle cmd</a>: テストコマンドファイルの作成
+<li><a accesskey="7" href="#Set-triangle-test">Set triangle test</a>: テスト想定ファイルの作成
+<li><a accesskey="8" href="#Execute-triangle-test">Execute triangle test</a>: テストの実行
+<li><a accesskey="9" href="#Check-triangle-log">Check triangle log</a>: テストログファイルの確認
+<li><a href="#Execute-triangle-group">Execute triangle group</a>: テストグループの実行
+<li><a href="#Check-triangle-group-log">Check triangle group log</a>: テストグループログファイルの確認
+<li><a href="#Associate-triangle">Associate triangle</a>: ビルドとの連携
</ul>
<div class="node">
-<a name="Tutorial-About"></a>
+<a name="Tutorial-triangle-About"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Prepare">Prepare</a>,
-Previous: <a rel="previous" accesskey="p" href="#Tutorial">Tutorial</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Prepare-triangle">Prepare triangle</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-triangle">Tutorial triangle</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="unnumberedsec">概要</h3>
-<p>ここでは、Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)の記載を元にした、次の仕様の三角形判定プログラムをテストする手順を取り上げます<a rel="footnote" href="#fn-1" name="fnd-1"><sup>1</sup></a>。
+ <p>ここでは、Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)の記載を元にした、次の仕様の三角形判定プログラムをテストする手順を取り上げます<a rel="footnote" href="#fn-1" name="fnd-1"><sup>1</sup></a>。
<blockquote>
プログラムtriangleは、整数をあらわす3つの引数をとる。この3つの値は、それぞれ三角形の3辺の長さをあらわすものとする。プログラムは、三角形が不等辺三角形の場合は`scalene triangle'、二等辺三角形の場合は`isosceles triangle'、正三角形の場合は`equilateral triangle'を印字する。
</ol>
</blockquote>
- <p>三角形判定プログラムは、サンプルとして用意されているものを<a href="#Prepare">準備</a>するか、または自作してください。
+ <p>三角形判定プログラムは、サンプルとして用意されているものを<a href="#Prepare-triangle">準備</a>するか、または自作してください。
<p>準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。
</ol>
<div class="node">
-<a name="Prepare"></a>
+<a name="Prepare-triangle"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Create-Group">Create Group</a>,
-Previous: <a rel="previous" accesskey="p" href="#Tutorial-About">Tutorial About</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Create-triangle-group">Create triangle group</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-triangle-About">Tutorial triangle About</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h4 class="unnumberedsubsec">作業用フォルダの作成</h4>
-<p>まず、Autotest.mkのパッケージに含まれている<samp><span class="file">sample/triangle</span></samp>以下のファイルを、任意の作業用ディレクトリーにコピーします。ここでは、<samp><span class="file">~/triangle</span></samp>(<samp><span class="file">~</span></samp>は、現在ログインしているユーザーのホームディレクトリー)を作業用ディレクトリーにします。また、<samp><span class="file">autotest.mk</span></samp>は、<samp><span class="file">~</span></samp>に展開されているものとします。
+ <p>まず、Autotest.mkのパッケージに含まれている<samp><span class="file">sample/triangle</span></samp>以下のファイルを、任意の作業用ディレクトリーにコピーします。ここでは、<samp><span class="file">~/triangle</span></samp>(<samp><span class="file">~</span></samp>は、現在ログインしているユーザーのホームディレクトリー)を作業用ディレクトリーにします。また、<samp><span class="file">autotest.mk</span></samp>は、<samp><span class="file">~</span></samp>に展開されているものとします。
-<pre class="example"> $ <kbd>cd</kbd>
- $ <kbd>mkdir triangle</kbd>
- $ <kbd>cd autotest.mk/sample/triangle</kbd>
- $ <kbd>cp triangle.c triangle_bug.c Makefile ~/triangle</kbd>
+<pre class="example">$ <kbd>cd</kbd>
+$ <kbd>mkdir triangle</kbd>
+$ <kbd>cd autotest.mk/sample/triangle</kbd>
+$ <kbd>cp triangle.c triangle_bug.c Makefile ~/triangle</kbd>
</pre>
<p>作業用ディレクトリーに移動し、中のファイルを確認します。
-<pre class="example"> $ <kbd>cd ~/triangle</kbd>
- $ <kbd>ls</kbd>
- Makefile triangle.c triangle_bug.c
+<pre class="example">$ <kbd>cd ~/triangle</kbd>
+$ <kbd>ls</kbd>
+Makefile triangle.c triangle_bug.c
</pre>
<h4 class="unnumberedsubsec">三角形判定プログラムのビルド</h4>
-<p>三角形判定プログラムをビルドします。
+ <p>三角形判定プログラムをビルドします。
-<pre class="example"> $ <kbd>make</kbd>
- rm -f triangle
- gcc -o triangle triangle.c
+<pre class="example">$ <kbd>make</kbd>
+rm -f triangle
+gcc -o triangle triangle.c
</pre>
<p>テストもかねて、三角形判定プログラムを手動で実行します。
-<pre class="example"> $ <kbd>./triangle 3 4 5</kbd>
- scalene triangle
- $ <kbd>./triangle 4 4 4</kbd>
- equilateral triangle
- $ <kbd>./triangle 2 4 4</kbd>
- isosceles triangle
+<pre class="example">$ <kbd>./triangle 3 4 5</kbd>
+scalene triangle
+$ <kbd>./triangle 4 4 4</kbd>
+equilateral triangle
+$ <kbd>./triangle 2 4 4</kbd>
+isosceles triangle
</pre>
<h4 class="unnumberedsubsec">バグを含む三角形判定プログラムのビルド</h4>
-<p>バグを含み一部のテストに失敗する三角形判定プログラムをビルドする場合は、次のコマンドを実行します。
+ <p>バグを含み一部のテストに失敗する三角形判定プログラムをビルドする場合は、次のコマンドを実行します。
-<pre class="example"> $ <kbd>make bug</kbd>
- rm -f triangle
- gcc -o triangle triangle.c
+<pre class="example">$ <kbd>make bug</kbd>
+rm -f triangle
+gcc -o triangle triangle.c
</pre>
<p>テストもかねて、三角形判定プログラムを手動で実行します。
-<pre class="example"> $ <kbd>./triangle 3 4 5</kbd>
- futohen sankakukei
- $ <kbd>./triangle 4 4 4</kbd>
- equilateral triangle
- $ <kbd>./triangle 2 4 4</kbd>
- isosceles triangle
+<pre class="example">$ <kbd>./triangle 3 4 5</kbd>
+futohen sankakukei
+$ <kbd>./triangle 4 4 4</kbd>
+equilateral triangle
+$ <kbd>./triangle 2 4 4</kbd>
+isosceles triangle
</pre>
<p><kbd>./triangle 3 4 5</kbd>で、仕様で`scalene triangle'となるべきところが、`futohen sankakukei'となっています。
<div class="node">
-<a name="Create-Group"></a>
+<a name="Create-triangle-group"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Create-Test">Create Test</a>,
-Previous: <a rel="previous" accesskey="p" href="#Prepare">Prepare</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Create-triangle-test">Create triangle test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Prepare-triangle">Prepare triangle</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.1 グループディレクトリーの作成</h3>
-<p>テンプレートディレクトリーで<kbd>make</kbd>を実行し、グループディレクトリーを作成します。このとき、テストグループのディレクトリーを変数<code>GROUPDIR</code>で指定します。ここでは、<kbd>~/triangle/test</kbd>をテストグループのディレクトリーにします。
+ <p>テンプレートディレクトリーで<kbd>make</kbd>を実行し、グループディレクトリーを作成します。このとき、テストグループのディレクトリーを変数<code>GROUPDIR</code>で指定します。ここでは、<kbd>~/triangle/test</kbd>をテストグループのディレクトリーにします。
-<pre class="example"> $ <kbd>cd ~/autotest.mk/template</kbd>
- $ <kbd>make GROUPDIR=~/triangle/test</kbd>
+<pre class="example">$ <kbd>cd ~/autotest.mk/template</kbd>
+$ <kbd>make GROUPDIR=~/triangle/test</kbd>
</pre>
<p>次のコマンドでグループディレクトリーに移動し、その中を確認します。
-<pre class="example"> $ <kbd>cd ~/triangle/test</kbd>
- $ <kbd>ls</kbd>
- Define.mk Makefile Test.mk
+<pre class="example">$ <kbd>cd ~/triangle/test</kbd>
+$ <kbd>ls</kbd>
+Define.mk Makefile Test.mk
</pre>
<div class="node">
-<a name="Create-Test"></a>
+<a name="Create-triangle-test"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Edit-desc">Edit desc</a>,
-Previous: <a rel="previous" accesskey="p" href="#Create-Group">Create Group</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Edit-triangle-desc">Edit triangle desc</a>,
+Previous: <a rel="previous" accesskey="p" href="#Create-triangle-group">Create triangle group</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.2 テストディレクトリーの作成</h3>
-<p>グループディレクトリーで<kbd>make create</kbd>を実行し、テストディレクトリーを作成します。このとき、変数<code>GROUPDIR</code>でテスト名を指定します。テスト名は、小文字のアルファベットと数字で指定します。ここでは、1つめのテスト・ケースに対応するテストディレクトリーを、<code>01_scalene</code>という名前で作成します。
+ <p>グループディレクトリーで<kbd>make create</kbd>を実行し、テストディレクトリーを作成します。このとき、変数<code>GROUPDIR</code>でテスト名を指定します。テスト名は、小文字のアルファベットと数字で指定します。ここでは、1つめのテスト・ケースに対応するテストディレクトリーを、<samp><span class="file">01_scalene</span></samp>という名前で作成します。
-<pre class="example"> $ <kbd>make create TEST=01_scalene</kbd>
+<pre class="example">$ <kbd>make create TEST=01_scalene</kbd>
</pre>
<p>次のコマンドでテストディレクトリーに移動し、その中を確認します。
-<pre class="example"> $ <kbd>cd 01_scalene</kbd>
- $ <kbd>ls</kbd>
- Makefile
+<pre class="example">$ <kbd>cd 01_scalene</kbd>
+$ <kbd>ls</kbd>
+Makefile
</pre>
<div class="node">
-<a name="Edit-desc"></a>
+<a name="Edit-triangle-desc"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Edit-cmd">Edit cmd</a>,
-Previous: <a rel="previous" accesskey="p" href="#Create-Test">Create Test</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Edit-triangle-cmd">Edit triangle cmd</a>,
+Previous: <a rel="previous" accesskey="p" href="#Create-triangle-test">Create triangle test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.3 テスト説明ファイルの作成</h3>
-<p>テスト説明ファイル<samp><span class="file">desc.txt</span></samp>はテストに関する説明をあらわし、テストの結果と一緒にログに出力されます。
+ <p>テスト説明ファイル<samp><span class="file">desc.txt</span></samp>はテストに関する説明をあらわし、テストの結果と一緒にログに出力されます。
<samp><span class="file">desc.txt</span></samp>をテキストエディターを使って次の内容で作成します。
-<pre class="example"> <kbd>有効な不等辺三角形をあらわすテスト・ケース</kbd>
+<pre class="example"><kbd>有効な不等辺三角形をあらわすテスト・ケース</kbd>
</pre>
<div class="node">
-<a name="Edit-cmd"></a>
+<a name="Edit-triangle-cmd"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Test-Setting">Test Setting</a>,
-Previous: <a rel="previous" accesskey="p" href="#Edit-desc">Edit desc</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Set-triangle-test">Set triangle test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Edit-triangle-desc">Edit triangle desc</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.4 テストコマンドファイルの作成</h3>
-<p>テストコマンドファイル<samp><span class="file">cmd</span></samp>は、テスト時に実行されるコマンドをあらわします。
+ <p>テストコマンドファイル<samp><span class="file">cmd</span></samp>は、テスト時に実行されるコマンドをあらわします。
このコマンドにより、標準出力とエラー出力にテストの結果が出力されるようにします。
<p>ここでは、<samp><span class="file">cmd</span></samp>をテキストエディターを使って次の内容で作成します。
-<pre class="example"> <kbd>../../triangle 3 4 5</kbd>
+<pre class="example"><kbd>../../triangle 3 4 5</kbd>
</pre>
<div class="node">
-<a name="Test-Setting"></a>
+<a name="Set-triangle-test"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Test-Execute">Test Execute</a>,
-Previous: <a rel="previous" accesskey="p" href="#Edit-cmd">Edit cmd</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Execute-triangle-test">Execute triangle test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Edit-triangle-cmd">Edit triangle cmd</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.5 テスト想定ファイルの作成</h3>
-<p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>は、テストが正しく実行された場合の結果をあらわします。<samp><span class="file">0.txt</span></samp>の作成方法は、次の3つがあります。
+ <p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>は、テストが正しく実行された場合の結果をあらわします。<samp><span class="file">0.txt</span></samp>の作成方法は、次の3つがあります。
<ul>
<li>手動で作成
<h4 class="subsection">3.5.1 手動で作成</h4>
-<p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>をテキストエディターを使って次の内容で作成します。
+ <p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>をテキストエディターを使って次の内容で作成します。
-<pre class="example"> <kbd>scalene triangle</kbd>
+<pre class="example"><kbd>scalene triangle</kbd>
</pre>
<h4 class="subsection">3.5.2 <kbd>make set</kbd></h4>
-<p><kbd>make set</kbd>を実行すると、コマンドファイル<samp><span class="file">cmd</span></samp>が実行されます。実行結果は<samp><span class="file">0.txt</span></samp>ファイルに出力され、その内容が表示されます。
+ <p><kbd>make set</kbd>を実行すると、コマンドファイル<samp><span class="file">cmd</span></samp>が実行されます。実行結果は<samp><span class="file">0.txt</span></samp>ファイルに出力され、その内容が表示されます。
-<pre class="example"> $ <kbd>make set</kbd>
- scalene triangle
+<pre class="example">$ <kbd>make set</kbd>
+scalene triangle
</pre>
- <p>この方法で<samp><span class="file">0.txt</span></samp>を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。例えば、バグを含む三角形判定プログラムを準備して<kbd>make set</kbd>を実行すると、仕様と異なるテスト想定ファイルが作成され、テストを正しく実行できません。
+ <p>この方法で<samp><span class="file">0.txt</span></samp>を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。例えば、バグを含む三角形判定プログラムを準備して<kbd>make set</kbd>を実行すると、仕様と異なる次のようなテスト想定となり、テストを正しく実行できません。
-<pre class="example"> $ <kbd>make set</kbd>
- futohen sankakukei
+<pre class="example">$ <kbd>make set</kbd>
+futohen sankakukei
</pre>
<p><samp><span class="file">0.txt</span></samp>がすでに存在する場合は<kbd>make set</kbd>を実行するとエラーになり、<samp><span class="file">0.txt</span></samp>は更新されません。
<h4 class="subsection">3.5.3 <kbd>make reset</kbd></h4>
-<p><samp><span class="file">0.txt</span></samp>がすでに存在する場合は、<kbd>make reset</kbd>で更新できます。
+ <p><samp><span class="file">0.txt</span></samp>がすでに存在する場合は、<kbd>make reset</kbd>で更新できます。
-<pre class="example"> $ <kbd>make reset</kbd>
- scalene triangle
+<pre class="example">$ <kbd>make reset</kbd>
+scalene triangle
</pre>
<div class="node">
-<a name="Test-Execute"></a>
+<a name="Execute-triangle-test"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Check-Test-Log">Check Test Log</a>,
-Previous: <a rel="previous" accesskey="p" href="#Test-Setting">Test Setting</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Check-triangle-log">Check triangle log</a>,
+Previous: <a rel="previous" accesskey="p" href="#Set-triangle-test">Set triangle test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.6 テストの実行</h3>
-<p>コマンドファイルとテスト想定を用意したら、<kbd>make</kbd>または<kbd>make check</kbd>でテストを実行できます。
+ <p>コマンドファイルとテスト想定を用意したら、<kbd>make</kbd>または<kbd>make check</kbd>でテストを実行できます。
-<pre class="example"> $ <kbd>ls</kbd>
- 0.txt Makefile cmd desc.txt
- $ <kbd>make</kbd>
- 有効な不等辺三角形をあらわすテスト・ケース
- 01_scalene: Test Success 2011-01-10 10:09:55
- Detail in /home/foo/triangle/test/01_scalene/detail.log
+<pre class="example">$ <kbd>ls</kbd>
+0.txt Makefile cmd desc.txt
+$ <kbd>make</kbd>
+有効な不等辺三角形をあらわすテスト・ケース
+01_scalene: Test Success 2011-01-10 10:09:55
+Detail in /home/foo/triangle/test/01_scalene/detail.log
</pre>
<p>表示される項目は、次のとおりです。
<h4 class="unnumberedsubsec">バグを含む三角形判定プログラムの場合</h4>
-<p>バグを含む三角形判定プログラムでテストを実行すると、次のように表示されます。
+ <p>正しいテスト想定を作成していた場合にバグを含む三角形判定プログラムでテストを実行すると、次のように表示されます。
-<pre class="example"> $ <kbd>make</kbd>
- 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
+<pre class="example">$ <kbd>make</kbd>
+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
</pre>
<div class="node">
-<a name="Check-Test-Log"></a>
+<a name="Check-triangle-log"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Group-Execute">Group Execute</a>,
-Previous: <a rel="previous" accesskey="p" href="#Test-Execute">Test Execute</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Execute-triangle-group">Execute triangle group</a>,
+Previous: <a rel="previous" accesskey="p" href="#Execute-triangle-test">Execute triangle test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.7 テストログファイルの確認</h3>
-<p>テストを実行して作成されたファイルを確認します。<samp><span class="file">1.txt</span></samp>、<samp><span class="file">summary.log</span></samp>、<samp><span class="file">detail.log</span></samp>が作成されています。
+ <p>テストを実行して作成されたファイルを確認します。<samp><span class="file">1.txt</span></samp> <samp><span class="file">summary.log</span></samp> <samp><span class="file">detail.log</span></samp>が作成されています。
-<pre class="example"> $ ls
- 0.txt 1.txt Makefile cmd desc.txt detail.log summary.log
+<pre class="example">$ <kbd>ls</kbd>
+0.txt 1.txt Makefile cmd desc.txt detail.log summary.log
</pre>
<p>テストを実行すると作成されるファイルは、次のとおりです。必要に応じてファイルの内容を確認します。
<p><samp><span class="file">detail.log</span></samp>は、次のようになります。
-<pre class="example"> == 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
- ----------------------------------------------------------------------
-
+<pre class="example">== 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
+----------------------------------------------------------------------
+
</pre>
<h4 class="unnumberedsubsec">バグを含む三角形判定プログラムの場合</h4>
-<p>バグを含む三角形判定プログラムを準備してテストを実行した場合、<samp><span class="file">1.txt</span></samp>、<samp><span class="file">summary.log</span></samp>、<samp><span class="file">detail.log</span></samp>のほかに、テスト想定とテスト結果が異なるため<kbd>diff.log</kbd>が作成されます。
+ <p>バグを含む三角形判定プログラムを準備してテストを実行した場合、<samp><span class="file">1.txt</span></samp> <samp><span class="file">summary.log</span></samp> <samp><span class="file">detail.log</span></samp>のほかに、テスト想定とテスト結果が異なるため<kbd>diff.log</kbd>が作成されます。
-<pre class="example"> $ <kbd>ls</kbd>
- 0.txt 1.txt Makefile cmd desc.txt detail.log diff.log summary.log
+<pre class="example">$ <kbd>ls</kbd>
+0.txt 1.txt Makefile cmd desc.txt detail.log diff.log summary.log
</pre>
<p><samp><span class="file">detail.log</span></samp>は次のようになります。
-<pre class="example"> == 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
- ----------------------------------------------------------------------
-
+<pre class="example">== 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
+----------------------------------------------------------------------
+
</pre>
<h4 class="subsection">3.7.1 テストのクリア</h4>
-<p><kbd>make clean</kbd>を実行すると、テストの結果作成されたファイルがクリアされます。
+ <p><kbd>make clean</kbd>を実行すると、テストの結果作成されたファイルがクリアされます。
-<pre class="example"> $ <kbd>make clean</kbd>
- $ <kbd>ls</kbd>
- 0.txt Makefile cmd desc.txt
+<pre class="example">$ <kbd>make clean</kbd>
+$ <kbd>ls</kbd>
+0.txt Makefile cmd desc.txt
</pre>
<div class="node">
-<a name="Group-Execute"></a>
+<a name="Execute-triangle-group"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Check-Group-Log">Check Group Log</a>,
-Previous: <a rel="previous" accesskey="p" href="#Check-Test-Log">Check Test Log</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Check-triangle-group-log">Check triangle group log</a>,
+Previous: <a rel="previous" accesskey="p" href="#Check-triangle-log">Check triangle log</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.8 テストグループの実行</h3>
-<p>2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクトリーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファイルを作成します。
+ <p>2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクトリーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファイルを作成します。
- <p>ã\81\93ã\81\93ã\81§ã\81¯ã\80\81å\85\88ã\81«ä½\9cæ\88\90ã\81\97ã\81\9f<samp><span class="file">01_scalene</span></samp>ã\82\82å\90«ã\82\81ã\81¦ã\80\81次ã\81®ã\82\88ã\81\86ã\81ªã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81¨ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\88\90ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81\86ã\81\97ã\81\9fã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\81¯Autotest.mkã\81®<samp><span class="file">sample/triangle/test</span></samp>以ä¸\8bã\81«ã\81\82ã\82\8bã\81®ã\81§ã\80\81ã\82³ã\83\94ã\83¼ã\81\97ã\81¦ä½\9cæ\88\90ã\81\99ã\82\8bã\81\93ã\81¨ã\82\82ã\81§ã\81\8dます。
+ <p>ã\81\93ã\81\93ã\81§ã\81¯ã\80\81å\85\88ã\81«ä½\9cæ\88\90ã\81\97ã\81\9f<samp><span class="file">01_scalene</span></samp>ã\82\82å\90«ã\82\81ã\81¦ã\80\81次ã\81®ã\82\88ã\81\86ã\81ªã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81¨ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä½\9cæ\88\90ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81\86ã\81\97ã\81\9fã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\81¯Autotest.mkã\81®<samp><span class="file">sample/triangle/test</span></samp>以ä¸\8bã\81«ã\81\82ã\82\8aます。
<ul>
-<li>01_scalene
+
+ <li>01_scalene
<ul>
<li><samp><span class="file">Makefile</span></samp> <a href="sample_triangle/01_scalene/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_triangle/01_scalene/cmd.txt"><samp><span class="file">cmd</span></samp></a> <a href="sample_triangle/01_scalene/0.txt"><samp><span class="file">0.txt</span></samp></a>
<p>テストグループディレクトリーでは、<kbd>make</kbd>または<kbd>make check</kbd>で複数のテストをまとめて実行できます。
-<pre class="example"> $ <kbd>cd ~/triangle/test</kbd>
- $ <kbd>make</kbd>
- test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
- test: All tests are succeded.
+<pre class="example">$ <kbd>cd ~/triangle/test</kbd>
+$ <kbd>make</kbd>
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+test: All tests are succeded.
</pre>
<p>表示されるのは、次の項目です。
<ul>
<h4 class="unnumberedsubsec">バグを含む三角形判定プログラムの場合</h4>
-<p>バグを含む三角形判定プログラムを準備してテストグループを実行した場合、次のように表示されます。失敗したテストがあることをあらわしています。
+ <p>バグを含む三角形判定プログラムを準備してテストグループを実行した場合、次のように表示されます。失敗したテストがあることをあらわしています。
-<pre class="example"> $ <kbd>cd ~/triangle/test</kbd>
- $ <kbd>make</kbd>
- test: 11 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+<pre class="example">$ <kbd>cd ~/triangle/test</kbd>
+$ <kbd>make</kbd>
+test: 11 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
</pre>
<div class="node">
-<a name="Check-Group-Log"></a>
+<a name="Check-triangle-group-log"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Associate">Associate</a>,
-Previous: <a rel="previous" accesskey="p" href="#Group-Execute">Group Execute</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Next: <a rel="next" accesskey="n" href="#Associate-triangle">Associate triangle</a>,
+Previous: <a rel="previous" accesskey="p" href="#Execute-triangle-group">Execute triangle group</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.9 テストグループログファイルの確認</h3>
-<p>テストグループを実行すると作成されるファイルは、次のとおりです。
+ <p>テストグループを実行すると作成されるファイルは、次のとおりです。
<dl>
<dt><samp><span class="file"><テストグループ名を大文字にした文字列>.log</span></samp><dd>テストグループに含まれるテストとその実行結果の一覧をあらわします。
<p>ここではテストグループ名は<samp><span class="file">test</span></samp>なので、<samp><span class="file">TEST.log</span></samp>が次の内容で作成されます。
-<pre class="example"> 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
+<pre class="example">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
</pre>
<p>テストをまとめて実行した場合も、個別のテストを実行した場合と同様に、テストディレクトリーにテストログが出力されます。特定のテスト結果を詳細に検討する場合は、そのテストのテストディレクトリーを開いてテストログファイルの確認をします。
<h4 class="unnumberedsubsec">バグを含む三角形判定プログラムの場合</h4>
-<p>バグを含む三角形判定プログラムを準備してテストグループを実行した場合、<samp><span class="file">TEST.log</span></samp>は次のように表示されます。01_scaleneのほか、11_zeroのテストで失敗しています。すべての辺がゼロである場合に表示が正しくないバグがあることがわかります。
-
-<pre class="example"> 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
-
+ <p>バグを含む三角形判定プログラムを準備してテストグループを実行した場合、<samp><span class="file">TEST.log</span></samp>は次のように表示されます。01_scaleneのほか、11_zeroのテストで失敗しています。すべての辺がゼロである場合に表示が正しくないバグがあることがわかります。
+
+<pre class="example">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
+
</pre>
<div class="node">
-<a name="Associate"></a>
+<a name="Associate-triangle"></a>
<p><hr>
-Previous: <a rel="previous" accesskey="p" href="#Check-Group-Log">Check Group Log</a>,
-Up: <a rel="up" accesskey="u" href="#Tutorial">Tutorial</a>
+Previous: <a rel="previous" accesskey="p" href="#Check-triangle-group-log">Check triangle group log</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-triangle">Tutorial triangle</a>
</div>
<h3 class="section">3.10 ビルドとの連携</h3>
-<p>三角形判定プログラムでは、<samp><span class="file">~/triangle</span></samp>など作業用ディレクトリーのトップで<kbd>make</kbd>を実行すればプログラムをビルドできました。作業用ディレクトリーの<samp><span class="file">Makefile</span></samp>を次のように編集すると、ビルドと連携してテストを実行できるようになります。
-
-<pre class="example"> CC = gcc
-
- .PHONY: all <kbd>check</kbd> clean
-
- all:
- $(CC) -o triangle triangle.c
-
- <kbd>check:</kbd>
- <kbd> $(MAKE) -c test</kbd>
-
- clean:
- rm -f triangle
+ <p>三角形判定プログラムでは、<samp><span class="file">~/triangle</span></samp>など作業用ディレクトリーのトップで<kbd>make</kbd>を実行すればプログラムをビルドできました。作業用ディレクトリーの<samp><span class="file">Makefile</span></samp>を次のように編集すると、ビルドと連携してテストを実行できるようになります。
+
+<pre class="example">CC = gcc
+
+.PHONY: all <kbd>check</kbd> clean
+
+all:
+ $(CC) -o triangle triangle.c
+
+<kbd>check:</kbd>
+<kbd> $(MAKE) -c test</kbd>
+
+clean:
+ rm -f triangle
</pre>
<p>ビルドとテストは、次のように実行します。
-<pre class="example"> $ <kbd>make</kbd>
- gcc -o triangle triangle.c
- $ <kbd>make check</kbd>
- make -C test
- test: 13 / 13 tests passed. Detail in /Users/kazubito/2011_01/triangle/test/TEST.log
- test: All tests are succeded.
+<pre class="example">$ <kbd>make</kbd>
+gcc -o triangle triangle.c
+$ <kbd>make check</kbd>
+make -C test
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+test: All tests are succeded.
</pre>
<p>こうした設定をしておけば、プログラムを変更するたびに簡単にビルドとテストを実行することができます。
+<div class="node">
+<a name="Tutorial-sort"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Template-dir">Template dir</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-triangle">Tutorial triangle</a>,
+Up: <a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="chapter">4 Autotest.mk チュートリアルII - C言語<code>sort</code>関数のテスト</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="#Tutorial-sort-About">Tutorial sort About</a>: 概要
+<li><a accesskey="2" href="#Prepare-sort">Prepare sort</a>: 準備
+<li><a accesskey="3" href="#Create-sort-group">Create sort group</a>: グループディレクトリーの作成
+<li><a accesskey="4" href="#Create-sort-test">Create sort test</a>: テストディレクトリーの作成
+<li><a accesskey="5" href="#Create-sort-src">Create sort src</a>: 関数テスト用プログラムのソース作成
+<li><a accesskey="6" href="#Edit-sort-Makefile">Edit sort Makefile</a>: <samp><span class="file">Makefile</span></samp>の編集
+<li><a accesskey="7" href="#Edit-sort-desc">Edit sort desc</a>: テスト説明ファイルの作成
+<li><a accesskey="8" href="#Set-sort-test">Set sort test</a>: テスト想定ファイルの作成
+<li><a accesskey="9" href="#Execute-sort-test">Execute sort test</a>: テストの実行
+<li><a href="#Check-sort-log">Check sort log</a>: テストログファイルの確認
+<li><a href="#Execute-sort-group">Execute sort group</a>: テストグループの実行
+<li><a href="#Check-sort-group-log">Check sort group log</a>: テストグループログファイルの確認
+<li><a href="#Iteretive">Iteretive</a>: 開発とテストの反復
+</ul>
+
+<div class="node">
+<a name="Tutorial-sort-About"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Prepare-sort">Prepare sort</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-sort">Tutorial sort</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="unnumberedsec">概要</h3>
+
+ <p>ここではC言語の関数テストの例として、<code>sort</code>関数をテストします。<a href="http://cunit.sourceforge.net/">CUnit</a>のわかりやすい日本語チュートリアル<a href="http://homepage3.nifty.com/kaku-chan/cunit/index.html">CUnit チュートリアル</a>で使われている関数です。
+
+ <p><samp><span class="file">sort_normal.c</span></samp>は、次の内容です。
+
+<pre class="example">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;
+ }
+ }
+ }
+}
+</pre>
+ <p>バグを含む<samp><span class="file">sort_normal.c</span></samp>は、次の内容です。
+
+<pre class="example">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;
+ }
+ }
+ }
+}
+</pre>
+ <p>プログラムは、サンプルとして用意されているものを<a href="#Prepare-sort">準備</a>してください。
+
+ <p>準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。
+
+ <ol type=1 start=1>
+<li>グループディレクトリーの作成
+
+ <li>テストディレクトリーの作成
+
+ <li>テスト説明ファイルの作成
+
+ <li>関数テスト用プログラムのソース作成
+
+ <li><samp><span class="file">Makefile</span></samp>の編集
+
+ <li>テスト想定ファイルの作成
+
+ <li>テストの実行
+
+ <li>テストログファイルの確認
+
+ <li>テストグループの実行
+
+ <li>テストグループログファイルの確認
+ </ol>
+
+<div class="node">
+<a name="Prepare-sort"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Create-sort-group">Create sort group</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-sort-About">Tutorial sort About</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="unnumberedsec">準備</h3>
+
+<h4 class="unnumberedsubsec">作業用フォルダの作成</h4>
+
+ <p>まず、Autotest.mkのパッケージに含まれている<samp><span class="file">sample/sort</span></samp>以下のファイルを、任意の作業用ディレクトリーにコピーします。ここでは、<samp><span class="file">~/sort</span></samp>(<samp><span class="file">~</span></samp>は、現在ログインしているユーザーのホームディレクトリー)を作業用ディレクトリーにします。また、<samp><span class="file">autotest.mk</span></samp>は、<samp><span class="file">~</span></samp>に展開されているものとします。
+
+<pre class="example">$ <kbd>cd</kbd>
+$ <kbd>mkdir sort</kbd>
+$ <kbd>cd autotest.mk/sample/sort</kbd>
+$ <kbd>cp sort_normal.c sort_bug.c Makefile ~/sort</kbd>
+</pre>
+ <p>作業用ディレクトリーに移動し、中のファイルを確認します。
+
+<pre class="example">$ <kbd>cd ~/sort</kbd>
+$ <kbd>ls</kbd>
+Makefile sort_normal.c sort_bug.c
+</pre>
+ <h4 class="unnumberedsubsec"><code>sort</code>関数ファイルの準備</h4>
+
+ <p><kbd>make</kbd>または<kbd>make normal</kbd>で、<samp><span class="file">sort_normal.c</span></samp>が<samp><span class="file">sort.c</span></samp>にコピーされます。
+
+<pre class="example">$ <kbd>make</kbd>
+rm -f sort.c
+cp sort_normal.c sort.c
+</pre>
+ <h4 class="unnumberedsubsec">バグを含む<code>sort</code>関数ファイルの準備</h4>
+
+ <p><kbd>make bug</kbd>で、<samp><span class="file">sort_bug.c</span></samp>が<samp><span class="file">sort.c</span></samp>にコピーされます。
+この場合、<samp><span class="file">sort.c</span></samp>はバグを含みます。
+
+<pre class="example">$ <kbd>make bug</kbd>
+rm -f sort.c
+cp sort_bug.c sort.c
+</pre>
+ <div class="node">
+<a name="Create-sort-group"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Create-sort-test">Create sort test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Prepare-sort">Prepare sort</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.1 グループディレクトリーの作成</h3>
+
+ <p>テンプレートディレクトリーで<kbd>make</kbd>を実行し、グループディレクトリーを作成します。このとき、テストグループのディレクトリーを変数<code>GROUPDIR</code>で指定します。ここでは、<kbd>~/sort/test</kbd>をテストグループのディレクトリーにします。
+
+<pre class="example">$ <kbd>cd ~/autotest.mk/template</kbd>
+$ <kbd>make GROUPDIR=~/sort/test</kbd>
+</pre>
+ <p>次のコマンドでグループディレクトリーに移動し、その中を確認します。
+
+<pre class="example">$ <kbd>cd ~/sort/test</kbd>
+$ <kbd>ls</kbd>
+Define.mk Makefile Test.mk
+</pre>
+ <div class="node">
+<a name="Create-sort-test"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Create-sort-src">Create sort src</a>,
+Previous: <a rel="previous" accesskey="p" href="#Create-sort-group">Create sort group</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.2 テストディレクトリーの作成</h3>
+
+ <p>グループディレクトリーで<kbd>make create</kbd>を実行し、テストディレクトリーを作成します。このとき、変数<code>GROUPDIR</code>でテスト名を指定し、さらにC言語の関数テスト用の<code>Makefile</code>を作成するため変数<code>SRC=c</code>を指定します。ここでは、1つめのテストを<samp><span class="file">sort_001</span></samp>という名前で作成します<a rel="footnote" href="#fn-3" name="fnd-3"><sup>3</sup></a>。
+
+<pre class="example">$ <kbd>make create TEST=sort_001 SRC=c</kbd>
+</pre>
+ <p>次のコマンドでテストディレクトリーに移動し、その中を確認します。
+
+<pre class="example">$ <kbd>cd sort_001</kbd>
+$ <kbd>ls</kbd>
+Makefile
+</pre>
+ <div class="node">
+<a name="Create-sort-src"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Edit-sort-Makefile">Edit sort Makefile</a>,
+Previous: <a rel="previous" accesskey="p" href="#Create-sort-test">Create sort test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.3 関数テスト用プログラムのソース作成</h3>
+
+ <p>C言語の関数をテストするためのプログラムをC言語で記述した、プログラムのソースファイル<samp><span class="file">cmd.c</span></samp>をテキストエディターで作成します。テスト対象の関数<code>sort</code>を呼び出してソートを実行し、その結果を表示するプログラムです。
+
+<pre class="example">#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;
+}
+</pre>
+ <div class="node">
+<a name="Edit-sort-Makefile"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Edit-sort-desc">Edit sort desc</a>,
+Previous: <a rel="previous" accesskey="p" href="#Create-sort-src">Create sort src</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.4 <samp><span class="file">Makefile</span></samp>の編集</h3>
+
+ <p><samp><span class="file">Makefile</span></samp>をテキストエディターで編集し、テスト対象ファイルをあらわす変数<code>TESTTARGET_FILES</code>を指定します。
+ここでは、<samp><span class="file">../../sort.c</span></samp>を指定します。
+
+<pre class="example">include ../Define.mk
+include ../Test.mk
+
+CC := gcc
+CFLAGS := -Wall
+
+.INTERMEDIATE: $(CMD_FILE)
+
+CMDSRC_FILE := cmd.c
+TESTTARGET_FILES := <kbd>../../sort.c</kbd> # Set test target files
+
+COMPILE_FILE := compile.log
+
+$(CMD_FILE): $(CMDSRC_FILE) $(TESTTARGET_FILES)
+ $(CC) $(CFLAGS) -o $ $^ >$(COMPILE_FILE) 2>&1
+ cat $(COMPILE_FILE)
+</pre>
+ <div class="node">
+<a name="Edit-sort-desc"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Set-sort-test">Set sort test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Edit-sort-Makefile">Edit sort Makefile</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.5 テスト説明ファイルの作成</h3>
+
+ <p>テスト説明ファイル<samp><span class="file">desc.txt</span></samp>はテストに関する説明をあらわし、テストの結果と一緒にログに出力されます。
+<samp><span class="file">desc.txt</span></samp>をテキストエディターを使って次の内容で作成します。
+
+<pre class="example"><kbd>テスト関数1</kbd>
+</pre>
+ <div class="node">
+<a name="Set-sort-test"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Execute-sort-test">Execute sort test</a>,
+Previous: <a rel="previous" accesskey="p" href="#Edit-sort-desc">Edit sort desc</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.6 テスト想定ファイルの作成</h3>
+
+ <p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>は、テストが正しく実行された場合の結果をあらわします。<samp><span class="file">0.txt</span></samp>の作成方法は、次の3つがあります。
+
+ <ul>
+<li>手動で作成
+
+ <li><kbd>make set</kbd>
+
+ <li><kbd>make reset</kbd>
+</ul>
+
+ <p>エラーが発生するテストでは、標準出力想定の下にエラー出力想定を続けます。
+
+<h4 class="subsection">4.6.1 手動で作成</h4>
+
+ <p>テスト想定ファイル<samp><span class="file">0.txt</span></samp>をテキストエディターを使って次の内容で作成します。
+
+<pre class="example"><kbd>3</kbd>
+</pre>
+ <h4 class="subsection">4.6.2 <kbd>make set</kbd></h4>
+
+ <p><kbd>make set</kbd>を実行すると、<samp><span class="file">Makefile</span></samp>の設定に従い関数テスト用のプログラムソース<samp><span class="file">cmd.c</span></samp>と関数ファイル<samp><span class="file">../../sort.c</span></samp>からコマンドファイル<samp><span class="file">cmd</span></samp>が作成されます。そのあと<samp><span class="file">cmd</span></samp>が実行され、実行結果は<samp><span class="file">0.txt</span></samp>ファイルに出力されます。実行後、次回のテストのため、<samp><span class="file">cmd</span></samp>は自動的に削除されます。
+
+<pre class="example">$ <kbd>make set</kbd>
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+3
+5
+7
+11
+rm cmd
+</pre>
+ <p>この方法で<samp><span class="file">0.txt</span></samp>を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。
+
+ <p><samp><span class="file">0.txt</span></samp>がすでに存在する場合は<kbd>make set</kbd>を実行するとエラーになり、<samp><span class="file">0.txt</span></samp>は更新されません。例えば、バグを含む<code>sort</code>関数ファイルを準備して<kbd>make set</kbd>を実行すると、仕様と異なる次のようなテスト想定となり、テストを正しく実行できません。
+
+<pre class="example">$ <kbd>make set</kbd>
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+2
+2
+2
+2
+rm cmd
+</pre>
+ <h4 class="subsection">4.6.3 <kbd>make reset</kbd></h4>
+
+ <p><samp><span class="file">0.txt</span></samp>がすでに存在する場合は、<kbd>make reset</kbd>で更新できます。
+
+<pre class="example">$ <kbd>make reset</kbd>
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+3
+5
+7
+11
+rm cmd
+</pre>
+ <div class="node">
+<a name="Execute-sort-test"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Check-sort-log">Check sort log</a>,
+Previous: <a rel="previous" accesskey="p" href="#Set-sort-test">Set sort test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.7 テストの実行</h3>
+
+ <p>コマンドファイルとテスト想定を用意したら、<kbd>make</kbd>または<kbd>make check</kbd>でテストを実行できます。
+
+<pre class="example">$ <kbd>ls</kbd>
+0.txt Makefile cmd.c desc.txt
+$ <kbd>make</kbd>
+sort_001: Test Success 2011-01-24 11:13:04
+Details in /home/foo/sort/test/sort_001/detail.log
+rm cmd
+</pre>
+ <p>表示される項目は、次のとおりです。
+
+ <ul>
+<li><テスト説明ファイル<samp><span class="file">desc.txt</span></samp>の内容>
+
+ <li><テスト名>: <テスト結果(Test SuccessまたはTest Failure)> <テスト実行日時>
+
+ <li>Detail in <テスト詳細ログファイルの絶対パス>
+</ul>
+
+<h4 class="unnumberedsubsec">バグを含む<code>sort</code>関数の場合</h4>
+
+ <p>正しいテスト想定を作成していた場合にバグを含む<code>sort</code>関数でテストを実行すると、次のように表示されます。
+
+<pre class="example">$ <kbd>make</kbd>
+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
+</pre>
+ <div class="node">
+<a name="Check-sort-log"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Execute-sort-group">Execute sort group</a>,
+Previous: <a rel="previous" accesskey="p" href="#Execute-sort-test">Execute sort test</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.8 テストログファイルの確認</h3>
+
+ <p>テストを実行して作成されたファイルを確認します。<samp><span class="file">1.txt</span></samp> <samp><span class="file">summary.log</span></samp> <samp><span class="file">detail.log</span></samp>が作成されています。
+
+<pre class="example">$ <kbd>ls</kbd>
+0.txt 1.txt Makefile cmd desc.txt detail.log summary.log
+</pre>
+ <p>テストを実行すると作成されるファイルは、次のとおりです。必要に応じてファイルの内容を確認します。
+
+ <dl>
+<dt><samp><span class="file">1.txt</span></samp><dd>テスト結果をあらわします。エラー発生時は、標準出力のあとにエラー出力が続きます
+
+ <br><dt><samp><span class="file">err.log</span></samp><dd>エラー発生時に、エラーが出力されます。エラーが発生しない場合は作成されません
+
+ <br><dt><samp><span class="file">diff.log</span></samp><dd>テスト想定ファイル<samp><span class="file">0.txt</span></samp>とテスト結果ファイル<samp><span class="file">1.txt</span></samp>の差分をあらわします。想定と結果が同一の場合は、作成されません
+
+ <br><dt><samp><span class="file">summary.log</span></samp><dd>テストの実行結果を表します。テスト実行時に表示される項目です。
+
+ <br><dt><samp><span class="file">detail.log</span></samp><dd>テストの詳細ログを表します。上記の内容がすべて出力されます
+</dl>
+
+ <p><samp><span class="file">detail.log</span></samp>は、次のようになります。
+
+<pre class="example">== 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
+----------------------------------------------------------------------
+
+</pre>
+ <h4 class="unnumberedsubsec">バグを含む<code>sort</code>関数の場合</h4>
+
+ <p>バグを含む<code>sort</code>関数を準備してテストを実行した場合、<samp><span class="file">1.txt</span></samp> <samp><span class="file">summary.log</span></samp> <samp><span class="file">detail.log</span></samp>のほかに、テスト想定とテスト結果が異なるため<kbd>diff.log</kbd>が作成されます。
+
+<pre class="example">$ <kbd>ls</kbd>
+0.txt 1.txt Makefile cmd desc.txt detail.log diff.log summary.log
+</pre>
+ <p><samp><span class="file">detail.log</span></samp>は次のようになります。
+
+<pre class="example">== 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
+----------------------------------------------------------------------
+
+</pre>
+ <h4 class="subsection">4.8.1 テストのクリア</h4>
+
+ <p><kbd>make clean</kbd>を実行すると、テストの結果作成されたファイルがクリアされます。
+
+<pre class="example">$ <kbd>make clean</kbd>
+$ <kbd>ls</kbd>
+0.txt Makefile cmd.c desc.txt
+</pre>
+ <div class="node">
+<a name="Execute-sort-group"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Check-sort-group-log">Check sort group log</a>,
+Previous: <a rel="previous" accesskey="p" href="#Check-sort-log">Check sort log</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.9 テストグループの実行</h3>
+
+ <p>2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクトリーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファイルを作成します。
+
+ <p>ここでは、先に作成した<samp><span class="file">sort_001</span></samp>も含めて、次のようなディレクトリーとファイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの<samp><span class="file">sample/sort/test</span></samp>以下にあります。
+
+ <ul>
+
+ <li>sort_001
+
+ <ul>
+<li><samp><span class="file">Makefile</span></samp> <a href="sample_sort/sort_001/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_sort/sort_001/cmd.c.txt"><samp><span class="file">cmd.c</span></samp></a> <a href="sample_sort/sort_001/0.txt"><samp><span class="file">0.txt</span></samp></a>
+</ul>
+
+ <li>sort_002
+
+ <ul>
+<li><samp><span class="file">Makefile</span></samp> <a href="sample_sort/sort_002/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_sort/sort_002/cmd.c.txt"><samp><span class="file">cmd.c</span></samp></a> <a href="sample_sort/sort_002/0.txt"><samp><span class="file">0.txt</span></samp></a>
+</ul>
+
+ <li>sort_003
+
+ <ul>
+<li><samp><span class="file">Makefile</span></samp> <a href="sample_sort/sort_003/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_sort/sort_003/cmd.c.txt"><samp><span class="file">cmd.c</span></samp></a> <a href="sample_sort/sort_003/0.txt"><samp><span class="file">0.txt</span></samp></a>
+</ul>
+
+ <li>sort_004
+
+ <ul>
+<li><samp><span class="file">Makefile</span></samp> <a href="sample_sort/sort_004/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_sort/sort_004/cmd.c.txt"><samp><span class="file">cmd.c</span></samp></a> <a href="sample_sort/sort_004/0.txt"><samp><span class="file">0.txt</span></samp></a>
+</ul>
+
+ <li>sort_005
+
+ <ul>
+<li><samp><span class="file">Makefile</span></samp> <a href="sample_sort/sort_005/desc.txt"><samp><span class="file">desc.txt</span></samp></a> <a href="sample_sort/sort_005/cmd.c.txt"><samp><span class="file">cmd.c</span></samp></a> <a href="sample_sort/sort_005/0.txt"><samp><span class="file">0.txt</span></samp></a>
+</ul>
+ </ul>
+
+ <p>テストグループディレクトリーでは、<kbd>make</kbd>または<kbd>make check</kbd>で複数のテストをまとめて実行できます。
+
+<pre class="example">$ <kbd>cd ~/sort/test</kbd>
+$ <kbd>make</kbd>
+test: 5 / 5 tests passed. Details in /home/foo/sort/test/TEST.log
+test: All tests are succeded.
+</pre>
+ <p>表示されるのは、次の項目です。
+ <ul>
+<li><テスト名>: <成功テスト数>/<全テスト数> test passed. Detail in <テストグループログファイルの絶対パス>
+
+ <li>(すべてのテストに成功した場合)<テスト名>: All tests are succeded.
+</ul>
+
+<h4 class="unnumberedsubsec">バグを含む<code>sort</code>関数の場合</h4>
+
+ <p>バグを含む<code>sort</code>関数を準備してテストグループを実行した場合、次のように表示されます。失敗したテストがあることをあらわしています。
+
+<pre class="example">$ <kbd>cd ~/sort/test</kbd>
+$ <kbd>make</kbd>
+test: 1 / 5 tests passed. Details in /home/foo/sort/test/TEST.log
+</pre>
+ <div class="node">
+<a name="Check-sort-group-log"></a>
+<p><hr>
+Next: <a rel="next" accesskey="n" href="#Iteretive">Iteretive</a>,
+Previous: <a rel="previous" accesskey="p" href="#Execute-sort-group">Execute sort group</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.10 テストグループログファイルの確認</h3>
+
+ <p>テストグループを実行すると作成されるファイルは、次のとおりです。
+
+ <dl>
+<dt><samp><span class="file"><テストグループ名を大文字にした文字列>.log</span></samp><dd>テストグループに含まれるテストとその実行結果の一覧をあらわします。
+
+ <br><dt><samp><span class="file">Summary.log</span></samp><dd>テストの実行結果を表します。テストグループ実行時に表示される内容です。
+</dl>
+
+ <p>ここではテストグループ名は<samp><span class="file">test</span></samp>なので、<samp><span class="file">TEST.log</span></samp>が次の内容で作成されます。
+
+<pre class="example">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
+
+</pre>
+ <p>テストをまとめて実行した場合も、個別のテストを実行した場合と同様に、テストディレクトリーにテストログが出力されます。特定のテスト結果を詳細に検討する場合は、そのテストのテストディレクトリーを開いてテストログファイルの確認をします。
+
+<h4 class="unnumberedsubsec">バグを含む<code>sort</code>関数の場合</h4>
+
+ <p>バグを含む<code>sort</code>関数を準備してテストグループを実行した場合、<samp><span class="file">TEST.log</span></samp>は次のように表示されます。sort_001、sort_003、sort_004、sort_005のテストで失敗していることがわかります。
+
+<pre class="example">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
+
+</pre>
+ <div class="node">
+<a name="Iteretive"></a>
+<p><hr>
+Previous: <a rel="previous" accesskey="p" href="#Check-sort-group-log">Check sort group log</a>,
+Up: <a rel="up" accesskey="u" href="#Tutorial-sort">Tutorial sort</a>
+
+</div>
+
+<h3 class="section">4.11 開発とテストの反復</h3>
+
+ <p>あとはテスト対象となっている関数を変更するたびに、テストを実行できるようになります。つまり、関数の単位で開発とテストを反復してできます。
+
+ <p>関数の実装だけが変更されて仕様が変わっていない場合は、テストグループのディレクトリーで<kbd>make</kbd>を実行するだけでテストができます。
+
+ <p>関数の入力または出力の仕様が変わった場合には、<samp><span class="file">0.txt</span></samp>と<samp><span class="file">cmd.c</span></samp>の変更を検討します。関数のコンパイル方法(依存するファイル)が変わった場合は、<samp><span class="file">Makefile</span></samp>の変更を検討します。
+
<div class="node">
<a name="Template-dir"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#Group-dir">Group dir</a>,
-Previous: <a rel="previous" accesskey="p" href="#Tutorial">Tutorial</a>,
+Previous: <a rel="previous" accesskey="p" href="#Tutorial-sort">Tutorial sort</a>,
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
</div>
-<h2 class="chapter">4 テンプレートディレクトリー マニュアル</h2>
+<h2 class="chapter">5 テンプレートディレクトリー マニュアル</h2>
-<p>テンプレートディレクトリーは、Autotest.mkをインストールするときに展開により作成された<samp><span class="file">template</span></samp>ディレクトリーです。
+ <p>テンプレートディレクトリーは、Autotest.mkをインストールするときに展開により作成された<samp><span class="file">template</span></samp>ディレクトリーです。
<ul class="menu">
<li><a accesskey="1" href="#make-group">make group</a>: <kbd>make</kbd>または<kbd>make group</kbd> - グループディレクトリーの作成
-<li><a accesskey="2" href="#Template-Files">Template Files</a>: テンプレートのファイル
+<li><a accesskey="2" href="#Template-files">Template files</a>: テンプレートのファイル
</ul>
<div class="node">
<a name="make-group"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Template-Files">Template Files</a>,
+Next: <a rel="next" accesskey="n" href="#Template-files">Template files</a>,
Previous: <a rel="previous" accesskey="p" href="#Template-dir">Template dir</a>,
Up: <a rel="up" accesskey="u" href="#Template-dir">Template dir</a>
</div>
-<h3 class="section">4.1 <kbd>make</kbd>または<kbd>make group</kbd> - グループディレクトリーの作成</h3>
+<h3 class="section">5.1 <kbd>make</kbd>または<kbd>make group</kbd> - グループディレクトリーの作成</h3>
-<p>変数<code>GROUPDIR</code>で指定されたディレクトリーをテストグループディレクトリーとして作成し、テストの実行に必要な次のファイルを配置します。
+ <p>変数<code>GROUPDIR</code>で指定されたディレクトリーをテストグループディレクトリーとして作成し、テストの実行に必要な次のファイルを配置します。
<ul>
<li><samp><span class="file">Define.mk</span></samp>
<p>通常、テストに必要なファイルテンプレートディレクトリーからグループディレクトリーにコピーされます。変数<code>LINKMK</code>を指定した場合は、シンボリックリンクが作成されます。
-<h4 class="subsection">4.1.1 変数</h4>
+<h4 class="subsection">5.1.1 変数</h4>
<dl>
<dt><code>GROUPDIR</code><dd>テストディレクトリーを指定します。指定しない場合や既存のディレクトリーを指定した場合は、エラーが発生してテストグループディレクトリーは作成されません。
<h4 class="unnumberedsubsec">使用例</h4>
-<p>グループディレクトリーとして<samp><span class="file">~/triangle/test</span></samp>を作成します。
+ <p>グループディレクトリーとして<samp><span class="file">~/triangle/test</span></samp>を作成します。
-<pre class="example"> $ <kbd>make GROUPDIR=~/triangle/test</kbd>
+<pre class="example">$ <kbd>make GROUPDIR=~/triangle/test</kbd>
</pre>
<div class="node">
-<a name="Template-Files"></a>
+<a name="Template-files"></a>
<p><hr>
Previous: <a rel="previous" accesskey="p" href="#make-group">make group</a>,
Up: <a rel="up" accesskey="u" href="#Template-dir">Template dir</a>
</div>
-<h3 class="section">4.2 テンプレートのファイル</h3>
+<h3 class="section">5.2 テンプレートのファイル</h3>
-<p>テンプレートディレクトリーには、次のファイルが含まれます。
+ <p>テンプレートディレクトリーには、次のファイルが含まれます。
<dl>
<dt><samp><span class="file">Makefile</span></samp><dd>テンプレートディレクトリーのMakefile
</div>
-<h2 class="chapter">5 グループディレクトリー マニュアル</h2>
+<h2 class="chapter">6 グループディレクトリー マニュアル</h2>
-<p><a href="#make-group">グループディレクトリーの作成</a>後、グループディレクトリーに移動すると次の操作ができます。
+ <p><a href="#make-group">グループディレクトリーの作成</a>後、グループディレクトリーに移動すると次の操作ができます。
<ul class="menu">
<li><a accesskey="1" href="#make-create">make create</a>: <kbd>make create</kbd> - テストの作成
<li><a accesskey="6" href="#make-clean-at-group">make clean at group</a>: <kbd>make clean</kbd> - グループ内にあるすべてのテストで、実行結果をクリア
<li><a accesskey="7" href="#make-time-at-group">make time at group</a>: <kbd>make time</kbd> - グループ内にあるすべてのテストを計時
<li><a accesskey="8" href="#make-cleantime-at-group">make cleantime at group</a>: <kbd>make cleantime</kbd> - グループ内にあるすべてのテストで、計時結果をクリア
-<li><a accesskey="9" href="#Group-Files">Group Files</a>: グループのファイル
+<li><a accesskey="9" href="#Group-files">Group files</a>: グループのファイル
</ul>
<div class="node">
</div>
-<h3 class="section">5.1 <kbd>make create</kbd> - テストの作成</h3>
+<h3 class="section">6.1 <kbd>make create</kbd> - テストの作成</h3>
-<p>変数<code>TEST</code>で指定されたディレクトリーをテストディレクトリーとして作成し、ディレクトリーの中に<code>Makefile</code>を作成します。
+ <p>変数<code>TEST</code>で指定されたディレクトリーをテストディレクトリーとして作成し、ディレクトリーの中に<code>Makefile</code>を作成します。
<p>テスト名は、小文字のアルファベットと数字で指定します。大文字ではじまる名前を指定した場合、ディレクトリーや<code>Makefile</code>は作成されるものの、テストグループ実行の対象になりません。
<p>変数<code>SRC=c</code>を指定した場合は、C言語の関数テスト用の<code>Makefile</code>が作成されます。
+<h4 class="subsection">6.1.1 変数</h4>
+
+ <dl>
+<dt><code>TEST</code><dd>テストディレクトリー名を指定します。
+
+ <br><dt><code>SRC</code><dd>値<code>c</code>を指定すると、C言語の関数テスト用の<code>Makefile</code>が作成されます。
+
+ </dl>
+
<h4 class="unnumberedsubsec">使用例</h4>
-<p>テストディレクトリーを、<code>01_scalene</code>という名前で作成します。
+ <p>テストディレクトリーを、<code>01_scalene</code>という名前で作成します。
-<pre class="example"> $ <kbd>make create TEST=01_scalene</kbd>
+<pre class="example">$ <kbd>make create TEST=01_scalene</kbd>
</pre>
<div class="node">
<a name="Rename-and-Copy"></a>
</div>
-<h3 class="section">5.2 テスト名の変更とコピー</h3>
+<h3 class="section">6.2 テスト名の変更とコピー</h3>
-<p>テスト名を変更したりテストをコピーしたりする場合は、<kbd>mv</kbd>や<kbd>cp</kbd>などでテストディレクトリーを移動、コピーします。
+ <p>テスト名を変更したりテストをコピーしたりする場合は、<kbd>mv</kbd>や<kbd>cp</kbd>などでテストディレクトリーを移動、コピーします。
<h4 class="unnumberedsubsec">使用例</h4>
-<p>テスト名<code>01_scalene</code>を<code>01</code>に変更します。
+ <p>テスト名<code>01_scalene</code>を<code>01</code>に変更します。
-<pre class="example"> $ <kbd>mv 01_scalene 01</kbd>
+<pre class="example">$ <kbd>mv 01_scalene 01</kbd>
</pre>
<p>テスト<code>01</code>をコピーし、テスト<code>02</code>を作成します。
-<pre class="example"> $ <kbd>cp -r 01 02</kbd>
+<pre class="example">$ <kbd>cp -r 01 02</kbd>
</pre>
<div class="node">
<a name="Delete"></a>
</div>
-<h3 class="section">5.3 テストの削除</h3>
+<h3 class="section">6.3 テストの削除</h3>
-<p>テストを削除する場合は、<kbd>rm</kbd>などでテストディレクトリーを削除します。
+ <p>テストを削除する場合は、<kbd>rm</kbd>などでテストディレクトリーを削除します。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>rm -rf 01_scalene</kbd>
+<pre class="example">$ <kbd>rm -rf 01_scalene</kbd>
</pre>
-<div class="node">
+ <div class="node">
<a name="make-check-at-group"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-checkall">make checkall</a>,
</div>
-<h3 class="section">5.4 <kbd>make</kbd>または<kbd>make check</kbd> - テストグループの実行</h3>
+<h3 class="section">6.4 <kbd>make</kbd>または<kbd>make check</kbd> - テストグループの実行</h3>
-<p><kbd>make</kbd>または<kbd>make check</kbd>で、グループ内にあるすべての<a href="#make-check-at-test">テストの実行</a>をし、次の項目を表示します。
+ <p><kbd>make</kbd>または<kbd>make check</kbd>で、グループ内にあるすべての<a href="#make-check-at-test">テストの実行</a>をし、次の項目を表示します。
<ul>
<li><テスト名>: <成功テスト数>/<全テスト数> test passed. Detail in <テストグループログファイルの絶対パス>
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make</kbd>
- test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
- test: All tests are succeded.
+<pre class="example">$ <kbd>make</kbd>
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+test: All tests are succeded.
</pre>
-<div class="node">
+ <div class="node">
<a name="make-checkall"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-clean-at-group">make clean at group</a>,
</div>
-<h3 class="section">5.5 <kbd>make checkall</kbd> - グループ内にあるすべてのテストの実行、計時</h3>
+<h3 class="section">6.5 <kbd>make checkall</kbd> - グループ内にあるすべてのテストの実行、計時</h3>
-<p><kbd>make checkall</kbd>でグループ内にあるすべてのテストを、<a href="#make-check-at-test">実行</a>し、<a href="#make-time-at-test">計時</a>します。<a href="#make-check-at-group">テストグループの実行</a>と同じ項目を表示し、出力されるファイルの種類も同じです。<code><テストグループ名を大文字にした文字列>.log</code>には、テストと実行結果に加え、計時結果が一覧として出力されます。
+ <p><kbd>make checkall</kbd>でグループ内にあるすべてのテストを、<a href="#make-check-at-test">実行</a>し、<a href="#make-time-at-test">計時</a>します。<a href="#make-check-at-group">テストグループの実行</a>と同じ項目を表示し、出力されるファイルの種類も同じです。<code><テストグループ名を大文字にした文字列>.log</code>には、テストと実行結果に加え、計時結果が一覧として出力されます。
<p>テストの実行と計時は別に行われるため、通常にテストを実行するよりも2倍程度の時間がかかります。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make checkall</kbd>
- test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
- test: All tests are succeded.
+<pre class="example">$ <kbd>make checkall</kbd>
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+test: All tests are succeded.
</pre>
-<div class="node">
+ <div class="node">
<a name="make-clean-at-group"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-time-at-group">make time at group</a>,
</div>
-<h3 class="section">5.6 <kbd>make clean</kbd> - グループの実行結果をクリア</h3>
+<h3 class="section">6.6 <kbd>make clean</kbd> - グループの実行結果をクリア</h3>
-<p><kbd>make clean</kbd>で、<a href="#make-check-at-group"><kbd>make</kbd>または<kbd>make check</kbd></a>や<a href="#make-checkall"><kbd>make checkall</kbd></a>により作成されたファイルをすべて削除します。グループディレクトリーのほか、テストディレクトリーのファイルも削除されます。
+ <p><kbd>make clean</kbd>で、<a href="#make-check-at-group"><kbd>make</kbd>または<kbd>make check</kbd></a>や<a href="#make-checkall"><kbd>make checkall</kbd></a>により作成されたファイルをすべて削除します。グループディレクトリーのほか、テストディレクトリーのファイルも削除されます。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>cd ~/triangle/test</kbd>
- $ <kbd>make clean</kbd>
+<pre class="example">$ <kbd>make clean</kbd>
</pre>
-<div class="node">
+ <div class="node">
<a name="make-time-at-group"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-cleantime-at-group">make cleantime at group</a>,
</div>
-<h3 class="section">5.7 <kbd>make time</kbd> - グループ内にあるすべてのテストを計時</h3>
+<h3 class="section">6.7 <kbd>make time</kbd> - グループ内にあるすべてのテストを計時</h3>
-<p><kbd>make time</kbd>で、グループ内にあるすべてのテストを計時し、その結果が表示されます。計時結果は、<samp><span class="file"><テストグループ名を大文字にした文字列>_time.log</span></samp>に格納されます。
+ <p><kbd>make time</kbd>で、グループ内にあるすべてのテストを計時し、その結果が表示されます。計時結果は、<samp><span class="file"><テストグループ名を大文字にした文字列>_time.log</span></samp>に格納されます。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make time</kbd>
- 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
+<pre class="example">$ <kbd>make time</kbd>
+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
</pre>
-<div class="node">
+ <div class="node">
<a name="make-cleantime-at-group"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Group-Files">Group Files</a>,
+Next: <a rel="next" accesskey="n" href="#Group-files">Group files</a>,
Previous: <a rel="previous" accesskey="p" href="#make-time-at-group">make time at group</a>,
Up: <a rel="up" accesskey="u" href="#Group-dir">Group dir</a>
</div>
-<h3 class="section">5.8 <kbd>make cleantime</kbd> - グループの計時結果をクリア</h3>
+<h3 class="section">6.8 <kbd>make cleantime</kbd> - グループの計時結果をクリア</h3>
-<p><kbd>make cleatime</kbd>で、<kbd>make time</kbd>により作成されたテストグループディレクトリーと各テストディレクトリーのファイルをすべて削除します。
+ <p><kbd>make cleatime</kbd>で、<kbd>make time</kbd>により作成されたテストグループディレクトリーと各テストディレクトリーのファイルをすべて削除します。
-<div class="node">
-<a name="Group-Files"></a>
+<h4 class="unnumberedsubsec">使用例</h4>
+
+<pre class="example">$ <kbd>make cleantime</kbd>
+</pre>
+ <div class="node">
+<a name="Group-files"></a>
<p><hr>
Previous: <a rel="previous" accesskey="p" href="#make-cleantime-at-group">make cleantime at group</a>,
Up: <a rel="up" accesskey="u" href="#Group-dir">Group dir</a>
</div>
-<h3 class="section">5.9 グループディレクトリーのファイル</h3>
+<h3 class="section">6.9 グループディレクトリーのファイル</h3>
-<p>グループディレクトリーには、テストディレクトリーに加えて、次のファイルが含まれます。
+ <p>グループディレクトリーには、テストディレクトリーに加えて、次のファイルが含まれます。
<dl>
<dt><samp><span class="file">Makefile</span></samp><dd>グループディレクトリーのMakefile
</div>
-<h2 class="chapter">6 テストディレクトリー マニュアル</h2>
+<h2 class="chapter">7 テストディレクトリー マニュアル</h2>
<ul class="menu">
<li><a accesskey="1" href="#make-set">make set</a>: <kbd>make set</kbd> - テスト想定の作成
<li><a accesskey="5" href="#make-cleanall-at-test">make cleanall at test</a>: <kbd>make cleanall</kbd> - テストの想定と結果をクリア
<li><a accesskey="6" href="#make-time-at-test">make time at test</a>: <kbd>make time</kbd> - テストの計時
<li><a accesskey="7" href="#make-cleantime-at-test">make cleantime at test</a>: <kbd>make cleantime</kbd> - テスト計時結果のクリア
-<li><a accesskey="8" href="#Test-Files">Test Files</a>: テストディレクトリーのファイル
+<li><a accesskey="8" href="#Test-files">Test files</a>: テストディレクトリーのファイル
</ul>
<div class="node">
</div>
-<h3 class="section">6.1 <kbd>make set</kbd> - テスト想定の作成</h3>
+<h3 class="section">7.1 <kbd>make set</kbd> - テスト想定の作成</h3>
-<p><kbd>make set</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト想定ファイル<samp><span class="file">0.txt</span></samp>が作成されます。また、実行時に<samp><span class="file">0.txt</span></samp>の内容が表示されます。<samp><span class="file">0.txt</span></samp>がすでにある場合は、エラーが発生して<samp><span class="file">0.txt</span></samp>は更新されません。
+ <p><kbd>make set</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト想定ファイル<samp><span class="file">0.txt</span></samp>が作成されます。また、実行時に<samp><span class="file">0.txt</span></samp>の内容が表示されます。<samp><span class="file">0.txt</span></samp>がすでにある場合は、エラーが発生して<samp><span class="file">0.txt</span></samp>は更新されません。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make set</kbd>
- scalene triangle
+<pre class="example">$ <kbd>make set</kbd>
+scalene triangle
</pre>
-<div class="node">
+ <div class="node">
<a name="make-reset"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-check-at-test">make check at test</a>,
</div>
-<h3 class="section">6.2 <kbd>make reset</kbd> - テスト想定の作成または更新</h3>
+<h3 class="section">7.2 <kbd>make reset</kbd> - テスト想定の作成または更新</h3>
-<p><kbd>make reset</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト想定ファイル<samp><span class="file">0.txt</span></samp>を作成されます。また、実行時に<samp><span class="file">0.txt</span></samp>の内容が表示されます。<samp><span class="file">0.txt</span></samp>がすでにある場合、<samp><span class="file">0.txt</span></samp>が更新されます。
+ <p><kbd>make reset</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト想定ファイル<samp><span class="file">0.txt</span></samp>を作成されます。また、実行時に<samp><span class="file">0.txt</span></samp>の内容が表示されます。<samp><span class="file">0.txt</span></samp>がすでにある場合、<samp><span class="file">0.txt</span></samp>が更新されます。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make reset</kbd>
- scalene triangle
+<pre class="example">$ <kbd>make reset</kbd>
+scalene triangle
</pre>
-<div class="node">
+ <div class="node">
<a name="make-check-at-test"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-clean-at-test">make clean at test</a>,
</div>
-<h3 class="section">6.3 <kbd>make</kbd>または<kbd>make check</kbd> - テストの実行</h3>
+<h3 class="section">7.3 <kbd>make</kbd>または<kbd>make check</kbd> - テストの実行</h3>
-<p><kbd>make</kbd>または<kbd>make check</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト結果ファイル<samp><span class="file">1.txt</span></samp>が作成されます。また、実行時にテストの結果をあらわす次の項目が表示されます。
+ <p><kbd>make</kbd>または<kbd>make check</kbd>で、テストコマンド<samp><span class="file">cmd</span></samp>が実行され、テスト結果ファイル<samp><span class="file">1.txt</span></samp>が作成されます。また、実行時にテストの結果をあらわす次の項目が表示されます。
<ul>
<li><テスト説明ファイル<samp><span class="file">desc.txt</span></samp>の内容>
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make</kbd>
- 有効な不等辺三角形をあらわすテスト・ケース
- 01_scalene: Test Success 2011-01-10 10:09:55
- Detail in /home/foo/triangle/test/01_scalene/detail.log
+<pre class="example">$ <kbd>make</kbd>
+有効な不等辺三角形をあらわすテスト・ケース
+01_scalene: Test Success 2011-01-10 10:09:55
+Detail in /home/foo/triangle/test/01_scalene/detail.log
</pre>
-<div class="node">
+ <div class="node">
<a name="make-clean-at-test"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-cleanall-at-test">make cleanall at test</a>,
</div>
-<h3 class="section">6.4 <kbd>make clean</kbd> - テスト結果のクリア</h3>
+<h3 class="section">7.4 <kbd>make clean</kbd> - テスト結果のクリア</h3>
-<p><kbd>make clean</kbd>で、テストの実行または計時の結果作成された次のファイルが削除されます。
+ <p><kbd>make clean</kbd>で、テストの実行または計時の結果作成された次のファイルが削除されます。
<ul>
<li><samp><span class="file">1.txt</span></samp>
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make clean</kbd>
- $ <kbd>ls</kbd>
- 0.txt Makefile cmd desc.txt
+<pre class="example">$ <kbd>make clean</kbd>
+$ <kbd>ls</kbd>
+0.txt Makefile cmd desc.txt
</pre>
-<div class="node">
+ <div class="node">
<a name="make-cleanall-at-test"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-time-at-test">make time at test</a>,
</div>
-<h3 class="section">6.5 <kbd>make cleanall</kbd> - テストの想定と結果をクリア</h3>
+<h3 class="section">7.5 <kbd>make cleanall</kbd> - テストの想定と結果をクリア</h3>
-<p><kbd>make clean</kbd>で次の、テストの想定ファイルとテストの実行または計時の結果作成されたファイルが削除されます。
+ <p><kbd>make clean</kbd>で次の、テストの想定ファイルとテストの実行または計時の結果作成されたファイルが削除されます。
<ul>
<li><samp><span class="file">0.txt</span></samp>
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make cleanall</kbd>
- $ <kbd>ls</kbd>
- Makefile cmd desc.txt
+<pre class="example">$ <kbd>make cleanall</kbd>
+$ <kbd>ls</kbd>
+Makefile cmd desc.txt
</pre>
-<div class="node">
+ <div class="node">
<a name="make-time-at-test"></a>
<p><hr>
Next: <a rel="next" accesskey="n" href="#make-cleantime-at-test">make cleantime at test</a>,
</div>
-<h3 class="section">6.6 <kbd>make time</kbd> - テストの計時</h3>
+<h3 class="section">7.6 <kbd>make time</kbd> - テストの計時</h3>
-<p><kbd>make time</kbd>で、テストを計時しその結果が表示されます。計時結果は、<samp><span class="file">time.log</span></samp>に格納されます。
+ <p><kbd>make time</kbd>で、テストを計時しその結果が表示されます。計時結果は、<samp><span class="file">time.log</span></samp>に格納されます。
<h4 class="unnumberedsubsec">使用例</h4>
-<pre class="example"> $ <kbd>make time</kbd>
- real 0m0.006s
+<pre class="example">$ <kbd>make time</kbd>
+real 0m0.006s
</pre>
-<div class="node">
+ <div class="node">
<a name="make-cleantime-at-test"></a>
<p><hr>
-Next: <a rel="next" accesskey="n" href="#Test-Files">Test Files</a>,
+Next: <a rel="next" accesskey="n" href="#Test-files">Test files</a>,
Previous: <a rel="previous" accesskey="p" href="#make-time-at-test">make time at test</a>,
Up: <a rel="up" accesskey="u" href="#Test-dir">Test dir</a>
</div>
-<h3 class="section">6.7 <kbd>make cleantime</kbd> - テスト計時結果のクリア</h3>
+<h3 class="section">7.7 <kbd>make cleantime</kbd> - テスト計時結果のクリア</h3>
-<p><kbd>make cleantime</kbd>で、テストの計時の結果作成された次のファイルが削除されます。
+ <p><kbd>make cleantime</kbd>で、テストの計時の結果作成された次のファイルが削除されます。
<ul>
<li><samp><span class="file">time.log</span></samp>
</ul>
-<div class="node">
-<a name="Test-Files"></a>
+<h4 class="unnumberedsubsec">使用例</h4>
+
+<pre class="example">$ <kbd>make cleantime</kbd>
+</pre>
+ <div class="node">
+<a name="Test-files"></a>
<p><hr>
Previous: <a rel="previous" accesskey="p" href="#make-cleantime-at-test">make cleantime at test</a>,
Up: <a rel="up" accesskey="u" href="#Test-dir">Test dir</a>
</div>
-<h3 class="section">6.8 テストディレクトリーのファイル</h3>
+<h3 class="section">7.8 テストディレクトリーのファイル</h3>
<dl>
<dt><samp><span class="file">Makefile</span></samp><dd>テストディレクトリーのMakefile
<p class="footnote"><small>[<a name="fn-2" href="#fnd-2">2</a>]</small> 『ソフトウェア・テストの技法』では下記の13個に加え、「それぞれのテスト・ケースについて、入力の値に対して予想される値をしめしたか」というテスト・ケースが記載されています。このテスト・ケースは、Autotest.mkを実行している場合は自動的に満たされると考えています。</p>
+ <p class="footnote"><small>[<a name="fn-3" href="#fnd-3">3</a>]</small> 「CUnit チュートリアル」の「テスト関数1」と「テスト関数2」を、チュートリアルを説明しやすくするため入れ替えています。</p>
+
<hr></div>
</body></html>
-Check Log\input texinfo @c -*-texinfo-*-
+\input texinfo @c -*-texinfo-*-
@c %**start of header
@ifnottex
@documentlanguage ja_JP
@setfilename autotest_mk.info
@documentencoding UTF-8
@settitle Autotest.mk - GNU Makeを利用したソフトウェアテスト自動化ツール
-@firstparagraphindent none
+@firstparagraphindent insert
@paragraphindent 1
+@ifhtml
+@exampleindent 0
+@end ifhtml
@c %**end of header
@copying
Copyright @copyright{} 2011 j8takagi
@end copying
-@exampleindent 2
-
@dircategory Basics
@direntry
* Autotest.mk: (autotest_mk).
@menu
* About:: Autotest.mk 概要
* Install:: Autotest.mk インストール
-* Tutorial:: Autotest.mk チュートリアル
+* Tutorial triangle:: Autotest.mk チュートリアルI - 三角形判定プログラムのテスト
+* Tutorial sort:: Autotest.mk チュートリアルII - C言語@code{sort}関数のテスト
* Template dir:: テンプレートディレクトリー マニュアル
* Group dir:: グループディレクトリー マニュアル
* Test dir:: テストディレクトリー マニュアル
@ifinfo
+
@detailmenu
--- The Detailed Node Listing ---
* Expand:: 展開
* Dir:: ディレクトリー
-Autotest.mk チュートリアル - 三角形判定プログラムのテスト
-
-* Tutorial About:: 概要
-* Prepare:: 準備
-* Create Group:: グループディレクトリーの作成
-* Create Test:: テストディレクトリーの作成
-* Edit desc:: テスト説明ファイルの作成
-* Edit cmd:: テストコマンドファイルの作成
-* Test Setting:: テスト想定ファイルの作成
-* Test Execute:: テストの実行
-* Check Test Log:: テストログファイルの確認
-* Group Execute:: テストグループの実行
-* Check Group Log:: テストグループログファイルの確認
-* Associate:: ビルドとの連携
+Autotest.mk チュートリアルI - 三角形判定プログラムのテスト
+
+* Tutorial triangle About:: 概要
+* Prepare triangle:: 準備
+* Create triangle group:: グループディレクトリーの作成
+* Create triangle test:: テストディレクトリーの作成
+* Edit triangle desc:: テスト説明ファイルの作成
+* Edit triangle cmd:: テストコマンドファイルの作成
+* Set triangle test:: テスト想定ファイルの作成
+* Execute triangle test:: テストの実行
+* Check triangle log:: テストログファイルの確認
+* Execute triangle group:: テストグループの実行
+* Check triangle group log:: テストグループログファイルの確認
+* Associate triangle:: ビルドとの連携
+
+Autotest.mk チュートリアルII - C言語@code{sort}関数のテスト
+
+* Tutorial sort About:: 概要
+* Prepare sort:: 準備
+* Create sort group:: グループディレクトリーの作成
+* Create sort test:: テストディレクトリーの作成
+* Create sort src:: 関数テスト用プログラムのソース作成
+* Edit sort Makefile:: @file{Makefile}の編集
+* Edit sort desc:: テスト説明ファイルの作成
+* Set sort test:: テスト想定ファイルの作成
+* Execute sort test:: テストの実行
+* Check sort log:: テストログファイルの確認
+* Execute sort group:: テストグループの実行
+* Check sort group log:: テストグループログファイルの確認
+* Iteretive:: 開発とテストの反復
テンプレートディレクトリー マニュアル
* make group:: @kbd{make}または@kbd{make group} - グループディレクトリーの作成
-* Template Files:: テンプレートのファイル
+* Template files:: テンプレートのファイル
グループディレクトリー マニュアル
* make clean at group:: @kbd{make clean} - グループ内にあるすべてのテストで、実行結果をクリア
* make time at group:: @kbd{make time} - グループ内にあるすべてのテストを計時
* make cleantime at group:: @kbd{make cleantime} - グループ内にあるすべてのテストで、計時結果をクリア
-* Group Files:: グループのファイル
+* Group files:: グループのファイル
テストディレクトリー マニュアル
* make cleanall at test:: @kbd{make cleanall} - テストの想定と結果をクリア
* make time at test:: @kbd{make time} - テストの計時
* make cleantime at test:: @kbd{make cleantime} - テスト計時結果のクリア
-* Test Files:: テストディレクトリーのファイル
+* Test files:: テストディレクトリーのファイル
@end detailmenu
@end ifinfo
@end menu
+@ifnotinfo
@contents
+@end ifnotinfo
@node About, Install, Top, Top
@chapter Autotest.mk 概要
無償で使うことができ、自由に改造できる
@end itemize
-@node Install, Tutorial, About, Top
+@node Install, Tutorial triangle, About, Top
@chapter Autotest.mk インストール
@menu
テスト実行のためのファイルと、実行結果をあらわすファイルを含むディレクトリー
@end table
-@node Tutorial, Template dir, Install, Top
-@chapter Autotest.mk チュートリアル - 三角形判定プログラムのテスト
+@node Tutorial triangle, Tutorial sort, Install, Top
+@chapter Autotest.mk チュートリアルI - 三角形判定プログラムのテスト
@menu
-* Tutorial About:: 概要
-* Prepare:: 準備
-* Create Group:: グループディレクトリーの作成
-* Create Test:: テストディレクトリーの作成
-* Edit desc:: テスト説明ファイルの作成
-* Edit cmd:: テストコマンドファイルの作成
-* Test Setting:: テスト想定ファイルの作成
-* Test Execute:: テストの実行
-* Check Test Log:: テストログファイルの確認
-* Group Execute:: テストグループの実行
-* Check Group Log:: テストグループログファイルの確認
-* Associate:: ビルドとの連携
+* Tutorial triangle About:: 概要
+* Prepare triangle:: 準備
+* Create triangle group:: グループディレクトリーの作成
+* Create triangle test:: テストディレクトリーの作成
+* Edit triangle desc:: テスト説明ファイルの作成
+* Edit triangle cmd:: テストコマンドファイルの作成
+* Set triangle test:: テスト想定ファイルの作成
+* Execute triangle test:: テストの実行
+* Check triangle log:: テストログファイルの確認
+* Execute triangle group:: テストグループの実行
+* Check triangle group log:: テストグループログファイルの確認
+* Associate triangle:: ビルドとの連携
@end menu
-@node Tutorial About, Prepare, Tutorial, Tutorial
+@node Tutorial triangle About, Prepare triangle, Tutorial triangle, Tutorial triangle
@unnumberedsec 概要
ここでは、Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)の記載を元にした、次の仕様の三角形判定プログラムをテストする手順を取り上げます@footnote{『ソフトウェア・テストの技法』では「カードから3つの整数を読む」となっているのを、「3つの引数をとる」に変更しています。}。
@end enumerate
@end quotation
-三角形判定プログラムは、サンプルとして用意されているものを@ref{Prepare, , 準備}するか、または自作してください。
+三角形判定プログラムは、サンプルとして用意されているものを@ref{Prepare triangle, , 準備}するか、または自作してください。
準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。
テストグループログファイルの確認
@end enumerate
-@node Prepare, Create Group, Tutorial About, Tutorial
+@node Prepare triangle, Create triangle group, Tutorial triangle About, Tutorial triangle
@unnumberedsec 準備
@unnumberedsubsec 作業用フォルダの作成
@kbd{./triangle 3 4 5}で、仕様で`scalene triangle'となるべきところが、`futohen sankakukei'となっています。
-@node Create Group, Create Test, Prepare, Tutorial
+@node Create triangle group, Create triangle test, Prepare triangle, Tutorial triangle
@section グループディレクトリーの作成
テンプレートディレクトリーで@kbd{make}を実行し、グループディレクトリーを作成します。このとき、テストグループのディレクトリーを変数@code{GROUPDIR}で指定します。ここでは、@kbd{~/triangle/test}をテストグループのディレクトリーにします。
Define.mk Makefile Test.mk
@end example
-@node Create Test, Edit desc, Create Group, Tutorial
+@node Create triangle test, Edit triangle desc, Create triangle group, Tutorial triangle
@section テストディレクトリーの作成
-グループディレクトリーで@kbd{make create}を実行し、テストディレクトリーを作成します。このとき、変数@code{GROUPDIR}でテスト名を指定します。テスト名は、小文字のアルファベットと数字で指定します。ここでは、1つめのテスト・ケースに対応するテストディレクトリーを、@code{01_scalene}という名前で作成します。
+グループディレクトリーで@kbd{make create}を実行し、テストディレクトリーを作成します。このとき、変数@code{GROUPDIR}でテスト名を指定します。テスト名は、小文字のアルファベットと数字で指定します。ここでは、1つめのテスト・ケースに対応するテストディレクトリーを、@file{01_scalene}という名前で作成します。
@example
$ @kbd{make create TEST=01_scalene}
Makefile
@end example
-@node Edit desc, Edit cmd, Create Test, Tutorial
+@node Edit triangle desc, Edit triangle cmd, Create triangle test, Tutorial triangle
@section テスト説明ファイルの作成
テスト説明ファイル@file{desc.txt}はテストに関する説明をあらわし、テストの結果と一緒にログに出力されます。
@file{desc.txt}をテキストエディターを使って次の内容で作成します。
@kbd{有効な不等辺三角形をあらわすテスト・ケース}
@end example
-@node Edit cmd, Test Setting, Edit desc, Tutorial
+@node Edit triangle cmd, Set triangle test, Edit triangle desc, Tutorial triangle
@section テストコマンドファイルの作成
テストコマンドファイル@file{cmd}は、テスト時に実行されるコマンドをあらわします。
@kbd{../../triangle 3 4 5}
@end example
-@node Test Setting, Test Execute, Edit cmd, Tutorial
+@node Set triangle test, Execute triangle test, Edit triangle cmd, Tutorial triangle
@section テスト想定ファイルの作成
テスト想定ファイル@file{0.txt}は、テストが正しく実行された場合の結果をあらわします。@file{0.txt}の作成方法は、次の3つがあります。
scalene triangle
@end example
-この方法で@file{0.txt}を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。例えば、バグを含む三角形判定プログラムを準備して@kbd{make set}を実行すると、仕様と異なるテスト想定ファイルが作成され、テストを正しく実行できません。
+この方法で@file{0.txt}を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。例えば、バグを含む三角形判定プログラムを準備して@kbd{make set}を実行すると、仕様と異なる次のようなテスト想定となり、テストを正しく実行できません。
@example
$ @kbd{make set}
scalene triangle
@end example
-@node Test Execute, Check Test Log, Test Setting, Tutorial
+@node Execute triangle test, Check triangle log, Set triangle test, Tutorial triangle
@section テストの実行
コマンドファイルとテスト想定を用意したら、@kbd{make}または@kbd{make check}でテストを実行できます。
@unnumberedsubsec バグを含む三角形判定プログラムの場合
-バグを含む三角形判定プログラムでテストを実行すると、次のように表示されます。
+正しいテスト想定を作成していた場合にバグを含む三角形判定プログラムでテストを実行すると、次のように表示されます。
@example
$ @kbd{make}
Detail in /home/foo/triangle/test/01_scalene/detail.log
@end example
-@node Check Test Log, Group Execute, Test Execute, Tutorial
+@node Check triangle log, Execute triangle group, Execute triangle test, Tutorial triangle
@section テストログファイルの確認
-テストを実行して作成されたファイルを確認します。@file{1.txt}、@file{summary.log}、@file{detail.log}が作成されています。
+テストを実行して作成されたファイルを確認します。@file{1.txt} @file{summary.log} @file{detail.log}が作成されています。
@example
-$ ls
+$ @kbd{ls}
0.txt 1.txt Makefile cmd desc.txt detail.log summary.log
@end example
@unnumberedsubsec バグを含む三角形判定プログラムの場合
-バグを含む三角形判定プログラムを準備してテストを実行した場合、@file{1.txt}、@file{summary.log}、@file{detail.log}のほかに、テスト想定とテスト結果が異なるため@kbd{diff.log}が作成されます。
+バグを含む三角形判定プログラムを準備してテストを実行した場合、@file{1.txt} @file{summary.log} @file{detail.log}のほかに、テスト想定とテスト結果が異なるため@kbd{diff.log}が作成されます。
@example
$ @kbd{ls}
== diff.log ==
----------------------------------------------------------------------
-*** 0.txt Mon Jan 10 20:12:14 2011
---- 1.txt Mon Jan 10 20:25:16 2011
+*** 0.txt Mon Jan 10 20:12:14 2011
+--- 1.txt Mon Jan 10 20:25:16 2011
***************
*** 1 ****
! scalene triangle
@end example
-@node Group Execute, Check Group Log, Check Test Log, Tutorial
+@node Execute triangle group, Check triangle group log, Check triangle log, Tutorial triangle
@section テストグループの実行
2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクトリーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファイルを作成します。
-ここでは、先に作成した@file{01_scalene}も含めて、次のようなディレクトリーとファイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの@file{sample/triangle/test}以下にあるので、コピーして作成することもできます。
+ここでは、先に作成した@file{01_scalene}も含めて、次のようなディレクトリーとファイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの@file{sample/triangle/test}以下にあります。
+
+@itemize
+@ifnothtml
+@item
+01_scalene
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+02_equilateral
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+03_isosceles
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+
+@item
+04_isosceles_c
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+05_zero
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+06_minus
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+07_line
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+08_lines
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+09_less
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+10_lesses
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+11_zeroall
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+12_notint
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+
+@item
+13_argcnt
@itemize
@item
+@file{Makefile} @file{desc.txt} @file{cmd} @file{0.txt}
+@end itemize
+@end ifnothtml
+
+@ifhtml
+@item
01_scalene
@itemize
@item
@file{Makefile} @uref{sample_triangle/13_argcnt/desc.txt, @file{desc.txt}} @uref{sample_triangle/13_argcnt/cmd.txt, @file{cmd}} @uref{sample_triangle/13_argcnt/0.txt, @file{0.txt}}
@end itemize
+@end ifhtml
@end itemize
テストグループディレクトリーでは、@kbd{make}または@kbd{make check}で複数のテストをまとめて実行できます。
test: 11 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
@end example
-@node Check Group Log, Associate, Group Execute, Tutorial
+@node Check triangle group log, Associate triangle, Execute triangle group, Tutorial triangle
@section テストグループログファイルの確認
テストグループを実行すると作成されるファイルは、次のとおりです。
@end example
-@node Associate, , Check Group Log, Tutorial
+@node Associate triangle, , Check triangle group log, Tutorial triangle
@section ビルドとの連携
三角形判定プログラムでは、@file{~/triangle}など作業用ディレクトリーのトップで@kbd{make}を実行すればプログラムをビルドできました。作業用ディレクトリーの@file{Makefile}を次のように編集すると、ビルドと連携してテストを実行できるようになります。
$(CC) -o triangle triangle.c
@kbd{check:}
-@kbd{ $(MAKE) -c test}
+@kbd{ $(MAKE) -c test}
clean:
rm -f triangle
gcc -o triangle triangle.c
$ @kbd{make check}
make -C test
-test: 13 / 13 tests passed. Detail in /Users/kazubito/2011_01/triangle/test/TEST.log
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
test: All tests are succeded.
@end example
こうした設定をしておけば、プログラムを変更するたびに簡単にビルドとテストを実行することができます。
-@node Template dir, Group dir, Tutorial, Top
-@chapter テンプレートディレクトリー マニュアル
-
-テンプレートディレクトリーは、Autotest.mkをインストールするときに展開により作成された@file{template}ディレクトリーです。
+@node Tutorial sort, Template dir, Tutorial triangle, Top
+@chapter Autotest.mk チュートリアルII - C言語@code{sort}関数のテスト
@menu
-* make group:: @kbd{make}または@kbd{make group} - グループディレクトリーの作成
-* Template Files:: テンプレートのファイル
+* Tutorial sort About:: 概要
+* Prepare sort:: 準備
+* Create sort group:: グループディレクトリーの作成
+* Create sort test:: テストディレクトリーの作成
+* Create sort src:: 関数テスト用プログラムのソース作成
+* Edit sort Makefile:: @file{Makefile}の編集
+* Edit sort desc:: テスト説明ファイルの作成
+* Set sort test:: テスト想定ファイルの作成
+* Execute sort test:: テストの実行
+* Check sort log:: テストログファイルの確認
+* Execute sort group:: テストグループの実行
+* Check sort group log:: テストグループログファイルの確認
+* Iteretive:: 開発とテストの反復
@end menu
-@node make group, Template Files, Template dir, Template dir
-@section @kbd{make}または@kbd{make group} - グループディレクトリーの作成
+@node Tutorial sort About, Prepare sort, Tutorial sort, Tutorial sort
+@unnumberedsec 概要
+ここではC言語の関数テストの例として、@code{sort}関数をテストします。@uref{http://cunit.sourceforge.net/, CUnit}のわかりやすい日本語チュートリアル@uref{http://homepage3.nifty.com/kaku-chan/cunit/index.html, CUnit チュートリアル}で使われている関数です。
-変数@code{GROUPDIR}で指定されたディレクトリーをテストグループディレクトリーとして作成し、テストの実行に必要な次のファイルを配置します。
+@file{sort_normal.c}は、次の内容です。
-@itemize
-@item
-@file{Define.mk}
+@example
+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;
+ @}
+ @}
+ @}
+@}
+@end example
-@item
-@file{Makefile}
+バグを含む@file{sort_normal.c}は、次の内容です。
-@item
-@file{Test.mk}
-@end itemize
+@example
+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;
+ @}
+ @}
+ @}
+@}
+@end example
-通常、テストに必要なファイルテンプレートディレクトリーからグループディレクトリーにコピーされます。変数@code{LINKMK}を指定した場合は、シンボリックリンクが作成されます。
+プログラムは、サンプルとして用意されているものを@ref{Prepare sort, , 準備}してください。
-@subsection 変数
+準備ができたら、Autotest.mkを使った次の手順でテストを実行できます。
-@table @code
-@item GROUPDIR
-ã\83\86ã\82¹ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\92æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82æ\8c\87å®\9aã\81\97ã\81ªã\81\84å ´å\90\88ã\82\84æ\97¢å\98ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\92æ\8c\87å®\9aã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¦ã\83\86ã\82¹ã\83\88ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81¯ä½\9cæ\88\90ã\81\95ã\82\8cã\81¾ã\81\9bã\82\93ã\80\82
+@enumerate
+@item
+ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81®ä½\9cæ\88\90
-@item LINKMK
-指定した場合、グループディレクトリーにテストの実行に必要なファイルのシンボリックリンクが作成されます。値は任意です。シンボリックリンクのリンク先は、テンプレートディレクトリーの中です。
-@end table
+@item
+テストディレクトリーの作成
-@unnumberedsubsec 使用例
+@item
+テスト説明ファイルの作成
-グループディレクトリーとして@file{~/triangle/test}を作成します。
+@item
+関数テスト用プログラムのソース作成
-@example
-$ @kbd{make GROUPDIR=~/triangle/test}
-@end example
+@item
+@file{Makefile}の編集
-@node Template Files, , make group, Template dir
-@section テンプレートのファイル
+@item
+テスト想定ファイルの作成
-テンプレートディレクトリーには、次のファイルが含まれます。
-@table @file
-@item Makefile
-テンプレートディレクトリーのMakefile
+@item
+テストの実行
-@item Group.mk
-ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81®Makefileã\80\82@kbd{make}ã\81¾ã\81\9fã\81¯@kbd{make group}ã\81§ã\80\81ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81«@file{Makefile}ã\81¨ã\81\97ã\81¦é\85\8dç½®ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82
+@item
+ã\83\86ã\82¹ã\83\88ã\83ã\82°ã\83\95ã\82¡ã\82¤ã\83«ã\81®ç¢ºèª\8d
-@item Test.mk
-ã\83\86ã\82¹ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81\8bã\82\89å\8f\82ç\85§ã\81\95ã\82\8cã\82\8bMakefileã\80\82@kbd{make}ã\81¾ã\81\9fã\81¯@kbd{make group}ã\81§ã\80\81ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81«é\85\8dç½®ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82
+@item
+ã\83\86ã\82¹ã\83\88ã\82°ã\83«ã\83¼ã\83\97ã\81®å®\9fè¡\8c
-@item Define.mk
-ã\83\86ã\82¹ã\83\88ã\81¨ã\83\86ã\82¹ã\83\88ã\82°ã\83«ã\83¼ã\83\97ã\81«é\96¢ã\81\99ã\82\8bé \85ç\9b®ã\82\92å®\9a義ã\81\97ã\81\9fMakefileã\80\82@kbd{make}ã\81¾ã\81\9fã\81¯@kbd{make group}ã\81§ã\80\81ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81«é\85\8dç½®ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82
-@end table
+@item
+ã\83\86ã\82¹ã\83\88ã\82°ã\83«ã\83¼ã\83\97ã\83ã\82°ã\83\95ã\82¡ã\82¤ã\83«ã\81®ç¢ºèª\8d
+@end enumerate
-@node Group dir, Test dir, Template dir, Top
-@chapter グループディレクトリー マニュアル
+@node Prepare sort, Create sort group, Tutorial sort About, Tutorial sort
+@unnumberedsec 準備
-@ref{make group, , グループディレクトリーの作成}後、グループディレクトリーに移動すると次の操作ができます。
+@unnumberedsubsec 作業用フォルダの作成
-@menu
-* make create:: @kbd{make create} - テストの作成
-* Rename and Copy:: テスト名の変更とコピー
-* Delete:: テストの削除
-* make check at group:: @kbd{make}または@kbd{make check} - テストグループの実行
-* make checkall:: @kbd{make checkall} - グループ内にあるすべてのテストの実行、計時
-* make clean at group:: @kbd{make clean} - グループ内にあるすべてのテストで、実行結果をクリア
-* make time at group:: @kbd{make time} - グループ内にあるすべてのテストを計時
-* make cleantime at group:: @kbd{make cleantime} - グループ内にあるすべてのテストで、計時結果をクリア
-* Group Files:: グループのファイル
-@end menu
+まず、Autotest.mkのパッケージに含まれている@file{sample/sort}以下のファイルを、任意の作業用ディレクトリーにコピーします。ここでは、@file{~/sort}(@file{~}は、現在ログインしているユーザーのホームディレクトリー)を作業用ディレクトリーにします。また、@file{autotest.mk}は、@file{~}に展開されているものとします。
-@node make create, Rename and Copy, Group dir, Group dir
-@section @kbd{make create} - テストの作成
+@example
+$ @kbd{cd}
+$ @kbd{mkdir sort}
+$ @kbd{cd autotest.mk/sample/sort}
+$ @kbd{cp sort_normal.c sort_bug.c Makefile ~/sort}
+@end example
-変数@code{TEST}で指定されたディレクトリーをテストディレクトリーとして作成し、ディレクトリーの中に@code{Makefile}を作成します。
+作業用ディレクトリーに移動し、中のファイルを確認します。
-テスト名は、小文字のアルファベットと数字で指定します。大文字ではじまる名前を指定した場合、ディレクトリーや@code{Makefile}は作成されるものの、テストグループ実行の対象になりません。
+@example
+$ @kbd{cd ~/sort}
+$ @kbd{ls}
+Makefile sort_normal.c sort_bug.c
+@end example
-変数@code{SRC=c}を指定した場合は、C言語の関数テスト用の@code{Makefile}が作成されます。
+@unnumberedsubsec @code{sort}関数ファイルの準備
+@kbd{make}または@kbd{make normal}で、@file{sort_normal.c}が@file{sort.c}にコピーされます。
-@unnumberedsubsec 使用例
+@example
+$ @kbd{make}
+rm -f sort.c
+cp sort_normal.c sort.c
+@end example
-テストディレクトリーを、@code{01_scalene}という名前で作成します。
+@unnumberedsubsec バグを含む@code{sort}関数ファイルの準備
+@kbd{make bug}で、@file{sort_bug.c}が@file{sort.c}にコピーされます。
+この場合、@file{sort.c}はバグを含みます。
@example
-$ @kbd{make create TEST=01_scalene}
+$ @kbd{make bug}
+rm -f sort.c
+cp sort_bug.c sort.c
@end example
-@node Rename and Copy, Delete, make create, Group dir
-@section テスト名の変更とコピー
-
-テスト名を変更したりテストをコピーしたりする場合は、@kbd{mv}や@kbd{cp}などでテストディレクトリーを移動、コピーします。
+@node Create sort group, Create sort test, Prepare sort, Tutorial sort
+@section グループディレクトリーの作成
-@unnumberedsubsec 使用例
-テスト名@code{01_scalene}を@code{01}に変更します。
+テンプレートディレクトリーで@kbd{make}を実行し、グループディレクトリーを作成します。このとき、テストグループのディレクトリーを変数@code{GROUPDIR}で指定します。ここでは、@kbd{~/sort/test}をテストグループのディレクトリーにします。
@example
-$ @kbd{mv 01_scalene 01}
+$ @kbd{cd ~/autotest.mk/template}
+$ @kbd{make GROUPDIR=~/sort/test}
@end example
-テスト@code{01}をコピーし、テスト@code{02}を作成します。
+次のコマンドでグループディレクトリーに移動し、その中を確認します。
@example
-$ @kbd{cp -r 01 02}
+$ @kbd{cd ~/sort/test}
+$ @kbd{ls}
+Define.mk Makefile Test.mk
@end example
-@node Delete, make check at group, Rename and Copy, Group dir
-@section ã\83\86ã\82¹ã\83\88ã\81®å\89\8aé\99¤
+@node Create sort test, Create sort src, Create sort group, Tutorial sort
+@section ã\83\86ã\82¹ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81®ä½\9cæ\88\90
-ã\83\86ã\82¹ã\83\88ã\82\92å\89\8aé\99¤ã\81\99ã\82\8bå ´å\90\88ã\81¯ã\80\81@kbd{rm}ã\81ªã\81©ã\81§ã\83\86ã\82¹ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\92å\89\8aé\99¤ã\81\97ã\81¾ã\81\99。
+ã\82°ã\83«ã\83¼ã\83\97ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81§@kbd{make create}ã\82\92å®\9fè¡\8cã\81\97ã\80\81ã\83\86ã\82¹ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\82\92ä½\9cæ\88\90ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81®ã\81¨ã\81\8dã\80\81å¤\89æ\95°@code{GROUPDIR}ã\81§ã\83\86ã\82¹ã\83\88å\90\8dã\82\92æ\8c\87å®\9aã\81\97ã\80\81ã\81\95ã\82\89ã\81«Cè¨\80èª\9eã\81®é\96¢æ\95°ã\83\86ã\82¹ã\83\88ç\94¨ã\81®@code{Makefile}ã\82\92ä½\9cæ\88\90ã\81\99ã\82\8bã\81\9fã\82\81å¤\89æ\95°@code{SRC=c}ã\82\92æ\8c\87å®\9aã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\81\93ã\81§ã\81¯ã\80\811ã\81¤ã\82\81ã\81®ã\83\86ã\82¹ã\83\88ã\82\92@file{sort_001}ã\81¨ã\81\84ã\81\86å\90\8då\89\8dã\81§ä½\9cæ\88\90ã\81\97ã\81¾ã\81\99@footnote{ã\80\8cCUnit ã\83\81ã\83¥ã\83¼ã\83\88ã\83ªã\82¢ã\83«ã\80\8dã\81®ã\80\8cã\83\86ã\82¹ã\83\88é\96¢æ\95°1ã\80\8dã\81¨ã\80\8cã\83\86ã\82¹ã\83\88é\96¢æ\95°2ã\80\8dã\82\92ã\80\81ã\83\81ã\83¥ã\83¼ã\83\88ã\83ªã\82¢ã\83«ã\82\92説æ\98\8eã\81\97ã\82\84ã\81\99ã\81\8fã\81\99ã\82\8bã\81\9fã\82\81å\85¥ã\82\8cæ\9b¿ã\81\88ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82}。
-@unnumberedsubsec 使用例
+@example
+$ @kbd{make create TEST=sort_001 SRC=c}
+@end example
+
+次のコマンドでテストディレクトリーに移動し、その中を確認します。
@example
-$ @kbd{rm -rf 01_scalene}
+$ @kbd{cd sort_001}
+$ @kbd{ls}
+Makefile
@end example
-@node make check at group, make checkall, Delete, Group dir
-@section @kbd{make}または@kbd{make check} - テストグループの実行
+@node Create sort src, Edit sort Makefile, Create sort test, Tutorial sort
+@section 関数テスト用プログラムのソース作成
+C言語の関数をテストするためのプログラムをC言語で記述した、プログラムのソースファイル@file{cmd.c}をテキストエディターで作成します。テスト対象の関数@code{sort}を呼び出してソートを実行し、その結果を表示するプログラムです。
-@kbd{make}または@kbd{make check}で、グループ内にあるすべての@ref{make check at test, , テストの実行}をし、次の項目を表示します。
+@example
+#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;
+@}
+@end example
-@itemize
-@item
-<テスト名>: <成功テスト数>/<全テスト数> test passed. Detail in <テストグループログファイルの絶対パス>
+@node Edit sort Makefile, Edit sort desc, Create sort src, Tutorial sort
+@section @file{Makefile}の編集
+@file{Makefile}をテキストエディターで編集し、テスト対象ファイルをあらわす変数@code{TESTTARGET_FILES}を指定します。
+ここでは、@file{../../sort.c}を指定します。
-@item
-(すべてのテストに成功した場合)<テスト名>: All tests are succeded.
-@end itemize
+@example
+include ../Define.mk
+include ../Test.mk
-テストグループを実行すると次のファイルが作成されます。
+CC := gcc
+CFLAGS := -Wall
-@table @file
-@item <テストグループ名を大文字にした文字列>.log
-テストグループに含まれるテストとその実行結果の一覧をあらわします。
+.INTERMEDIATE: $(CMD_FILE)
-@item Summary.log
-テスト実行結果の概要を表します。テストグループ実行時に表示される内容です。
-@end table
+CMDSRC_FILE := cmd.c
+TESTTARGET_FILES := @kbd{../../sort.c} # Set test target files
-@unnumberedsubsec 使用例
+COMPILE_FILE := compile.log
-@example
-$ @kbd{make}
-test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
-test: All tests are succeded.
+$(CMD_FILE): $(CMDSRC_FILE) $(TESTTARGET_FILES)
+ $(CC) $(CFLAGS) -o $@ $^ >$(COMPILE_FILE) 2>&1
+ cat $(COMPILE_FILE)
@end example
-@node make checkall, make clean at group, make check at group, Group dir
-@section @kbd{make checkall} - グループ内にあるすべてのテストの実行、計時
-@kbd{make checkall}でグループ内にあるすべてのテストを、@ref{make check at test, , 実行}し、@ref{make time at test, , 計時}します。@ref{make check at group, , テストグループの実行}と同じ項目を表示し、出力されるファイルの種類も同じです。@code{<テストグループ名を大文字にした文字列>.log}には、テストと実行結果に加え、計時結果が一覧として出力されます。
+@node Edit sort desc, Set sort test, Edit sort Makefile, Tutorial sort
+@section テスト説明ファイルの作成
+テスト説明ファイル@file{desc.txt}はテストに関する説明をあらわし、テストの結果と一緒にログに出力されます。
+@file{desc.txt}をテキストエディターを使って次の内容で作成します。
-テストの実行と計時は別に行われるため、通常にテストを実行するよりも2倍程度の時間がかかります。
+@example
+@kbd{テスト関数1}
+@end example
-@unnumberedsubsec 使用例
+@node Set sort test, Execute sort test, Edit sort desc, Tutorial sort
+@section テスト想定ファイルの作成
+
+テスト想定ファイル@file{0.txt}は、テストが正しく実行された場合の結果をあらわします。@file{0.txt}の作成方法は、次の3つがあります。
+
+@itemize
+@item
+手動で作成
+
+@item
+@kbd{make set}
+
+@item
+@kbd{make reset}
+@end itemize
+
+エラーが発生するテストでは、標準出力想定の下にエラー出力想定を続けます。
+
+@subsection 手動で作成
+テスト想定ファイル@file{0.txt}をテキストエディターを使って次の内容で作成します。
+
+@example
+@kbd{3}
+@end example
+
+@subsection @kbd{make set}
+@kbd{make set}を実行すると、@file{Makefile}の設定に従い関数テスト用のプログラムソース@file{cmd.c}と関数ファイル@file{../../sort.c}からコマンドファイル@file{cmd}が作成されます。そのあと@file{cmd}が実行され、実行結果は@file{0.txt}ファイルに出力されます。実行後、次回のテストのため、@file{cmd}は自動的に削除されます。
+
+@example
+$ @kbd{make set}
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+3
+5
+7
+11
+rm cmd
+@end example
+
+この方法で@file{0.txt}を作成する場合は、作成された内容がテスト想定として本当に正しいかよく検討する必要があります。
+
+@file{0.txt}がすでに存在する場合は@kbd{make set}を実行するとエラーになり、@file{0.txt}は更新されません。例えば、バグを含む@code{sort}関数ファイルを準備して@kbd{make set}を実行すると、仕様と異なる次のようなテスト想定となり、テストを正しく実行できません。
+
+@example
+$ @kbd{make set}
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+2
+2
+2
+2
+rm cmd
+@end example
+
+@subsection @kbd{make reset}
+@file{0.txt}がすでに存在する場合は、@kbd{make reset}で更新できます。
+
+@example
+$ @kbd{make reset}
+gcc -Wall -o cmd cmd.c ../../sort.c
+2
+3
+5
+7
+11
+rm cmd
+@end example
+
+@node Execute sort test, Check sort log, Set sort test, Tutorial sort
+@section テストの実行
+
+コマンドファイルとテスト想定を用意したら、@kbd{make}または@kbd{make check}でテストを実行できます。
+
+@example
+$ @kbd{ls}
+0.txt Makefile cmd.c desc.txt
+$ @kbd{make}
+sort_001: Test Success 2011-01-24 11:13:04
+Details in /home/foo/sort/test/sort_001/detail.log
+rm cmd
+@end example
+
+表示される項目は、次のとおりです。
+
+@itemize
+@item
+<テスト説明ファイル@file{desc.txt}の内容>
+
+@item
+<テスト名>: <テスト結果(Test SuccessまたはTest Failure)> <テスト実行日時>
+
+@item
+Detail in <テスト詳細ログファイルの絶対パス>
+@end itemize
+
+
+@unnumberedsubsec バグを含む@code{sort}関数の場合
+
+正しいテスト想定を作成していた場合にバグを含む@code{sort}関数でテストを実行すると、次のように表示されます。
+
+@example
+$ @kbd{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
+@end example
+
+@node Check sort log, Execute sort group, Execute sort test, Tutorial sort
+@section テストログファイルの確認
+
+テストを実行して作成されたファイルを確認します。@file{1.txt} @file{summary.log} @file{detail.log}が作成されています。
+
+@example
+$ @kbd{ls}
+0.txt 1.txt Makefile cmd desc.txt detail.log summary.log
+@end example
+
+テストを実行すると作成されるファイルは、次のとおりです。必要に応じてファイルの内容を確認します。
+
+@table @file
+@item 1.txt
+テスト結果をあらわします。エラー発生時は、標準出力のあとにエラー出力が続きます
+
+@item err.log
+エラー発生時に、エラーが出力されます。エラーが発生しない場合は作成されません
+
+@item diff.log
+テスト想定ファイル@file{0.txt}とテスト結果ファイル@file{1.txt}の差分をあらわします。想定と結果が同一の場合は、作成されません
+
+@item summary.log
+テストの実行結果を表します。テスト実行時に表示される項目です。
+
+@item detail.log
+テストの詳細ログを表します。上記の内容がすべて出力されます
+@end table
+
+@file{detail.log}は、次のようになります。
+
+@example
+== 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
+----------------------------------------------------------------------
+
+@end example
+
+@unnumberedsubsec バグを含む@code{sort}関数の場合
+
+バグを含む@code{sort}関数を準備してテストを実行した場合、@file{1.txt} @file{summary.log} @file{detail.log}のほかに、テスト想定とテスト結果が異なるため@kbd{diff.log}が作成されます。
+
+@example
+$ @kbd{ls}
+0.txt 1.txt Makefile cmd desc.txt detail.log diff.log summary.log
+@end example
+
+@file{detail.log}は次のようになります。
+
+@example
+== 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
+----------------------------------------------------------------------
+
+@end example
+
+@subsection テストのクリア
+
+@kbd{make clean}を実行すると、テストの結果作成されたファイルがクリアされます。
+
+@example
+$ @kbd{make clean}
+$ @kbd{ls}
+0.txt Makefile cmd.c desc.txt
+@end example
+
+
+@node Execute sort group, Check sort group log, Check sort log, Tutorial sort
+@section テストグループの実行
+
+2つめ以降のテスト・ケースについても、1つめと同じ手順でテストディレクトリーの作成後、テスト説明ファイルとテストコマンドファイル、テスト想定ファイルを作成します。
+
+ここでは、先に作成した@file{sort_001}も含めて、次のようなディレクトリーとファイルを作成します。こうしたディレクトリーやファイルはAutotest.mkの@file{sample/sort/test}以下にあります。
+
+@itemize
+@ifnothtml
+@item
+sort_001
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd.c} @file{0.txt}
+@end itemize
+
+@item
+sort_002
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd.c} @file{0.txt}
+@end itemize
+
+@item
+sort_003
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd.c} @file{0.txt}
+@end itemize
+
+
+@item
+sort_004
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd.c} @file{0.txt}
+@end itemize
+
+@item
+sort_005
+
+@itemize
+@item
+@file{Makefile} @file{desc.txt} @file{cmd.c} @file{0.txt}
+@end itemize
+@end ifnothtml
+
+@ifhtml
+@item
+sort_001
+
+@itemize
+@item
+@file{Makefile} @uref{sample_sort/sort_001/desc.txt, @file{desc.txt}} @uref{sample_sort/sort_001/cmd.c.txt, @file{cmd.c}} @uref{sample_sort/sort_001/0.txt, @file{0.txt}}
+@end itemize
+
+@item
+sort_002
+
+@itemize
+@item
+@file{Makefile} @uref{sample_sort/sort_002/desc.txt, @file{desc.txt}} @uref{sample_sort/sort_002/cmd.c.txt, @file{cmd.c}} @uref{sample_sort/sort_002/0.txt, @file{0.txt}}
+@end itemize
+
+@item
+sort_003
+
+@itemize
+@item
+@file{Makefile} @uref{sample_sort/sort_003/desc.txt, @file{desc.txt}} @uref{sample_sort/sort_003/cmd.c.txt, @file{cmd.c}} @uref{sample_sort/sort_003/0.txt, @file{0.txt}}
+@end itemize
+
+
+@item
+sort_004
+
+@itemize
+@item
+@file{Makefile} @uref{sample_sort/sort_004/desc.txt, @file{desc.txt}} @uref{sample_sort/sort_004/cmd.c.txt, @file{cmd.c}} @uref{sample_sort/sort_004/0.txt, @file{0.txt}}
+@end itemize
+
+@item
+sort_005
+
+@itemize
+@item
+@file{Makefile} @uref{sample_sort/sort_005/desc.txt, @file{desc.txt}} @uref{sample_sort/sort_005/cmd.c.txt, @file{cmd.c}} @uref{sample_sort/sort_005/0.txt, @file{0.txt}}
+@end itemize
+@end ifhtml
+@end itemize
+
+テストグループディレクトリーでは、@kbd{make}または@kbd{make check}で複数のテストをまとめて実行できます。
+
+@example
+$ @kbd{cd ~/sort/test}
+$ @kbd{make}
+test: 5 / 5 tests passed. Details in /home/foo/sort/test/TEST.log
+test: All tests are succeded.
+@end example
+
+表示されるのは、次の項目です。
+@itemize
+@item
+<テスト名>: <成功テスト数>/<全テスト数> test passed. Detail in <テストグループログファイルの絶対パス>
+
+@item
+(すべてのテストに成功した場合)<テスト名>: All tests are succeded.
+@end itemize
+
+@unnumberedsubsec バグを含む@code{sort}関数の場合
+
+バグを含む@code{sort}関数を準備してテストグループを実行した場合、次のように表示されます。失敗したテストがあることをあらわしています。
+
+@example
+$ @kbd{cd ~/sort/test}
+$ @kbd{make}
+test: 1 / 5 tests passed. Details in /home/foo/sort/test/TEST.log
+@end example
+
+@node Check sort group log, Iteretive, Execute sort group, Tutorial sort
+@section テストグループログファイルの確認
+テストグループを実行すると作成されるファイルは、次のとおりです。
+
+@table @file
+@item <テストグループ名を大文字にした文字列>.log
+テストグループに含まれるテストとその実行結果の一覧をあらわします。
+
+@item Summary.log
+テストの実行結果を表します。テストグループ実行時に表示される内容です。
+@end table
+
+ここではテストグループ名は@file{test}なので、@file{TEST.log}が次の内容で作成されます。
+
+@example
+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
+
+@end example
+
+テストをまとめて実行した場合も、個別のテストを実行した場合と同様に、テストディレクトリーにテストログが出力されます。特定のテスト結果を詳細に検討する場合は、そのテストのテストディレクトリーを開いてテストログファイルの確認をします。
+
+@unnumberedsubsec バグを含む@code{sort}関数の場合
+
+バグを含む@code{sort}関数を準備してテストグループを実行した場合、@file{TEST.log}は次のように表示されます。sort_001、sort_003、sort_004、sort_005のテストで失敗していることがわかります。
+
+@example
+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
+
+@end example
+
+@node Iteretive, , Check sort group log, Tutorial sort
+@section 開発とテストの反復
+あとはテスト対象となっている関数を変更するたびに、テストを実行できるようになります。つまり、関数の単位で開発とテストを反復してできます。
+
+関数の実装だけが変更されて仕様が変わっていない場合は、テストグループのディレクトリーで@kbd{make}を実行するだけでテストができます。
+
+関数の入力または出力の仕様が変わった場合には、@file{0.txt}と@file{cmd.c}の変更を検討します。関数のコンパイル方法(依存するファイル)が変わった場合は、@file{Makefile}の変更を検討します。
+
+@node Template dir, Group dir, Tutorial sort, Top
+@chapter テンプレートディレクトリー マニュアル
+
+テンプレートディレクトリーは、Autotest.mkをインストールするときに展開により作成された@file{template}ディレクトリーです。
+
+@menu
+* make group:: @kbd{make}または@kbd{make group} - グループディレクトリーの作成
+* Template files:: テンプレートのファイル
+@end menu
+
+@node make group, Template files, Template dir, Template dir
+@section @kbd{make}または@kbd{make group} - グループディレクトリーの作成
+
+変数@code{GROUPDIR}で指定されたディレクトリーをテストグループディレクトリーとして作成し、テストの実行に必要な次のファイルを配置します。
+
+@itemize
+@item
+@file{Define.mk}
+
+@item
+@file{Makefile}
+
+@item
+@file{Test.mk}
+@end itemize
+
+通常、テストに必要なファイルテンプレートディレクトリーからグループディレクトリーにコピーされます。変数@code{LINKMK}を指定した場合は、シンボリックリンクが作成されます。
+
+@subsection 変数
+
+@table @code
+@item GROUPDIR
+テストディレクトリーを指定します。指定しない場合や既存のディレクトリーを指定した場合は、エラーが発生してテストグループディレクトリーは作成されません。
+
+@item LINKMK
+指定した場合、グループディレクトリーにテストの実行に必要なファイルのシンボリックリンクが作成されます。値は任意です。シンボリックリンクのリンク先は、テンプレートディレクトリーの中です。
+@end table
+
+@unnumberedsubsec 使用例
+
+グループディレクトリーとして@file{~/triangle/test}を作成します。
+
+@example
+$ @kbd{make GROUPDIR=~/triangle/test}
+@end example
+
+@node Template files, , make group, Template dir
+@section テンプレートのファイル
+
+テンプレートディレクトリーには、次のファイルが含まれます。
+@table @file
+@item Makefile
+テンプレートディレクトリーのMakefile
+
+@item Group.mk
+グループディレクトリーのMakefile。@kbd{make}または@kbd{make group}で、グループディレクトリーに@file{Makefile}として配置されます。
+
+@item Test.mk
+テストディレクトリーから参照されるMakefile。@kbd{make}または@kbd{make group}で、グループディレクトリーに配置されます。
+
+@item Define.mk
+テストとテストグループに関する項目を定義したMakefile。@kbd{make}または@kbd{make group}で、グループディレクトリーに配置されます。
+@end table
+
+@node Group dir, Test dir, Template dir, Top
+@chapter グループディレクトリー マニュアル
+
+@ref{make group, , グループディレクトリーの作成}後、グループディレクトリーに移動すると次の操作ができます。
+
+@menu
+* make create:: @kbd{make create} - テストの作成
+* Rename and Copy:: テスト名の変更とコピー
+* Delete:: テストの削除
+* make check at group:: @kbd{make}または@kbd{make check} - テストグループの実行
+* make checkall:: @kbd{make checkall} - グループ内にあるすべてのテストの実行、計時
+* make clean at group:: @kbd{make clean} - グループ内にあるすべてのテストで、実行結果をクリア
+* make time at group:: @kbd{make time} - グループ内にあるすべてのテストを計時
+* make cleantime at group:: @kbd{make cleantime} - グループ内にあるすべてのテストで、計時結果をクリア
+* Group files:: グループのファイル
+@end menu
+
+@node make create, Rename and Copy, Group dir, Group dir
+@section @kbd{make create} - テストの作成
+
+変数@code{TEST}で指定されたディレクトリーをテストディレクトリーとして作成し、ディレクトリーの中に@code{Makefile}を作成します。
+
+テスト名は、小文字のアルファベットと数字で指定します。大文字ではじまる名前を指定した場合、ディレクトリーや@code{Makefile}は作成されるものの、テストグループ実行の対象になりません。
+
+変数@code{SRC=c}を指定した場合は、C言語の関数テスト用の@code{Makefile}が作成されます。
+
+@subsection 変数
+@table @code
+@item TEST
+テストディレクトリー名を指定します。
+
+@item SRC
+値@code{c}を指定すると、C言語の関数テスト用の@code{Makefile}が作成されます。
+
+@end table
+
+@unnumberedsubsec 使用例
+テストディレクトリーを、@code{01_scalene}という名前で作成します。
+
+@example
+$ @kbd{make create TEST=01_scalene}
+@end example
+
+@node Rename and Copy, Delete, make create, Group dir
+@section テスト名の変更とコピー
+
+テスト名を変更したりテストをコピーしたりする場合は、@kbd{mv}や@kbd{cp}などでテストディレクトリーを移動、コピーします。
+
+@unnumberedsubsec 使用例
+テスト名@code{01_scalene}を@code{01}に変更します。
+
+@example
+$ @kbd{mv 01_scalene 01}
+@end example
+
+テスト@code{01}をコピーし、テスト@code{02}を作成します。
+
+@example
+$ @kbd{cp -r 01 02}
+@end example
+
+@node Delete, make check at group, Rename and Copy, Group dir
+@section テストの削除
+
+テストを削除する場合は、@kbd{rm}などでテストディレクトリーを削除します。
+
+@unnumberedsubsec 使用例
+
+@example
+$ @kbd{rm -rf 01_scalene}
+@end example
+
+@node make check at group, make checkall, Delete, Group dir
+@section @kbd{make}または@kbd{make check} - テストグループの実行
+
+@kbd{make}または@kbd{make check}で、グループ内にあるすべての@ref{make check at test, , テストの実行}をし、次の項目を表示します。
+
+@itemize
+@item
+<テスト名>: <成功テスト数>/<全テスト数> test passed. Detail in <テストグループログファイルの絶対パス>
+
+@item
+(すべてのテストに成功した場合)<テスト名>: All tests are succeded.
+@end itemize
+
+テストグループを実行すると次のファイルが作成されます。
+
+@table @file
+@item <テストグループ名を大文字にした文字列>.log
+テストグループに含まれるテストとその実行結果の一覧をあらわします。
+
+@item Summary.log
+テスト実行結果の概要を表します。テストグループ実行時に表示される内容です。
+@end table
+
+@unnumberedsubsec 使用例
+
+@example
+$ @kbd{make}
+test: 13 / 13 tests passed. Detail in /home/foo/triangle/test/TEST.log
+test: All tests are succeded.
+@end example
+
+@node make checkall, make clean at group, make check at group, Group dir
+@section @kbd{make checkall} - グループ内にあるすべてのテストの実行、計時
+
+@kbd{make checkall}でグループ内にあるすべてのテストを、@ref{make check at test, , 実行}し、@ref{make time at test, , 計時}します。@ref{make check at group, , テストグループの実行}と同じ項目を表示し、出力されるファイルの種類も同じです。@code{<テストグループ名を大文字にした文字列>.log}には、テストと実行結果に加え、計時結果が一覧として出力されます。
+
+テストの実行と計時は別に行われるため、通常にテストを実行するよりも2倍程度の時間がかかります。
+
+@unnumberedsubsec 使用例
@example
$ @kbd{make checkall}
@unnumberedsubsec 使用例
@example
-$ @kbd{cd ~/triangle/test}
$ @kbd{make clean}
@end example
real 0m0.012s
@end example
-@node make cleantime at group, Group Files, make time at group, Group dir
+@node make cleantime at group, Group files, make time at group, Group dir
@section @kbd{make cleantime} - グループの計時結果をクリア
@kbd{make cleatime}で、@kbd{make time}により作成されたテストグループディレクトリーと各テストディレクトリーのファイルをすべて削除します。
-@node Group Files, , make cleantime at group, Group dir
+@unnumberedsubsec 使用例
+
+@example
+$ @kbd{make cleantime}
+@end example
+
+@node Group files, , make cleantime at group, Group dir
@section グループディレクトリーのファイル
グループディレクトリーには、テストディレクトリーに加えて、次のファイルが含まれます。
* make cleanall at test:: @kbd{make cleanall} - テストの想定と結果をクリア
* make time at test:: @kbd{make time} - テストの計時
* make cleantime at test:: @kbd{make cleantime} - テスト計時結果のクリア
-* Test Files:: テストディレクトリーのファイル
+* Test files:: テストディレクトリーのファイル
@end menu
@node make set, make reset, Test dir, Test dir
real 0m0.006s
@end example
-@node make cleantime at test, Test Files, make time at test, Test dir
+@node make cleantime at test, Test files, make time at test, Test dir
@section @kbd{make cleantime} - テスト計時結果のクリア
@kbd{make cleantime}で、テストの計時の結果作成された次のファイルが削除されます。
@file{time.log}
@end itemize
-@node Test Files, , make cleantime at test, Test dir
+@unnumberedsubsec 使用例
+
+@example
+$ @kbd{make cleantime}
+@end example
+
+@node Test files, , make cleantime at test, Test dir
@section テストディレクトリーのファイル
@table @file
@item Makefile