我想收集一些关于存储库的统计数据,以便通过时间进行比较。目标是了解特定语言的使用随着时间的推移是如何演变的,以及不同项目的复杂性和规模是如何增长或缩小的。
有一个很好的工具叫做cloc
,它可以测量不同语言中的代码行。这是一个良好的开端,但LOC措施并不具有很大的代表性。我想收集更好的度量,比如,首先是逻辑代码行和功能点,最后是圈复杂度。
这方面也有一些工具:
radon
库,它提供LLOCs、圈复杂度等,并使间接确定功能点的数量成为可能。complexity-report
,这也使得计算功能点的数量以及LLOC和圈复杂度成为可能。我找不到类似的工具。有一个众所周知的ShellCheck静态分析工具,但这不是我想要的: ShellCheck只是搜索代码中可能出现的问题,类似于JavaScript的jslint
和C#'s代码分析。
所以:
cloc
的工具来显示数十种语言的LLOC、功能点和圈复杂度?注意:我对一个免费的工具感兴趣,它可以用于Linux终端,而不是付费产品,也不是在线服务或API。
发布于 2016-12-17 04:04:42
2个月,无反应。我提供了一个商业答案,因为似乎没有其他答案。
我们的源代码搜索引擎(SCSE)用于搜索包含许多(可以说是数十种)语言的大型存储库,查找有趣的代码成语。它是快速的,因为它根据每种语言的词法语法索引代码库;它为每种语言都使用了一种语言精确的词法。(这是一个Windows产品,但已经显式地打包为还允许使用葡萄酒进行操作,以及shell脚本,这些脚本使它看起来像Linux原生的)。
值得注意的是,索引过程是使用SLOC、非空白代码行、空行、圈复杂度和霍尔斯特德度量的各种文件级别度量的产品.的一个副作用。它不做函数点(每种语言都需要回放数字,然后就可以很容易地计算出来)。这些度量实际上是作为一个XML文件生成的;一个简单的脚本将其转换为一个HTML表,如所示。
这将涵盖除Bash之外的代码库中的语言。(不是现成的,但是SCSE通过有一个定义这类词汇者的过程获得了它的方式,并且可以为Bash定义一个精确的lexer )。然而,可用的词汇之一是用于我们称为AdhocText的东西,它是您在随机计算机编程书中找到的编程语言,因此它包含了您希望在泛型语言中找到的所有经典词汇。这比您在随机编程语言上可能预期的要好。
大型代码库的一个棘手问题是根据哪些语言对文件进行分类,以便将每个文件与其相应的语言lexer相关联。我们有另一个档案盘存工具,它可以指向一组目录,根据扩展名和内容提示对文件进行分类,然后使用SCSE使用的相同的词汇重新验证分类。运行此工具基本上需要一组完全无组织的目录,根据类型对文件进行打包,识别重复的文件,并生成运行SCSE的配置文件。
摘要:
发布于 2020-03-16 17:22:05
我为shell脚本发布了圈复杂度分析器。
ShellMetrics -用于shell脚本的圈复杂度分析器
https://github.com/shellspec/shellmetrics
它测量包括bash在内的shell脚本的NLOC (非注释代码行)、LLOC (逻辑代码行)和CCN (圈复杂度数)。
这是覆盖率报告的样本。
==============================================================================
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
------------------------------------------------------------------------------
https://softwarerecs.stackexchange.com/questions/37035
复制相似问题