どれぐらいテストコード書いてるのか、phplocで調べてみた
本体のコードの679倍もあるテストコードとは。。。
現在担当している自社サービスのサーバ側アプリについてはテストコードを書いてますが、LOCでどれぐらいなのか計ったことなかったので、phplocで調べてみました。
3月に公開された最新バージョンのSQLite 3.6.23。本体のソースコードは約6万7200行(67.2KSLOC、Kilo Source Lines of Code:空行やコメントを除いた行数)なのに対し、テストコードはなんと4567万8300行(45678.3KSLOC)だと紹介されているのです! これはテストコードが本体の約679倍もの大きさだということになります。
phplocのインストール
# pear channel-discover pear.phpunit.de # pear channel-discover components.ez.no # pear install phpunit/phploc # phploc phploc 1.5.1 by Sebastian Bergmann. Usage: phploc [switches] <directory|file> ... --count-tests Count PHPUnit test case classes and test methods. --log-xml <file> Write result in XML format to file. --exclude <directory> Exclude <directory> from code analysis. --suffixes <suffix,...> A comma-separated list of file suffixes to check. --help Prints this usage information. --version Prints the version and exits. --verbose Print progress bar. #
計測
とりあえず、ユーザーが利用する側のロジック部分だけを対象にやってみました。symfony本体のコードやActionクラス、テンプレート、ORMで生成されたコードなど、他のクラスやファイルは含まれてません。まずは、テスト以外のコード。
$ phploc --suffixes .class.php /path/to/logic/ phploc 1.5.1 by Sebastian Bergmann. Directories: 23 Files: 631 Lines of Code (LOC): 56619 Cyclomatic Complexity / Lines of Code: 0.06 Comment Lines of Code (CLOC): 20652 Non-Comment Lines of Code (NCLOC): 35967 Namespaces: 0 Interfaces: 8 Classes: 623 Abstract: 43 (6.90%) Concrete: 580 (93.10%) Average Class Length (NCLOC): 62 Methods: 2768 Scope: Non-Static: 2440 (88.15%) Static: 328 (11.85%) Visibility: Public: 1338 (48.34%) Non-Public: 1430 (51.66%) Average Method Length (NCLOC): 13 Cyclomatic Complexity / Number of Methods: 1.82 Anonymous Functions: 0 Functions: 0 Constants: 144 Global constants: 0 Class constants: 144 $
次にテストコードだけ。ちなみに、テスティングフレームワークはPHPUnit3使ってます。
$ phploc --suffixes Test.php /path/to/logic/ phploc 1.5.1 by Sebastian Bergmann. Directories: 19 Files: 644 Lines of Code (LOC): 110472 Cyclomatic Complexity / Lines of Code: 0.01 Comment Lines of Code (CLOC): 15225 Non-Comment Lines of Code (NCLOC): 95247 Namespaces: 0 Interfaces: 0 Classes: 644 Abstract: 0 (0.00%) Concrete: 644 (100.00%) Average Class Length (NCLOC): 145 Methods: 5610 Scope: Non-Static: 5610 (100.00%) Static: 0 (0.00%) Visibility: Public: 4259 (75.92%) Non-Public: 1351 (24.08%) Average Method Length (NCLOC): 16 Cyclomatic Complexity / Number of Methods: 1.16 Anonymous Functions: 0 Functions: 0 Constants: 10 Global constants: 0 Class constants: 10 $
まとめ
LOC比で、56619:110472。2倍弱かぁ。コメントを含まないNCLOC比だと、35967:95247ということで2.6倍強。うーん、テストコードのメンテコスト(というより労力・めんどくささw)の割に、意外と量は書いてないのか。。。まあ、重点的にテストやるところとそうでないところを区別してるので、カバレッジ100%じゃないしなぁ。。。
ただ、あちこちで言ってますけど、テストがあること/テストをパスすることで積極的に本体のメンテができるのは、精神衛生上ものすごくいいですよ。もうテストがないと本体のメンテが不安な身体です。