首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我能用什么软件来测量LLOC,功能点和Bash脚本的圈复杂度?

我能用什么软件来测量LLOC,功能点和Bash脚本的圈复杂度?
EN

Software Recommendation用户
提问于 2016-10-21 22:15:51
回答 2查看 510关注 0票数 5

我想收集一些关于存储库的统计数据,以便通过时间进行比较。目标是了解特定语言的使用随着时间的推移是如何演变的,以及不同项目的复杂性和规模是如何增长或缩小的。

有一个很好的工具叫做cloc,它可以测量不同语言中的代码行。这是一个良好的开端,但LOC措施并不具有很大的代表性。我想收集更好的度量,比如,首先是逻辑代码行和功能点,最后是圈复杂度。

这方面也有一些工具:

  • Python有一个优秀的radon库,它提供LLOCs、圈复杂度等,并使间接确定功能点的数量成为可能。
  • 显然,C#提供了Visual的码度量,它也提供了详细的信息,包括ILLOC,它与LOC不同,非常能代表项目的大小以及圈复杂度。
  • JavaScript有complexity-report,这也使得计算功能点的数量以及LLOC和圈复杂度成为可能。
  • PHP似乎也有工具,它提供了LLOC和功能点的数量,以及圈复杂度和其他信息。

我找不到类似的工具。有一个众所周知的ShellCheck静态分析工具,但这不是我想要的: ShellCheck只是搜索代码中可能出现的问题,类似于JavaScript的jslint和C#'s代码分析。

所以:

  • 是否有类似于cloc的工具来显示数十种语言的LLOC、功能点和圈复杂度?
  • 还是有专门针对Bash脚本的这样一个工具?

注意:我对一个免费的工具感兴趣,它可以用于Linux终端,而不是付费产品,也不是在线服务或API。

EN

回答 2

Software Recommendation用户

回答已采纳

发布于 2016-12-17 04:04:42

2个月,无反应。我提供了一个商业答案,因为似乎没有其他答案。

我们的源代码搜索引擎(SCSE)用于搜索包含许多(可以说是数十种)语言的大型存储库,查找有趣的代码成语。它是快速的,因为它根据每种语言的词法语法索引代码库;它为每种语言都使用了一种语言精确的词法。(这是一个Windows产品,但已经显式地打包为还允许使用葡萄酒进行操作,以及shell脚本,这些脚本使它看起来像Linux原生的)。

值得注意的是,索引过程是使用SLOC、非空白代码行、空行、圈复杂度和霍尔斯特德度量的各种文件级别度量的产品.的一个副作用。它不做函数点(每种语言都需要回放数字,然后就可以很容易地计算出来)。这些度量实际上是作为一个XML文件生成的;一个简单的脚本将其转换为一个HTML表,如所示。

这将涵盖除Bash之外的代码库中的语言。(不是现成的,但是SCSE通过有一个定义这类词汇者的过程获得了它的方式,并且可以为Bash定义一个精确的lexer )。然而,可用的词汇之一是用于我们称为AdhocText的东西,它是您在随机计算机编程书中找到的编程语言,因此它包含了您希望在泛型语言中找到的所有经典词汇。这比您在随机编程语言上可能预期的要好。

大型代码库的一个棘手问题是根据哪些语言对文件进行分类,以便将每个文件与其相应的语言lexer相关联。我们有另一个档案盘存工具,它可以指向一组目录,根据扩展名和内容提示对文件进行分类,然后使用SCSE使用的相同的词汇重新验证分类。运行此工具基本上需要一组完全无组织的目录,根据类型对文件进行打包,识别重复的文件,并生成运行SCSE的配置文件。

摘要:

  • SCSE是一种计算包含LLOC的XML文件的工具,对于几十种语言来说都是圈复杂度。
  • 它根据语言类型使用精确的词汇来处理源文件。
  • 它可以将Bash (或它所不知道的其他langauges )作为Adhoc文本处理;或者,可以为Bash定义一种精确的词法。
  • FileInventory工具可以对一大组文件进行分类,为与SCSE一起使用做准备。
  • SCSE不计算功能点
  • 免费的“附加”功能:跨代码库的快速交互搜索
票数 3
EN

Software Recommendation用户

发布于 2020-03-16 17:22:05

我为shell脚本发布了圈复杂度分析器。

ShellMetrics -用于shell脚本的圈复杂度分析器

https://github.com/shellspec/shellmetrics

它测量包括bash在内的shell脚本的NLOC (非注释代码行)、LLOC (逻辑代码行)和CCN (圈复杂度数)。

这是覆盖率报告的样本。

代码语言:javascript
运行
复制
==============================================================================
  LLOC  CCN  Location
------------------------------------------------------------------------------
     1    1  usage:9 shellmetrics
...
     3    1  repeat_string:73 shellmetrics
     3    2  array:79 shellmetrics
     2    1  array_is_empty:86 shellmetrics
     7    2  push_array:91 shellmetrics
    11    3  pop_array:102 shellmetrics
    11    3  shift_array:119 shellmetrics
     8    3  peel:136 shellmetrics
     7    3  pretty:149 shellmetrics
     2    1  process:162 shellmetrics
    65   27  parse:167 shellmetrics
...
    52    2  <main> shellmetrics
------------------------------------------------------------------------------
 1 file(s), 33 function(s) analyzed. [bash 4.4.20(1)-release]

==============================================================================
 NLOC    NLOC  LLOC    LLOC    CCN Func File (lines:comment:blank)
total     avg total     avg    avg  cnt
------------------------------------------------------------------------------
  412   12.48   332   10.06   3.18   33 shellmetrics (479:5:62)
------------------------------------------------------------------------------

==============================================================================
 NLOC    NLOC  LLOC    LLOC    CCN Func File    lines comment   blank
total     avg total     avg    avg  cnt  cnt    total   total   total
------------------------------------------------------------------------------
  412   12.48   332   10.06   3.18   33    1      479       5      62
------------------------------------------------------------------------------
票数 3
EN
页面原文内容由Software Recommendation提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwarerecs.stackexchange.com/questions/37035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档