循環複雜度

循环复杂度（Cyclomatic complexity）也称为条件复杂度或圈复杂度，是一种软件度量，是由老托马斯·J·麦凯布在1976年提出，用来表示程序的复杂度，其符号为VG或是M。循环复杂度由程序的源代码中量测线性独立路径的个数。此概念有些类似的量测文字复杂度的Flesch-Kincaid可读性测试 ，不过方法不完全相同。

循环复杂度是由程序的控制流图来计算：有向图的节点对应程序中个别的代码，而若一个程序运行后会立刻运行另一代码，会有边链接二代码对应的节点。圈复杂度可应用在程序的子程序、模块、方法或类别。
麦凯布首先提出一种称为“基础路径测试”（Basis Path Testing）的软件测试方式，是测试程序中的每一线性独立路径，此情形的测试用例个数即为程序的循环复杂度。
“循环复杂度”的名称有时会让人误解，因为此复杂度不只计算程序中的循环（循环）个数。循环复杂度是指程序的控制流图中，若将结束点到启始点再增加一个边时，控制流图中的圈（几个边形成封闭路径）的个数。

限制软件复杂度

麦凯布提出循环复杂度时，其原始目的之一就是希望在软件开发过程中就限制其复杂度。他建议程序设计者需计算其开发模块的复杂度，若一模块的循环复杂度超过10，需再分区为更小的模块。NIST（国家标准技术研究所）的结构化测试方法论已此作法略作调整，在一些特定情形下，模块循环复杂度上限放宽到15会比较合适。此方法论也承认有些特殊情形下，模块的复杂度需要超过上述的上限，其建议为“模块的循环复杂度需在上限范围以内，否则需提供书面数据，说明为何此模块循环复杂度有必要超过上限。”

模块内聚性的评估

可以预期一个复杂度较高模块的内聚性会比较低，至少不会到功能内聚性的程度。一个有高复杂度及低内聚性的模块中会有许多的决策点，这类的模块多半运行超过一个明确定义的任务，因此内聚性较低。一个2005年的研究发现复杂度的度量和由专家评估的模块内聚性有高度负相关，反而针对内聚性设计的度量和专家评估结果之间的相关性还比较不明显。

推测软件缺陷个数

许多研究指出一模块及方法的循环复杂度和其中的缺陷个数有相关性，许多这类研究发现循环复杂度和缺陷个数有高度的正相关：循环复杂度最高的模块及方法，其中的缺陷个数也最多。
不过，有些研究是在控制模块大小相近的情形下进行分析（例如比较二个源代码行数相近，但循环复杂度不同模块的缺陷个数），许多这类的研究发现循环复杂度和缺陷个数没有明显相关，不过仍有一些研究认为在此情形下二者仍有相关性。有些此领域的研究者认为那些研究结果循环复杂度和缺陷个数没有明显相关的研究，其研究方法的有效性可能有问题。
莱斯·哈顿认为利用循环复杂度来预测缺陷个数，和利用源代码行数来预测缺陷个数的结果大致相近。