[other] 代码量代码复杂度统计-lizard
[other] 代码量代码复杂度统计-lizard
lizard的可以用来统计下面的一些数据
- 不包含代码注释的代码行数
- CCN 代码的复杂度,也就是分支复杂度
- token的个数(关键字,标示符,常量,标点符号,操作符)
- 函数的参数个数
支持下列的一些语言
- C/C++ (works with C++14)
- Java
- C# (C Sharp)
- JavaScript
- Objective C
- Swift
- Python
- Ruby
- TTCN-3
- PHP
- Scala
- GDScript
downloadlink
https://github.com/terryyin/lizard
优点
- 不需要头文件全部指定(宏展开可能有失偏颇)
- 能够同时统计代码量和代码复杂度
- 能够产生和cppNCSS相同的报告
缺点
- c/c++的三字符组和双字符组
- c/c++的代码预处理和宏扩展没有实现
- c++的一些模版
对应的可以选择的参数
usage: lizard [options] [PATH or FILE] [PATH] ...
lizard is an extensible Cyclomatic Complexity Analyzer for many programming
languages including C/C++ (doesn't require all the header files). For more
information visit http://www.lizard.ws
positional arguments:
paths list of the filename/paths.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
-l LANGUAGES, --languages LANGUAGES
List the programming languages you want to analyze. if
left empty, it'll search for all languages it knows.
`lizard -l cpp -l java`searches for C++ and Java code.
The available languages are: cpp, java, csharp,
javascript, python, objectivec, ttcn, ruby, php,
swift, scala, GDScript
-V, --verbose Output in verbose mode (long function name)
-C CCN, --CCN CCN Threshold for cyclomatic complexity number warning.
The default value is 15. Functions with CCN bigger
than it will generate warning
-f INPUT_FILE, --input_file INPUT_FILE
get a list of filenames from the given file
-L LENGTH, --length LENGTH
Threshold for maximum function length warning. The
default value is 1000. Functions length bigger than it
will generate warning
-a ARGUMENTS, --arguments ARGUMENTS
Limit for number of parameters
-w, --warnings_only Show warnings only, using clang/gcc's warning format
for printing warnings.
http://clang.llvm.org/docs/UsersManual.html#cmdoption-
fdiagnostics-format
--warning-msvs Show warnings only, using Visual Studio's warning
format for printing warnings.
https://msdn.microsoft.com/en-us/library/yxkt8b26.aspx
-i NUMBER, --ignore_warnings NUMBER
If the number of warnings is equal or less than the
number, the tool will exit normally; otherwise, it
will generate error. If the number is negative, the
tool exits normally regardless of the number of
warnings. Useful in makefile for legacy code.
-x EXCLUDE, --exclude EXCLUDE
Exclude files that match this pattern. * matches
everything, ? matches any single character,
"./folder/*" exclude everything in the folder
recursively. Multiple patterns can be specified. Don't
forget to add "" around the pattern.
-t WORKING_THREADS, --working_threads WORKING_THREADS
number of working threads. The default value is 1.
Using a bigger number can fully utilize the CPU and
often faster.
-X, --xml Generate XML in cppncss style instead of the tabular
output. Useful to generate report in Jenkins server
-H, --html Output HTML report
-m, --modified Calculate modified cyclomatic complexity number
-E EXTENSIONS, --extension EXTENSIONS
User the extensions. The available extensions are:
-Ecpre: it will ignore code in the #else branch.
-Ewordcount: count word frequencies and generate tag
cloud. -Eoutside: include the global code as one
function. -EIgnoreAssert: to ignore all code in
assert. -ENS: count nested control structures.
-s SORTING, --sort SORTING
Sort the warning with field. The field can be nloc,
cyclomatic_complexity, token_count, p#arameter_count,
etc. Or an customized field.
-T THRESHOLDS, --Threshold THRESHOLDS
Set the limit for a field. The field can be nloc,
cyclomatic_complexity, token_count, parameter_count,
etc. Or an customized file. Lizard will report warning
if a function exceed the limit
-W WHITELIST, --whitelist WHITELIST
The path and file name to the whitelist file. It's
'./whitelizard.txt' by default. Find more information
in README.
结果如下
(venv) ➜ fff git:(master) ✗ lizard
================================================
NLOC CCN token PARAM length location
------------------------------------------------
4 1 14 1 4 driver_write@6-9@./examples/driver_testing/driver.c
4 1 11 0 4 driver_read@11-14@./examples/driver_testing/driver.c
9 2 35 0 9 driver_init_device@16-24@./examples/driver_testing/driver.c
6 1 17 1 6 IO_MEM_RD8@15-20@./examples/driver_testing/driver.test.cpp
6 1 21 2 6 IO_MEM_WR8@25-30@./examples/driver_testing/driver.test.cpp
7 1 34 2 7 TEST@33-39@./examples/driver_testing/driver.test.cpp
8 1 40 2 8 TEST@42-49@./examples/driver_testing/driver.test.cpp
.........................................................................................
4 1 8 0 48 output_macro_counting_shortcuts@351-398@./fakegen.rb
8 1 9 0 9 output_c_and_cpp@400-408@./fakegen.rb
25 file analyzed.
==============================================================
NLOC Avg.NLOC AvgCCN Avg.token function_cnt file
--------------------------------------------------------------
19 5.7 1.3 20.0 3 ./examples/driver_testing/driver.c
4 0.0 0.0 0.0 0 ./examples/driver_testing/driver.h
43 6.8 1.0 28.0 4 ./examples/driver_testing/driver.test.cpp
47 8.5 1.0 57.8 4 ./examples/driver_testing/driver.test.fff.cpp
3 0.0 0.0 0.0 0 ./examples/driver_testing/hardware_abstraction.h
0 0.0 0.0 0.0 0 ./examples/driver_testing/registers.h
5 0.0 0.0 0.0 0 ./examples/embedded_ui/DISPLAY.h
2 0.0 0.0 0.0 0 ./examples/embedded_ui/SYSTEM.h
21 6.7 1.0 27.7 3 ./examples/embedded_ui/test_suite_template.c
41 7.0 1.4 22.8 5 ./examples/embedded_ui/UI.c
6 0.0 0.0 0.0 0 ./examples/embedded_ui/UI.h
129 8.7 1.0 49.8 13 ./examples/embedded_ui/UI_test_ansic.c
97 7.1 1.0 37.8 11 ./examples/embedded_ui/UI_test_cpp.cpp
4917 8.2 2.4 56.1 503 ./gtest/gtest-all.cc
5 4.0 1.0 27.0 1 ./gtest/gtest-main.cc
11679 5.5 1.3 63.7 774 ./gtest/gtest.h
4 0.0 0.0 0.0 0 ./test/c_test_framework.h
79 19.7 1.0 118.0 3 ./test/fff_test_c.c
25 6.5 1.0 34.0 2 ./test/fff_test_cpp.cpp
56 26.0 1.0 151.5 2 ./test/fff_test_global_c.c
17 7.0 1.0 24.0 1 ./test/fff_test_global_cpp.cpp
10 0.0 0.0 0.0 0 ./test/global_fakes.c
23 0.0 0.0 0.0 0 ./test/global_fakes.h
300 8.1 1.3 24.5 35 ./fakegen.rb
8 0.0 0.0 0.0 0 ./fff.h
=========================================================================================
!!!! Warnings (cyclomatic_complexity > 15 or parameter_count > 100 or length > 1000) !!!!
================================================
NLOC CCN token PARAM length location
------------------------------------------------
65 17 397 0 131 testing::internal::UnitTestImpl::RunAllTests@5449-5579@./gtest/gtest-all.cc
49 26 372 2 67 testing::internal::ParseGoogleTestFlagsOnlyImpl@6076-6142@./gtest/gtest-all.cc
19 16 147 3 20 testing::internal::AtomMatchesChar@8005-8024@./gtest/gtest-all.cc
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
17540 6.7 1.7 59.2 1364 3 0.00 0.01
[other] 代码量代码复杂度统计-lizard的更多相关文章
- [statsvn]-svn代码量统计
用statasvn进行代码量统计的时候,第一步需要获取到项目的日志,但是我本机的svn1.4没有安装命令行,重新运行1.4的安装包也没有命令行的选项... 那就升级到最新的svn1.8好了,下载最新的 ...
- Git 常用命令和统计代码量
摘要 分享Git日常操作中常用的命令,分享如何统计在项目中贡献的代码量. 下面列出Git bash常用命令. 1. git clone **(项目地址) 克隆一个git项目到本地,将git项目拉取到本 ...
- 在windows 上统计git 代码量
1 需要系统安装 git + gawk git 安装自行百度 gawk 到官网下载 http://gnuwin32.sourceforge.net/packages/gawk.htm 1.2 下载好后 ...
- Python 统计代码量
#统计代码量,显示离10W行代码还有多远 #递归搜索各个文件夹 #显示各个类型的源文件和源代码数量 #显示总行数与百分比 import os import easygui as g #查找文件 def ...
- git 统计代码量 shell脚本
#!/bin/bash # 统计代码量 # 使用方法: sh gitstat.sh "2017-11-01" "2017-11-30" "JamKon ...
- git统计项目中成员代码量
查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...
- IDEA 代码量统计(Statistic)
IDEA 代码量统计(Statistic) 1.1 前言 项目到了一定阶段,都会想要看看项目的代码量情况,这里主要使用插件Statistic进行代码统计查看. 1.2 安装插件步骤 找到插件市场入口并 ...
- “代码量统计脚本”
概述 本文从一段统计C/C++程序脚本入手,记录shell脚本常用和重要的知识点. 代码量统计程序 文件名称,count_code_line.sh 12345678910111213141516171 ...
- (转)通过gitlab统计git提交的代码量
git的代码量大多数都是根据命令行统计,或者根据第三方插件统计.但是都不满足我的需求,因为我们代码都由gitlab管理,于是想到了通过gitlab暴露出来的接口获取数据. 第一步,生成私钥 登录你的g ...
随机推荐
- 简述FPGA的一些优势
优势一: 更大的并行度.这个主要是通过并发和流水两种技术实现. A:并发是指重复分配计算资源,使得多个模块之间可以同时独立进行计算.这一点与现在的多核和SIMD技术相似.但相对与SIMD技术,FPGA ...
- 蓝桥杯 算法训练 ALGO-36 传纸条
算法训练 传纸条 时间限制:1.0s 内存限制:512.0MB 问题描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而 ...
- 几大PHP套件
UPUPW:http://www.upupw.net/ PHPStudy:http://www.phpstudy.net/ PHPNow:http://servkit.org/
- split的用法回顾,快忘记了@ →@
split:用for循环时不要忘记是数组名.length package com.aaa; //split的用法把指定的字符串按指定的分割符进行分割,然后返回字符串 数组 public class f ...
- 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理
列表生成式:是代码更简洁. 也可以是函数,比如func(i) 生成器:generator 列表生成式,是中括号,改成小括号,就是生成器: 如果你用列表生成式,生成一亿个数据:这里会卡好久,会生成一亿个 ...
- python开发socket套接字:套接字&通信循环&链接循环&模拟远程命令
一,套接字 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接.在这时如果有个客户端初始化一个Socket ...
- Linux学习笔记 -- Shell 变量
定义变量 语法: 变量名=值 myVal= 需要注意一下变量明德规则: 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可以使用下划线(_). 不能使用标点符号. 不能使用bash里的关键字( ...
- python学习(十六) 测试
测试驱动开发. 16.1 先测试,后编码 16.1.1 精确的需求说明 16.1.2 为改变而计划 16.1.3 测试的4个步骤 16.2 测试工具 16.2.1 doctest 16.2.2 uni ...
- StringBuilder与StringBuffer的区别
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- Linux - apache 服务
暂时关闭 iptables 防火墙 [root@sch01ar ~]# systemctl stop iptables.service 暂时关闭 firewall 防火墙 [root@sch01ar ...