コード カバレッジ チュートリアル: 分岐、ステートメント、および意思決定のテスト
コードカバレッジとは?
コード カバレッジは、プログラムのソース コードがどの程度テストされているかを表す尺度です。これは、一連のテスト ケースで実行されていないプログラムの領域を見つけるホワイト ボックス テストの 1 つの形式です。また、カバレッジを拡大し、コード カバレッジの定量的な尺度を決定するために、いくつかのテスト ケースを作成します。
ほとんどの場合、コード カバレッジ システムは実行中のプログラムに関する情報を収集します。 また、それをソース コード情報と組み合わせて、テスト スイートのコード カバレッジに関するレポートを生成します。
コードカバレッジテストを使用する理由は何ですか?
コード カバレッジを使用する主な理由をいくつか示します。
- テスト実装の効率を測定するのに役立ちます
- 定量的な測定を提供します。
- ソースコードがどの程度テストされたかを定義します。
コードカバレッジ方法
主なコードカバレッジ手法は以下のとおりです。
- 声明の対象範囲
- 決定事項の範囲
- 支店のカバレッジ
- Toggle 適用範囲
- FSMの適用範囲
声明の対象範囲
声明の対象範囲 ソース コード内のすべての実行可能ステートメントが少なくとも 1 回実行されるホワイト ボックス テスト手法です。ソース コード内で実行されたステートメントの数を計算するために使用されます。ステートメント カバレッジの主な目的は、ソース コード内のすべての可能なパス、行、およびステートメントをカバーすることです。
ステートメント カバレッジは、テスト対象のコードの構造に基づいてシナリオを導き出すために使用されます。
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%
同様にシナリオ2を見てみましょう。
シナリオ2:
A = -3、B = -9 の場合
黄色でマークされたステートメントは、シナリオに従って実行されるステートメントです。
実行されたステートメントの数 = 6
ステートメントの合計数 = 7
ステートメントのカバレッジ: 6/7 = 85%
しかし、全体的に見ると、すべてのステートメントが両方のシナリオでカバーされています。 したがって、ステートメント全体のカバレッジは 100% であると結論付けることができます。
ステートメント補償の対象となるものは何ですか?
- 未使用のステートメント
- デッドコード
- 未使用のブランチ
- 欠落しているステートメント
意思決定カバレッジテスト
決定事項の範囲 ソース コードの各ブール式の真偽の結果を報告するホワイト ボックス テスト手法です。決定カバレッジ テストの目的は、すべての可能な決定ポイントの各ブランチが少なくとも 1 回実行されることを確認して確認することにより、アクセス可能なすべてのソース コードをカバーして検証することです。
このカバレッジ タイプでは、式が複雑になり、100% のカバレッジを達成することが困難になることがあります。このため、このメトリックを報告するためにさまざまな方法が使用されます。これらの方法は、最も重要な組み合わせを優先します。これは決定カバレッジに似ていますが、制御フローに対する感度が高くなります。
意思決定カバレッジの例
次のコードを考えてみましょう。
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% |
ブランチカバレッジテスト
支店のカバレッジ コード モジュール (ステートメントまたはループ) からのすべての結果をテストするホワイト ボックス テスト方法です。分岐カバレッジの目的は、すべての分岐からの各決定条件が少なくとも 1 回実行されるようにすることです。独立したコード セグメントの割合を測定し、分岐のないセクションを見つけるのに役立ちます。
たとえば、結果がバイナリの場合、True と False の両方の結果をテストする必要があります。
ブランチカバレッジを計算する式は次のとおりです。
支店のカバー範囲の例
ブランチカバレッジを学ぶために、前に使用したのと同じ例を考えてみましょう。
次のコードを考えてみましょう。
Demo(int a) { If (a> 5) a=a*3 Print (a) }
ブランチカバレッジは無条件ブランチも考慮します
テストケース | Aの値 | 出力 | 決定事項の範囲 | 支店のカバレッジ |
---|---|---|---|---|
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
ブランチカバレッジの利点:
ブランチ カバレッジ テストには次の利点があります。
- コード内のすべての分岐を検証できます。
- 分岐がプログラムの動作に異常をもたらさないようにするのに役立ちます
- ブランチ カバレッジ メソッドにより、ステートメント カバレッジ テストによって発生する問題が解消されます。
- 他のテスト方法ではテストされていない領域を見つけることができます
- コードカバレッジの定量的な尺度を見つけることができます。
- ブランチカバレッジはブール式内のブランチを無視します
条件カバレッジテスト
条件の適用範囲 または式カバレッジは、条件文の変数または部分式をテストおよび評価するために使用されるテスト方法です。条件カバレッジの目的は、各論理条件の個々の結果を確認することです。条件カバレッジは、決定カバレッジよりも制御フローに対する感度が優れています。このカバレッジでは、論理オペランドを持つ式のみが考慮されます。
たとえば、式に AND、OR、XOR などのブール演算が含まれている場合、これはすべての可能性を示します。
条件の適用範囲は、決定の完全な適用範囲を保証するものではありません。
条件カバレッジを計算する式は次のとおりです。
例:
上の式には 4 つの組み合わせが考えられます
- TT
- FF
- TF
- FT
次の入力を考えてみましょう
X = 3
Y = 4 |
(バツ | TRUE | 条件カバレッジは 25/XNUMX = XNUMX% です |
= 3
B = 4 |
(a>b) | 間違った情報 |
有限状態マシンの適用範囲
有限ステート マシン カバレッジは、間違いなく最も複雑なタイプのコード カバレッジ メソッドです。これは、設計の動作に基づいて動作するためです。このカバレッジ メソッドでは、時間固有の状態がいくつ訪問され、遷移されたかを調べる必要があります。また、有限ステート マシンに含まれるシーケンスの数もチェックします。
どのタイプのコード カバレッジを選択するか
確かにこれは最も難しい答えです。 カバレッジ方法を選択するには、テスターは次のことを確認する必要があります。
- テスト対象のコードに XNUMX つまたは複数の未発見の欠陥がある
- 潜在的なペナルティのコスト
- 失われた評判の代償
- 販売損失などの費用
欠陥がコストのかかる生産障害を引き起こす可能性が高いほど、選択する必要がある補償範囲のレベルはより厳しくなります。
コードカバレッジと機能カバレッジ
コードカバレッジ | 機能範囲 |
---|---|
コード カバレッジは、ソース コードがテストベンチによってどの程度適切に実行されたかを示します。 | 機能カバレッジは、設計の機能がテストベンチによってどの程度カバーされているかを測定します。 |
設計仕様書は決して使用しないでください | 設計仕様を使用する |
開発者によって行われました | テスターによる作業 |
コードカバレッジツール
以下は、重要なコード カバレッジ ツールのリストです。
ツール名 | 説明 |
---|---|
Cobertura | オープンソースのコードカバレッジツールです。 コード ベースをインストルメント化することでテスト カバレッジを測定し、テスト スイートの実行時にコードのどの行が実行され、どの行が実行されないかを分析します。 |
クローバー | Clover は、前回のビルド以降に変更されたアプリケーション コードをカバーするテストのみを実行することで、テスト時間も短縮します。 |
デベロッパーパートナー | DevPartnerを使用すると、開発者は Java コードの品質と複雑さに関するコード。 |
エマ | EMMA は、クラス、メソッド、行、およびベース ブロックのカバレッジ、集約されたソース ファイル、クラス、およびメソッドのレベルをサポートします。 |
カリスティック | Kalistick は、さまざまな観点からコードを分析するサードパーティ アプリケーションです。 |
CoView と CoAnt | コーディング ソフトウェアは、メトリクス、モック オブジェクトの作成、コードのテスト容易性、パスとブランチ カバレッジなどのためのコード カバレッジ ツールです。 |
ブルズアイ C++ | BulseyeCoverage は、次のコード カバレッジ ツールです。 C++ およびC. |
ソナー | Sonar は、コード品質の管理に役立つオープン コード カバレッジ ツールです。 |
コードカバレッジを使用するメリットとデメリット
コードカバレッジの利点 | コードカバレッジの欠点 |
---|---|
コードカバレッジの定量的尺度を評価するのに役立ちます | 特定の機能が設計に実装されていない場合でも、コード カバレッジは 100% カバレッジを報告します。 |
追加のテスト ケースを作成してカバレッジを増やすことができます | コードカバレッジを利用して機能の考えられるすべての値をテストしたかどうかを判断することはできません |
これにより、一連のテスト ケースによって実行されていないプログラムの領域を見つけることができます。 | また、コード カバレッジでは、ロジックがどの程度、どの程度うまくカバーされているかがわかりません。 |
指定された関数が実装されていない場合、または仕様に含まれていない場合、構造ベースの手法ではその問題を見つけることができません。 |
製品概要
- コードカバレッジとは、プログラムのソースコードがどの程度テストされているかを示す尺度です。
- テスト実装の効率を測定するのに役立ちます
- コード カバレッジの 1 つの方法は、2.) ステートメント カバレッジ 3.) コンディション カバレッジ 4) ブランチ カバレッジ XNUMX) です。 Toggle 適用範囲 5) FSM 適用範囲
- ステートメント カバレッジには、ソース コード内のすべての実行可能ステートメントを少なくとも XNUMX 回実行することが含まれます。
- 意思決定カバレッジは、各ブール式の真または偽の結果をレポートします。
- ブランチ カバレッジでは、コード モジュールからのすべての結果がテストされます
- 条件は、条件ステートメント内の変数または部分式がどのように評価されるかを明らかにします。
- 有限ステートマシンカバレッジは、確かに最も複雑なタイプのコードカバレッジ手法です。
- 補償方法を選択するために、テスターは潜在的なペナルティ、評判の損失、販売損失などのコストを確認する必要があります。
- コード カバレッジは、ソース コードがテストベンチでどの程度実行されているかを示します。一方、機能カバレッジは、設計の機能がどの程度カバーされているかを測定します。
- Cobertura、JTest、Clover、Emma、Kalistickは重要なコードカバレッジツールの一部です。
- コード カバレッジを使用すると、追加のテスト ケースを作成してカバレッジを増やすことができます
- コード カバレッジは、機能のすべての考えられる値をテストしたかどうかを判断するのには役立ちません