観測駆動型テストは、Agitarが自社製品を使用している期間です。私は数年前にAgitarの製品を評価しました。それは通常の単体テストに取って代わるものではありません。すべてのものがそうであるように、TDDやCI、CDレベルのプロセスとは考えられません。テストのように静的解析ツールを使用するのと同じくらいです。それにもかかわらず、それは非常に強力で面白いです。
そのコア機能は不変検出であり、Agitarは攪拌を呼び出します。コード内のすべてのメソッドを見つけ、自動的に決定されたパラメータ値のセットでそれぞれを実行します。これは、パラメータ値の選択方法が洗練されています。intにはMIN_VALUE、-1,0,1、MAX_VALUEを使用するなどの比較的明白な処理が行われますが、既存のテストコードの実行や興味深い値の収集も可能です。 JDBC接続などの外部依存関係を持つオブジェクトを明示的にサポートしています。
すべてのクラスのメソッドを選択したパラメータ値で実行した後、Agitarはパラメータ値、メソッドの戻り値、およびフィールドの値について観測値(候補不変量)を作成します。それはユーザーに提示されます。ユーザーは不変量に昇格させることができます。これは、将来の攪拌実行でテストされます。または、観察が不可能になるようにコードを変更します。たとえば、Agitarは、1つのパラメータがnullのメソッドを呼び出すと、メソッドがNullPointerException
をスローすることがわかります。 nullを処理するようにコードを変更すると、将来の実行でその観測が削除されます。
Agitarは、その観測値からJUnitテストを生成できます。 Agitarのツールで不変量を維持するだけの利点はありません。
私はAgitarの製品を購入しませんでしたが、私はまだ私が見たものに対して大きな敬意を払い、適切な環境(Java、防弾コードの強いビジネス上の必要性)で再び考えると思います。私はTDDで開発したコードで、ほぼ100%の回線と分岐カバレッジを持つバグを発見しました。さらに良いことに、私は単体テストについてどのように考えているかを見ていました。
落とし穴について:これは、Java固有のもので、独自のもので高価です。また、そのような徹底的なツールであり、観測結果が実装の詳細と結びついているため、Agitarが積極的に開発していたプログラムの見解を維持するために多くの努力が必要です(受入れ/統合/ 。
これは私が見つけたかき混ぜのための最も簡単な紹介です:http://www.agitar.com/downloads/demos/agi_demo/agiDemo.html前身とその関連システムに関する興味深い記事は、http://plse.cs.washington.edu/daikon/pubs/です。また、ScalaCheckは、はるかに単純なプロセスではあるが同様の処理を実行するようです。
リンクが機能しませんでした... – Benjamin
@Benjaminありがとうございました –
ここに明白なものがありません - w.r.t.ホワイトペーパーの例では、テストを一度(キーボードを叩く前に)レビューすることは、その特定の欠陥を捕らえるためのより速い方法です。問題は、reqの翻訳にありました。テキストを自動化されたテストに変換することができます。スペックを間違えた場合、TDDはあなたを助けません。このアイデアは、あなたのコードで* Invariants *を見つけることに近づいているように見えますが、不変式が保持していることを証明しています...実際には、IMHOの良いアイデアです。 – Gishu