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

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

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

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

  • テストされていない部分の特定: テストでカバーされていないコードベースの部分。

  • バグの検出: 気づかれないかもしれないバグを検出します。

  • 自信の構築: ソフトウェアの安定性に対する自信。

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

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

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

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

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

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

コードカバレッジを分析するための一般的なサービスには、codecov.io と coveralls.io があります。これらのプロジェクトはオープンソースのツールで無料であり、テスト中にコードベースがどの程度カバーされているかを示すダッシュボードを提供してくれます。(CodeCov または Coveralls のいずれかで) アカウントを設定し、コードカバレッジを追跡するために使用することをお勧めします。

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 ファイルをブラウザで開き、カバレッジ結果をご覧ください。

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

次のステップ#

意味のあるテストを作成することは、有用なカバレッジの基礎です。より良いテスト スイートの開発の詳細については、テストの書き込み および テストの種類 を参照してください。 ローカル と 継続的統合 の両方でテストを実行する方法を学びます。