Download

最新版はtestfunnel-20081116.tar.bz2です。リリースノートと過去のリリースはRelease Notesから取得してください。

必要な構成

ビルドできたプラットフォーム

以下のプラットフォームでビルドを確認しました(i386アーキテクチャのみ)。

  • FreeBSD 6.3†1
  • Ubuntu 9.04
  • openSUSE 10.3

ビルドに必要なもの

ビルドは次のものに依存しています。

各プラットフォームではそれぞれ次のように準備するのが簡単です。

FreeBSD 6.3

Sanctuary 2.0、libstdと以下のportsをインストールしておきます。

  • devel/libbfd†2
  • devel/gnulibiberty
  • devel/gettext
  • devel/gmake
  • java/jdk16

Ubuntu 9.04

一般的な開発環境に加え、Sanctuary 2.0、libstdと次のパッケージをインストールしておきます。

  • sun-java6-jdk
  • binutils-dev†2

openSUSE 10.3

一般的な開発環境に加え、Sanctuary 2.0、libstdと次のRPMをインストールしておきます。

  • java-1_6_0-sun-devel-1.6.0.u7-1.1
  • binutils-devel-2.17.50.20070726-14†2

実行に必要なもの

コンソールサーバ(auditor)の実行には次のものが必要です(スタンドアロンモードでファンネルを使用する場合は不要です)。

†1FreeBSDではlibthrを使用するように/etc/libmap.confを修正する必要があります。具体的には次のようなエントリを/etc/libmap.confに追加してください。

[funnel.bin]
libpthread.so   libthr.so
libpthread.so.2 libthr.so.2

†2GNU Binutils 2.18またはそれ以前のバージョンを利用する場合、GNU Binutilsのバグでメモリリークが発生します。パッチを適用してからビルドしてください。GNU Binutils 2.19では、そのバグは修正されましたが、新たな別のバグによってメモリリークが発生します。スナップショットまたは匿名CVSから最新のソースツリーを取得してビルドすることを推奨します。

ビルドとインストール

コマンドラインからjavaを実行したとき、SunのJVMを実行するように環境を設定したあと†4、次の手順でビルド、インストールします。

% tar jxf testfunnel-YYYYMMDD.tar.bz2
% cd testfunnel-YYYYMMDD
% ./configure
% make†5
% su
# make install†5†6

†4 FreeBSDではjavavm(1)を参照の上、環境変数JAVA_HOME(またはJAVA_VENDORJAVA_VERSION)を適切に設定してください。Linuxではディストリビューションによって異なりますが、少なくても環境変数PATHを適切に設定することで実行するJVMを切り替えることができます。その後、次のように表示されることを確認してください。

% java -version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b06)
Java HotSpot(TM) Client VM (build 1.6.0_13-b06, mixed mode)

†5 FreeBSDではmakeの代わりにgmakeを使用してください。

†6 インストールされるファイルは次の通りです(pathはconfigureのオプション--prefix=pathで指定したパスです)。

path/bin/auditor
path/bin/funnel
path/include/com/maroontress/testfunnel/funnel/Auditor.h
path/include/tf/TestFunnel.h
path/lib/testfunnel/auditor.jar
path/lib/testfunnel/funnel.bin

デモ

exampleディレクトリにTest Funnelを使用したテストのデモを用意してあります。ディレクトリの構成は次のようになっています。

example/target
ターゲットとなる共有ライブラリです。スタックを操作するAPIを提供します。配列とリストによる2つの実装があり、ファクトリーメソッドで実装クラスを選択してインスタンスを生成します。
example/testsuite/ArrayStack
配列による実装クラスをテストするユニットテストです。
example/testsuite/ListStack
リストによる実装クラスをテストするユニットテストです。
example/testsuite/Stack
ArrayStackListStackの共通部分のコードです。
example/testsuite/tutorial
ユニットテストのAPIの使用方法を紹介するためのサンプルです。

スタンドアロンモード

スタンドアロンモードのデモを実行するには、ビルドしたディレクトリで次のようにコマンドを入力します。

% make standalone-demo

すべてのテストを順に実行していきます。tutorialに「必ず失敗するテストメソッド」が含まれるので、そのテストが失敗したところでスタックトレースを表示して終了します。また、テスト終了後にカバレッジの結果を表示します。コンソールの表示は次のようになります。

% make standalone-demo
...
funnel.bin: tutorial.c:tf_initialize
funnel.bin: tutorial.c:memory_leak
funnel.bin: hello:world
funnel.bin: tutorial.c:tf_finalize

allocate: [pid=40335 tid=0xbf936fe8] 0x80b9210 (6 bytes)
/.../funnel/com/maroontress/libld/Tracer.c:278: in funciton `malloc`
(null):0: in funciton `strdup`
/.../example/testsuite/tutorial/tutorial.c:91: in funciton `memory_leak`
/.../funnel/com/maroontress/testfunnel/funnel/Auditor.c:87: in funciton `run`
(null):0: in funciton `_pthread_create`

1 memory leak(s) found.
*** Error code 1

Stop in /.../example/testsuite.
cd example/target && make coverage
for c in Stack.c ListStack.c ArrayStack.c ; do gcov $c ; done
File `Stack.c'
Lines executed:100.00% of 12
Stack.c:creating `Stack.c.gcov'

File `ListStack.c'
Lines executed:93.75% of 48
ListStack.c:creating `ListStack.c.gcov'

File `ArrayStack.c'
Lines executed:90.00% of 30
ArrayStack.c:creating `ArrayStack.c.gcov'
%

クライアントモード

クライアントモードのデモを実行するには、ビルドしたディレクトリで次のようにコマンドを入力します。

% java -jar auditor/auditor.jar &

Auditorのサーバウィンドウが画面に表示されたら、続けて次のようにコマンドを入力します。

% make demo

Auditorのコンソールウィンドウが表示されるので、メニューバーのRunからGoを選択してください。Auditorの詳しい操作方法はAuditor(コンソールサーバ)の使用方法を参照してください。