计算每种方法的平均Java代码行数

时间:2020-03-06 14:25:15  来源:igfitidea点击:

有没有可用的工具来计算每种方法的平均代码行数?

我想知道每种方法的平均大小,而不仅仅是项目中的总行数。每个方法的计数将使我能够衡量每个方法的简单程度。

这将作为构建过程的一部分进行计算,并显示在仪表板上。想法是,我们可以查看每种方法的平均大小是否正在增加。这将标志着代码复杂性增加的可能性,我们可能需要考虑重构。

解决方案

我不确定是否这样做,但是在我们上一篇文章之后搜索什么是圈复杂度,我转到了相关的Wikipedia页面,该页面指向Code Analyzer。
他们在那儿说:

When counting for HTML or JSP files, it will count LoC correctly for
  javascript and vbscript code embedded within the <script> tag.

我不知道是否按方法分配此计数,但是可能值得一看(它是一个免费工具)。

快速又脏又短:grep表示";",计算行数,这将为我们提供语句数的估计值。

在项目中进行递归" for(for 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

我不知道可以自动执行此操作的工具。但是,尝试自己做一个人会很有趣。

我们可能还想了解其他指标。用任何方式数线
只需确保它不会在没有" function"关键字或者花括号的情况下面对定义的函数。实际示例:

var negate = bind1st(compose, not);

(这里的negate是从bind1st函数构建的函数,不是compose)