Pythonパッケージのテストスイートのコードカバレッジ#

コードカバレッジは、テスト中にパッケージのコードがどれだけ実行されるかを測定します。 高いカバレッジを達成することは、コードベースの信頼性を確保するのに役立ちますが、品質を保証するものではありません。 以下に、コードカバレッジを効果的に使用するための主な検討事項を概説します。

なぜ高いコードカバレッジを目指すのか?#

良い習慣は、テストスイートの間に、コードのすべての行が少なくとも一度は実行されるようにすることです。これはあなたを助けます:

  • コードベースのテストされていない部分を特定します。

  • 他の方法では気づかれないかもしれないバグをキャッチします。

  • ソフトウェアの安定性に自信を持てます。

コードカバレッジの限界#

高いコードカバレッジは価値がありますが、それには限界があります:

  • テストしにくいコード: コードの中には、複雑さや限られたリソースのために、テストが難しい部分があるかもしれません。

  • 見逃されたエッジケース: すべてのコードを実行しても、エッジケースが正しく処理される保証はありません。

最終的には、パッケージがどのように使用されるかに焦点を当て、テストがそのシナリオを十分にカバーするようにしなければなりません。

Pythonパッケージのコードカバレッジを分析するツール#

Some common services for analyzing code coverage are codecov.io and coveralls.io. These projects are free for open source tools and will provide dashboards that tell you how much of your codebase is covered during your tests. We recommend setting up an account (on either CodeCov or Coveralls) and using it to keep track of your code coverage.

code covサービスのスクリーンショット - stravalibパッケージのテストカバレッジを示します。 この画像は、パッケージモジュールのリストと、関連する行数およびテスト対象行の割合を示しています。 画像の上部には、評価対象のブランチとリポジトリへのパスが表示されています。

CodeCovプラットフォームは、コードカバレッジを視覚的に追跡したい場合に便利なツールです。これを使えば、 pytest-cov 拡張機能で得られるのと同じサマリー情報を得られるだけではありません。また、テストの対象になっているラインとそうでないラインを確認することもできます。コードカバレッジは、単体テストの評価や、パッケージのコードがどれだけ "カバー" されているかを評価するのに役立ちます。しかし、統合テストやエンドツーエンドのワークフローなどは評価されません。#

型 & MyPyのカバレッジ

また、型レポートを作成し、CodeCovにアップロードすることもできます。

ローカルカバレッジレポートのエクスポート#

CodeCovやCoverallsのようなサービスを利用するだけでなく、 coverage.py ツールを使って直接ローカルカバレッジレポートを作成することもできます。 これは、オフラインでの使用や文書化のためにMarkdownやHTML形式でレポートを作成したい場合に特に便利です。

カバレッジレポートを Markdown 形式で作成するには、以下を実行します:

$ python -m coverage report --format=markdown

このコマンドはMarkdown形式のカバレッジサマリーを作成し、プロジェクトのドキュメントに簡単に記載したり、チームと共有したりすることができます。

どの行がカバーされているか、詳細でインタラクティブなビューを提供するHTMLレポートを生成するには、以下を使用します:

python -m coverage html

生成されたHTMLレポートは、デフォルトでhtmlcovというディレクトリに保存されます。index.htmlファイルをブラウザで開き、カバレッジ結果をご覧ください。

このようなローカルレポートは、外部サービスを立ち上げることなくカバレッジを素早く確認する優れた方法です。