6

こんばんは

私は、単体テストという用語を非常に大まかに使用しているオフショア開発者のグループと協力しています。

彼らの QA ドキュメントでは、単体テストの作成とシステムの単体テストの実行について説明しています。

これは、単体テストとは何かという私の解釈とはまったく一致しません。

私は、単一のクラス (通常はブラック ボックス) を実行するために使用されるテストまたは一連のテストである単体テストに慣れています。テスト対象のクラスは、実装によって他のクラスを含める必要がある場合がありますが、通常、単体テストによって実行されるのは単一のクラスです。

次に、システム機能テスト、統合テスト、受け入れテストなどがあります。

これは私の側では少し衒学的なことですか?それとも、単体テストと単体テストについて言及するとき、これはあなたが考えるものですか?

編集:ロブ・ウェルズ。このようなテストをブラック ボックスの観点からアプローチすることは、1 つの側面にすぎないことを明確にする必要があります。モック オブジェクトを使用して内部の動作を検証する場合、実際にはホワイト ボックスの観点からテストしていることになります。

4

12 に答える 12

10

単体テストは通常​​、コードの分離されたセクションをテストするために開発者によって使用されます。それらは、ボーダー ケース、エラー ケース、および通常のケースをカバーしています。これらは、コードの限られたセグメントの正確性を示すことを目的としています。すべての単体テストに合格した場合、コードの分離されたセグメントが本来の目的を果たしていることが実証されたことになります。

統合テストを行うときは、エンド ツー エンドのケースを調べて、単体テストに合格したすべてのセグメントが連携しているかどうかを確認します。機能テストでは、コードが指定された要件を満たしているかどうかを確認します。受け入れテストは、エンドユーザーが最終製品を承認するかどうかを確認するために行われます。

于 2008-11-03T21:13:36.410 に答える
4

テストが 1 つの一貫したビジネス操作のみを扱う限り、単体テストが複数のクラスやサブモジュールにまたがることができない理由はありません。人の給与を計算するためにさまざまな戦略を使用する BO のメソッドである「calculateWage」について考えてみてください。私の意見では、それは1つの単体テストです。

于 2008-11-03T21:18:56.680 に答える
4

単体テストを実装して、単一のメソッドのみをテストしようとしています。そして、私がテストしているメソッドによって使用される依存クラスとメソッドの「モック」クラスを作成する努力をします... ...そのメソッドのコードの実行が実際にユニットの他のメソッドのコードを呼び出さないようにテストは「テスト」であってはなりません (これらのメソッドには他の単体テストがあります)。このように、単体テストの失敗は、単体テストがテストしているメソッドの失敗を確実に示します...

モック クラスは、依存クラスのインターフェイスと動作を「シミュレート」するように設計されているため、テストしているメソッドがそれらを呼び出すことができ、システム要件に従って標準の明確に定義された方法で動作します。このアプローチを機能させるには、そのような依存クラスとそのメソッドへの呼び出しを明確に定義されたインターフェースで行う必要があります。これにより、「テスター」プロセスは依存クラスのモック バージョンをテスト対象のクラスに「注入」できます。実際の製品版の... . これは、「依存性注入」または「制御の反転」(IOC) と呼ばれる一般的な設計パターンのようなものです。

この種のパターンを実装するのに役立つサードパーティ ツールがいくつか市場に出回っています。私が聞いたことのあるものは、「Rhino-Mock」またはそのようなものと呼ばれています...

編集:ロブ・ウェルズ。@チャールズ。これをありがとう。モック オブジェクトを使用して、テスト対象以外のクラスを使用して完全に置き換えることを忘れていました。

あなたがモックオブジェクトについて言及した後に私が覚えていた他のいくつかのことは、次のとおりです。

  • 含まれているクラスによって返されるエラーをシミュレートするために使用できます。
  • テスト中のクラスで例外処理をチェックするために特定の例外を発生させるために使用できます。
  • 大規模な SQL DB バックエンドなど、セットアップ コストが高い項目をシミュレートするために使用できます。
  • これらは、着信要求の内容を確認するために使用できます。

詳細については、Martin Fowler の論文「Mocks Aren't Stubs」と、Pragmatic Programmers の記事「Mock Objects」を参照してください。

于 2008-11-03T22:18:47.120 に答える
3

単体テストの多くを最初に行い、それを中心に開発を行う手法について聞いたことがあります。誰かが、これは「テスト駆動開発」であるとコメントしました - TDD (Elie に感謝します)。

しかし、これがオフショア オペレーションであり、これらのユニット テストに時間を費やしているため、より多くの費用が請求される可能性がある場合は、注意が必要です。ユニットテストの経験があり、実際に彼らが言ったとおりにやっているかどうかを検証する誰かから、セカンドオピニオンを得てください。

