首页 > 其他分享 >代码圈复杂度计算——Lizard库

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

时间:2024-10-12 12:21:56浏览次数:7  
标签:function code 代码 lizard Lizard CCN 复杂度

代码圈复杂度计算——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(){}")

标签:function,code,代码,lizard,Lizard,CCN,复杂度
From: https://blog.csdn.net/ziyuexuan2020/article/details/142874600

相关文章

  • OFcms代码审计
    前言今天看到一篇审计Java的文章,于是在没有继续系统学习基础的情况下,又一次当其搬运工,打算熟悉熟悉java项目搭建流程,然后再跟着过一下Java代码审计流程,全文除搭建的坑,其余漏洞代码分析均CV大佬思路。。。环境搭建源码地址:https://gitee.com/oufu/ofcms环境依赖:a.建议采用i......
  • PTA 作业六 JAVA 面向对象程序设计6-2 sdut-oop-list-1 学生集合(类、集合)作者 周雪芹
    6-2sdut-oop-list-1学生集合(类、集合)分数15作者 周雪芹单位 山东理工大学以下程序不完整,请你根据已经给出的程序代码中表达的题意,以及程序的输入、输出信息,完成Student类的设计,补全代码。函数接口定义:classStudent{}裁判测试程序样例:importjava.util.ArrayLi......
  • 如何将本地代码打包到测试环境?(前端和后端)
    前几天晚上,睿哥教了我如何将本地的代码打包并部署到测试环境上。然而,他讲得有点快,我可能还不是很熟悉。趁着现在有空,我决定把他讲的内容记录下来,以免以后忘记。由于我现在同时负责前端、后端和小程序的开发,这三种技术我都需要掌握。本文将首先讲解如何将后端代码打包并部署到......
  • 增广拉格朗日iLQR时空联合规划代码简介与再开发3-iLQR目录
    增广iLQR-时空联合规划算法代码简介与再开发-前言_时空联合优化器-CSDN博客文章浏览阅读294次,点赞6次,收藏11次。简单来说就是同时求解路径与速度曲线。时空联合规划本质上是求解最优化问题,将路径和速度曲线作为优化问题的变量,同时得到二者在可行范围内的最优解。前言介绍LQR和......
  • [双体系练习]静态代码块中不能直接调用类中实例方法
    静态代码块中不能? · 【D】A.初始化静态变量 B.调用静态方法C.new对象 D.直接调用类中实例方法(实例方法是非静态方法,非静态的无法直接调用)注意:在静态代码块中创建的对象实例会在类加载时就创建,并且这些实例在整个应用程序生命周期中都会占用内存。......
  • NocoBase 与 Appsmith:哪个低代码平台更适合你?
    欢迎回到我们深度对比系列文章,这是本系列的第三篇。在之前我们已经与两个非常优秀的产品进行了对比:NocoBase与NocoDB:开源无代码工具深度对比CRUD开发工具NocoBase与Refine对比今天,让我们把目光移向Appsmith。NocoBase和Appsmith均为开源的低代码/无代码开发平台,这......
  • Java在图片上写字生成新图片的代码实现
    引言在图像处理领域,有时我们需要在图片上添加文字,以生成带有特定信息的新图片。Java作为一种功能强大的编程语言,提供了多种库和工具来实现这一需求。本文将详细介绍如何使用Java在图片上写字,并生成一张新的图片。准备工作在开始编写代码之前,我们需要确保已经安装了Java开......
  • 【反转链表】【K个一组翻转链表】两个问题具体思路,文中含多种解法(附完整代码)
    文章目录前言一、如何理解反转链表?二、反转链表1.方法一(递归)方法二(迭代)三、K个一组翻转链表前言本文将围绕【反转链表】问题展开详细论述。采用【递归法】【迭代法】同时,还将进一步升级该问题,讨论【K个一组翻转链表】一、如何理解反转链表?题目链接:[点击......
  • 代码随想录训练营第60天|冗余连接
    108.冗余连接#include<iostream>#include<vector>usingnamespacestd;intn;//节点数量vector<int>father(1001,0);//按照节点大小范围定义数组//并查集初始化voidinit(){for(inti=0;i<=n;++i){father[i]=i;}}//并查集......
  • 图像去雾综述-图像去雨综述(代码+教程)
    图像去雾是一种针对雾霾、雨雾等大气干扰因素引起的图像模糊和降低对比度的现象进行处理的技术。在现实生活中,这种现象常常会影响到图像的质量,使得图像难以清晰地表现出真实景物。为了解决这个问题,研究人员开发了各种图像去雾算法。本文将对当前主流的图像去雾算法进行综述......