(57)【特許請求の範囲】
【請求項１】
テストデータを生成するための方法であって、
データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取ること、
上記値を特徴づける統計を含むプロファイル情報を格納すること、
上記統計に基づいて上記フィールドについての確率分布のモデルであって、値の連続的な範囲に亘る確率密度に対応する確率分布の少なくとも第１の部分と、頻出値についての１つ以上の離散的な確率値に対応する生起確率の少なくとも第２の部分と、を含む前記モデルを生成すること、
所定の値が上記テストデータ値において発生する頻度が、上記モデルの上記第１の部分及び上記モデルの上記第２の部分によってその所定の値に割り当てられた確率に対応するように、上記生成されたモデルを使用して複数のテストデータ値を生成すること、および
上記テストデータ値を含むテストデータのコレクションをデータストレージシステムに格納すること、
を含む方法。
【請求項２】
上記統計情報が、値の複数の連続的な範囲のそれぞれに該当する値の数を示す情報を含む、
請求項１に記載の方法。
【請求項３】
上記第１の部分が、値の上記連続的な範囲の１つに該当する値の数を示す情報に少なくとも部分的に由来して導かれる、
請求項２に記載の方法。
【請求項４】
上記統計情報が、複数の特定の値のそれぞれが上記複数のレコードにおいて発生する頻度を示す情報を含む、
請求項１に記載の方法。
【請求項５】
上記第２の部分における離散的な確率値の１つは、上記特定の値の１つが上記複数のレコードにおいて発生する頻度を示す情報に少なくとも部分的に由来して導かれる、
請求項４に記載の方法。
【請求項６】
上記生成されたモデルと上記フィールドにおいて発生するデータソースから読み取られた値の特性を示す追加情報とを使用して上記複数のテストデータ値を生成することを更に含む、
請求項１に記載の方法。
【請求項７】
上記追加情報が、上記フィールドにおいて発生する無効な値の数を示す、
請求項６に記載の方法。
【請求項８】
上記追加情報が、上記フィールドにおいて発生する個別の値の割合を示す、
請求項６に記載の方法。
【請求項９】
上記データストレージシステムに格納されたテストデータのコレクションを使用して上記データソースに由来する上記複数のレコードを処理するための少なくとも１つのプログラムを開発するための開発環境を提供することを更に含む、
請求項１に記載の方法。
【請求項１０】
上記データソースに由来する上記複数のレコードが上記開発環境にとってアクセスできない、
請求項９に記載の方法。
【請求項１１】
上記データソースが上記開発環境にとってアクセスできない、
請求項１０に記載の方法。
【請求項１２】
テストデータを生成するためのシステムであって、
１つ以上のフィールドにおいて値を有するレコードを提供するデータソース、
データストレージシステム、および
実行環境を提供する上記データストレージシステムに結合された１つ以上のプロセッサであって、
上記データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取り、
上記値を特徴づける統計を含むプロファイル情報を格納し、
上記統計に基づいて上記フィールドについての確率分布のモデルであって、値の連続的な範囲に亘る確率密度に対応する確率分布の少なくとも第１の部分と、頻出値についての１つ以上の離散的な確率値に対応する生起確率の少なくとも第２の部分と、を含む前記モデルを生成し、
所定の値が上記テストデータ値において発生する頻度が、上記モデルの上記第１の部分及び上記モデルの上記第２の部分によってその所定の値に割り当てられた確率に対応するように、上記生成されたモデルを使用して複数のテストデータ値を生成し、そして
上記テストデータ値を含むテストデータのコレクションを上記データストレージシステムに格納する、
プロセッサ、
を含むシステム。
【請求項１３】
テストデータを生成するためのシステムであって、
１つ以上のフィールドにおいて値を有するレコードを提供するデータソース、
データストレージシステム、および
上記レコードを処理してテストデータを生成するための手段、
を含み、
上記処理は、
上記データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取ること、
上記値を特徴づける統計を含むプロファイル情報を格納すること、
上記統計に基づいて上記フィールドについての確率分布のモデルであって、値の連続的な範囲に亘る確率密度に対応する確率分布の少なくとも第１の部分と、頻出値についての１つ以上の離散的な確率値に対応する生起確率の少なくとも第２の部分と、を含む前記モデルを生成すること、
所定の値が上記テストデータ値において発生する頻度が、上記モデルの上記第１の部分及び上記モデルの上記第２の部分によってその所定の値に割り当てられた確率に対応するように、上記生成されたモデルを使用して複数のテストデータ値を生成すること、および
上記テストデータ値を含むテストデータのコレクションを上記データストレージシステムに格納すること、
を含むシステム。
【請求項１４】
上記統計情報が、値の複数の連続的な範囲のそれぞれに該当する値の数を示す情報を含む、
請求項１２に記載のシステム。
【請求項１５】
上記第１の部分が、値の上記連続的な範囲の１つに該当する値の数を示す情報に少なくとも部分的に由来して導かれる、
請求項１４に記載のシステム。
【請求項１６】
上記統計情報が、複数の特定の値のそれぞれが上記複数のレコードにおいて発生する頻度を示す情報を含む、
請求項１２に記載のシステム。
【請求項１７】
上記第２の部分における離散的な確率値の１つは、上記特定の値の１つが上記複数のレコードにおいて発生する頻度を示す情報に少なくとも部分的に由来して導かれる、
請求項１６に記載のシステム。
【請求項１８】
上記実行環境は、上記生成されたモデルと上記フィールドにおいて発生するデータソースから読み取られた値の特性を示す追加情報とを使用して上記複数のテストデータ値を生成する、
請求項１２に記載のシステム。
【請求項１９】
上記追加情報が、上記フィールドにおいて発生する無効な値の数を示す、
請求項１８に記載のシステム。
【請求項２０】
上記追加情報が、上記フィールドにおいて発生する個別の値の割合を示す、
請求項１８に記載のシステム。
【請求項２１】
上記実行環境は、上記データストレージシステムに格納されたテストデータのコレクションを使用して上記データソースに由来する上記複数のレコードを処理するための少なくとも１つのプログラムを開発するための開発環境を提供する、
請求項１２に記載のシステム。
【請求項２２】
上記データソースに由来する上記複数のレコードが上記開発環境にとってアクセスできない、
請求項２１に記載のシステム。
【請求項２３】
上記データソースが上記開発環境にとってアクセスできない、
請求項２２に記載のシステム。
【請求項２４】
上記生成されたモデルが、値の連続的な範囲に亘る確率密度に対応する確率分布の推定値の少なくとも第１の部分と、離散的な値についての１つ以上の離散的な確率値に対応する確率分布の推定値の少なくとも第２の部分と、を含む、
請求項１２に記載のシステム。
【請求項２５】
上記統計情報が、値の複数の連続的な範囲のそれぞれに該当する値の数を示す情報を含む、
請求項２４に記載のシステム。
【請求項２６】
上記第１の部分が、値の上記連続的な範囲の１つに該当する値の数を示す情報に少なくとも部分的に由来して導かれる、
請求項２５に記載のシステム。
【請求項２７】
上記統計情報が、複数の特定の値のそれぞれが上記複数のレコードにおいて発生する頻度を示す情報を含む、
請求項２４に記載のシステム。
【請求項２８】
上記第２の部分における離散的な確率値の１つは、上記特定の値の１つが上記複数のレコードにおいて発生する頻度を示す情報に少なくとも部分的に由来して導かれる、
請求項２７に記載のシステム。
【請求項２９】
上記実行環境は、上記生成されたモデルと上記フィールドにおいて発生するデータソースから読み取られた値の特性を示す追加情報とを使用して上記複数のテストデータ値を生成する、
請求項２１に記載のシステム。
【請求項３０】
上記追加情報が、上記フィールドにおいて発生する無効な値の数を示す、
請求項２９に記載のシステム。
【請求項３１】
上記追加情報が、上記フィールドにおいて発生する個別の値の割合を示す、
請求項２９に記載のシステム。
【請求項３２】
上記実行環境は、上記データストレージシステムに格納されたテストデータのコレクションを使用して上記データソースに由来する上記複数のレコードを処理するための少なくとも１つのプログラムを開発するための開発環境を提供する、
請求項２１に記載のシステム。
【請求項３３】
上記データソースに由来するレコードが上記開発環境にとってアクセスできない、
請求項３２に記載のシステム。
【請求項３４】
上記データソースが上記開発環境にとってアクセスできない、
請求項３３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
この出願は、参照により本明細書に組み込まれる米国出願第６１／１８５，７９７号（２００９年６月１０日出願）に基づく優先権を主張する。
本明細書は、テストデータの生成に関する。
【背景技術】
【０００２】
組織によっては、秘密にしておきたい情報（たとえば、顧客情報を含む場合がある生産データ）を有するものがある。機密データをプログラムによって処理しようとする際に、セキュリティ上の理由から、開発者が、実際の生産データにアクセスすること無く、そのようなプログラムを開発する必要がある場合がある。たとえば、生産データの機密を保持する１つの方法は、それを見る人の数を最小限に抑えることである。しかしながら、それらのアプリケーションが生産データと共に正しく実行されることを保証するには、機密情報を全く公開すること無く生産データの特定の特性を示す、開発とテストのための現実的なテストデータをプログラマが必要とする場合がある。
【発明の概要】
【０００３】
１つの態様において、一般的に、テストデータを生成するための方法は、データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取ること；上記値を特徴づける統計を含むプロファイル情報を格納すること；上記統計に基づいて上記フィールドについての確率分布のモデルを生成すること；所定の値が上記テストデータ値において発生する頻度が、上記生成されたモデルによってその所定の値に割り当てられた確率に対応するように、上記モデルを使用して複数のテストデータ値を生成すること；および上記テストデータ値を含むテストデータのコレクションをデータストレージシステムに格納する。
【０００４】
態様によっては、以下の特徴の１つ以上を含むことができる。
上記生成されたモデルは、値の連続的な範囲に亘る確率密度に対応する確率分布の推定値の少なくとも第１の部分と、離散的な値についての１つ以上の離散的な確率値に対応する確率分布の推定値の少なくとも第２の部分と、を含む。
上記統計情報は、値の複数の連続的な範囲のそれぞれに該当する値の数を示す情報を含む。
上記第１の部分は、値の連続的な範囲の１つに該当する値の数を示す情報に少なくとも部分的に由来して導かれる。
上記統計情報は、複数の特定の値のそれぞれが上記レコードにおいて発生する頻度を示す情報を含む。
上記第２の部分における離散的な確率値の１つは、上記特定の値の１つが上記記録において発生する頻度を示す情報に少なくとも部分的に由来して導かれる。
上記方法は、上記生成されたモデルと上記フィールドにおいて発生するデータソースから読み取られた値の特性を示す追加情報とを使用して上記複数のテストデータ値を生成することを更に含む。
上記追加情報は、上記フィールドにおいて発生する無効な値の数を示す。
上記追加情報は、上記フィールドにおいて発生する個別の値の割合を示す。
上記方法は、上記データストレージシステムに格納されたテストデータのコレクションを使用して上記データソースに由来するレコードを処理するための少なくとも１つのプログラムを開発するための開発環境を提供することを更に含む。
上記データソースに由来するレコードは、上記開発環境にアクセスできない。
上記方法は、上記データソースが上記開発環境にアクセスできないことを含む。
【０００５】
もう１つの態様において、一般的に、テストデータを生成するためのシステムは、１つ以上のフィールドにおいて値を有するレコードを提供するデータソース、データストレージシステム、および実行環境を提供する上記データストレージシステムに結合された１つ以上のプロセッサであって、上記データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取り、上記値を特徴づける統計を含むプロファイル情報を格納し、上記統計に基づいて上記フィールドについての確率分布のモデルを生成し、所定の値が上記テストデータ値において発生する頻度が、上記生成されたモデルによってその所定の値に割り当てられた確率に対応するように、上記モデルを使用して複数のテストデータ値を生成し、そして上記テストデータ値を含むテストデータのコレクションを上記データストレージシステムに格納するプロセッサ、を含む。
【０００６】
もう１つの態様においては、一般的に、テストデータを生成するためのシステムは、１つ以上のフィールドにおいて値を有するレコードを提供するデータソース、データストレージシステム、および上記レコードを処理してテストデータを生成するための手段を含み、上記処理は、上記データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取ること、上記値を特徴づける統計を含むプロファイル情報を格納すること、上記統計に基づいて上記フィールドについての確率分布のモデルを生成すること、所定の値が上記テストデータ値において発生する頻度が、上記生成されたモデルによってその所定の値に割り当てられた確率に対応するように、上記モデルを使用して複数のテストデータ値を生成すること、および上記テストデータ値を含むテストデータのコレクションを上記データストレージシステムに格納することを含む。
【０００７】
もう１つの態様においては、一般的に、コンピュータ可読媒体が、テストデータを生成するためのコンピュータプログラムを格納する。上記コンピュータプログラムは、データソースから複数のレコードの少なくとも１つのフィールドにおいて発生する値を読み取ること、上記値を特徴づける統計を含むプロファイル情報を格納すること、上記統計に基づいて上記フィールドについての確率分布のモデルを生成すること、所定の値が上記テストデータ値において発生する頻度が、上記生成されたモデルによってその所定の値に割り当てられた確率に対応するように、上記モデルを使用して複数のテストデータ値を生成すること、および上記テストデータ値を含むテストデータのコレクションを上記データストレージシステムに格納することをコンピュータに実行させるための命令を含む。
【０００８】
態様によっては、以下の利点の１つ以上を含むことができる。
テストデータは、ランダムではあるが、生産データの元のセットの種々の特性を複製して、より現実的なテストのために提供することができるような方法によって生成され得る。機密情報が上記テストデータに含まれないことを確保しつつ、統計的プロパティおよび上記元のデータに由来するいくつかの実際の値などの特性は、上記テストデータに含めることができる。初期プロファイリングプロセスにより、後に上記テストデータを生成するために使用される、上記統計的プロパティおよび実際の値をプロファイル情報内に抽出および要約することが可能となる。上記プロファイル情報に機密情報が漏れない限り、いずれのテストデータにも機密情報は存在しない。上記プロファイル情報において表される実際の値は、それぞれのフィールドにおける最も一般的な値であり、機密情報（概して、所定の顧客に固有であり、故に、元のデータ内で稀である）に該当しそうにない。
【０００９】
本発明の他の特徴および利点は、以下の説明、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】生成されたテストデータを使用してプログラムを開発するための例示的なシステムである。
【図２】例示的なテストデータ生成プロセスのフローチャートである。
【図３Ａ】統計情報の例である。
【図３Ｂ】統計情報の例である。
【図３Ｃ】確率分布のモデルの一例である。
【発明を実施するための形態】
【００１１】
図１を参照すると、テストデータを使用してプログラムを開発するためのシステム１００は、記憶装置またはオンラインデータストレージへの接続などの、データの１つ以上のソースを含んでもよいデータソース１０２を含み、それらはそれぞれ、種々のストレージフォーマット（たとえば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、またはメインフレームによって使用されるネイティブフォーマット）のいずれでデータを格納してもよい。テストデータ生成のための実行環境１０４は、データプロファイリングモジュール１０６およびテストデータ生成モジュール１１２を含む。実行環境１０４は、ＵＮＩＸ（登録商標）オペレーティングシステムなどの適切なオペレーティングシステムの制御下にある１つ以上の汎用コンピュータ上にホスティングされていてもよい。たとえば、実行環境１０８は、ローカル型（たとえば、ＳＭＰコンピュータなどのマルチプロセッサシステム）、もしくはローカル分散型（たとえば、クラスタまたはＭＰＰとして結合された複数のプロセッサ）、またはリモート型、もしくはリモート分散型（たとえば、ＬＡＮまたはＷＡＮネットワークを介して結合された複数のプロセッサ）、あるいはそれらの任意の組み合わせの、複数の中央処理装置（ＣＰＵ）を使用するコンピュータシステムの構成を含む、複数ノードの並列コンピューティング環境を含むことができる。
【００１２】
データプロファイリングモジュール１０６は、データソース１０２からデータを読み取り、データソース１０２において発生するデータ値の種々の特性を記述するプロファイル情報を格納する。データソース１０２を提供するストレージデバイスは、実行環境１０４に対してローカルであってもよく（たとえば、実行環境１０４（たとえば、ハードドライブ１０８）を実行するコンピュータに接続されている記憶媒体上に格納されている）、または実行環境１０４に対してリモートであってもよい（たとえば、ローカルまたはワイドエリアのデータネットワーク越しに実行環境１０４を実行しているコンピュータと通信しているリモートシステム（たとえば、メインフレーム１１０）上にホスティングされている）。
【００１３】
テストデータ生成モジュール１１２は、データのプロファイリングモジュール１０６によって生成されたプロファイル情報を使用して、実行環境１０４にアクセス可能なデータストレージシステム１１６に格納されたテストデータ１１４のコレクションを生成する。また、データストレージシステム１１６は、開発者１２０がテストデータ１１４を使用してプログラムを開発し、テストすることができる開発環境１１８にもアクセス可能である。しかしながら、データソース１０２における元の生産データは、それを開発者１２０にアクセス不可能に保持することにより機密に保持することができる。開発環境１１８は、実装によっては、頂点間の有向リンク（作業要素のフローを表す）によって接続された頂点（コンポーネントまたはデータセット）を含むデータフローグラフとしてアプリケーションを開発するためのシステムである。たとえば、このような環境については、「グラフ基づくアプリケーションのためのパラメータ管理（Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ）」と題された米国公開第２００７／００１１６６８に詳細に記載されている（参照により本明細書に組み入れられる）。
【００１４】
データプロファイリングモジュール１０６は、データベースシステムの様々な形態を含む種々のタイプのシステムに由来するデータをプロファイルすることができる。当該データは、ｎｕｌｌ値（空値）を含む可能性がある、それぞれのフィールドについての値を有するレコード（「属性」または「列」とも呼ばれる）として編成されてもよい。プロファイル情報は、それらのフィールドにおいて発生する値を記述する「フィールドプロファイル」と呼ばれる、様々なフィールドについての別々のプロファイルを提供するように編成することができる。データソースからデータを最初に読み込むとき、データプロファイリングモジュール１０６は、概して、そのデータソース内のレコードについてのいくつかの初期フォーマット情報を用いて起動する。（状況によっては、初めはデータソースのレコード構造さえ未知であり、代わりに、データソースの分析後に決定することができることに注意されたい）。レコードについての初期情報は、個別の値、レコード内のフィールドの順序、およびビットによって表される値の型（たとえば、文字列、符号付き／符号なしの整数）を表すビットの数を含むことができる。データプロファイリングモジュール１０６はデータソースからレコードを読み取ると、それは所定のフィールドの値を反映する統計と他の記述情報を計算する。次に、データプロファイリングモジュール１０６は、テストデータ生成モジュール１１２によるアクセスのためのフィールドプロファイルの形式で、それらの統計情報および記述情報を格納する。所定のフィールドについてのフィールドプロファイルにおける統計は、たとえば、そのフィールドにおける値のヒストグラム、そのフィールドにおいて発生する最大値、最小値、および平均値、並びにそのフィールドにおいて発生する最小公倍数および最大公約数のサンプルを含むことができる。また、プロファイル情報は、レコードの総数、および有効なまたは無効なレコードの総数などのデータソース１０２におけるレコードの複数のフィールドに関連する情報を含めることもできる。たとえば、データソースのフィールドをプロファイリングするためのプロセスの１つの説明は、「データプロファイリング」と題された、米国公開第２００５／０１１４３６９に記載されている（参照により本明細書に組み入れられる）。
【００１５】
図２は、例示的なテストデータ生成プロセス２００のフローチャートを示す。テストデータ生成モジュール１１２は、テストデータを生成する対象となる最初のフィールドについての格納されたフィールドのプロファイルを取得する（２０２）。実装によっては、上記フィールドプロファイルにおける情報から導くことができる追加情報が計算され、当該フィールドプロファイルが読み込まれた後に格納することができる。任意選択的に、モジュール１１２は、生成されたテストデータ値が有するべき特性（例えば、以下でより詳細に説明するように、テストデータ値に存在すべき個別の値の数を示す情報）についてのユーザ入力を受け取る（２０４）。モジュール１１２は、当該フィールドについて取得されたフィールドプロファイルにおける統計に基づいて、当該フィールドについての確率分布のモデルを生成する。当該モデルは、図３の例を参照しながら以下に説明するように、当該フィールドにおいて発生することが許される値の範囲についての確率の推定値を含む。
【００１６】
モジュール１１２は、各テストデータ値が生成される毎に１回ずつテストデータジェネレータ関数を呼び出す（２０８）。テストデータジェネレータ関数は、より詳細に以下に説明するように、確率分布のモデルと、任意選択的な引数「インデックス」および「極限（ｌｉｍｉｔ）」とを入力引数として受け取る。テストデータジェネレータ関数は、後述する入力および他の特性として提供されるモデルに従って、テストデータ値を出力として提供する。場合によっては、所定のフィールドに対して生成されるべきテストデータ値の数は、上記プロファイル情報に含まれる、元のデータソースからプロファイリングされたデータセット内のレコードの総数と一致するように選択することができる。場合によっては、（例えば、ステップ２０４において）ユーザーが直接提供することができる、特定数の値を生成することをユーザーが希望するかもしれない。上記関数から出力される値は、テストデータ１１４のコレクションとして提供されるべきレコードの適切なフィールドに挿入される。モジュール１１２は、追加のフィールドを処理すべきか否かを特定し（２１０）、処理すべき場合は、テストデータ生成の別の繰り返しを実行する。モジュール１１２は、データストレージシステム１１６におけるテストデータ１１４の生成されたコレクションを格納する（２１２）。
【００１７】
実装によっては、所定のフィールドに対して生成されるべきテストデータ値の数は、入力レコードのストリームにおいて受け取られた各レコード毎に１回ずつテストデータジェネレータ関数を呼び出すことによって暗黙的に決定される。例えば、開発環境１１８がデータフローグラフなどのアプリケーションの開発および実行をサポートしている場合、実行環境１０４は、データフローグラフそのものとしてデータプロファイリングモジュール１０６およびテストデータ生成モジュール１１２を実装してもよい。実装によっては、データプロファイリングモジュールは、Ｎ個の個々のレコードのストリームとしてデータソース１０２から生産データを読み取り、Ｎ個の個々のレコードのストリームとして当該モジュール１１２にレコードを提供するであろう。当該モジュール１１２は、それらのフィールドについて生成されたテストデータ値を有する元のレコードの各フィールドにおける値を置き換えることができるであろう。当該モジュール１１２は、Ｍ個のフィールドのそれぞれについてＮ個のレコードのストリームを処理し、Ｍ回の繰り返しのそれぞれにおいてＮ個のテストデータ値を生成し、Ｍの各フィールドのＮレコードのストリームを処理するの別個の繰り返しを実行することができる。様々な繰り返しのためのテストデータ値は、次々と連続的に、または同時に並行して、生成することができる。実装によっては、置き換えられる元の値の特定のプロパティは、生成されたテストデータ値で保持することができる（例えば、州および郵便番号などのフィールド間の機能的な依存関係など）。また、実装によっては、元のレコードのフィールドのサブセットは、それぞれのモデルに従って生成されたテストデータ値で置き換えられるように選択することができ、残りのフィールドは、それらの元の値を保つか、または（例えば、定数値または一様な確率分布に従って生成された擬似乱数値で置き換えるなどの）別の手法に従って処理することができる。
【００１８】
テストデータジェネレータ関数は、データ型が所定のフィールドについてのフィールドプロファイルに基づいて決定される特定のデータ型（例えば、文字列、１０進、日付、または日付と時刻の両方を含む日付時刻型）のテストデータ値を返す。当該テストデータ値は、テストデータ１１４のコレクションにおけるレコード内の所定のフィールドの値として収集される。当該テストデータ値は、所定の値がテストデータ１１４において発生する頻度が、上記テストデータジェネレータ関数に入力として提供されたモデルによって、その値に割り当てられた確率に対応するように、当該モデルを使用して、少なくとも部分的にはランダムな選択に基づいて（例えば、擬似乱数生成技法を使用して）生成される。テストデータジェネレータ関数は、テストデータ１１４のコレクションを処理するデータプロファイリングモジュール１０６が、テストデータ１１４のコレクションを生成するために使用されるプロファイル情報と同様のプロファイル情報を生ずるように、テストデータ値を生成する。
【００１９】
図３Ａおよび図３Ｂは、フィールドプロファイルにおける例示的な統計情報を示し、図３Ｃは、フィールドについての確率分布の例示的なモデル３００を示す。この例におけるテストデータ値は、それらの間での定義された順序を有する可能な値（例えば、数値によって順序付けられた数、または定義されたアルファベット順によって順序付けられた文字列）の範囲から選択される。この例における統計は、上記値のどれくらいの割合が上記範囲の最小値と最大値との間にある１０個の十分位数（この例においては、０と１０との間の実数）の各々の中に入るのかを示す十分位数のプロット（図３Ａ）を含む。図３Ａに示すプロットの横軸には、それぞれの十分位数に対応する値の範囲（０−１、１−２、等）を示すラベルが付けられている。他の例においては、横軸は、どのフィールドがモデル化されているのかに対応する値の範囲をカバーするであろう。文字列を含む潜在的な値のいずれのドメインも、（例えば、適切なベースにおいて数字として文字列中の文字を解釈することにより）このようなプロットの数値範囲にマッピングすることができる。また、上記統計情報は、この例においては、最も頻出する上位５つの値と各値の出現回数を含む、頻出値のリスト（図３Ｂ）をも含む。このフィールドについての確率分布のモデル３００は、上記十分位数プロットによって提供される連続的な情報および上記頻出値のリストによって提供される離散的な情報の両方を考慮に入れる。
【００２０】
例えば、モデル３００は、上記十分位数プロットによって与えられる割合に比例する、それぞれの連続的な十分位数の範囲内の値についての連続的な確率密度、および上記頻出値リストにおける出現回数に比例する離散的な値における離散的な確率（例えば、デルタ関数）に対応する頻出値リストにおける値についての離散的な確率を含む。上記デルタ関数の高さに関連する確率分布の連続的な部分の高さは、十分位数によって表される元のデータにおける値の数に依存する。上記確率分布の連続的な部分の高さは、（それらの頻出値が２回カウントされないように）それぞれの十分位数内に入る頻出値リスト内の任意の値によって表される出現回数の総数を減算することによって、上記十分位の高さに比べて低くされる。頻出値が十分位数の間の境界（例えば、図３Ｃにおける値４．０）に当たる場合は、その値の出現回数は、その値を含んでいた十分位数から減算される。例えば、その値の出現回数は、以下テスト（ｅｑｕａｌ−ｔｏ−ｏｒ−ｌｅｓｓ−ｔｈａｎ  ｔｅｓｔ）に基づいて値が十分位数に割り当てられる実装においては、左側の十分位数から減算される。確率の絶対値は、分布の積分が１（ｕｎｉｔｙ）になる（すなわち、すべての確率の合計が１に等しい）ように決定される。統計情報の他の型を使用してモデルを導くこともできる（プロファイリングされたデータのフィールドに現れる値のヒストグラムなど）。特定の範囲に該当する値の数を示す統計情報はモデルの連続部分につながり、特定の値の出現頻度を示す統計情報はモデルの離散的な部分（例えば、デルタ関数）につながる。
【００２１】
プロファイリングされたデータの確率分布にモデルを整合させることにより、、平均値、標準偏差、一般的な値（例えば、モデルのデルタ関数における値）などの確率分布によって決定される生成されたテストデータの特性、並びに最大許容値および最小許容値許容値は、プロファイリングされたデータのそれらの特性に自動的に整合される。
【００２２】
確率分布によって決定される特性に加えて、上記テストデータジェネレータ関数は、追加の特性を考慮に入れて、フィールドについてのプロファイル情報により近い整合を達成することができる。以下は、テストデータジェネレータ関数が提供されるモデルに基づいてランダムな選択を行うときに考慮に入れることができる幾つかの例示的な特性である。
【００２３】
・無効な値の割合：
上記テストデータジェネレータ関数は、プロファイリングされたデータにおけるのと、ほぼ同じ割合で当該フィールドにおいて無効な値を生成することができる。場合によっては、フィールドプロファイルは、選択することができる一般的な無効値のリストを含んでもよい。場合によっては、フィールドプロファイルが当該フィールドについての有効値を構成するものの妥当性の仕様を含む場合、テストデータジェネレータ関数は、その仕様に違反する無効な値を選択することができる。あるいは、サンプル無効値または妥当性の仕様がまったく存在しない場合、当該関数は、当該フィールドについてのデータ型に関して無効な値（例えば、１０進数で記載された文字または不適切にフォーマットされた日付）を選択することができる。
【００２４】
・個別値の割合：
上記テストデータジェネレータ関数は、プロファイリングされたデータにおけるのと、ほぼ同じ割合（すなわち、別個の値／値の総数の数）で、当該フィールドにおいて個別値を生成することができる。これを行うには、当該関数が、任意選択的な「インデックス」および「極限」の引数を入力として受け取る。インデックス引数は、当該関数の呼び出し毎に異なる、負ではない整数（例えば、レコード毎にインクリメントする整数）であり、極限引数は、上記インデックス引数として提供されたか、または提供されるであろう任意の値以上である。極限引数は、フィールドについてのテストデータ値の生成を初めに一度決定することができ、ユーザー入力に基づいて提供することができる（例えば、ステップ２０４）。例えば、極限引数の値は、ユーザーが要求しようとするレコードの数に設定することができ、ユーザーによって事前に知られていてもよいけれども、テストデータジェネレータを実行しているプロセッサ（または複数のプロセッサ）によっては事前に知られていないであろう。
【００２５】
・最大長および最小長：
上記テストデータジェネレータ関数は、プロファイリングされたデータにおけるのと同じ最大長および最小長を有する値を生成することができる。例えば、文字列の場合、その長さは文字数に対応し、数の場合、その長さは、小数点以下の桁を含む数字の数を定義することができる。
・観察された文字：
上記テストデータジェネレータ関数は、（フィールドプロファイルにおいて示されているように）プロファイリングされたデータに出現する文字のみで構成される、文字列などの値を生成することができる。
【００２６】
上記テストデータジェネレータ関数に使用して、極限引数Ｌの所定の値について、インデックス引数Ｉが０からＬ−１になる際に、出力テストデータ値を決定することができる技法の一例は、０からＬ−１のＩの値のすべての疑似ランダム置換を生成すること、および、これらの値が０から１の範囲に入るように、それらをスケーリングすること（例えば、Ｌで割ること）を含む。このように、Ｉのそれぞれの入力値を、モデル化された確率分布の対応する部分を定義する数の異なる範囲にマッピングすることができる。例えば、Ｌ＝１０の場合、０から９まで１０個のインデックス値は、上記置換を使用して、０と１の間の１０個の異なる範囲（０．１〜０、０．１〜０．２等）に擬似乱数的にマッピングされる。確率分布は、等しい確率のスライスの対応する数（この例においては１０スライス）にスライスされ、選択されたスライス内のどこかの出力値が、出力テストデータ値として選択される。当該関数は、それに応じてスライスの数を減らし且つ異なるスライス内に値を複数回出力することによって出力されるべき固有の値の数を考慮に入れる。例えば、合計値として多くの固有値の半分がある場合、それぞれの値は２回出力される。種々の技法のいずれかを使用して、上記置換を生成することができる（例えば、参照により本明細書に組み込まれる、”Ａｄｖａｎｃｅｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ  −  ＥＵＲＯＣＲＹＰＴ  ’９２  （Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ），”  Ｂｅｒｌｉｎ：  Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ，  ｖｏｌ  ６５８，  ｐｐ  ２３９−２５５，  １９９２におけるＵｅｌｉ  Ｍａｕｒｅｒによる”Ｌｕｂｙ−Ｒａｃｋｏｆｆ擬似ランダム置換ジェネレータの簡略化と一般化処理”において記載されているアルゴリズムのＬｕｂｙ−Ｒａｃｋｏｆｆタイプに基づく技法）。
【００２７】
上記テストデータ生成手法は、コンピュータ上で実行するためのソフトウェアを使用して実装することができる。例えば、当該ソフトウェアは、それぞれが、少なくとも１つのプロセッサ、少なくとも１つのデータ記憶システム（揮発性および不揮発性メモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイスまたはポート、並びに少なくとも１つの出力デバイスまたはポートを含む（分散型、クライアント／サーバ、またはグリッドなどの種々のアーキテクチャのものであってよい）１つまたは複数のプログラムされたまたはプログラム可能なコンピュータシステム上で実行される１つ以上のコンピュータプログラムにおけるプロシージャを形成する。上記ソフトウェアは、例えば、計算グラフの設計および構成に関連する他のサービスを提供する、大規模なプログラムの１つ以上のモジュールを形成してもよい。上記グラフのノードおよび要素は、データリポジトリに格納されているデータモデルに準拠したコンピュータ可読媒体または他の編成データに格納されたデータ構造体として実装することができる。
【００２８】
上記ソフトウェアは、汎用または専用のプログラム可能なコンピュータによって読み取り可能なＣＤ−ＲＯＭなどの記憶媒体上に提供してもよく、またはそれが実行されるコンピュータへのネットワークの通信媒体を介して（伝播信号中にエンコードして）配信してもよい。すべての関数を１つの専用コンピュータ上で実行してもよく、またはコプロセッサなどの専用ハードウェアを使用して実行してもよい。上記ソフトウェアは、ソフトウェアによって規定された計算の異なる部分が異なるコンピュータによって実行される分散方式で実装してもよい。それぞれのそのようなコンピュータプログラムは、好ましくは、汎用または専用のプログラム可能なコンピュータによって読み取り可能な記憶媒体又は記憶装置（例えば、固相メモリもしくは媒体、または磁気もしくは光媒体）がコンピュータシステムによって読み取られ、当該記憶媒体又は記憶装置に記載された手順を実行する際に当該コンピュータを構成および操作するために、当該記憶媒体または記憶装置上に格納またはダウンロードされる。また、本発明のシステムを、そのように構成された記憶媒体がコンピュータシステムを特定の且つ予め定義された方式で動作させて本明細書に記載された関数を実行させるコンピュータプログラムで構成された、コンピュータ読み取り可能な記憶媒体として実装することも考えられる。
【００２９】
本発明の多数の実施形態を記載した。にもかかわらず、本発明の精神および範囲から逸脱すること無く種々の改変を行うことができることが理解されるであろう。例えば、上記手順のいくつかは順序に依存せず、従って記載した順序とは異なる順序で実行することができる。
【００３０】
前の記述は本発明の範囲を説明することを目的とするものであり、添付の特許請求の範囲によって定義される本発明の範囲を限定することを目的とするものではないことが理解されるべきである。例えば、多数の上記機能ステップを、全体的な処理に影響を与えること無く、異なる順序で実行することができる。他の実施形態も、以下の特許請求の範囲内にある。
【図１】
0005620984.tif 000002
【図２】
0005620984.tif 000003
【図３Ａ】
0005620984.tif 000004
【図３Ｂ】
0005620984.tif 000005
【図３Ｃ】
0005620984.tif 000006