3

アプリケーションの検索機能でエラーを検出するように設計された関数があります。これは、非制御 UTF-8 の可能性から可変長の検索文字列を生成します。この関数で pytest 反復を実行すると、ランダムな UTF-8 文字列が検索用に送信され、約 500 回の検索ごとにデバッグ エラーが生成されます。

エラーの原因となった各文字列を取得できるので、実際にエラーを引き起こす文字列の文字の最小のサブシリーズは何かを判断したいと思います。つまり、(pytest ループ内で):

def fumble_towards_ecstasy(string_that_breaks):
    # iterate over both length and content of the string
        nugget = # minimum series of characters that break the search
        return nugget

文字列を半分にスライスして両側を削り、失敗するまで再送信し、その (len() - 1) からランダムな文字を選択してから、エラーが発生しない場合は元に戻す必要がありますか? ブルートフォースコンビナトリアル?これをステップスルーする最良の方法は何ですか?

ありがとう。

4

3 に答える 3

2

失敗の原因となる 2 つの文字シーケンスがあり、そのシーケンスがちょうど真ん中にある場合、文字列を半分に分割することは失敗します。それぞれの半分は成功しますが、結合された文字列は失敗します。

局所最小値を見つけるアルゴリズムの 1 つを次に示します。

各文字を順番に削除してみてください。

  • 文字を削除しても失敗する場合は、新しい短い文字列を保持し、この新しい文字列でアルゴリズムを繰り返します。
  • 文字を削除しても失敗しない場合は、元に戻し、次の文字を削除してみてください。試してみる文字がなくなるまで続けます。文字列の最後に到達すると、任意の 1 文字を削除すると検索が成功することがわかります。
于 2012-08-25T23:48:59.733 に答える
1

私は「両側から」アプローチを使用します。文字列を分割すると、エラーの原因となった部分文字列が分割されるリスクが常に発生します。私のアプローチは次のとおりです。

  1. 文字列がエラーを引き起こすことを確認しながら、文字列の左側からできるだけ多くの文字をポップします。
  2. 右側も同様に行います。
  3. 理論的には、エラーの原因となる最小限の部分文字列が残っています。

それが役立つことを願っています!

于 2012-08-25T23:54:11.290 に答える