JavaScriptコードのメトリクス測定

以前、Perlにおけるコードメトリクスの測定について書きましたが、JavaScriptについても調べたところjsmeterが良さそうです。

なお、循環的複雑度等のコードメトリクスはあくまでも定量的な目安であり、絶対的な品質を表すものではありません。コードレビューやリファクタリングの対象を選ぶ際などに活用するといいと思います。

インストール

npmコマンドでインストールしてください。ちなみにnpmにある最新版は1.0.1ですがjsmeter.jsがバグってるので1.0.0を使います。(もしくは、1.0.1のjsmeter.jsの47行目の"start();"を削除する)

npm install -g jsmeter@1.0.0

コマンドとして実行

以下のスクリプトをパスの通った場所におきます。

そして実行。

$ jsmeter /path/to/source
lib/Foo.js 
 line start: 1
 lines:      308
 statements: 282
 comments:   17
 complexity: 1
 M.I.:       75.795
lib/Foo.js hoge
 line start: 23
 lines:      2
 statements: 7
 comments:   0
 complexity: 2
 M.I.:       147.83
lib/Foo.js fuga
 line start: 27
 lines:      17
 statements: 18
 comments:   1
 complexity: 3
 M.I.:       106.59

...

メトリクスの測定をテストに取り入れる

jsmeterをテストで使えるようにするモジュールを書いてみました。
現時点では循環的複雑度についてのテストのみ実装しています。メソッド毎の行数のしきい値テストなども需要ありますかね?

GitHub - hideo55/node-test-metrics: Test for Node.js code metrics

使い方
var assert = require('assert');
var testMetrics = require('test-metrics');
assert.ok(!testMetrics.hasComplexCode('/path/to/source', 25));

hasComplexCode()の第一引数がソースコードへのパス、第二引数が循環的複雑度のしきい値で、しきい値を超えるとhasComplexCode()はtrueを返します。