PHPのプロジェクトではテストのカバレッジはどれくらいを目標にすべきなのか?
(最終更新:2017-09-11)
PHPUnitなどを使いアプリのテストを書いているプログラマーのみなさんはコードカバレッジも計測していることと思います。
ここで、カバレッジの目標としてはどれくらいがいいでしょうか?
以前、名古屋のPHPの勉強会でカバレッジの目標を定めているか?という質問を参加者にした時、目標を定めている人はいませんでした。
最近はPHPやCodeIgniterユーザでもテストを書いていない人は減ってきていますので、カバレッジについても興味を持っている人も増えていると思います。
私のアプリのカバレッジの目標
私の結論としては、一般論として、PHPのWebアプリのカバレッジ(PHPUnitでのラインカバレッジ)の目標は80%です。
それくらいあると、何かAPIを変えてしまったりして一部が動作しなくなっても、だいたいテストで検出されます。もちろん漏れることもありますが。
CodeIgniterのフォーラムでLonnieも80%がマジックナンバーだと言ってました。100%に近づくにつれてテスト作成のコストがより上がっていくため、安心感とコストのバランスから80%くらいがよいという経験的な話です。
また、周りを見ると、100%が基準とか、100%にこだわろうとかも見聞きしますが、実際問題いきなり100%は無理ゲーです。身の丈にあった目標でなくては、意味がありません。
テストファーストで普通に書いていけば、80%くらいは普通に達成できます。
少し検索すると、以下のような記述がありました。
- 「理想論では100%のカバレッジを取得する必要がありますが、実際には80%で十分でしょう。なぜなら、100%のカバレッジであったとしても致命的なエラーやクラッシュを防ぐことができないからです」http://piccagliani.github.io/Codeception.docs.ja_JP/11-Codecoverage.html
- 「開発チームは、通常、約 80% のコード カバレッジを目標にします」https://msdn.microsoft.com/ja-jp/library/dd537628.aspx
カバレッジよりも大切なこと
それから、より重要なのはカバレッジレポートでテストされていないところに注目することです。テストしていないコードはリスクが高くなりますので、本当にテストしなくてよいか?を絶えず確認する必要があります。
ライブラリやフレームワークなどの場合
ちなみに、ライブラリやフレームワークという共通基盤の場合は、通常のWebアプリよりも高いカバレッジが要求されると思っています。90%とか100%近くとかですね。
CodeIgniterでのテストの書き方
CodeIgniterでテストの書き方がわからないという人には、以下の書籍をお薦めします(宣伝)。
関連
Date: 2017/08/02