「perl メトリクス」「javascript メトリクス」でググると、同じ方のidがトップに表示されたので、参考...というか写経。
Perlのメトリクス計測 - WebService::Blog->new( user => ’hide_o_55’ )
JavaScriptコードのメトリクス測定 - WebService::Blog->new( user => ’hide_o_55’ )
perlであればPerl::Metrics::Simple
Perl-Metrics-Simple-0.18 - Count packages, subs, lines, etc. of many files. - metacpan.org
$ wget http://search.cpan.org/CPAN/authors/id/M/MA/MATISSE/Perl-Metrics-Simple-0.15.tar.gz $ tar -zxvf Perl-Metrics-Simple-0.15.tar.gz $ cd Perl-Metrics-Simple-0.15 $ /usr/local/bin/perl Makefile.PL $ make $ make test $ su # make install
↑このようにbuild & install すると、countperl というコマンドラインツールが /usr/local/bin/countperl にinstallされるので、次のように実行すると、McCabe Complexity (= cyclomatic complexity)という複雑度が表示されます。
$ /usr/local/bin/countperl TestTarget.pm Perl files found: 1 Counts ------ total code lines: 620 lines of non-sub code: 12 packages found: 1 subs/methods: 30 Subroutine/Method Size ---------------------- min: 5 lines max: 65 lines mean: 20.27 lines std. deviation: 13.61 median: 17.00 McCabe Complexity ----------------- Code not in any subroutine:: min: 1 max 1 mean: 1.00 std. deviation: 0.00 median: 1.00 Subroutines/Methods: min: 1 max: 16 mean: 4.97 std. deviation: 4.38 median: 3.00 Tab-delimited list of subroutines, with most complex at top ----------------------------------------------------------- complexity sub path size 16 select_cloth_meisais ./TestTarget.pm 65 14 init_cloth_shade_h ./TestTarget.pm 40 13 calc_win_id ./TestTarget.pm 40 13 init_clothes ./TestTarget.pm 45 13 init_cloth_shade_v ./TestTarget.pm 44 9 last_win_id_strs ./TestTarget.pm 16 7 init_sews ./TestTarget.pm 30 6 get_cloth ./TestTarget.pm 20 6 dist_win_id ./TestTarget.pm 27 5 add_clothes ./TestTarget.pm 14 <略>
javascriptであればjsmeter
jsmeterは nodejsを必要とする為、今回は nodejs や jsmeter を /Users/endo/local 以下に install しています。
まずは、nodejs
$ wget http://nodejs.org/dist/v0.8.12/node-v0.8.12.tar.gz $ tar -zxvf node-v0.8.12.tar.gz $ cd node-v0.8.12 $ ./configure --prefix=/Users/endo/local/node $ make $ make install
http://nodejs.org/
https://github.com/joyent/node/wiki/Installation
nodejsへのパスを追加.
$vi /Users/endo/.bash_profile old) export PATH=/usr/local/bin:$PATH new) export PATH=/Users/endo/local/node/bin:/usr/local/bin:$PATH
次に jsmeter.
$ cd /Users/endo/local $ /Users/endo/local/node/bin/npm install jsmeter@1.0.0 npm http GET https://registry.npmjs.org/jsmeter/1.0.0 npm http 200 https://registry.npmjs.org/jsmeter/1.0.0 npm http GET https://registry.npmjs.org/jsmeter/-/jsmeter-1.0.0.tgz npm http 200 https://registry.npmjs.org/jsmeter/-/jsmeter-1.0.0.tgz npm WARN package.json jsmeter@1.0.0 No README.md file found! jsmeter@1.0.0 node_modules/jsmeter
※ver.1.0.1にはバグがあるらしくver.1.0.0を使用しています
※wget http://jsmeter.googlecode.com/files/jsmeter.tgz してから
npm install ./jsmeter.tgz のようにローカルにあるfileをinstallできないの?
http://code.google.com/p/jsmeter/
https://npmjs.org/
これで準備が完了したので、次のように実行すると、メトリクスが表示されます。
※M.I. や (Anonymous1) って何?
$ node ~/local/node_modules/jsmeter/jsmeter.js ./TestTarget.js ./TestTarget.js line start: 1 lines: 706 statements: 471 comments: 34 complexity: 1 M.I.: 95.286 ./TestTarget.js (Anonymous1) line start: 1 lines: 706 statements: 470 comments: 34 complexity: 31 M.I.: 60.301 ./TestTarget.js (Anonymous1).TestTarget line start: 2 lines: 1 statements: 0 comments: 0 complexity: 1 M.I.: NaN ./TestTarget.js (Anonymous1).act_del line start: 7 lines: 24 statements: 17 comments: 1 complexity: 2 M.I.: 100.37 ./TestTarget.js (Anonymous1).get_input_clothes line start: 115 lines: 13 statements: 10 comments: 0 complexity: 2 M.I.: 116.01 ./TestTarget.js (Anonymous1).get_input_clothes.(Anonymous1) line start: 117 lines: 7 statements: 6 comments: 0 complexity: 1 M.I.: 123.23 ./TestTarget.js (Anonymous1).get_input_clothes.(Anonymous1).(Anonymous1) line start: 121 lines: 3 statements: 1 comments: 0 complexity: 1 M.I.: 138.24 <略>
nodejsやnpmは初めて触りましたが、このノリでいいの?
jsmeterはweb serviceとしても公開されているようです
その他 2013/4/29追記
perlの文法チェックなら、B::Lint
その他javascriptのメトリクス計測
JavaScriptのコードを測ろう「plato」 - アシアルブログ
GitHub - jsoverson/plato: JavaScript source code visualization, static analysis, and complexity tool
GitHub - philbooth/complexity-report: [UNMAINTAINED] Software complexity analysis for JavaScript projects
GitHub - jshint/jshint: JSHint is a tool that helps to detect errors and potential problems in your JavaScript code