51

Javascript で循環的複雑度を計算するためのツールはありますか?

過去にサーバー側のコードに取り組んでいるときに、これが非常に役立つメトリックであることがわかったので、私が作成するクライアント側の Javascript に使用できるようにしたいと考えています。

4

7 に答える 7

26

JavaScript プロジェクトでソフトウェアの複雑さを分析するためのツールを作成するのを手伝いました。

複雑性レポート

コード行数、パラメーター数、循環的複雑度、循環的密度、Halstead 複雑度測定値、保守性指数、一次密度、変更コスト、およびコア サイズなど、さまざまな複雑さの指標を報告します。

MIT ライセンスの下でリリースされ、Node.js とEsprima JavaScript パーサーを使用して構築されています。次のように npm 経由でインストールできます。

npm i -g complexity-report
于 2012-11-19T12:06:02.897 に答える
9

JSHintは最近、コード メトリクスを計算するためのサポートを追加しました。

次の最大値を設定できます。

  • maxparams- 許可される仮パラメータの数
  • maxdepth- コード ブロックのネストの深さ
  • maxstatements- 関数ごとに許可されるステートメントの数
  • maxcomplexity- 最大循環的複雑度

関数ごとに許可される仮パラメーターの最大数

/*jshint maxparams:3 */

function login(request, onSuccess) {
  // ...
}

// JSHint: Too many parameters per function (4).
function logout(request, isManual, whereAmI, onSuccess) {
  // ...
}

関数ごとに許可されるネストされたコード ブロックの最大数

/*jshint maxdepth:2 */

function main(meaning) {
  var day = true;

  if (meaning === 42) {
    while (day) {
      shuffle();

      if (tired) { // JSHint: Blocks are nested too deeply (3).
          sleep();
      }
    }
  }
}

関数ごとに許可されるステートメントの最大数

/*jshint maxstatements:4 */

function main() {
  var i = 0;
  var j = 0;

  // Function declarations count as one statement. Their bodies
  // don't get taken into account for the outer function.
  function inner() {
    var i2 = 1;
    var j2 = 1;

    return i2 + j2;
  }

  j = i + j;
  return j; // JSHint: Too many statements per function. (5)
}
于 2013-04-04T15:38:41.887 に答える
9

循環的複雑度は「if、switch、while for break」などのキーワードの数を数えて評価されるため、C で動作するすべてのツールが sourcemonitor のように機能します: http://www.campwoodsw.com/sourcemonitor.html

実際、javascript では、コードをモジュール化しようとすればするほど速度が低下するので、慎重に考えてください ;)

編集:私は本当にこの答えで何が起こっているのか理解できません.私の答えでJavaScriptで循環的複雑度を計算するための優れたツールを教えてください.これは特に非常にうまく機能します.

2 番目のアサーションについては、私の経験からのコメントです。js コードをモジュール化しないでくださいとは決して言いません。速度とのトレードオフがしばしばあるため、それを行う際に注意するように言うだけです。速度について話すときは、ダウンロード時実行時の2つの異なる速度低下が発生する可能性があることを意味します(pda /スマートフォンなどの遅いデバイスではこれが重要です)。

このようなツールは、可能な限り小さなインデックスを追跡しようとして、開発者をより多くのコードを作成するように駆り立てることがよくありますが、残念ながら js では、より多くのコードはスローダウンが発生する可能性があることを意味し、これらのツールの使いすぎは良くありません。確かに、これらのツールはコードを改善できる箇所のヒントを提供してくれますが、ツールに盲目的に依存するのではなく、ツールの使用方法を習得する必要があります。

したがって、もう一度私に反対票を投じる場合は、なぜそうするのかを説明するコメントを書いてください。議論はこれからのみ利益を得ることができます。ありがとう、そして申し訳ありません。

于 2008-10-13T16:28:08.160 に答える
5

http://jshint.comの新しいバージョンが出ており、非常に優れた循環的複雑度計算機能を備えています。

于 2013-10-07T08:01:09.400 に答える
3

bluck.info の ARCHIVEから ccm ツールを使用するか、github リポジトリjonasbluck/ccmを使用できます。

JavaScript、C/C++、および C# をサポートしています。これは無料で、Windows で動作します (Linux および Mac OS X でも実行できます - Mono フレームワークを使用します)。

于 2011-08-06T18:12:24.073 に答える
2

ヤードスティックもあります: https://github.com/calmh/yardstick

慣用的な Javascript の循環的複雑度を計算しようとし、jscheckstyle などよりも多くのケースを処理します。

于 2012-06-28T08:20:10.003 に答える