Javascript で循環的複雑度を計算するためのツールはありますか?
過去にサーバー側のコードに取り組んでいるときに、これが非常に役立つメトリックであることがわかったので、私が作成するクライアント側の Javascript に使用できるようにしたいと考えています。
Javascript で循環的複雑度を計算するためのツールはありますか?
過去にサーバー側のコードに取り組んでいるときに、これが非常に役立つメトリックであることがわかったので、私が作成するクライアント側の Javascript に使用できるようにしたいと考えています。
JavaScript プロジェクトでソフトウェアの複雑さを分析するためのツールを作成するのを手伝いました。
コード行数、パラメーター数、循環的複雑度、循環的密度、Halstead 複雑度測定値、保守性指数、一次密度、変更コスト、およびコア サイズなど、さまざまな複雑さの指標を報告します。
MIT ライセンスの下でリリースされ、Node.js とEsprima JavaScript パーサーを使用して構築されています。次のように npm 経由でインストールできます。
npm i -g complexity-report
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)
}
循環的複雑度は「if、switch、while for break」などのキーワードの数を数えて評価されるため、C で動作するすべてのツールが sourcemonitor のように機能します: http://www.campwoodsw.com/sourcemonitor.html
実際、javascript では、コードをモジュール化しようとすればするほど速度が低下するので、慎重に考えてください ;)
編集:私は本当にこの答えで何が起こっているのか理解できません.私の答えでJavaScriptで循環的複雑度を計算するための優れたツールを教えてください.これは特に非常にうまく機能します.
2 番目のアサーションについては、私の経験からのコメントです。js コードをモジュール化しないでくださいとは決して言いません。速度とのトレードオフがしばしばあるため、それを行う際に注意するように言うだけです。速度について話すときは、ダウンロード時と実行時の2つの異なる速度低下が発生する可能性があることを意味します(pda /スマートフォンなどの遅いデバイスではこれが重要です)。
このようなツールは、可能な限り小さなインデックスを追跡しようとして、開発者をより多くのコードを作成するように駆り立てることがよくありますが、残念ながら js では、より多くのコードはスローダウンが発生する可能性があることを意味し、これらのツールの使いすぎは良くありません。確かに、これらのツールはコードを改善できる箇所のヒントを提供してくれますが、ツールに盲目的に依存するのではなく、ツールの使用方法を習得する必要があります。
したがって、もう一度私に反対票を投じる場合は、なぜそうするのかを説明するコメントを書いてください。議論はこれからのみ利益を得ることができます。ありがとう、そして申し訳ありません。
http://jshint.comの新しいバージョンが出ており、非常に優れた循環的複雑度計算機能を備えています。
bluck.info の ARCHIVEから ccm ツールを使用するか、github リポジトリjonasbluck/ccmを使用できます。
JavaScript、C/C++、および C# をサポートしています。これは無料で、Windows で動作します (Linux および Mac OS X でも実行できます - Mono フレームワークを使用します)。
ヤードスティックもあります: https://github.com/calmh/yardstick
慣用的な Javascript の循環的複雑度を計算しようとし、jscheckstyle などよりも多くのケースを処理します。