コード カバレッジ チュートリアル: 分岐、ステートメント、および意思決定のテスト

コードカバレッジとは?

コードカバレッジは、プログラムのソースコードがどの程度テストされたかを示す尺度です。 それは白の一つの形です box 一連のテスト ケースによって実行されていないプログラムの領域を見つけるテスト。 また、カバレッジを高め、コード カバレッジの定量的尺度を決定するためのいくつかのテスト ケースも作成します。

ほとんどの場合、コード カバレッジ システムは実行中のプログラムに関する情報を収集します。 また、それをソース コード情報と組み合わせて、テスト スイートのコード カバレッジに関するレポートを生成します。

コードカバレッジテストを使用する理由は何ですか?

コード カバレッジを使用する主な理由をいくつか示します。

  • テスト実装の効率を測定するのに役立ちます
  • 定量的な測定を提供します。
  • ソースコードがどの程度テストされたかを定義します。

コードカバレッジ方法

Following 主要なコードカバレッジ手法です

  • 声明の対象範囲
  • 決定事項の範囲
  • 支店のカバレッジ
  • カバレッジの切り替え
  • FSMの適用範囲

声明の対象範囲

声明の対象範囲 白です box ソース コード内のすべての実行可能ステートメントを少なくとも XNUMX 回実行するテスト手法。 ソースコード内の実行されたステートメントの数を計算するために使用されます。 ステートメント カバレッジの主な目的は、ソース コード内のすべての可能なパス、行、ステートメントをカバーすることです。

ステートメント カバレッジは、テスト対象のコードの構造に基づいてシナリオを導き出すために使用されます。

In ホワイト Box テスト、テスターはソフトウェアがどのように動作するかに集中しています。 言い換えれば、テスターは制御フロー グラフやフローチャートに関するソース コードの内部動作に集中することになります。

一般に、どのようなソフトウェアでも、ソース コードを見ると、演算子、関数、ループ、例外ハンドラーなどのさまざまな要素が存在します。プログラムへの入力に基づいて、一部のコード ステートメントが実行されない場合があります。 。 ステートメント カバレッジの目標は、コード内のすべての可能なパス、行、およびステートメントをカバーすることです。

ステートメント カバレッジの計算方法を例に挙げてこれを理解しましょう。

指定されたソース コードのステートメント カバレッジを計算するシナリオ。 ここでは XNUMX つの異なるシナリオを取り上げ、各シナリオのステートメント カバレッジの割合を確認します。

ソースコード:

Prints (int a, int b) {                       ------------  Printsum is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

シナリオ1:


A = 3、B = 9 の場合

黄色でマークされたステートメントは、シナリオに従って実行されるステートメントです。

実行されたステートメントの数 = 5、ステートメントの合計数 = 7

ステートメントのカバレッジ: 5/7 = 71%

いいねwise シナリオ 2 を見てみましょう。

シナリオ2:

A = -3、B = -9 の場合

黄色でマークされたステートメントは、シナリオに従って実行されるステートメントです。

実行されたステートメントの数 = 6

ステートメントの合計数 = 7

ステートメントのカバレッジ: 6/7 = 85%

しかし、全体的に見ると、すべてのステートメントが両方のシナリオでカバーされています。 したがって、ステートメント全体のカバレッジは 100% であると結論付けることができます。

ステートメント補償の対象となるものは何ですか?

  1. 未使用のステートメント
  2. デッドコード
  3. 未使用のブランチ
  4. 欠落しているステートメント

意思決定カバレッジテスト

決定事項の範囲 白です box ソース コードの各ブール式の真または偽の結果を報告するテスト手法。 意思決定カバレッジ テストの目標は、考えられるすべての意思決定ポイントの各ブランチが少なくとも XNUMX 回実行されることを確認して確認することにより、アクセス可能なすべてのソース コードをカバーして検証することです。

この取材では、表現が複雑になる場合があります。 したがって、100% のカバー率を達成することは非常に困難です。 このため、この指標を報告するにはさまざまな方法が存在します。 これらの方法はすべて、最も重要な組み合わせをカバーすることに重点を置いています。 これは意思決定カバレッジと非常によく似ていますが、制御フローに対する感度が向上します。

意思決定カバレッジの例

以下を検討してくださいwing コード-

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }

