Chapter 14. Regression テスト

Table of Contents
Regression 環境
ディレクトリの配置
Regression テストの手順
Regression 結果の解析

Regression テストの説明と解析

PostgreSQL の regression テストは Jolly Chen と Andrew Yu により開発 された PostgreSQL に組み込み実装されている SQL の包括的なテストの一式です。 regression は標準的な SQL 操作に加え PostgreSQL で拡張された機能もテストし ます。

一連のテストは最近 Marc Fournier と Thomas Lockhart によって改訂され より使いやすくまたより理解しやすい機能的な編成としてまとめられました。 PostgreSQL v6.1 以降 regression テストは 公式リリース版に含まれています。

適正に導入されかつ全ての機能が使用できる PostgreSQL であっても、 浮動小数点の表現構造と時間帯のサポートの関係でテストのいくつかに 失敗することがあります。 現在のテストは単純な "diff" アルゴリズムにもとづいて検証を行っているため システムのちょっとした違いにも神経質です。明らかに失敗したテストで あってもどこが異なるのかを調査することによってそれらの差異が重大では ないことが判明することもあります。

下記の regression テストは(注意書きがある箇所を除外して)以下のことを前提と しています。

Regression 環境

regression テストは C プログラムをコンパイルし カレントディレクトリの共有ライブラリに格納する make コマンドで起動します。カレントディレクトリには環境に適化されたシェルス クリプトも生成されます。出力ファイルのテンプレートは ./expected/*.out ファイルに出されます。 適化された環境でソースファイルのマクロが絶対パス名とユーザ名に 置き換えます。

通常 regression テストは 'src/test/regress' ディレクトリとその サブディレクトリの所有者が pg_superuser によることから pg_superuser によって行われなければなりません。他のユーザとして regression テストを実行する場合は 'src/test/regress' ディレクトリツリー がそのユーザから書き込み可能になっていなければなりません。

以前はシステムの時間帯を PST に設定して postmaster を走らせ る必要がありましたが、現在その必要はありません。 regression テストはそのままの postmaster 構成で行えます。 テストスクリプトは時間帯に依存するテストが正しい結果をもたらすよう PGTZ 環境変数を設定します。 とはいっても、システムが PST8PDT 時間帯をサポートするライブラリを 持っていない場合時間帯に依存するテストは失敗に終ります。 システムがこのサポートをしているか確かめるためには

    setenv TZ PST8PDT
    date
と入力します。

上記の "date" コマンドは PST8PDT 時間帯における現在のシステムの 時刻を返していなければなりません。 PST8PDT データベースが使えない場合 GMT 時刻を返すことがあります。 もし PST8PDT データベースが使えないことが判明した時は、明示的に 時間帯ルールを以下のようにして設定します。

    setenv PGTZ PST8PDT7,M04.01.0,M10.05.03