1

最近JBehaveに出会ったので、使うべきだと思います。だから私は私たちのチームのテスターを呼んで、彼もこれを使うべきだと考えています。

それを出発点として、私はテスターに​​テストアプリケーション(ボウリングゲームのボブおじさんのカタ)のストーリーを書くように依頼しました。一日の終わりに、ボウリングゲームに対して彼のテストをマッピングしようとしました。

私はこのようなテストを期待していました:

Given a bowling game
When player rolls 5
And player rolls 4
Then total pins knocked down is 9

代わりに、テスターに​​は「論理テスト」が付属していました。言い換えると、彼はそれほど具体的ではありませんでした。しかし、彼の言葉では、これは有効なテストでした。

Given a bowling game
When player does a regular throw
Then score should be calculated appropriately

これに関する私の問題はあいまいさです、「通常のスロー」とは何ですか?「適切に」とは何ですか?これらのステップの1つが失敗した場合、それはどういう意味ですか?

しかし、テスターは、人間は理解しており、私が探していたのは「物理的試験」であり、書くのがより面倒だと言っています。

おそらく「レギュラー」を2回ローリング4でマップすることもできますが(まだスペアもストライクもありません)、やりたくない翻訳をもう一度行っているように感じます。

それで、どうやってこれにアプローチするのだろうか?JBehaveテストをどのように作成しますか?そして、これらのテストを作成するのはあなたではなく、コードにマップする必要がある場合の経験はありますか?

4

5 に答える 5

2

彼のテストは有効ですが、フレームワークにはないドメインの特定の知識が必要です。自動テストは明示的である必要があります。例として考えてください。それらを書くことは「論理テスト」を書くことよりも費用がかかりますが、それらは自由に、非常に迅速に再生され、即座にフィードバックを与えることができるので、これは長期的には報われます。

あなたはそれを正しい方向に置くために、最初のテストを書いている彼とペアを組むべきでした。おそらく、あなたは彼にあなたのテストを与え、新しいテストを追加することによってカバレッジを増やすように彼に頼むことができます。

于 2011-09-17T07:13:22.160 に答える
1

受け入れ基準に必要な明示性の量は、開発チームとビジネスの利害関係者の間の信頼のレベルによって異なります。

あなたの例では、ビジネスは、開発者/テスターが正しい結果を決定するためにボウリングについて十分に理解していることを前提としています。

しかし、金融のような、より複雑なドメインを想像してみてください。そのためには、要件を十分に理解するために、より明確な例を用意する方がよいでしょう。

または、シナリオがあるとします。

Given I try to sign up with an invalid email address
Then I should not be registered

このため、開発者/テスターは、ビジネスの利害関係者よりも、有効または無効な電子メールアドレスを構成するものについてよりよく知っている可能性があります。それでもさまざまなアドレスに対してテストする必要がありますが、シナリオレベルで公開するのではなく、ステップ定義内で指定できます。

于 2011-09-17T10:17:28.193 に答える
1

「期待値」「適切に」などの漠然とした言葉は嫌いです。「適切に」は、テストの「有毒な言葉」の一例にすぎません。排除しないと、この「アプローチ」が広まり、テスト全体が事実上無効になる可能性があります。人間のテスターに​​とっては「十分」かもしれませんが、そのような「テストケース」は、最初の探索的な「スモークテスト」の試みでのみ受け入れられます。

再現性があり、体系的で自動化できるものが何であれ、すべてのテストケースは具体的でなければなりません。「すべき」だけでなく、「だろう」の柔らかさを許容できると仮定するのではなく、現在形の 「しなければならない」またはさらに厳密な「ある」を確認/拒否の主張として使用します。)そしてこのルール自動化に関しては絶対的です。