私の理解では、単体テストは開発プロジェクトにもう少し時間を追加しますが、もちろん品質管理を提供する可能性があります。それにもかかわらず、これは社内プロジェクトで私が望む品質管理のタイプです. これは、オフショア会社があなたに暖かいあいまいさを与えるためにそこに投げ出すものかもしれません.

于 2008-11-03T21:14:39.620 に答える
3

テストに使用するプロセスと、それをサポートするために使用されるテクノロジーには違いがあります。単体テストに使用されるさまざまなフレームワークは、一般に非常に柔軟で、コードの小さな単位、大きな単位、さらにはプロセス全体のテストにも使用できます。この柔軟性は混乱を招く可能性があります。

私の推奨事項は、採用する特定の方法論またはプロセスが何であれ、さまざまな単体テストを個別のアセンブリまたはモジュールに分離することです。正確な配置は、コードと会社の組織によって異なります。

単体テスト フレームワークを使用することの累積的な効果は、コードのテストの多くが自動化されることです。正しく採用された開発者は、完全な Q&A プロセスを経ることなく、コード コードへの変更をより適切に評価できます。Q & A プロセス自体に関しては、開発から得られるコードの品質が向上するため、時間の生産性が向上します。

すべての品質問題に対する答えではないことを理解してください。使用する他のツールと同様に便利なツールです。

于 2008-11-03T21:24:37.963 に答える
2

ウィキペディアは、単体テストとは、オブジェクト指向プログラミングの場合、クラスのメソッドとなる最小量のコードをテストすることであると示唆しているようです。

単体テストの意味をより一般的な用語で表す人もいれば、一部の統合テストを、単体がコンポーネントの混合物である単体テストと考える人もいます。

于 2008-11-03T21:15:02.583 に答える
2

http://en.wikipedia.org/wiki/Software_engineeringの一部としてhttp://en.wikipedia.org/wiki/Software_testingの従来のビューがあります。しかし、私はアジャイル ユニット テストのアイデアが好きです。プログラマーが常にテストを実行できるほど十分に高速な場合、テストはアジャイル ユニット テストです。

于 2008-11-03T21:34:32.887 に答える
2

単体テストは、完了に向けて自分自身を得ることができる最小かつ唯一の自信の一部です。オブジェクト指向アーキテクチャに実際にどのように統合するかではなく、回帰と仕様の逸脱に対するシールドを繰り返し構築することが重要です。

于 2008-11-03T21:53:12.693 に答える
1

これは、「「ユニット」とは何ですか?」という質問のほぼ繰り返しです。

「単位」は柔軟に定義できます。ドキュメントに「単位」の定義がない場合は、それを明確にする必要があります。

彼らは、ユニットをコードの大きな集合体と考えているのかもしれません。これは最も望ましい定義ではありません。

複数のテスト層 (ユニット、モジュール、パッケージ、アプリケーション) があることには同意しますが、これらの多くはユニット テスト ツールで実行できると思います。「ユニットって何?」につながる。常に出てくる質問。

単位は文脈に依存します。個々の開発者の場合、ユニットはクラスでなければなりません。モジュールやパッケージを意味することもあります。

ただし、チームの場合、その単位はパッケージまたは完全なアプリケーションの場合があります。

于 2008-11-03T21:17:59.800 に答える
0

私たちが何を考えているかは重要ですか?ここでの問題は、文書で使用されている用語に対するあなたの不満です。彼らと話し合ってみませんか?

于 2008-11-03T21:18:21.343 に答える
0

10 年前、コードで記述されたテストとして「単体テスト」が現在使用される前は、同じ呼称が手動テストに適用されていました。私は非常に形式化されたソフトウェア開発プロセスを持つソフトウェア開発会社で働いていました。コードを書く前に、「単体テスト」を書かなければなりませんでした。その時代、単体テストはテキスト ドキュメント (Word など) で記述されていました。彼らは、ユーザーがアプリを使用する際に従うべき正確な手順を説明しました. たとえば、彼らは、新しい顧客を設定するためにページに入力する正確な入力を説明しました。または、ユーザーが特定の製品を検索し、表示された情報がテスト ドキュメントと一致することを確認します。したがって、テストはテスターが従うスクリプトであり、結果も記録されました。単体テストの新しい化身が現れたとき、

于 2008-11-03T21:36:24.210 に答える
0

私もオフショアチームのグループを率いています。単体テストのセットがあるとしますが、あまり意味がありません。:) したがって、品質については、機能とテスターに​​はるかに依存しています。単体テストの継承の問題は、機能について完全な知識があり、開発者を信頼していることです。現実の世界では、それを想定するのは難しい..

于 2008-11-03T23:26:01.913 に答える