什么是Cyclomatic Complexity(圈复杂度)

2024-02-11 13:38

本文主要是介绍什么是Cyclomatic Complexity(圈复杂度),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。

下面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。

//程序原代码,圈复杂度为 2
public String case1(int num) {
    String string = null;
    if (num == 1) {
        string = "String";
    }
    return string.substring(0);
}

//上面代码的单元测试代码
public void testCase1(){
    String test1 = case1(1);
}
 
圈复杂度主要与分支语句(if、else、,switch 等)的个数成正相关。当一段代码中含有较多的分支语句,其逻辑复杂程度就会增加。

圈复杂度的计算方法,可以参考这篇文章:http://blog.csdn.net/lg707415323/article/details/7790660

降低圈复杂度的方法,可以参考《控制圈复杂度:9种重构技术》

这篇关于什么是Cyclomatic Complexity(圈复杂度)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699924

相关文章

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

算法复杂度的简单介绍

算法复杂度是衡量算法执行效率和资源消耗的指标,通常分为时间复杂度和空间复杂度。时间复杂度评估算法执行所需时间随输入规模的变化,空间复杂度评估算法占用内存的增长情况。复杂度通常用大O符号来表示,它描述了最坏情况下的增长速率。 1. 时间复杂度 时间复杂度表示算法执行所需时间随输入规模 nnn 的变化关系。常见的时间复杂度如下(从快到慢): a. 常数时间:O(1) 不管输入大小如何,算法总是

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

算法复杂度 —— 数据结构前言、算法效率、时间复杂度、空间复杂度、常见复杂度对比、复杂度算法题(旋转数组)

目录 一、数据结构前言 1、数据结构 2、算法 3、学习方法 二、 算法效率 引入概念:算法复杂度  三、时间复杂度 1、大O的渐进表示法 2、时间复杂度计算示例  四、空间复杂度 计算示例:空间复杂度 五、常见复杂度对比 六、复杂度算法题(旋转数组) 1、思路1 2、思路2 3、思路3 一、数据结构前言 1、数据结构         数据结构(D

AI模型:追求全能还是专精?-- 之6 语言复杂度类别(Category 0~3 类)和语言功能性类型(Type 0~Ⅲ 型)之2

Q17、我前面说过,语言复杂度的0~3级(Category 0~3)表示了语言的的上下文相关性 : 完全不相关, 单相关的 单词上下文, 双相关的句子上下文 全相关的文章上下文 。我准备翻译为 Context - irrelative /relative/correlative/ full-correlative,显式表达了语言复杂度的0~3级(Category 0~3)区别的上下文相关性是一种关

dp子序列问题+时间复杂度分析

动态规划子序列问题, 把大的问题细化到一个点,先研究在这个小的点上如何解决问题,然后再通过递归/迭代的方式扩展到整个问题。 算法题到最后就是聪明的穷举,如何聪明的拆分问题。 对于两个字符串求子序列的问题,都是用两个指针 i 和 j 分别在两个字符串上移动,大概率是动态规划思路。 不要看 s1 和 s2 两个字符串,而是要具体到每一个字符,思考每个字符该做什么。 int dp(int i,

Java的时间复杂度和空间复杂度和常见排序

目录 一丶时间复杂度 二丶空间复杂度 三丶Java常见排序        1. 冒泡排序(Bubble Sort)         2.插入排序(Insertion Sort)          3.希尔排序(Shell Sort)          4.选择排序(Selection Sort)           5.堆排序(Heap Sort)

浙大数据结构:01-复杂度2 Maximum Subsequence Sum

数据结构MOOC PTA习题 01-复杂度2 Maximum Subsequence Sum #include <iostream>using namespace std;const int M = 100005;int a[M];int main(){int k;cin >> k;int f = 1;for (int i = 0; i < k; i++){cin >> a[i

4.给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。 要求:空间复杂度O(1),时间复杂度为O(n)

//给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。//要求:空间复杂度O(1),时间复杂度为O(n)#include<cstdlib>#include<iostream>using namespace std;void reform(int (&arr)[6]){int size=sizeof(arr)/sizeof(int);int left=0,right=siz

Python深入理解快速排序算法及其时间复杂度分析

Python深入理解快速排序算法及其时间复杂度分析 快速排序(Quick Sort)是一种高效的排序算法,广泛应用于各种实际场景中。它采用分治法(Divide and Conquer)策略,通过选择一个基准元素(pivot),将数组分成两部分,使得左侧部分的元素都小于基准元素,右侧部分的元素都大于基准元素。然后递归地对这两部分进行排序。本文将详细介绍快速排序的实现过程,并深入分析其时间复杂度。