🦁

Jestのコードカバレッジについて(Jest記事と統合予定)

2025/01/06に公開

コードカバレッジとは

ソフトウェアテストにおいて、テストスイートがどの程度ソースコードをカバーしているかを示す指標
テストの網羅性を測定するためのツールとして使われる
コードカバレッジが高いほど、網羅性が高いということになる

コードカバレッジの種類

  1. ステートメントカバレッジ:

    • コード内の各ステートメント(命令)がテストされている割合を示す
    • 例:if文やforループ内のステートメントが実行されているかどうかを確認
  2. ブランチカバレッジ:

    • 条件分岐(if, forEach)の各分岐がテストされている割合を示す
    • 例:if文のtrueおよびfalseの両方のパスがテストされているかどうかを確認
  3. 関数カバレッジ:

    • コード内の各関数がテストされている割合を示す
    • 例:全ての関数が少なくとも一度は呼び出されているかどうかを確認
  4. 行カバレッジ:

    • ソースコードの各行がテストされている割合を示す
    • 例:各行が実行されているかどうかを確認

コードカバレッジの重要性

  • 品質保証:
    コードカバレッジが高いほど、ソフトウェアの品質が保証されやすくなる
    テストが多くのコードをカバーしているため、バグや不具合を早期に検出できる

  • 信頼性向上:
    カバレッジが高いと、コードの信頼性が向上し、将来的な変更や追加に対しても強固な基盤を提供

  • メンテナンス性:
    高いカバレッジは、コードのメンテナンスが容易になる要因の一つ
    変更を加えた際に、どの部分がテストされているかを把握しやすくなる

コードカバレッジの限界

  • カバレッジの過信:
    高いカバレッジ率が必ずしもバグのないコードを意味するわけではない
    カバレッジが100%でも、テストケースが不十分であれば、バグが残る可能性がある
    8割あれば大体OK

  • コストと労力:
    カバレッジを高めるためには、詳細なテストケースの作成や実行が必要となり、コストや労力がかかる

ツールと実践

  • ツール: Jest、JUnit、Istanbul、Coverage.pyなどのツールを使用して、コードカバレッジを計測する
  • 実践: カバレッジレポートを定期的に生成し、チームでレビューすることで、テストの品質を向上させる

Jestにコードカバレッジを導入

package.jsonの変更

scripts: {
 "test": "jest",
 "coverage": "jest --coverage"
}

yarn testで起動。Done

余談

筆者は以前、Jestテストで3時間ほど消耗したことがあった。

カバレッジを見ればテストしようと思っていた箇所がカバーされておらず、
間違った実装をしていたことに早く気付いたのでカバレッジの重要性に気づいたことがある

Discussion