単体テストの考え方・使い方 #2 網羅率について

 今回は網羅率のお話しです。


網羅率とは

文字通りテストコードがどれだけシステムを網羅できているかを把握するための指標です。
その中でもさらに2種類の網羅率があります。


コード網羅率

テストで実行される対象のコードのどれくらいを網羅しているかを表します。
式にすると以下のような感じ。

網羅率=実行されたコード行数 / 総行数

どのように実行したかなどは関係なく、シンプルに実行された行数が網羅されているのかを見ている。


// 10以上の長さの文字列ならtrueを返す
function isStringLengthAtLeastTen(str) {
    if (str.length >= 10) {
        return true;
    } 
    else {
        return false;
    }
}

// Test
const isStringLengthAtLeastTen = require('./isStringLengthAtLeastTen');

test('文字列の長さが10以上であればtrueを返す', () => {
    expect(isStringLengthAtLeastTen('abcdefghij')).toBe(true); // 10文字
});

以上のようなコードのテストの網羅率はelse部分が実行されていないので
5(実行された行数) / 8(総行数) = 0.625 = 62.5%
となります。

行数しか見ていないのでこれだけを指標にテストを評価するのは何とも言えない感じはしますねー。

分岐網羅率

これは条件分岐に注目した指標です。
式は以下の通り。

網羅率=経由された経路の数 / 分岐経路の総数

さっきと同じコードで計算してみると

1(経由された数) / 2(分岐数) = 0.5 = 50%

という感じです。
こっちのほうがまだちゃんとふるまいをテストできている感じがしますね。

網羅率をテストの評価に使ってはいけない

この網羅率はテストの評価には使い物にならないです。
この部分はまた次回にお話ししましょう。

コメント