2008-09-19 97 views
34

是否有任何工具可用於計算Javascript中的循環複雜度?計算Javascript的環複雜度

我發現這是一個非常有用的指標,在​​過去,而在服務器端代碼的工作,並希望能夠使用它的客戶端的JavaScript我寫的。

+0

我提出我的jsmeter工具,一個新的網站:http://jsmeter.info – Noah 2010-08-22 02:26:15

回答

18

我一直在研究一個JavaScript靜態代碼分析工具,它可以確定JavaScript的圈複雜度。您可以在這裏嘗試在線版本的jsmeter:http://jsmeter.info

6

因爲圈複雜度評估計算關鍵字 數量「的話,交換機,而突破」等。每一個工具,用C工作將做的工作,比如 sourcemonitor: http://www.campwoodsw.com/sourcemonitor.html

其實,在JavaScript中更嘗試modulize你的代碼,你越會慢下來,所以把它當作一粒鹽;)

編輯: 我真的不明白這是怎麼回事這個答案,我得到另一個downvote,當我在我的答案,我告訴ag OOD工具,用於計算javascript中的圈複雜度, ,這尤其適用。

對於第二種說法,我的是來自經驗評論,我從來沒有告訴不modulize你的js代碼,我只告訴使注意力做,因爲往往有一個權衡速度,當我說話的速度我的意思是2個不同的放緩可能發生的:在下載時間執行時間(以及類似PDA /智能手機,這是重要的慢速設備)。

由於這樣的工具,經常開車到開發商編寫更多的代碼試圖追逐較小的指數可能, 但在JS更多的代碼遺憾,這意味着放緩可能發生,這些工具的過度使用壞。 這些工具可以給你提示,其中你的代碼可以改進,但你必須掌握如何使用該工具,而不是盲目依賴它。

所以,如果你再downvote我,請寫在你解釋你爲什麼這樣做,討論只能從中受益評論,感謝您和遺憾的發泄。

+0

模塊化你的代碼是慢下來?這有什麼意義? – MDCore 2008-10-17 04:33:06

+1

其實它有意義,因爲在JavaScript寫更多的代碼意味着更多的下載時間(是一個權衡所有知道btw),我寫的JavaScript代碼運行在非常緩慢的架構,所以,對我而言,這是一個重要的因素。我沒有說「不要模塊化」,我只是說「被警告」 – kentaromiura 2008-10-17 06:29:44

+0

我沒有降低你的視覺效果,但它似乎並不像模塊化那樣降低了JavaScript中的代碼,足以證明你的代碼在程序風格。但我想這是一個個案的基礎。 – 2009-12-13 19:41:39

2

您可以使用http://www.blunck.info/ccm.html的ccm工具。

它沒有java腳本,c/C++和c#。它是免費的,可以在Windows上運行(也可以在Linux和Mac OS X上運行 - 使用單一框架)。

17

我幫着寫JavaScript的項目進行軟件的複雜性分析的工具:

complexity-report

它報告了一堆不同複雜程度的指標:行代碼,大量的參數,圈複雜度,圈密度, Halstead複雜性度量,可維護性指數,一階密度,變化成本和核心尺寸。

它在MIT許可證下發布,使用Node.js和Esprima JavaScript解析器構建。最近added support

npm i -g complexity-report 
5

JSHint計算代碼度量:它可以通過NPM安裝,就像這樣。您可以爲the number of formal parameters allowedmaxparams),how deeply nested code blocks should beMAXDEPTH),the number of statements allowed per functionmaxstatements)設置的最大值,以及the maximum cyclomatic complexitymaxcomplexity)。

每功能允許形式參數的最大數量

/*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) 
} 
10

對於答案的完整性,我前一段時間尋找同樣的工具,並沒有發現任何行之有效的可視化,所以我寫了plato

樣本報告:

它使用phil的複雜性報告(上面提到的),也彙總jshint(最終,其他)的數據。