エンジニアの川名です。
現在、私が運用を担当している組織にて、
Apexコードカバー率が正常に表示されない現象が発生しているため
これについてまとめたいと思います。
Salesforceではテストコードのカバー率が75%以上ないと本番組織にリリースする事ができません。
そのため組織全体のコードカバー率のチェックは本番リリースの際には欠かせない作業となっています。
ある日の本番リリース後、念のため本番組織のコードカバー率も確認しておこうと
[設定]→[開発]→[Apexクラス]と進んだApex一覧の画面の
「組織のコードカバー率を見積る」を押下したところ、なんと…!
58%という目を疑うような数字が表示されました。
実は本番リリースに失敗しているのではないかとちょっと慌てて
リリース対象物を確認しましたが正常にデプロイされている様子。
これはおかしい。ということでサポートに問い合わせて現象について確認しました。
回答は以下。
・Winter'14以降で発生している不具合。
・テストクラスを持たないApexクラスの場合、コメントアウトや System.debug() などのコードもカバー率の母数に含まれてしまい、
本来のカバー率よりも低い数字が表示されてしまっている。
・デプロイ時のコードカバレッジの算出はこの影響を受けていないため正常なカバレッジでデプロイが行われる。
とのことでした。
回避策として、すべてのApexクラスに対してテストクラスを作成することで正常なカバー率が算出されるようです。
以下でもケースとして上がっていました。
Summer'14でバグフィクス予定のようです。
Drop in Overal Code Coverage value due to incorrect count of class lines with 0% code coverage
https://success.salesforce.com/issues_view?id=a1p30000000T1m1
有効な行数がそもそも少ないクラスや大部分がコメントアウトされたクラスなどは
テストクラスの作成が後回しになってしまいがちですが、
・不要なクラスは本番組織に残しておかない。
・有効なクラスに対してはテストクラスを必ず作成する。
など、日頃から気をつけることが必要であると今回の件で感じました。
○おまけ
リリース関連の小ネタです。
本番リリースする際、リリース状況を確認することが出来ましたが
画面の更新を行いながら進捗をチェックする必要がありました。
Spring'14より、リリース状況を表すプログレスグラフが自動更新されるようになりました。
[設定]→[リリース]→[リリース状況]から確認することが出来ます。
細かいですがリリース担当者としては地味に嬉しい機能ですね。