code coverage tutorial
この包括的なチュートリアルでは、ソフトウェアテストのコードカバレッジとは何か、そのタイプ、利点、および欠点について説明します。
ソフトウェア開発会社の最終的な目標は、高品質のソフトウェアを開発することです。この目標を達成するには、ソフトウェアを徹底的にテストする必要があります。
したがって、テストはソフトウェアアプリケーションの開発に不可欠な部分です。したがって、開発されたソフトウェアは開発者によってレビューされ(単体テスト段階で行われます)、QCチームに渡されて徹底的にテストされ、バグが最小限またはまったくないことを確認することが不可欠です。
ソフトウェアは、テストのために実際のテストチームにリリースされる前に単体テストされます。このテストにはコードレベルでのテストが含まれるため、開発者が行います。これは、テストされるコードの各部分が期待どおりに機能することを確認するために行われます。
ここでは、開発されたコードの小さなチャンクが、それらの正確さを確認するために個別にテストされます。しかし、開発者の頭に浮かぶことが多い質問は どのくらいのユニットテストを行う必要がありますか これに対する答えはコードカバレッジにあります。
このチュートリアルでは、コードカバレッジとは何か、なぜそれが必要なのかについての深い知識を提供します。テストカバレッジとの違いを知ることができます。
また、コードカバレッジに使用されるツールと方法論についても見ていきます。このチュートリアルの終わりに向けて、メリットとデメリットを確認します。コードカバレッジに関連する神話のいくつかもここでカバーされます。
学習内容:
コードカバレッジとは
これは重要な単体テストの指標です。単体テストの有効性を知るのに役立ちます。これは、テスト中にソースコードの何パーセントが実行されるかを示す指標です。
簡単な言葉で、 ソフトウェアプログラムまたはアプリケーションのソースコードがテスト中に実行される範囲は、コードカバレッジと呼ばれるものです。
テストがすべてのブランチ、条件、またはループを含むコード全体を実行する場合、考えられるすべてのシナリオが完全にカバーされているため、コードカバレッジは100%です。これをさらによく理解するために、例を見てみましょう。
以下に示すのは、2つの数値を加算し、結果の値に応じて結果を表示するために使用される単純なコードです。
Input a, b Let c = a + b If c <10, print c Else, print ‘Sorry’
上記のプログラムは、「a」と「b」の2つの入力を受け取ります。両方の合計は変数cに格納されます。 cの値が10未満の場合は、「c」の値が出力されます。それ以外の場合は、「Sorry」が出力されます。
ここで、合計が常に10未満になるように、aとbの値を使用して上記のプログラムを検証するテストがある場合、コードのelse部分は実行されません。このようなシナリオでは、カバレッジは完全ではないと言えます。
これは、コードカバレッジの意味を明確にするためのほんの小さな例です。私たちがさらに探求するにつれて、あなたはそれをより明確にするでしょう。
コードカバレッジが必要な理由
(画像 ソース )
さまざまな理由でコードカバレッジが不可欠になり、その一部を以下に示します。
最高のデータベースソフトウェアは何ですか
- コードカバレッジが適切でないソフトウェアと比較した場合、ソフトウェアのバグが少ないことを確認するのに役立ちます。
- コード品質の向上を支援することにより、より優れた「品質」ソフトウェアの提供を間接的に支援します。
- これは、テストの有効性(コードをテストするために記述された単体テストの有効性)を知るために使用できる尺度です。
- テストされないソースコードの部分を特定するのに役立ちます。
- 現在のテスト(単体テスト)で十分かどうか、さらにいくつかのテストが必要かどうかを判断するのに役立ちます。
コードカバレッジとテストカバレッジ
コードカバレッジとテストカバレッジの違いを理解するために、最初にテストカバレッジの意味を理解しましょう。
テストカバレッジ
これは、ソフトウェアのテスト中に予想されるテストの何部分がカバーされたかの尺度です。沿って 「期待されるテスト」 特定のソフトウェアをテストするために実行されるように作成されたテストケースの完全なセットを意味します。
ソフトウェアをテストするために、合計500のテストケースのセットが作成されたとします。現在、テストアクティビティの一環として、300のテストケースのみが実行されました。これは時間の不足によるものだとしましょう。この場合、以下がテストカバレッジになります。
テストカバレッジ=(実行されたテストケース/合計テストケース)* 100
=(300/500)* 100
= 60%
これをコードカバレッジと比較してみましょう。
コードカバレッジ
これは、コードのテスト中にアプリケーションのソースコードが実行される範囲を示す指標です。したがって、ソースコードがテストされる程度を示します。
500行のコードでアプリケーションをテストすると、テストによって実行されるのは400行のコードだけです。これは、特定のループ/条件が実行されないことが原因であると想定しましょう。この場合、以下はコードカバレッジになります。
コードカバレッジ=(実行されたコードの行数/コードの合計行数)* 100
=(400/500)* 100
= 80%
以下に、コードカバレッジとテストカバレッジの違いを示します。
テストカバレッジ | コードカバレッジ |
---|---|
これは、ソフトウェアのテスト中に予想されるテストのどの程度がカバーされたかの尺度です。 | これは、コードのテスト中にアプリケーションのソースコードが実行される範囲を示す指標です。 |
テストカバレッジは、次の式を使用して計算できます。 テストカバレッジ=(実行されたテストケース/合計テストケース)* 100 | コードカバレッジは、次の式を使用して計算できます。 コードカバレッジ=(実行されたコードの行数/コードの合計行数)* 100 |
方法論
ここでは、コードカバレッジを測定するために使用できる/使用できるさまざまな方法について説明します。
これらの方法論を理解するために、以下のコードスニペットを見てみましょう。
Add (int a, int b) { If (b > a) { b = b - a Print b } If (a > b) { b = a – b Print b } Else Print ‘0’ }
ステートメントカバレッジ
この方法論は、ソースコード内のコードの実行可能なすべてのステートメントが少なくとも1回実行されたかどうかを判断する手段です。これは、ソースコードの各行が少なくとも1回はテストでカバーされていることを確認する方法です。
これは単純に聞こえるかもしれませんが、ステートメントカバレッジを測定する際には注意が必要です。その理由は、ソースコードでは、入力値によっては実行されない可能性のある特定の条件が存在する可能性があるためです。
これは、コードのすべての行がテストでカバーされないことを意味します。したがって、ソースコード内のそのようなすべての条件をカバーするために、異なる入力値セットを使用する必要がある場合があります。
例えば、 上記のソースコードで、入力値が2と3の場合、コードの「Else」部分は実行されません。ただし、入力値がタイプ3および2の場合、コードの「If」部分は実行されません。
Webサイトにコードを挿入する方法
これは、ステートメントカバレッジのいずれかの値のセットでは100%ではないことを意味します。このような場合、100%のステートメントカバレッジを確保するために、3つの((2、3)、(3、2)、(0、0))の値のセットすべてを使用してテストを実行する必要があります。
機能カバレッジ
名前が示すように、この方法論は、テスト中にソースコードに存在する関数がどの程度カバーされるかを測定します。ソースコードにあるすべての関数は、テストの実行中にテストされます。繰り返しますが、関数が徹底的にテストされるように、さまざまな値についてこれらの関数をテストすることを確認する必要があります。
ソースコードには複数の関数が存在する場合があり、使用される入力値に応じて、関数が呼び出される場合と呼び出されない場合があります。したがって、関数カバレッジの目的は、各関数が確実に要求されるようにすることです。
例えば、 上記のソースコードで、テストで「追加」関数が1回でも呼び出された場合、これを完全な関数カバレッジと呼びます。
条件カバレッジ
ソースコードでは、条件がある場合は常に、結果はtrueまたはfalseのブール値になります。条件カバレッジは、テストが両方の値、つまりtrue、falseをカバーするかどうかを確認することを目的としています。
ソースコードでは、発生する各条件が真と偽の両方の状態について評価されると、コードの条件カバレッジは完了したと言われます。
例えば、 上記のコードで、値セット(2、3)および(4、2)が使用されている場合、条件カバレッジは100%になります。データセット(2、3)を使用すると、(b> a)はtrueと評価され、(a> b)はfalseと評価されます。同様に、データセット(4、2)を使用すると、(b> a)はfalseと評価され、(a> b)はtrueと評価されます。
したがって、両方の条件に両方の値があります。つまり、trueとfalseがカバーされます。したがって、条件カバレッジは100%になります。
ブランチカバレッジ
この方法論は、各条件構造に現れるすべてのブランチがソースコードで実行されるようにすることを目的としています。たとえば、上記のコードでは、すべての「If」ステートメントとそれに付随する「Else」ステートメントはすべて、100%ブランチカバレッジのテストでカバーされている必要があります。
例えば、 上記のコードで、値セット(2、3)、(4、2)、(1、1)が使用されている場合、ブランチカバレッジは100%になります。データセット(2、3)が使用されると、(b> a)と最初の「If」ブランチが実行されます。同様に、データセット(4、2)が使用されると、(a> b)はtrueと評価され、2番目の「If」ブランチが実行されます。
次に、データセット(1、1)を使用して、「Else」ブランチがtrueと評価され、実行されます。これにより、100%のブランチカバレッジが保証されます。
ブランチカバレッジとコンディションカバレッジ
ブランチカバレッジはコンディションカバレッジと混同されることがよくありますが、2つは異なります。
簡単な例でこれを理解しましょう。
If (a >0) & (b >0) Then Print “Hello” Else Print “Bye”
完了するために必要なデータセットを書き留めましょう ブランチカバレッジ:
(1、1)–この場合、「a」と「b」の両方が真であるため、If条件が実行されます。
(1、0)–この場合、「a」は真で「b」は偽になるため、コードのElse部分が実行されます。
ブランチカバレッジの目的は、すべてのブランチを少なくとも1回実行することであり、この目的は達成されます。
条件カバレッジ:
(1、0)–この場合、「a」は真であり、「b」は偽です。
(0、1)–この場合、「a」は偽であり、「b」は真になります。
条件カバレッジの目的は、実行されるすべての条件についてtrueとfalseのそれぞれを取得することであり、この目的はここで達成されます。
条件カバレッジでelse部分が実行されないことに気づきましたか?これは、条件カバレッジがブランチカバレッジと異なるところです。
コードカバレッジのためのツール
ソフトウェアのコードカバレッジを測定するために、市場にはいくつかのツールがあります。
以下に、参照用のツールの一部を示します。
- Parasoft JTest
- テストウェルCTC ++
- カバレッジ
- JaCoCo
- CodeCover
- BullseyeCoverage
- EMMA
- OpenCover
- NCover
- スキッシュCOCO
- CoverageMeter
- GCT
- TCAT C / C ++
- グレーテル
- JCov
推奨読書=> コードカバレッジツール
上記のリンクには、これらのツールに関する次の情報が含まれています。
- 主な機能
- 免許の種類
- 公式URL
- 長所と短所
- 最新バージョン
利点
上で見たように、それは以下の理由で非常に有用なテストメトリクスです:
- これは、テストされない/テストによってカバーされないままになるソースコード内の領域を特定するのに役立ちます。
- 使用済み/デッドコードを識別してコード品質を向上させるのに便利です。
- ユニットテストの有効性は、コードカバレッジの助けを借りて知ることができます。
- これらのメトリックを使用して、より高品質のソフトウェアを提供できます。
欠点
- 100%のコードカバレッジを目指しようとすると、テストの堅牢性が失われ、欠陥が発生しやすいシナリオのキャプチャを見逃してしまうことがあります。
- 一般的な認識とは異なり、設計されたソフトウェアがすべての要件に対応しているかどうかを保証することはできません。
神話対事実
神話 | 事実 |
---|---|
100%のコードカバレッジを持つことで、ソフトウェアにバグがないことが保証されます。 | いいえ、100%のコードカバレッジはバグのないソフトウェアを保証することはできません。 QCチームによる優れた努力と相まって、優れたコードカバレッジにより、バグが最小限またはまったくないソフトウェアを保証できます。 |
100%のコードカバレッジがあるということは、書かれたコードが完璧であることを意味します。 | いいえ、実際のところ、重要な要件が最初からコードによってキャプチャされていない場合、コードカバレッジが100%であるにもかかわらず、コードは完全であるとは言えません。 |
コードカバレッジは、ソフトウェア製品で実行されたテストの有効性を測定します。 | いいえ、コードカバレッジは、単体テスト、つまりソフトウェアのソースコードでのみ実行されるテストの有効性をテストするために使用される単なる尺度です。 |
FAQの
Q#1)許容できるコードカバレッジとは何ですか?
回答: ソフトウェアコードの単体テストでは、100%のコードカバレッジを達成することを目標にするべきではありません。しかし、なぜですか?理由を理解するには、根本的な意味を理解するためにもう少し深く掘り下げる必要があるかもしれません。
100%のカバレッジをターゲットにすると、テストの設計におけるすべての焦点が、各ステートメント、ループ、ブランチ、または条件がテストされるかどうかを確認することに集中することがよくあります。ですから、私たちは、費やした時間を考慮する価値がないかもしれないあまりにも多くの努力をすることになります。
さらに、高いカバレッジに焦点を合わせると、コードの各行を確実にテストすることだけを目的としているため、欠陥が発生する可能性のある重要なシナリオを見逃してしまいます。
高いコードカバレッジに焦点を当てることは常にそれほど重要ではなく、さまざまなコードをテストするための固定数にすることもできません。ただし、一般に、75%〜80%のカバレッジが理想的な数値です。
コードをテストする際の主な焦点は、重大でエラーが発生しやすいシナリオを確実にカバーすることにあるはずです。これらを見逃した場合、100%のコードカバレッジがあるにもかかわらず、私たちのテストは単にテストの有効性が低くなります。
Q#2) コードカバレッジを確認するにはどうすればよいですか?
回答: コードをテストするために設計されたテストによって達成された可能性のあるコードカバレッジの割合をテストするために、市場にはいくつかのツールがあります。使用しているプログラミング言語に応じて、さまざまなツールがあります。
それらのいくつかを以下に示します。
- Java -カバレッジ、JaCoCo
- Javascript – Blanket.js、イスタンブール
- Python --Coverage.py
- ルビー -SimpleCov
これらのツールを使用すると、テストの完全なカバレッジレポートを取得できます。これは、コードのどの部分が実行され、どの部分がテストで見逃されるかを知るのに役立ちます。
Q#3) コードカバレッジは良い指標ですか?
回答: 実際のシナリオでは、これはある程度、特定の方法で役立ちます。
最初にその制限を見ると、100%のカバレッジがあるからといって、コードにバグがないことは保証されません。また、100%のコードカバレッジにもかかわらず、すべての要件がコードでカバーされていることも保証されません。コードにバグがある可能性が非常に高いです。その理由は、カバレッジによってすべてのシナリオがテストされているとは限らないためです。
さらに、コードの記述中に要件がスキップされた場合、コードカバレッジの一部として処理されるコードとの要件のマッピングはありません。
そうは言っても、コードカバレッジをメトリックとして使用すると、コードの各行をテストするための基本的な要件をカバーしたかどうかがわかります。このカバレッジパーセンテージは、コードのいくつの部分が単体テストで実行されているかを示します。
Windows10で.torrentファイルを開く方法
コードのどれだけが実行されないかがわかります。これは、次に、必要な単体テストの量とコードのどの部分を決定するのに役立ちます。
したがって、カバレッジが不十分であると、単体テストの非効率性がわかると結論付けることができます。同時に、100%のカバレッジを保証することは、欠陥のないコードを保証するものではありません。したがって、高いコードカバレッジ率をターゲットにすることの重要性を強調しすぎないバランスの取れたアプローチが必要です。
Q#4) コードカバレッジを改善するにはどうすればよいですか?
回答: JaCoCo、イスタンブールなどのカバレッジツールによって提供されるコードカバレッジレポートには、テストの対象となる領域と、テストされない領域が表示されます。
コードのテストされていない部分を知ることにより、手動で、または自動化ツールを使用してテストを記述し、テストされない領域をカバーして、コードカバレッジを増やすことができます。
ここで注意すべき重要なことは、コード内の関数をテストするために数百行のコードを記述しても、カバレッジが非常に少ない可能性があることです。その理由は、巨大なコードの一部をテストするには深すぎると、コードカバレッジを増やすのに役立たないためです。
したがって、ターゲットがカバレッジを増やすことである場合、単一の関数を深く掘り下げてその単一の関数の大規模なテストを作成するのではなく、すべての関数、条件、およびループをカバーするように注意する必要があります。
結論
高品質のソフトウェア製品は、今日のペースの速いインターネットの世界で必要とされているものです。
高品質のソフトウェアを保証することは、QAエンジニアの責任であるだけでなく、開発者の責任でもあります。したがって、コードカバレッジは、開発者がQAチームに高品質の製品を提供する場合に非常に役立ちます。
このチュートリアルでは、コードカバレッジとその使用法についてすべて説明しました。また、コードカバレッジとテストカバレッジの違いをもう少し深く理解しました。これに加えて、さまざまなコードカバレッジツールとともに使用される方法論について理解しました。
ここでは、メリットとデメリットについて説明しました。最後に、コードカバレッジに関連するいくつかの神話とFAQを無効にしました
幸せな読書!!