0

関連する 7 つのフィールドを持つ永続オブジェクトがあります。

フィールドは、ここにリストされている値の数を保持できます。

Field    # of Possible Values
1        5
2        20
3        2
4        2
5        19
6        2
7        8

これは、121600 個の固有オブジェクトの可能性です。

テスト対象のコードは、フィールドの値に基づいて特定の数のこれらのオブジェクトを取得し、別のシステムで使用するためにそれらをビンに入れる多数のフィルターです。ビンのデポジットは簡単で、テスト済みで、適切に機能します... フィルタリングが機能していないだけです。カバーされていない多くのエッジケースがあり、多くのオブジェクトがまったく選択されるべきではないときにビンに配置されているか、またはその逆です。

全体として、一連の責任で動作する 9 つのフィルターがあり、各フィルターはビンがいっぱいになるまでオブジェクトをビンに入れ、その時点でチェーンが終了します。チェーンの最後のフィルターは単に「フィルター」であり、管理者に電子メールを送信して、オブジェクトが不足していることを知らせます (つまり、チェーンがこのフィルターに達した場合、ビンはいっぱいではなく、何かを行う必要があります)。見られる)。

だから私の問題はこれです:これらのフィルターをテストするにはどうすればよいですか? 一連の for ステートメントを使用して、一意のタイプのオブジェクトを 1 つずつ作成できます。

public void FixtureSetup()
{
    for(each possible value for field 1)
    {
        for(each possible value for field 2)
        {
            // ... continue with 5 more for statements

            // Create Object with each value
        }
    }
}

しかし、結果のコレクションからどのオブジェクトを適切にフィルタリングする必要があるか (フィルタリングされたオブジェクトのコレクションであっても) を手動で見つけようとするのは非常に困難です (可能であれば、最初にフィルターを作成したときに簡単に解決できたはずです)。

次のようなことを言っているため、要件に誤りがあることは承知しています。

filter 1 gets
    - field 1: values 1/2/3
    - field 2: values 2/3/4
    - etc.

しかし、結果は非常に多くのエッジケースを示しているため、その特定のケースを含めるように変更するたびに、他の何かが壊れてしまい (そうでないことを確認するための回帰テストはありません)、チェーンのどこにあるかを見つけるのは困難です特定の問題が発生しました。

編集>フィルターを個別にテストしようとしていますが、次のことを前提としています。

フィルター 1 は、121600 個の可能なオブジェクトのうち 500 個を取得します (フィルターの基準に従って)。私は、たとえば、100 (完全な推測) のオブジェクトをつかむべきではないことを発見しています。さまざまな理由があります。知るためには、他のシステムのユーザーと一緒にそれぞれを調べて、各フィルターの結果セットが正しいかどうかを知る必要があります。それとは逆のことも頭に残っています... つかむべきだったのに、つかめなかったすべてのオブジェクトはどうですか。

これは、テストではなく、要件の収集に問題があるのではないかと考え始めています。

4

2 に答える 2

6

明確な仕様がないようですね。明確な仕様がない場合、コードが仕様に従って機能するかどうかをどうやって知ることができますか?

下がってください。1 文の仕様を書くことから始めます。

FrobFilter コンポーネントは一連の Frob を取得し、1 つのビンがいっぱいになるまで、それぞれを正しい FrobBin に配置します。

さて、これで仕様ができました。まだテスト可能または実装可能な仕様ではありません。なぜだめですか?2つの理由。

理由 1: Frob シーケンスがなくなる前に FrobBin がいっぱいにならない場合の結果は指定されていません。

理由 2:「正しい」が指定されていません。

次に、各懸念事項に対応する 1 文の仕様を作成します。

一部のビンがいっぱいになる前にシーケンスが終了すると、管理者に通知されます。

Blargh が Gnusto である Frob の正しいビンは、常に FrotzBin です。

OK、あと 2 つの問題があります。管理者にはどのように通知されますか? Frob's Blargh が Gnusto でない場合はどうなりますか?

完全で正確な仕様が得られるまで、一度に 1 文ずつ分解し続けてください。そうすれば、仕様、実装するプログラム、およびテストケースがすべて互いに非常に似ていることがわかります。そして、それは素晴らしい状況です。

于 2009-07-23T18:44:31.477 に答える
2

これらの各フィルターを個別にテストし、各フィルターの「下」にチェーンするモックフィルターをテストする必要があるようです。

願わくば、各フィルターが単純で、簡単にテストできることを願っています。

次に、すべてが配線されたら、全体の統合テストをいくつか行います。

于 2009-07-23T17:52:13.250 に答える