特定の正規表現のサンプル データを生成するツールがいくつかあります。いくつかが含まれます:
ただし、データセットをシードするには十分かもしれませんが、検証など、正規表現自体に依存するコードのテストにはあまり役立ちません。
プロパティを持つモデルを生成するコード ジェネレーターがあるとします。ユーザーは、プロパティを検証する正規表現を指定します。ここで、コード ジェネレーターが検証の成功と失敗を適切に確認するためのテストを生成しようとしているとします。不要なデータの生成を避けるために、ツールが正規表現内の境界ケースに焦点を当てることは合理的と思われます。
たとえば、正規表現^([a-z]{3,6})$
を考えてみましょう。境界ケースには次のものが含まれます。
- [az] のみで構成される任意の文字列、長さは 2 (失敗)
- [az] 3 に等しい長さのみで構成される任意の文字列 (成功)
- [az] のみで構成される任意の文字列、長さは 4 (成功)
- [az] だけで構成される任意の文字列、長さは 5 (成功)
- [az] のみで構成される任意の文字列、長さは 6 (成功)
- [az] のみで構成される任意の文字列で、長さが 7 に等しい (失敗)
- [az] で構成されていない任意の文字列 (失敗)
- [az] で始まらず、[az] で終わる任意の文字列 (失敗)
- [az] で始まり [az] で終わらない任意の文字列 (失敗)
境界ケースに焦点を当てる理由は、長さが 6 を超える [az] のみで構成される文字列は、正規表現で定義された文字列の長さの上限を検証するためです。したがって、長さ 7、8、9 の文字列をテストすることは、実際には同じ (境界) 条件をテストしているだけです。
これは単純化のために選択された任意の正規表現ですが、妥当な正規表現であれば入力として機能する可能性があります。
生成されるシステムのさまざまなレイヤーのテスト ケースの入力文字列を生成するためにコード ジェネレーターが使用できるフレームワーク/ツールは存在しますか。テスト ケースは、開発サイクルの後半でシステムが生成および変更されなくなったときに、本来の意味を持ちます。