none
テストのために正規表現に基づいた文字列を取得したい。 RRS feed

  • 質問

  • お世話になります。

    正規表現にマッチするランダムの文字列を取得する方法(ロジック)というのはないでしょうか?
    理想としてはこんな形です。

    string testStr = GetRandomString(string "正規表現", int 文字列の長さ)

    ExcelやCSVからの文字列の読み込み、charの文字配列からのランダムな文字の取得で生成した文字列の読み込み
    などを利用して、テスト用の文字列のデータを作成しているのですが、
    正規表現に基づいた文字列生成がコード上でできればテストデータの作成がより柔軟で簡単にできると考えています。

    VSTSのデータジェネレータ機能を利用すると、データベースのレコードについて、正規表現に基づいたランダムの文字列を
    生成してテストデータを作成できるのですが、それと同じように、正規表現を渡してあげると、その正規表現にマッチする文字列を
    戻してくれるというロジックの部分を探している状況です。

    正規表現ジェネレータ
    http://msdn.microsoft.com/ja-jp/library/aa833197.aspx
    2009年2月8日 5:24

回答

すべての返信

  • テストのターゲットは正規表現エンジン? それとも正規表現のパターン文字列?
    前者ならそのようなジェネレータも有効でしょう。
    けれども後者ならば、そもそもテストにならないのでは。
    ジェネレータ側にバグがあったら更に無意味ですし。

    テストファーストというか、成功させたい文字列と失敗させたい文字列を用意した方がいいと思います。
    2009年2月8日 16:04
  • 佐祐理 の発言:

    テストのターゲットは正規表現エンジン? それとも正規表現のパターン文字列?
    前者ならそのようなジェネレータも有効でしょう。
    けれども後者ならば、そもそもテストにならないのでは。
    ジェネレータ側にバグがあったら更に無意味ですし。

    テストファーストというか、成功させたい文字列と失敗させたい文字列を用意した方がいいと思います。

    ありがとうございます。

    違ってたら申し訳ありませんが・・・。エンジンそのものを開発しているわけではないので、エンジンではないですね。また、パターン文字列が正規表現として適切な文字列かどうかをテストしたいわけでもないので、こちらでもないです。ただ、やはりテストの効果を高めたいというところが最終目標です。

    アドバイスを頂いている、その文字列の用意という部分で活用したいという意図もあります。仕様としてこのような文字列の場合はこの処理、これの場合はこれといったようにあらかじめ想定しているものは静的に対応できますが、仕様漏れなどによって対応できてない部分がランダムな性格の値によってあぶりだされることを可能性として期待します。
    また、そのランダムな性格の値の生成について、例えば郵便番号生成のロジック、電話番号生成のロジック、クレジットカード番号の生成ロジックというように分けるのではなく、正規表現が使えれば簡単かなと思うところです。

    全然まだ見つかりませんが、長い目でもう少し探してみようかなと思います。

    2009年2月10日 14:52
  • 依然としてテストのターゲットが何なのか明記されていないので、よくわかりませんが…。
    おっしゃられているものとしては、ランダムに文字列を生成しそれが正規表現を満足するかテストするだけに聞こえます。
    C#はUnicodeを採用しているので「日本語文字列」などの制約は正規表現では難しいですし…うーん。
    ちょっと方向性が違いますが、疑似個人情報というものもあります。

    2009年2月11日 9:48
  • 具体的なコードではありませんし、これを実装しようと思ったら正規表現をパースするところから作らなければなりませんが、つぎのような論文があります。

     http://www.cosc.canterbury.ac.nz/research/reports/TechReps/1997/tr_9710.pdf
    • 回答としてマーク CrimsonPork 2009年2月15日 5:46
    2009年2月14日 21:41
  • Kazuya Ujihara の発言:

    具体的なコードではありませんし、これを実装しようと思ったら正規表現をパースするところから作らなければなりませんが、つぎのような論文があります。

     http://www.cosc.canterbury.ac.nz/research/reports/TechReps/1997/tr_9710.pdf

    ありがとうございます。
    参考にしたいと思います。

    2009年2月15日 5:47