2016-06-16 5 views
1

多くの単体テストを書きます。しばしば、慎重に検討されたテストケースを手作業で書く必要があります。これはホワイトボックステストの一種です。別の品質保証エンジニアを抱える会社で働くことができれば、おそらく誰かがあなたのためにテストケースを書いているかもしれません(白と黒のボックステストのミックスの一種)。Javaでのランダム化テスト

しかし、無作為化されたテストでは多くのバグが発見され、手書きのケースを補完するものとなります。

たとえば、私は自己完結型のクラスを持ち、クラスの不変量とストロークストロークを単純に表現することができます(「このメソッドは決して例外をスローしません」や「このメソッドは常に正値")。私はクラスにちょうど足を踏み入れ、不変量をチェックするテストフレームワークが欲しいです。

同様のケース:私はしばしば、他のクラスと同様の機能を実装するクラスを持っています(ただし、パフォーマンス特性や機能の追加によって異なります)。私はA対Bの2つのクラスをランダムにテストします。たとえば、私がTreeMapを実装していたのであれば、HashMapを同等の実装(ソートされた振る舞いのためにいくつかの違いがモジュロTreeMap)として使用し、ほとんどの基本機能をランダムにチェックできます。同様に、LinkedListを実装している人は、同等の実装としてArrayListを使用できます。逆も同様です。

は、私が過去にこれを行うには、いくつかの基本的なものを書いてきたが、へのすべての定型までに設定する骨の折れるです:

  1. はランダムな初期状態のオブジェクトを作成します
  2. ランダム突然変異
  3. を適用します
  4. 対Bテスト用のオブジェクト
  5. は、このような
「とき、例外がスローされます」などの不変条件とルールの定義「のような」間のマッピングを作成します。

私はまだ時々それをしますが、私は自分の努力水準を下げたいと思います。たとえば、必要な定型文を削除または単純化するフレームワークはありますか?

それ以外の場合は、Javaでランダムテストを行うためにどのような手法が使用されますか?

これは関連性がありますが、ファズテストとは異なります。ファジーテストは、単一のエンティティへのランダム入力に焦点を当てているようであり、悪い動作を引き起こすことを望み、しばしばダイナミックカバレッジ観測に基づく適応型入力モデルを使用します。それは上記の多くをカバーしていますが、同等の実装が存在する場合にはAとBのテスト、不変の検査ではカバーしません。いずれにしても、私はJava用の適切なファズテストライブラリにも興味があります。

+2

http://pitest.org/ –

+0

"私にライブラリを探す"という問題を編集したので、ここで問題を説明します(もちろん、その問題を解決するための図書館を指し示す答えは、まだ話題になっている可能性があります)。 – BeeOnRope

+0

@SilasReinagel - 私は突然変異検査(何が何を提供しているか)を見てきました。つまり、私はそれが私が後にしていることに対する補完的なアプローチだと思っています。これは、あなたのコードを単体テストするための入力を無作為に生成するのではなく、テストの有効性をより良く判断するために、 – BeeOnRope

答えて

1

あなたが探しているのは、プロパティベースのテストのJava(types of randomized testingを参照)のライブラリです。まもなく、結果の値をテストする代わりに、そのプロパティをテストしています。例えば。代わりに、2 + 2は4あなたは同じような特性をチェックしているであることを確認する:

  • random1 + 0 = random1
  • random1 + random2 >= random1
  • ...

プロパティベーステストについて詳しく説明しているthis articleをご覧ください。真の答え(例えば旧防弾アルゴリズムを)知っている何か - あなたが言及

別のオプションは、あなたのテスト用Oracleとチェックすることです。したがって、古いアルゴリズムと新しいアルゴリズムの両方にランダム変数を渡し、結果が等しいことを確認します。 Javaライブラリ

カップル:

  • JUnit QuickCheck - プロパティベースのテストのための専門LIB。プロパティを定義し、これらのプロパティのランダムな値を渡してチェックします。これまでのところ(06/2016)かなり若かったので、ScalaCheckをチェックしてください。JavaコードのScalaテストを書くことができるからです。
  • Datagen - 標準のランダム化ツールでは不十分な場合のJava用ランダム値ジェネレータ。免責事項:私は著者です。
関連する問題