カーディナリティの高いテストデータの生成方法

このQ&Aのポイント
  • DBのインデックスの効果を測定するためには、実データに近い品質のデータが必要です。
  • 自動生成されたデータでは画一的で単調な内容になりがちです。
  • 専門家の方々はどのようにテストデータを作成しているのか、またおすすめのテストデータ生成ツールがあれば教えていただけると幸いです。
回答を見る
  • ベストアンサー

カーディナリティの高いテストデータの生成方法

DBのインデックスの効果を測定(性能評価)するには実データに近い品質のデータが必要だと思いますが、スクリプト等で自動生成されたデータでは画一的で単調な内容になりがちですよね? # 社員名簿だと、社員数以上の件数にはならないし、社外に出せないし・・・。(別のレコードの姓と名を組み合せて架空のデータに改竄してしまうという手もありますが) # DIRコマンドをリダイレクトすればカーディナリティは高くなりますが、見た目がイマイチ。(デモには使えそうにない) 専門家の皆さんはどうやってテストデータを作っておられるのでしょうか。 また、テストデータ生成用のツールでおススメのものがあれば教えてください。(xUnit等のテストツールと連動して使えれば便利?) ・・・実データでテストするのが一番、という結論になるのかもしれませんが。(笑

noname#4564
noname#4564

質問者が選んだベストアンサー

  • ベストアンサー
  • cse_ri2
  • ベストアンサー率25% (830/3287)
回答No.1

昔はデータを作って測定することをよくやっていましたが、 これだと質問者の方の書き込みにあるように、画一的で単調な 内容になるのは避けられません。 ですので今では、可能な限り実データで測定するようにして います。 お客さんと交渉して、現場のデータを借り受けるわけですね。 実際RDBの性能なんて、データしだいでいくらでも変わります。 特定のお客さんに合った測定データを出したければ、その お客さんのデータで検証するのが一番確実であるからです。 つーことで回答になっていませんが、質問内容の一番最後 の意見に賛成です。(笑)

noname#4564
質問者

お礼

やはり、予想通りのコメントでしたか。(笑) 納得しました。ありがとうございます。