テスターが作成したのは、実際のテストケースではなく、むしろ「テストエリア」、「シナリオテンプレート」でした。考えられるテスト結果が非常に多く生成される可能性があるためです。非常に具体的な実際の「テストケース」でした。テストケースを自動化することは可能です。マシンに委任して、必要な頻度で自動的に評価することができます。(継続的インテグレーションサーバーからの自動レポートのボーナス付き)

しかし、「空のテストシナリオテンプレート」?これにもいくつかの価値があります。これは「シナリオテンプレート」であり、データで埋められるように準備された空のスケルトンです。したがって、これらの状況に「DDT」:「データ駆動型テスト」という名前を付けるのが大好きです。

10個の入力の検証、相互検証、および送信ボタンを使用して、テストするWebフォームを想像してみてください。すべての入力に対して10個のテストケースが存在する可能性があります。

  • 空;
  • 文字を使用しますが、とにかく短すぎます。
  • サーバーには長すぎますが、フォーム内でコピー&ペーストおよびさらなる編集が許可されています。
  • 無効な文字で..。

私がお勧めするアプローチは、一連の合格データを準備することです。データを(DBから、またはランダムに)生成する場合でも、予測できるものはすべて、テストに合格する「ハッピーシナリオ」です。データをデータテンプレートとして脇に置き、それを使用してフォームを初期化し、入力してから、いくつかの単一の値をブレーキダウンします。「失敗する」テストケースを作成します。つまり、1つの入力ごとに10回、10個の入力ごとに10回(クロスルールが試行される前でも100個のテストケース)...そして、サーバーによるフォームの拒否が100回行われた後、入力します。フォームを歪ませることなく、データを渡すことでフォームを渡すことができるため、フォームを最終的に受け入れることができます。(承認された送信はserver-appでステータスを変更するため、同じapp-stateで101のケースすべてをテストするには、最後の1つとして実行する必要があります)

この方法でテストを行うには、次の2つが必要です。

  • 空のシナリオテンプレート、
  • および100行のデータのテーブル:
    • 10列の入力データ:1つの値のみが操作され、テーブルを行ごとに渡す(つまり、グレイコードについて聞いたことがありますか?)
    • 継承履歴を行記述に保持する可能性があります。ここで、fromは行が派生し、どのように、どの操作値を介して行われます。
    • また、11番目の列である「期待される結果」の列に入力されています。テストカバレッジ追跡の要件への参照として、期待されるステータス、期待されるエラー/検証メッセージを合格/不合格にします。(つまり、FitNesseを見たことがありますか?)
    • また、テストが実行されたときに実際に検出された結果の列も、単一行のテストケースの履歴を追跡するために使用されます。(したがって、CIサーバーはすでに述べました)

一方の「空のシナリオスケルトン」ともう一方の「テストを実行するためのデータテーブル」を組み合わせるには、確かに何らかのメカニズムが必要です。そして、データをインポートする必要があります。したがって、理論的にはインポートすることもできるExcelで行を準備できますが、より簡単な生活のために、CSV、プロパティ、XML、または機械と人間が読み取れる形式のテキスト形式のいずれかをお勧めします。

于 2017-07-10T16:04:59.910 に答える
0

彼の「論理テスト」には、テスト計画またはTODOリストの「テスト通常ボウリングスコア」というフレーズと同じ情報内容が含まれています。しかし、それはかなり長いので、さらに悪いことになります。

jbehaveを使用することは、テストチームがそれよりも多くの情報を含むテストを生成する責任がある場合にのみ意味があります。それ以外の場合は、TODOリストを取得してJUnitにコーディングする方が効率的です。

于 2012-06-16T08:01:23.940 に答える
0

そして、私は「期待値」の「適切に」のような言葉が大好きです。一般的なドキュメントとして、キュウリまたはその他のラッパーを使用する必要があります。これを使用して考えられるすべてのシナリオをカバーおよび指定している場合は、数百の機能ファイルをスクロールするのに多くの時間を浪費している可能性があります。

于 2017-09-01T07:56:26.907 に答える