単体テストとは何ですか?

単体テストとは何ですか?

単体テスト ソフトウェア テストの一種で、ソフトウェアの個々のユニットまたはコンポーネントがテストされます。 目的は、ソフトウェア コードの各ユニットが期待どおりに動作することを検証することです。 単体テストは、開発者によるアプリケーションの開発 (コーディング段階) 中に行われます。 単体テストはコードのセクションを分離し、その正確さを検証します。 ユニットは、個々の機能、メソッド、手順、モジュール、またはオブジェクトの場合があります。

SDLC、STLC、V モデルでは、単体テストは統合テストの前に行われる第 XNUMX レベルのテストです。 単体テストは白ですBox 通常開発者によって実行されるテスト手法。 ただし、実際の世界では、時間切れや開発者がテストに消極的であるため、QA エンジニアも単体テストを行います。

ユニットテストとは

単体テストのビデオ解説

単体テストを実行する理由

単体テスト ソフトウェア開発者は最小限の単体テストを行って時間を節約しようとすることがありますが、不適切な単体テストは高コストにつながるため、これは誤解であるため、これは重要です。 欠陥 途中で固定する システムテスト, 統合テスト アプリケーションの構築後のベータテストも可能です。 開発の初期段階で適切な単体テストを実施すれば、最終的には時間とコストを節約できます。

ソフトウェア エンジニアリングにおいて単体テストを実行する主な理由は次のとおりです。

単体テストのレベル
単体テストのレベル
  1. 単体テストは、開発サイクルの早い段階でバグを修正し、コストを節約するのに役立ちます。
  2. 開発者がテスト コード ベースを理解するのに役立ち、迅速に変更を加えられるようになります。
  3. 優れた単体テストはプロジェクトのドキュメントとして機能します
  4. 単体テストはコードの再利用に役立ちます。 両方のコードを移行します テストを新しいプロジェクトに追加します。 テストが再度実行されるまでコードを調整します。

単体テストの実行方法

単体テストを実行するには、開発者はソフトウェア アプリケーションの特定の機能をテストするコードのセクションを作成します。 開発者は、この関数を分離してより厳密にテストすることもできます。これにより、テスト対象の関数と他のユニットの間の不要な依存関係が明らかになり、依存関係を排除できます。 開発者が通常使用するのは、 単体テストフレームワーク 単体テスト用の自動テスト ケースを開発します。

単体テストには XNUMX つのタイプがあります

  • マニュアル
  • 自動化

単体テストは一般的に自動化されていますが、手動で実行される場合もあります。 ソフトウェア エンジニアリングでは、どちらかが優先されるわけではありませんが、自動化が優先されます。 単体テストへの手動アプローチでは、段階的な説明文書が使用される場合があります。

自動化されたアプローチの下では、

  • 開発者は、機能をテストするためだけにアプリケーションにコードセクションを記述します。その後、アプリケーションがデプロイされるときに、テスト コードをコメント アウトして最終的に削除します。
  • 開発者は、関数を分離してより厳密にテストすることもできます。 これは、自然な環境ではなく独自のテスト環境にコードをコピー アンド ペーストする、より徹底的な単体テストの実践です。 コードを分離すると、テスト対象のコードと他のユニットまたはデータ空間の間の不要な依存関係を明らかにするのに役立ちます。 製品の中で。 これらの依存関係は削除できます。
  • コーダーは通常、UnitTest フレームワークを使用して自動テスト ケースを開発します。 開発者は自動化フレームワークを使用して、テストに基準をコード化し、コードの正しさを検証します。 テスト ケースの実行中、フレームワークは失敗したテスト ケースをログに記録します。 多くのフレームワークは、要約すると、自動的にフラグを立ててレポートします。 失敗したテストケース。 障害の重大度に応じて、フレームワークは後続のテストを停止する場合があります。
  • ユニットテストのワークフローは、1) テストケースを作成する 2) Revレビュー/再作業 3) ベースライン 4) テストケースの実行。

単体テストの手法

この 単体テストの手法 主に 3 つの部分に分類されます。ブラック ボックス テスト (ユーザー インターフェイスと入力および出力のテスト)、ホワイト ボックス テスト (ソフトウェア アプリケーションの機能動作のテスト)、グレー ボックス テスト (テスト スイート、テスト メソッド、テスト ケースの実行とリスク分析の実行に使用される) です。

単体テストで使用されるコード カバレッジ手法を以下に示します。

  • 声明の対象範囲
  • 決定事項の範囲
  • 支店のカバレッジ
  • 条件の適用範囲
  • 有限状態マシンの適用範囲

詳細については参照してください https://www.guru99.com/code-coverage.html

単体テストの例: モックオブジェクト

単体テストは、完全なアプリケーションの一部ではないコードのセクションをテストするために作成されるモック オブジェクトに依存します。 モック オブジェクトは、プログラムの不足している部分を埋めます。

たとえば、まだ作成されていない変数またはオブジェクトを必要とする関数があるとします。 単体テストでは、これらは、コードのそのセクションで実行される単体テストの目的のみを目的として作成されたモック オブジェクトの形式で考慮されます。