関連するQ&A

  • テストデータ作成に苦労しています

    テストデータ作成のための良いツールはないでしょうか。 今のところ、Oracle SQL Developer や Visual Studio のサーバーエクスプローラー、OSqlGridなど を使って、手作業でテストデータを作っています。 いずれも、グリッド編集的な機能によって、手作業でそれぞれのテーブルに対してデータを入力 しています。 (一度作ったデータは、再度クリーンな状態から再現するために、最終的に SQLのINSERT文に して保存しています) 1テーブルあたりのテストデータ件数は10件から50件程度なのですが、 つらいなあ、と思うのは、例えば「テーブルA」の明細レコードとして「テーブルA-1」のような テーブルがあり、テーブルA-1のさらなる明細レコードとして「テーブルA-2」がありまして、 そういった場合、上記のツールを使っている場合、それぞれに紐付くレコードを把握しつつ管理 するのが大変です。 テーブル構成を管理しているのは客先なのですが、カラムが増えたり移動(別のテーブルに移動) したりして、末端の人間としては、既に作成したテストデータを変更するのが大変だ、という 悩みもあります。 テストデータ作成及び管理に良いツールはないでしょうか。 あるいは当該プロジェクトのための専用ツールを作った方が良いでしょうか。

  • Tickstoryでデータ取得とバックテストの確認

    Tickstoryにて、eurjpy(H1を含む)を3年間分、ダウンロードしてMT4に転送する操作をした積りですが、 MT4再起動後、わずか1日分しかバックテストされないので、基本的ななにか操作が悪いように思うのです。 条件や確認事項。 MT4は回線不通としてあります(不要な上書を避けるため) ツール→ヒストリーセンタ→eurjpy→1時間足(h1) をクリックで3年間分以上データがある。 データフォルダ→デモ口座サーバ名 フィルダには十分なサイズのEURJY60.hstがある。 tickstory→data→EURJPYの該当日のフォルダには 10h_ticks.bi5 のような時間別らしきファイルが24時間分ある。 の通り確認したのですが、他に確認すべき場所があるように思うのですが、わかりません。

  • アクセス2000でデータが抽出されない

    アクセス2000で社員の入社日等を管理したいのですが、入社日をキーにデータを 呼び出すフォームと、その呼び出しに対応して、抽出されたデータを表示する 一覧表フォームを作成しました。 何回かテストをしたところ、平成13年2月1日以降のデータが呼び出せない ことがわかりました。どうしたら解決できるでしょうか? ちなみに、データは過去5年間分で、7000件ほどあります。 全件のデータ数が多すぎるとか、1回に呼び出すことのできるデータ件数に 限りがあるとかの制約があるのでしょうか?

  • C言語プログラムの品質をチェックする方法

    アバウトな質問で恐縮なのですが。 ソフトウェアの品質をチェックする良い方法を模索しています。 ツールは基本的に無償のものを探しています。 例えば、プログラムのコードをチェックしてカバレッジや複雑度の測定が出来るものや、プログラムを検証する為のテストデータを自動生成するものや、コードからドキュメントを自動生成してコードを見える化してくれるものなど。 バグ密度から品質を判断する方法もあると思います。 いろんな面から見て、ソフトの品質をチェックするツールを探しています。 どういう観点でも構わないのですが、良いツールがあればご教示頂きたいと思います。

  • ファイル読み込み・書き込み

    下記のようにtestディレクトリ内のファイルを読み込み、 それぞれにあるデータを足して、 読み込んだファイルを他のディレクトリに書き出したいのですが、 どのようにしたらよいのでしょうか。 とりあえず、下記はファイルを読み込んで、 なにも足さずそのまま別のディレクトリに移すとこまで、 やりたいと思っていますが、 どうやっていいものか・・・ #!/usr/bin/perl $dir = "test/"; opendir(DIR, $dir); while($file = readdir(DIR)){ open(IN, ">>$dir$file"); @list = <IN>; foreach $dataLine(@list) { print IN $dataLine; } close(IN); } closedir(DIR); ようはファイルに追記したいのですが、 上書きしないで、バックをとっておき、 別のところへ追記したバージョンを生成したいということです。 ご協力お願いします。

    • ベストアンサー
    • Perl
  • Access VBA フィールドの追加とデータ

    こんにちは。 Access2003のVBAで質問です。 やりたいことは、指定フォルダにある「名簿.csv」をインポートし、テーブルの先頭に、フィールド[Unique_ID]を追加して、値に(フィールド[姓]&フィールド[名])をセットしたいのです。 インポートして、姓が空白のときは、レコードを削除することで、[Unique_ID]にnullがはいらないということはできましたが、肝心なフィールドの追加とレコードの追加がわかりません。 どのような方法があるでしょうか? ご教授よろしくお願いします。 Dim fpass As String Dim Dlfile As String Dim Fd As FileDialog Dim Fchk As String Dlfile = MsgBox("マスタデータを更新しますか?", vbOKCancel + vbExclamation + vbDefaultButton2) If Dlfile = vbCancel Then GoTo Exit_DT_UP_Click Const msoFileDialogFolderPicker = 4 Set Fd = Application.FileDialog(msoFileDialogFolderPicker) With Fd .Title = "更新データのフォルダを指定してください。" .AllowMultiSelect = False If .Show = False Then GoTo CkErr_DT_UP_Click fpass = .selecteditems(1) End With Dlfile = fpass & "\名簿.csv" Fchk = Dir(Dlfile, vbNormal) If (Fchk = "") Then GoTo CkErr_DT_UP_Click DoCmd.TransferText acImportDelim, "", "名簿", Dlfile, True, "", 65001 'ADO Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "名簿", cn, adOpenKeyset, adLockOptimistic Do Until rs.EOF If IsNull(InStr(rs!姓, "")) Then rs.Delete Else 'レコード追加? End If rs.MoveNext Loop rs.Close Set rs = Nothing Set cn = Nothing CkErr_DT_UP_Click: Set Fd = Nothing Exit_DT_UP_Click: Exit Sub

  • 自治会による、広範囲の会員名簿の全戸配布

    情報セキュリティ(紙媒体)、個人情報保護(取り扱い件数が法適用外)のことなのですが、ここが近いので質問します。 現在、最高裁判例に反して、マンション管理組合により強制加入させられている自治会から、 名簿を更新するのでデータを確認してほしいという依頼が来ています。 掲載拒否は可能とありました。 しかし納得いきません。 ・連合自治会何百件もの個人情報が掲載されます(従って個人情報保護法適用には少ない)。  どんな人に見られるかわかりません。  名簿を売られるかもしれません。  怪しいダイレクトメールや架空請求が来る事も考えられます。 ・マンション内回覧ですが、マンション内全戸の個人情報が掲載されています。  マンションとしてはプライバシーに配慮して名簿配布はしていなかったのに、です。 だいたい今の個人情報保護の必要性が日増しに高まっている中で、 (学校の名簿も配布されないのが普通のようですし 悪意を持った誰かが何をしでかすかわかったものではありません) こんな愚行をする自治会が許せません。 しかも調査に対する問い合わせ先などの情報は秘匿されたままです。 これは(自治会に入らされる不当性は確定ですが、会の運営として)まともなものなのでしょうか。また法的問題はないのでしょうか。 よろしくお願い致します。

  • アクセスで単票でリスト内もフィルタかけたい

    2002アクセスを使っている初心者です。社員名簿を作っています。テーブル社員名簿.TBL、フィールド「氏名」・・・その他について、単票フォームを作成しました。ツールボックスより、リストコントロールを選択して、貼り付けると、リストボックスウイザードが立ち上がり、その中の3つのメニューの3番目の「リストボックスで選択した値に対応するレコードをフォームで検索する」を選択して、フィールド「氏名」を元に検索してその氏名のレコードの情報をを表示するようにしました。社員全データでは、調子良く動いています。この度、「課」別に表示しようとしています。メニューバーの中のフィルタ(漏斗の絵)を使って、選択フィルタで目標の「課」選択して、実行フィルタを押すと、単票フォームのレコード数は変化して、うまくフィルタしますが、リスト内の「氏名」データがフィルタされません。どうしたらクリックと同時にリスト内のフィールド「氏名」もフィルタされるのですか?宜しくお願いします。

  • エクセルへの書き出し

    サンプル本を片手に作業しています。 PHPでexcelデータを作る場合、以下のようなソースがあります。 <? //依存モジュールの読み込み require_once 'Spreadsheet/Excel/Writer.php'; //エクセルシートのオブジェクトを作成 $workbook = new Spreadsheet_Excel_Writer(); //test02.xlsとしてダウンロードを開始するようHTTPヘッダーを送信 $workbook -> send('test02.xls'); //1枚目のワークシートを作成 $worksheet1 =& $workbook -> addWorksheet('社員名簿'); //データを書き出し $worksheet1 -> write(0,0,'名前'); $worksheet1 -> write(0,1,'年齢'); $worksheet1 -> write(0,2,'出身地'); $worksheet1 -> write(1,0,'鈴木太郎'); $worksheet1 -> write(1,1,'32'); $worksheet1 -> write(1,2,'北海道'); $worksheet1 -> write(2,0,'青山辰夫'); $worksheet1 -> write(2,1,'24'); $worksheet1 -> write(2,2,'青森'); //Excelシートの送信 $workbook -> close(); ?> この場合、Excelは指定した名前で生成されるのでしょうか、 それとも、あらかじめ作成したExcelへ書き込みするのでしょうか?

    • ベストアンサー
    • PHP
  • PHPでXMLを表示させたときの外部エンティティの挙動に関して

    XML+XSLでHTMLを生成する上で、PHPを経由する場合と、しない場合で、 外部エンティティの挙動が異なっていて悩んでいます。 具体的には、  ・XML+XSL+外部エンティティ → 意図通りHTML生成  ・PHP+XML+XSL+外部エンティティ → 意図通りHTML生成されない(外部エンティティが生成されない) こういうものなのでしょうか? もし、こういう仕様であれば、なにか対応策はあるのでしょうか? ソースと生成されたHTMLは下記の通りです。 【Though.php】 <?php header( 'Content-Type: text/html; charset=UTF-8' ); $xml = new DomDocument(); $xml->load( 'MainData.xml' ); $xsl = new DomDocument(); $xsl->load('Main.xsl'); $processor = new xsltprocessor(); $processor->importStyleSheet($xsl); echo $processor->transformToXML($xml); ?> 【MainData.xml】 <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="Main.xsl" ?> <!DOCTYPE books [ <!ENTITY sub_data SYSTEM "SubData.xml"> ]> <root> <node1>TEST1</node1> <node2>&sub_data;</node2> </root> 【Main.xsl】 <?xml version = "1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet> 【SubData.xml】 <?xml version="1.0" encoding="utf-8"?> <sub_data>Test2</sub_data> 【XML+XSL+外部エンティティで生成されるHTML(ブラウザで直接MainData.xmlを開いた場合)】 <html><?xml-stylesheet type="text/xsl" href="Main.xsl" ><root><node1>TEST1</node1><node2><sub_data>Test2</sub_data></node2></root></html> 【PHP+XML+XSL+外部エンティティで生成されるHTML(ブラウザでThrough.phpを開いた場合)】 <html> <?xml-stylesheet type="text/xsl" href="Main.xsl" ><root> <node1>TEST1</node1> <node2></node2>    //←node2の中がカラッポになっている。。。 </root> </html> ※生成されたHTMLは、IE8の開発者ツールで確認しています。 XMLやPHPは最近やり始めたのでトンチンカンなことを言ってるかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP