0

私は非常に厳格なテスト駆動開発 JUnit の雰囲気の中で自分自身のトレーニングに取り組んでいます。そのような雰囲気の中で、FOR ランダム性をテストするための最良の方法は何かを見つけようとしています。たとえば、私はランダム化されたキュー配列の実装に取り​​組んでおり、アイテムをキューに入れ、すぐにそのアイテムを配列上のインデックス 0-(n-1) のアイテムに切り替えます (したがって、ランダムなアイテムがキューから出てくるのをシミュレートします)デキュー)。これが私の enqueue メソッドからのコード例です。

        int randIndex = StdRandom.uniform(size); // generate random index to swap with last item
        Item tmp = randArray[randIndex];
        randArray[size] = item;
        randArray[randIndex] = randArray[size]; //perform swap to create a random item for dequeue
        randArray[size] = tmp;
        size++;

いくつかのテストを実行して、エンキュー メソッドが実際にキュー変数を配列内の他のインデックスにランダムに切り替えていることを確認したいと思います。通常は、一連の enqueue() 呼び出しを反復処理して結果を出力するコードを Main() メソッドにスローし、それがランダムに「感じられる」ことを確認します。

しかし、私が言ったように、私はこれを非常に厳格な単体テスト フレームワークで行いたいと考えています。JUnit はほぼ独占的に assert ステートメントを使用しているようですが、モンテカルロ型のものを実行して特定のイプシロンに対して平均をチェックしない限り、何に対して何をアサートする必要があるのか​​ わかりませんが、それはテストには少し多すぎるようですそんな簡単な方法。

4

2 に答える 2

0

テストは2つの部分に分割できます。

1)疑似乱数の特定のシーケンスによって、キューイングが期待どおりに機能することをテストします。そのために、任意の固定数のint値を定義します。例:「5,2,100,3」。次に、enserを使用して、enque、dequeが期待される要素を提供することをテストします。

2)Random()Javaのクラスをテストします。適切に実装されているため、おそらくそのテストを省略する必要Random()があります。

それ以外の場合は、2)カイ二乗乱数検定を使用しており、その統計は、あなたが述べたようにsoemイプシロンの範囲内にあります。しかし、これはやり過ぎなので、ポイント1)にとどまります

于 2013-02-18T18:49:46.397 に答える
0

あなたが本当に何を目指しているのかはわかりませんが、乱数ジェネレーター自体をテストするように読んでいます(切り替えは非常に簡単だからです)。

java SecureRandomを使用する場合は、エントロピーに関してかなり良い側にいる必要があります 。SecureRandomを参照してください。それが疑わしい場合は、エントロピーチェッカーを使用するか、ここのようなインターネットのソースからの実際のランダムのシーケンスを使用してください

于 2013-02-18T18:49:56.230 に答える