4

ホワイトペーパー 「ObservationDrivenTesting:はい、コードはあなたが望むことを実行しています。ところで、他に何をしているのですか?」というホワイトペーパーに出くわしました。、そして興味をそそられました。

しかし、グーグルはそれが実際にどのように機能するかについてあまり明らかにしていないようです 1、2 そこにあるものはすべて、ベンダーのAgitarからのもののようです。

TDDとCIを補完するプロセスとしてODTを実装した人はいますか?

もしそうなら、あなたがそれに遭遇した利点落とし穴のいくつかを共有してください...私たちはあなたの知恵から利益を得たいと思っています。

4

1 に答える 1

3

観察主導型テストは、多かれ少なかれ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は、はるかに単純なプロセスですが、同様のプロセスを実装しているように見えます。

于 2014-05-26T05:20:59.793 に答える