是否有任何工具可用於計算每種方法的平均代碼行數?計算每種方法的平均代碼行數
我想知道每種方法的平均大小,而不僅僅是項目中的總行數。每種方法的數量可以讓我衡量每種方法的簡單程度。
這將作爲構建過程的一部分進行計算,並顯示在儀表板上。這個想法是我們可以看到每種方法的平均大小是否在增加。這將標誌着代碼複雜性增加的可能性,我們可能需要考慮重構。
是否有任何工具可用於計算每種方法的平均代碼行數?計算每種方法的平均代碼行數
我想知道每種方法的平均大小,而不僅僅是項目中的總行數。每種方法的數量可以讓我衡量每種方法的簡單程度。
這將作爲構建過程的一部分進行計算,並顯示在儀表板上。這個想法是我們可以看到每種方法的平均大小是否在增加。這將標誌着代碼複雜性增加的可能性,我們可能需要考慮重構。
我不確定它是否確實如此,但是在上一篇文章之後搜索什麼是圈複雜度,我去了指向Code Analyzer的相關維基百科頁面。 在那裏,他們說:
當HTML或JSP文件算起,它會計算正確控制線爲 JavaScript和VBScript代碼嵌入< script>標記中。
我不知道這個計數是否按每個方法調度,但可能值得一看(這是一個免費工具)。
short fast and dirty:grep for「;」,計算行數,這會給你估計的語句數量。
這很骯髒,我不在JS中使用分號(當然,除了()循環:)) – Dan 2008-09-19 09:42:51
做一個遞歸的「for(i in this)」搜索你的項目,如果對象(i)是一個函數,調用「test.toString().split(」\ n「).length」。這會計算函數中換行符的數量。如果它不是函數,而是對象,則在該對象中調用該函數。還要計算您找到的函數的數量,然後將新線的總數除以函數的總數,然後得出平均值。
編輯
function calculateMethodSize(obj){
var fcount = 0;
var fsize = 0;
for(i in obj){
if(obj[i] instanceof Function){
fcount++;
fsize += obj[i].toString().split(";\n").length;
}else if(obj[i] instanceof Object){
var ret = calculateMethodSize(obj[i]);
fcount += ret.fcount;
fsize += ret.fsize;
}
}
return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize/data.fcount;
不過要小心運行此代碼。如果你像這樣運行它,那麼你可能會遇到堆棧溢出(我做過)。
定義行作爲不是「\ n」或「;」,
你可以嘗試一種簡單的算法如下所示:
FOR each line in a javascript file (or chunk of text)
IF the line starts with "function " THEN
PUSH the first left-curly brace you find onto a stack
WHILE the stack is non-empty
PUSH any left-curly braces in the current line
POP any left-curly braces when you encounter a right-curly brace
Increment your line-count by 1
Increment your line counter (as mentioned in the FOR loop above)
END WHILE
Store your total lines for this function
ELSE
//ignore the line because it's probably a global var or blank
END IF
END FOR
我不知道一個工具,可以做到這一點的自動。但是,嘗試自己創造一個會很有趣。
您可能還想了解其他指標。你可以用任何方法來計算線, 只是確保它不會在沒有「函數」關鍵字或花括號的情況下定義的函數面前發聲。真實世界的例子:
var negate = bind1st(compose, not);
(這裏是否定的功能,從功能bind1st建造,撰寫和不)
既然在代碼質量的度量「代碼行」? – Ant 2008-09-19 09:36:58
我已經更新了這個問題,以使它更清晰,我正在討論**每個方法**的平均行數而不是總行數。 – Karl 2008-09-19 09:46:32