代码圈复杂度计算——lizard库
Lizard简介
lizard
是一个轻量级、多语言支持的代码复杂度分析工具,最常用于计算圈复杂度(Cyclomatic Complexity)和代码行数。
圈复杂度是衡量代码逻辑复杂性的一个常用指标,表示程序中独立执行路径的数量。圈复杂度越高,意味着代码中的条件分支越多,代码维护和测试的难度也会增加。
lizard
可以分析的代码度量指标:
- NLOC(非注释代码行数):函数或方法除去注释部分的实际代码行数
- CCN(代码圈复杂度):函数或方法的圈复杂度
- token:代码中的词汇数量
- PARAM(参数个数):函数或方法所包含参数的个数
- length:函数或方法的总行数(包括注释和空行)
- location:文件名、行号和函数名称
lizard
支持的代码语言
- C/C++ (works with C++14)
- Java
- C# (C Sharp)
- JavaScript (With ES6 and JSX)
- TypeScript
- Objective-C
- Swift
- Python
- Ruby
- TTCN-3
- PHP
- Scala
- GDScript
- Golang
- Lua
- Rust
- Fortran
- Kotlin
- Solidity
- Erlang
输出示例:
=====================================================================
NLOC CCN token PARAM length location
---------------------------------------------------------------------
5 2 21 2 6 my_code.py:1:function_name
8 3 30 3 8 my_code.py:10:another_function
======================================================================
Lizard库使用
安装:
pip install lizard
使用:
-
基本使用
lizard <your_file_or_directory>
-
限制圈复杂度
lizard --CCN 10 <your_file_or_directory>
-
递归函数
lizard --detect_recursion <your_file_or_directory>
-
HTML报告
lizard --html > report.html
使用lizard库作为Python模块
对某个文件进行分析
>>> import lizard
>>> i = lizard.analyze_file("../cpputest/tests/AllTests.cpp")
>>> print i.__dict__
{'nloc': 9, 'function_list': [<lizard.FunctionInfo object at 0x10bf7af10>], 'filename': '../cpputest/tests/AllTests.cpp'}
>>> print i.function_list[0].__dict__
{'cyclomatic_complexity': 1, 'token_count': 22, 'name': 'main', 'parameter_count': 2, 'nloc': 3, 'long_name': 'main( int ac , const char ** av )', 'start_line': 30}
您也可以使用源代码字符串代替文件。但您需要提供文件名(以识别语言)。
>>> i = lizard.analyze_file.analyze_source_code("AllTests.cpp", "int foo(){}")
标签:function,code,代码,lizard,Lizard,CCN,复杂度
From: https://blog.csdn.net/ziyuexuan2020/article/details/142874600