代码圈复杂度计算——Lizard库

代码圈复杂度计算——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

使用:

  1. 基本使用

    lizard <your_file_or_directory>
    
  2. 限制圈复杂度

    lizard --CCN 10 <your_file_or_directory>
    
  3. 递归函数

    lizard --detect_recursion <your_file_or_directory>
    
  4. 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(){}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值