Perl Hackers Hub

第49回 CPANモジュールの品質を支えるCI技術(3)

この記事を読むのに必要な時間:およそ 2 分

(1)こちら⁠2)こちらから。

カバレッジ測定とCIとの連携

(3)では,Perlでカバレッジ(網羅率)を測定する方法と,測定結果とCIサービスの連携方法について説明します。

カバレッジとは

カバレッジとは,テスト対象のモジュールのコードが,テストによってどれだけ実行されたかを割合で表すものです。カバレッジが高いほど,多くの割合のコードがテストされていることを示します。

カバレッジにはどこまで厳密に測定するかによって複数の種類がありますが,本稿では命令網羅率(すべての実行可能命令が実行されればカバレッジが100%)のことをカバレッジと呼びます。

Devel::Coverによるローカル環境でのカバレッジの測定

次は,カバレッジの測定方法について説明します。

Devel::Coverとは

Devel::Coverを使うと,Perlでカバレッジを測定できます。Devel::Covercpanmコマンドでインストールできます。

$ cpanm --quiet --notest Devel::Cover
Devel::Coverによるカバレッジの測定

Devel::Coverを使ってカバレッジを測定するには,proveコマンドとcoverコマンドを使います。テスト対象モジュールのルートディレクトリへ移動し,次のコマンドを実行します注3)⁠

$ HARNESS_PERL_SWITCHES="-MDevel::Cover=+ignore,^t" prove -lvr t
$ cover -report html

カバレッジを測定しながらテストを実行するため,通常のテストよりも数倍遅くなります。大規模なプロジェクトの場合,頻繁にカバレッジを測定するのは難しいかもしれません。

カバレッジの測定結果はHTML形式で出力されます。cover_db/coverage.htmlをブラウザで開いてみましょう。図10のように,ファイルごとのカバレッジを確認できます。

図10 カバレッジの測定結果

図10 カバレッジの測定結果

注3)
CartonやCarmelを利用している人は,実行コマンドを適宜置き換えてください。

Codecovによるカバレッジの可視化

カバレッジは測定するだけではあまり意味がありません。測定結果をもとに,重要な箇所にテストが不足している場合はテストを追加したり,カバレッジのカバー率に閾値を設定しPull Requestの採用基準にしたりしてこそ意味が出てきます。

カバレッジの測定結果を開発に活用していくには,カバレッジ可視化サービスを利用するのが便利です。カバレッジ可視化サービスを使うと,手もとの環境で毎回実行せずに自動でカバレッジが測定されます。

Codecovとは

Codecovでは,CIで計測したカバレッジをWebページで見られるようにするだけではなく,カバレッジの増減をもとにアラートを発したり,GitHubのPull Requestと統合したりすることができます。

Codecovへのカバレッジの送信

それでは,Codecovを使ってカバレッジを可視化してみましょう。Codecovを使うには,Devel::Coverでカバレッジを測定し,Codecovへ結果を送信します。

本稿では,Travis CIを使ってテストを実行し,カバレッジを測定します。.travis.ymlに次のような記述を行います。

language: perl
perl:
  - "5.26"

before_install:
  - cpanm --quiet --notest --skip-satisfied Devel::Cover::
Report::Codecov

script:
  - perl Build.PL && ./Build build
  - cover -test

after_success:
  - cover -report codecov

before_installステップでは,Devel::CoverのレポータであるDevel::Cover::Report::Codecovをインストールしています。Devel::Cover::Report::CodecovにはDevel::Coverへの依存が定義されているため,そちらも自動でインストールされます。

scriptステップでテストの実行とカバレッジの測定を行い,after_successステップでカバレッジの測定結果を送信しています。after_successステップは,scriptステップのすべてが正常に終了した場合(終了ステータスが0の場合)のみ実行されます。テストが成功していない場合はカバレッジが正常に測定できていないため,カバレッジは送信されません。

カバレッジが正常に送信されると,Codecovのページでカバレッジを閲覧できます図11)⁠

図11 Codecov上のカバレッジの測定結果

図11 Codecov上のカバレッジの測定結果

CodecovとGitHubの連携

CodecovにはGitHubとの連携機能があります。連携機能を利用すると,次のことを行えます。

GitHub上でカバレッジの可視化
Codecovへわざわざ遷移せずにカバレッジ測定結果を意識した開発を行える
Pull Requestのカバレッジを自動で測定し,結果をコメントとして投稿
カバレッジの増減をPull Requestからの画面だけで判断でき,テスト不足にすぐ気づける図12

図12 GitHubのPull Requestとの連携

図12 GitHubのPull Requestとの連携

連携機能は,ブラウザの拡張機能を利用して実装されています。Chrome,Firefox,Operaで利用できます

まとめ

今回は,CIツールを使って高品質なPerlモジュールを開発する手法を紹介しました。本稿はOSS開発の場合でしたが,プロダクト開発などプライベートリポジトリの場合も,有償ですが同様の機能を利用できます。ぜひ,便利なサービスを積極的に使い,楽しく効率的に開発を進めていきましょう!

さて,次回の執筆者は松木雅幸さんで,テーマは「Minillaを使ったモダンなCPANモジュール開発」です。お楽しみに。

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.106

2018年8月24日発売
B5判/144ページ
定価(本体1,480円+税)
ISBN978-4-7741-9943-6

  • 特集1
    [コードで超わかる!]
    実践Android/iOSアプリ設計

    開発を加速させる実装パターン
  • 特集2
    [速習]Spring Boot
    簡潔にコードを書けるJavaフレームワーク
  • 特集3
    仮想DOM革命
    ReactでGUI設計が変わる!

著者プロフィール

水音ぴね(みずねぴね)

新卒で入社した会社では,Perlでソーシャルゲームの開発に従事。

現在は転職し,アプリとサーバーサイドをScalaで書いている。JavaScriptが好き。

GitHub:pine

コメント

コメントの記入