単体テストツール

ソフトウェア テストにおける単体テストを支援するために利用できる自動単体テスト ソフトウェアがいくつかあります。以下にいくつかの例を示します。

  1. ジュニット: Junitは無料で使用できるテストツールです。 Java プログラミング言語。テスト方法を識別するためのアサーションを提供します。このツールは最初にデータをテストし、次にコードの一部に挿入します。
  2. Nユニット: NUnit は、すべての .net 言語で広く使用されている単体テスト フレームワークです。これは、スクリプトを手動で作成できるオープンソース ツールです。並列実行できるデータ駆動型テストをサポートします。
  3. JMockitGenericName: JMockit はオープンソースの単体テスト ツールです。これは、ラインおよびパス メトリックを備えたコード カバレッジ ツールです。記録および検証構文を使用して API をモックすることができます。このツールは、ライン カバレッジ、パス カバレッジ、およびデータ カバレッジを提供します。
  4. EMMA: EMMAは、オープンソースのツールキットで、 Java 言語。Emmaはメソッド、行、基本ブロックなどのカバレッジタイプをサポートしています。 Javaベースなので外部ライブラリに依存せず、ソース コードにアクセスできます。
  5. PHPユニット: PHPUnit は、PHP プログラマー向けの単体テスト ツールです。ユニットと呼ばれるコードの小さな部分を取得し、それぞれを個別にテストします。このツールを使用すると、開発者は事前定義されたアサーション メソッドを使用して、システムが特定の方法で動作することをアサートすることもできます。

これらは、利用可能な単体テスト ツールのほんの一部です。 他にもたくさんありますが、特に C言語 と Javaただし、使用する言語に関係なく、プログラミングのニーズに合ったユニット テスト ツールが必ず見つかります。

テスト駆動開発 (TDD) と単体テスト

TDD の単体テストでは、テスト フレームワークを広範囲に使用します。 自動化された単体テストを作成するには、単体テスト フレームワークが使用されます。 単体テスト フレームワークは TDD に固有のものではありませんが、TDD にとって不可欠です。 以下では、TDD が単体テストの世界にもたらすもののいくつかを見ていきます。

  • テストはコードの前に書かれます
  • テストフレームワークに大きく依存する
  • アプリケーション内のすべてのクラスがテストされます
  • 迅速かつ簡単な統合が可能になります

単体テストの神話

神話: 時間がかかるし、いつも予定がオーバーしてしまう
私のコードは盤石です! 単体テストは必要ありません。

神話はその性質上、誤った仮定です。 これらの仮定は、次のような悪循環を引き起こします。

ユニットテストの神話

真実は、単体テストによって開発速度が向上するということです。

プログラマーは、統合テストですべてのエラーが検出されると考えており、単体テストは実行しません。 ユニットが統合されると、単体テストで簡単に発見して修正できたであろう非常に単純なエラーを追跡して修正するには非常に長い時間がかかります。

単体テストの利点

  • ユニットによって提供される機能とその使用方法を知りたい開発者は、ユニット テストを見てユニット API の基本を理解することができます。
  • ユニットテストにより、プログラマーは後日コードをリファクタリングし、モジュールが正しく動作することを確認できます(つまり、 回帰試験)。 この手順では、すべての関数とメソッドのテスト ケースを作成し、変更によって障害が発生するたびに、それをすぐに特定して修正できるようにします。
  • 単体テストはモジュール形式であるため、他の部分が完了するのを待たずにプロジェクトの一部をテストできます。

単体テストの欠点

  • 単体テストでは、プログラム内のすべてのエラーを検出することは期待できません。 最も単純なプログラムであっても、すべての実行パスを評価することは不可能です
  • 単体テストはその性質上、コードの単位に焦点を当てます。 したがって、統合エラーや広範なシステム レベルのエラーを捕捉できません。

単体テストは、他のテスト活動と組み合わせて使用​​することをお勧めします。

単体テストのベストプラクティス

  • 単体テストのケースは独立している必要があります。 要件の機能強化や変更があった場合でも、単体テスト ケースは影響を受けません。
  • 一度にテストできるコードは XNUMX つだけです。
  • 単体テストの明確で一貫した命名規則に従ってください。
  • モジュール内のコードが変更された場合は、対応するユニットがあることを確認してください。 テストケース モジュールのテストに合格し、実装を変更する前にモジュールがテストに合格する
  • 単体テスト中に特定されたバグは、SDLC の次のフェーズに進む前に修正する必要があります。
  • 「コードとしてテスト」アプローチを採用します。 テストせずに記述するコードが増えると、エラーをチェックする必要があるパスが増えます。

単体テストのベストプラクティス

まとめ

  • ユニット テストは、ソフトウェアの個々のユニットまたはコンポーネントがテストされるソフトウェア テストの一種として定義されます。
  • ご覧のとおり、ユニット テストには多くの要素が関係します。テスト対象のアプリケーション、および使用するテスト戦略、ツール、および哲学に応じて、ユニット テストは複雑になる場合もあれば、かなり単純になる場合もあります。ユニット テストは、常にある程度必要です。これは間違いありません。