単体テストでどこまでしっかりテストするか?というのは、いつも議論になることです。考え方として「命令網羅(処理網羅)」の観点でテストするか「分岐網羅」の観点でテストするか「条件網羅」の観点でテストするかという3つがあります。テスト方針はよく、C0,C1,C2といった記号で表されるですが、C0は「命令網羅」C1は「分岐網羅」C2は「条件網羅」になります。この3つの考え方の違いについて説明します。説明するためのネタとして、以下のようなプログラムを考えましょう。週末の過ごし方を決定するプログラムです。天気が「晴れ」なら夢の国に行きますパレードがある場合はパレードを見るし、パレードがない場合は乗り物にのって遊びます。夕食はストランが空いていればレストランで食事を、もし空いていなかったら家で食事をします。文字色が赤文字になっているところが実際に行う可能性があることを意味しています。]これをそれぞれざっくり説明するとこんな感じになります。命令網羅:赤文字の処理を全て最低1回はテストする分岐網羅:全ての赤文字の処理を通るパターンをテストする条件網羅:黄色背景の条件に着目して、あり得る条件を全てテストする命令網羅(C0)「命令網羅」の観点でテストをするには、赤文字の処理を全て最低1回はテストすればOKです。1.晴れでパレードあり、レストランが空いている2.晴れでパレードなし、レストランが空いていない3.雨この3パターンでテストをすれば、命令網羅の観点でのテストは完了です。分岐網羅(C1)「分岐網羅」の観点でテストをするには、全ての赤文字の処理を通るパターンをテストすればOKです。1.晴れでパレードあり、レストランが空いている2.晴れでパレードあり、レストランが空いていない3.晴れでパレードなし、レストランが空いている4.晴れでパレードなし、レストランが空いていない5.雨この5パターンでテストをすれば、分岐網羅の観点でのテストは完了です。条件網羅(C2)「条件網羅」の観点でテストをするには、黄色背景の条件に着目して、あり得る全ての条件をテストすればOKです。噛み砕いて言うと、まずあり得る条件を全て洗い出して、その洗い出した条件を少なくとも1回は登場させてテストする、ということになります。条件2[パレード]:あり・なし条件3[レストランの空き]:あり・なしですので、1.晴れでパレードあり、レストランが空いている2.晴れでパレードなし、レストランが空いていない3.曇り4.雨この4パターンでテストをすれば、条件網羅の観点でのテストは完了です。分岐網羅の観点でテストをしたら「曇り」のパターンのテストができていません。条件網羅の観点でテストをしたら「パレードあり」かつ「レストランが空いていない」のパターンのテストができていません。与えられた工数の中でテストをしないといけませんので、そこはテスト方針を定めたうえで、行うしかないのです。分岐網羅も条件網羅もどちらも完全にすることは難しいことが多いです。少なくとも命令網羅はカバーしたうえで、後はどこまでしっかりテストをするのか、テスターとレビュアーの間(レビュアーがいない場合は各テスター間)で認識を合わせたうえでテストを行うのが現実的ですね。単体テストは個人的にはシステム開発の中では最も重要な工程の中で最も面倒くさい工程だと思っています💦💦ここの手法をしっかり理解して自分の中に落とし込むことが出来ていればシステムエンジニアとしてはどこに言っても通用できる人材になります。私としてもかなり色々学習してきましたが、一番役に立っているのが「経験ゼロでもできるプログラミング現場の単体テスト」という本です。→経験ゼロでもできるプログラミング現場の単体テスト是非一度読んでみてください。内容は論理的過ぎず、具体的なテストのイメージが湧きやすいです。JUnitなどのテストツールの説明も細かくされているので、個人的にはこれだけ読んでおけばよかった感があります。早くこれに出会っていればよかった。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。【演繹法と帰納法】物事を証明するには2種類の方法しかない【PowerShellでやさしいプログラミング】第8回:練習問題集RECOMMENDこちらの記事も人気です。