シナリオ1:

aの値は2です

黄色で強調表示されたコードが実行されます。 ここでは、If (a>5) の決定結果「いいえ」がチェックされています。

決定カバレッジ = 50%

シナリオ2:

aの値は6です

黄色で強調表示されたコードが実行されます。 ここでは、If (a>5) の決定の「はい」の結果がチェックされています。

決定カバレッジ = 50%

テストケース Aの値 出力 決定事項の範囲
1 2 2 50%
2 6 18 50%

ブランチカバレッジテスト

支店のカバレッジ 白です box コード モジュール (ステートメントまたはループ) からのすべての結果をテストするテスト方法。 分岐カバレッジの目的は、すべての分岐からの各決定条件が少なくとも XNUMX 回実行されることを保証することです。 これは、独立したコード セグメントの部分を測定し、分岐のないセクションを見つけるのに役立ちます。

たとえば、結果がバイナリの場合、True と False の両方の結果をテストする必要があります。

ブランチカバレッジを計算する式は次のとおりです。

支店のカバー範囲の例

ブランチカバレッジを学ぶために、前に使用したのと同じ例を考えてみましょう。

以下を検討してくださいwing コード-

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }                                       

ブランチカバレッジは無条件ブランチも考慮します

テストケース Aの値 出力 決定事項の範囲 支店のカバレッジ
1 2 2 50% 33%
2 6 18 50% 67%

ブランチカバレッジの利点:

ブランチカバレッジテストは次のことを提供しますwing 利点:

  • コード内のすべての分岐を検証できます。
  • 分岐がプログラム動作の異常につながることがないようにするのに役立ちます。
  • ブランチ カバレッジ メソッドにより、ステートメント カバレッジ テストによって発生する問題が解消されます。
  • 他のテスト方法ではテストされていない領域を見つけることができます
  • コードカバレッジの定量的な尺度を見つけることができます。
  • ブランチカバレッジはブール式内のブランチを無視します

条件カバレッジテスト

条件の適用範囲 または式カバレッジは、条件文内の変数または部分式をテストおよび評価するために使用されるテスト方法です。 条件カバレッジの目的は、各論理条件の個々の結果を確認することです。 条件カバレッジは、決定カバレッジよりも制御フローに対する感度が高くなります。 この範囲では、論理オペランドを含む式のみが考慮されます。

たとえば、式に AND、OR、XOR などのブール演算が含まれている場合、これは可能性の合計を示します。

条件の適用範囲は、決定の完全な適用範囲を保証するものではありません。

条件カバレッジを計算する式は次のとおりです。

例:

上の式には 4 つの組み合わせが考えられます

  • TT
  • FF
  • TF
  • FT

以下を検討してくださいwing

X = 3

Y = 4

