書籍Java Concurrency in Practice、 Chapter 12.1 Testing for correctness、特にサブセクション 12.1.3 Testing safety (作成者が Bounded Buffer クラスのデータ競合の安全性をテストするためのテスト ケースを設定したい場合) から
あなたのテストが、あなたが思っていることを実際にテストすることを確実にするために、コンパイラーがチェックサム自体を推測できないようにすることが重要です。連続する整数をテスト データとして使用するのはお勧めできません。結果が常に同じになり、スマート コンパイラがそれを事前計算する可能性があるからです。
この問題を回避するには、テスト データをランダムに生成する必要がありますが、乱数発生器 (RNG) の選択が不適切なため、効果的なテストの多くが損なわれます。ほとんどの乱数ジェネレーター クラスはスレッド セーフであり、追加の同期が導入されるため、乱数生成によってクラスとタイミング アーティファクト間の結合が作成される可能性があります。
テスト入力の生成に乱数ジェネレーターを使用することに反対する著者の指摘が理解できません。具体的には、「乱数生成により、クラス間の結合が作成され、タイミング アーティファクトが発生する可能性がある」という行が明確ではありません。
- 彼がここで言及しているクラスとタイミング アーティファクトはどれですか?
- RNG はどのようなカップリングを作成できますか?