PHPのプロジェクトではテストのカバレッジはどれくらいを目標にすべきなのか?

(最終更新:2017/09/11)

PHPUnitなどを使いアプリのテストを書いているプログラマーのみなさんはコードカバレッジも計測していることと思います。

ここで、カバレッジの目標としてはどれくらいがいいでしょうか?

以前、名古屋のPHPの勉強会でカバレッジの目標を定めているか?という質問を参加者にした時、目標を定めている人はいませんでした。

最近はPHPやCodeIgniterユーザでもテストを書いていない人は減ってきていますので、カバレッジについても興味を持っている人も増えていると思います。

私のアプリのカバレッジの目標

私の結論としては、一般論として、PHPのWebアプリのカバレッジ(PHPUnitでのラインカバレッジ)の目標は80%です。

それくらいあると、何かAPIを変えてしまったりして一部が動作しなくなっても、だいたいテストで検出されます。もちろん漏れることもありますが。

CodeIgniterのフォーラムでLonnieも80%がマジックナンバーだと言ってました。100%に近づくにつれてテスト作成のコストがより上がっていくため、安心感とコストのバランスから80%くらいがよいという経験的な話です。

また、周りを見ると、100%が基準とか、100%にこだわろうとかも見聞きしますが、実際問題いきなり100%は無理ゲーです。身の丈にあった目標でなくては、意味がありません。

テストファーストで普通に書いていけば、80%くらいは普通に達成できます。

少し検索すると、以下のような記述がありました。

カバレッジよりも大切なこと

それから、より重要なのはカバレッジレポートでテストされていないところに注目することです。テストしていないコードはリスクが高くなりますので、本当にテストしなくてよいか?を絶えず確認する必要があります。

ライブラリやフレームワークなどの場合

ちなみに、ライブラリやフレームワークという共通基盤の場合は、通常のWebアプリよりも高いカバレッジが要求されると思っています。90%とか100%近くとかですね。

CodeIgniterでのテストの書き方

CodeIgniterでテストの書き方がわからないという人には、以下の書籍をお薦めします(宣伝)。

関連

Tags: testing, php, phpunit, codeigniter

ci-phpunit-testのCodeIgniter 3.1.4対応

ci-phpunit-testをCodeIgniter 3.1.4に対応させた作業メモです。

現状の変更点の把握

CodeIgniterを更新する前に以下を実行します。

$ cd ci-app-for-ci-phpunit-test/
$ cd vendor/kenjis/ci-phpunit-test/
$ bin/check-diff.sh > ci-phpunit-test-ci313.diff

以下のファイルの変更点が確認できます。

  • tests/Bootstrap.php
  • tests/_ci_phpunit_test/replacing/core/CodeIgniter.php
  • tests/_ci_phpunit_test/replacing/core/Input.php
  • tests/_ci_phpunit_test/replacing/core/Loader.php
  • tests/_ci_phpunit_test/replacing/libraries/Upload.php

新バージョン(3.1.4)での変更点の把握

ci-phpunit-testフォルダにCodeIgniter-3.1.3.zipおよびCodeIgniter-3.1.4.zipを配置しておきます。

$ bin/check-ci-diff.sh CodeIgniter-3.1.3.zip CodeIgniter-3.1.4.zip

以下のファイルが作成されます。

  • CodeIgniter-3.1.3-CodeIgniter-3.1.4.ci-phpunit-test-only.diff
  • CodeIgniter-3.1.3-CodeIgniter-3.1.4.diff

変更ファイル一覧

ci-phpunit-testで変更しているCodeIgniterのファイルは以下の通りです(https://github.com/kenjis/ci-phpunit-test/blob/master/docs/HowToWriteTests.md#can-and-cant 参照)。

index.php                          → tests/Bootstrap.php
system/core/CodeIgniter.php        → tests/_ci_phpunit_test/replacing/core/CodeIgniter.php
system/core/Common.php             → tests/_ci_phpunit_test/replacing/core/Common.php
system/core/Input.php              → tests/_ci_phpunit_test/replacing/core/Input.php
system/core/Loader.php             → tests/_ci_phpunit_test/replacing/core/Loader.php
system/helpers/download_helper.php → tests/_ci_phpunit_test/replacing/helper/download_helper.php
system/helpers/url_helper.php      → tests/_ci_phpunit_test/replacing/helper/url_helper.php
system/libraries/Upload.php        → tests/_ci_phpunit_test/replacing/libraries/Upload.php

既存バージョンのファイルのバックアップ

$ cd application/tests/_ci_phpunit_test/replacing/
$ ./mv-current.sh 3.1.3

必要なファイルのアップデート

作成した

  • ci-phpunit-test-ci313.diff
  • CodeIgniter-3.1.3-CodeIgniter-3.1.4.ci-phpunit-test-only.diff
  • CodeIgniter-3.1.3-CodeIgniter-3.1.4.diff

を確認し、必要なファイルをアップデートします。

更新したバージョンのファイルのリンクの作成

$ ./make-links.sh 3.1.4

CodeIgniterのアップデート

ci-app-for-ci-phpunit-testフォルダでcomposer updateします。

アップデート内容の確認

$ bin/check-diff.sh

変更点を確認します。

関連

Tags: codeigniter, phpunit

PHPフレームワークの開発に貢献している日本人はどれくらいいるのか?

メジャーなPHPフレームワークの開発に貢献している日本人がどれくらいいるのかを調べてみました。

調査方法は、主なフレームワークのメインとなるGitHubリポジトリのContributors 100位の中に日本人(っぽい人)がどれだけいるかです(もし抜けや誤りがあれば、お知らせいただけるとありがたいです)。

フレームワーク 日本人の割合
FuelPHP 10.0%
CakePHP 4.0%
CodeIgniter 3.0%
Symfony 2.0%
Laravel 0.0%
平均 3.8%

上記の5フレームワークの平均は3.8%でした。日本人の人口は世界の2%に満たないですので、それと比較すると多いです。しかし、世界のインターネット人口は2016年で34億9千万人らしいので、それだと人口比でそんなに多くはないですね。

詳細

CakePHP

https://github.com/cakephp/cakephp/graphs/contributors

  • chinpei215
  • waterada
  • nojimage
  • suzuki

8 commits(100位のContributorのコミット数)

CodeIgniter

https://github.com/bcit-ci/CodeIgniter/graphs/contributors

  • kenjis
  • katsew
  • TakayukiSakai

5 commits

FuelPHP

https://github.com/fuel/core/graphs/contributors

  • TOYOZUMIKouichi
  • kenjis
  • KenjiOhtsuka
  • Onuma0519
  • mamor
  • takano32
  • kanonji
  • kousuke
  • omoon
  • itcom

2 commits

Laravel

https://github.com/laravel/framework/graphs/contributors

  • 日本人はいない

7 commits

Symfony

https://github.com/symfony/symfony/graphs/contributors

  • hidenorigoto
  • issei-m

15 commits

関連

Tags: codeigniter, cakephp, symfony, fuelphp, laravel, php