# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English

# 12.3.8. テスト方法

TODO: Write in English.

TODO: Write about `test/command/run-test.sh`.

## 12.3.8.1. テスト環境の構築

### 12.3.8.1.1. Cutterのインストール

Groongaは、テストのフレームワークとして Cutter を用いています。

Cutterのインストール方法は プラットフォーム毎のCutterのインストール方法 をご覧下さい。

### 12.3.8.1.2. lcovのインストール

カバレッジ情報を計測するためには、lcov 1.6以上が必要です。DebianやUbuntuでは以下のようにしてインストールできます。:

    % sudo aptitude install -y lcov

### 12.3.8.1.3. clangのインストール

ソースコードの静的解析を行うためには、clang(scan-build)をインストールする必要があります。DebianやUbuntuでは以下のようにしてインストールできます。:

    % sudo aptitude install -y clang

### 12.3.8.1.4. libmemcachedのインストール

memcachedのバイナリプロトコルのテストを動作させるためには、libmemcachedの導入が必要です。squeeze以降のDebianやKarmic以降のUubntuでは以下の用にしてインストールできます。:

    % sudo aptitude install -y libmemcached-dev

## 12.3.8.2. テストの動作

Groongaのトップディレクトリで、以下のコマンドを実行します。:

    make check

## 12.3.8.3. カバレッジ情報

Groongaのトップディレクトリで、以下のコマンドを実行します。:

    make coverage

すると、coverageディレクトリ以下に、カバレッジ情報が入ったhtmlが出力されます。

カバレッジには、Lines/Functions/Branchesの3つの対象があります。それぞれ、行／関数／分岐に対応します。Functionsがもっとも重要な対象です。すべての関数がテストされるようになっていることを心がけてください。

テストがカバーしていない部分の編集は慎重に行ってください。また、テストがカバーしている部分を増やすことも重要です。

## 12.3.8.4. 様々なテスト

テストは、test/unitディレクトリにおいて、./run-test.shを実行することによっても行えます。run-test.shはいくつかのオプションをとります。詳細は、./run-test.sh --helpを実行しヘルプをご覧ください。

### 12.3.8.4.1. 特定のテスト関数のみテストする

特定のテスト関数(Cutterではテストと呼ぶ)のみをテストすることができます。

実行例:

    % ./run-test.sh -n test_text_otoj

### 12.3.8.4.2. 特定のテストファイルのみテストする

特定のテストファイル(Cutterではテストケースと呼ぶ)のみテストすることができます。

実行例:

    % ./run-test.sh -t test_string

### 12.3.8.4.3. 不正メモリアクセス・メモリリーク検出

環境変数CUTTER_CHECK_LEAKをyesと設定すると、valgrindを用いて不正メモリアクセスやメモリリークを検出しつつ、テストを動作させることができます。

run-test.shのみならず、make checkでも利用可能です。

実行例:

    % CUTTER_CHECK_LEAK=yes make check

### 12.3.8.4.4. デバッガ上でのテスト実行

環境変数CUTTER_DEBUGをyesと設定すると、テストが実行できる環境が整ったgdbが実行されます。gdb上でrunを行うと、テストの実行が開始されます。

run-test.shのみならず、make checkでも利用可能です。

実行例:

    % CUTTER_DEBUG=yes make check

## 12.3.8.5. 静的解析

scan-buildを用いて、ソースコードの静的解析を行うことができます。scan_buildというディレクトリに解析結果のhtmlが出力されます。:

    % scan-build ./configure --prefix=/usr
    % make clean
    % scan-build -o ./scan_build make -j4

configureは１度のみ実行する必要があります。