(バツ TRUE 条件カバレッジは 25/XNUMX = XNUMX% です
= 3

B = 4

(a>b) 間違った情報

有限状態マシンの適用範囲

有限状態マシンのカバレッジは間違いなく最も優れています。plex コードカバレッジ方式の種類。 これはデザインの動作に影響を与えるためです。 このカバレッジ方法では、時間ごとに訪問または通過した州の数を調べる必要があります。 また、有限状態マシンに含まれるシーケンスの数もチェックします。

どのタイプのコード カバレッジを選択するか

確かにこれは最も難しい答えです。 カバレッジ方法を選択するには、テスターは次のことを確認する必要があります。

  • テスト対象のコードに XNUMX つまたは複数の未発見の欠陥がある
  • 潜在的なペナルティのコスト
  • 失われた評判の代償
  • 販売損失などの費用

欠陥がコストのかかる生産障害を引き起こす可能性が高いほど、選択する必要がある補償範囲のレベルはより厳しくなります。

コードカバレッジと機能カバレッジ

コードカバレッジ 機能範囲
コード カバレッジは、ソース コードがテストベンチによってどの程度適切に実行されたかを示します。 機能カバレッジは、設計の機能がテストベンチによってどの程度カバーされているかを測定します。
設計仕様書は決して使用しないでください 設計仕様を使用する
開発者によって行われました テスターに​​よる作業

コードカバレッジツール

以下は、重要なコード カバレッジ ツールのリストです。

ツール名 Description
カバレッジ オープンソースのコードカバレッジツールです。 コード ベースをインストルメント化することでテスト カバレッジを測定し、テスト スイートの実行時にコードのどの行が実行され、どの行が実行されないかを分析します。
クローバー また、Clover は、以前のビルド以降に変更されたアプリケーション コードをカバーするテストのみを実行することで、テスト時間を短縮します。
デベロッパーパートナー DevPartner により、開発者は Java コードを分析してコード品質と Communication を実現できます。plexity。
エマ EMMA は、クラス、メソッド、行、およびベース ブロックのカバレッジ、集約されたソース ファイル、クラス、およびメソッドのレベルをサポートします。
カリスティック Kalistick は、さまざまな観点からコードを分析するサードパーティ アプリケーションです。
CoView と CoAnt コーディング ソフトウェアは、メトリクス、モック オブジェクトの作成、コードのテスト容易性、パスとブランチ カバレッジなどのためのコード カバレッジ ツールです。
C++ のブルズアイ BulseyeCoverage は、次のコード カバレッジ ツールです。 C + + およびC.
ソナー Sonar は、コード品質の管理に役立つオープン コード カバレッジ ツールです。

コードカバレッジを使用するメリットとデメリット

コードカバレッジの利点 コードカバレッジの欠点
コードカバレッジの定量的尺度を評価するのに役立ちます 特定の機能が設計に実装されていない場合でも、コード カバレッジは 100% カバレッジを報告します。
追加のテスト ケースを作成してカバレッジを増やすことができます コードカバレッジを利用して機能の考えられるすべての値をテストしたかどうかを判断することはできません
これにより、一連のテスト ケースによって実行されていないプログラムの領域を見つけることができます。 また、コード カバレッジでは、ロジックがどの程度、どの程度うまくカバーされているかがわかりません。
指定された関数が実装されていない場合、または仕様に含まれていない場合、構造ベースの手法ではその問題を見つけることができません。

まとめ

  • コードカバレッジとは、プログラムのソースコードがどの程度テストされているかを示す尺度です。
  • テスト実装の効率を測定するのに役立ちます
  • 1 つのコード カバレッジ メソッドは、2.) ステートメント カバレッジ 3.) 条件カバレッジ 4) 分岐カバレッジ 5) トグル カバレッジ XNUMX) FSM カバレッジ
  • ステートメント カバレッジには、ソース コード内のすべての実行可能ステートメントを少なくとも XNUMX 回実行することが含まれます。
  • 意思決定カバレッジは、各ブール式の真または偽の結果をレポートします。
  • ブランチ カバレッジでは、コード モジュールからのすべての結果がテストされます
  • 条件は、条件ステートメント内の変数または部分式がどのように評価されるかを明らかにします。
  • 有限状態マシンのカバレッジは間違いなく最も優れています。plex コードカバレッジ方式の種類
  • 補償方法を選択するために、テスターは潜在的なペナルティ、評判の損失、販売損失などのコストを確認する必要があります。
  • コード カバレッジは、ソース コードがテストベンチでどの程度実行されているかを示します。一方、機能カバレッジは、設計の機能がどの程度カバーされているかを測定します。
  • Cobertura、JTest、Clover、Emma、Kalistick は数少ない重要なコード カバレッジ ツールです
  • コード カバレッジを使用すると、追加のテスト ケースを作成してカバレッジを増やすことができます
  • コード カバレッジは、機能のすべての考えられる値をテストしたかどうかを判断するのには役立ちません