前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软考高级架构师:McCabe 环形复杂度

软考高级架构师:McCabe 环形复杂度

作者头像
明明如月学长
发布2024-05-25 10:28:15
3900
发布2024-05-25 10:28:15
举报
文章被收录于专栏:明明如月的技术专栏

一、概念讲解

McCabe方法是计算软件复杂度的一种方式,主要通过计算程序的控制流图(Control Flow Graph, CFG)中的环路数量来衡量代码的复杂度。其核心指标是环形复杂度(Cyclomatic Complexity),用于评估一个程序的复杂度及其可测试性和可维护性。具体计算公式如下:

在这里插入图片描述
在这里插入图片描述

其中:

  • ( E ) 表示图中的边(Edges)数量。
  • ( N ) 表示图中的节点(Nodes)数量。
  • ( P ) 表示图的连通分量数量(通常对于单个程序为1)。

以下是具体步骤:

  1. 绘制控制流图: 将程序的每个基本块(顺序执行的一段代码)作为节点,控制流的转移(如条件分支、循环跳转)作为边,绘制出控制流图。
  2. 计算节点数 ( N ): 统计控制流图中的节点总数。
  3. 计算边数 ( E ): 统计控制流图中的边总数。
  4. 确定连通分量数 ( P ): 对于单个程序通常为1,如果有多个连通的子图则统计子图数。
  5. 应用公式计算环形复杂度: 使用公式 ( CC = E - N + 2P ) 计算得出环形复杂度。

示例

假设有以下伪代码:

代码语言:javascript
复制
if (condition1) {
    // block A
} else {
    // block B
}
// block C
while (condition2) {
    // block D
}

控制流图如下:

  • 节点数 ( N = 4 )(A, B, C, D)
  • 边数 ( E = 5 )(condition1 -> A, condition1 -> B, A -> C, B -> C, C -> D, D -> C)
  • 连通分量数 ( P = 1 )

环形复杂度计算:

[ CC = E - N + 2P = 6 - 4 + 2 = 4 ]

这表明该段代码的环形复杂度为4。

环形复杂度越高,意味着代码的复杂性和潜在的维护难度也越高。一般而言,环形复杂度最好保持在较低水平,以提高代码的可读性和可维护性。

二、题目

在这里插入图片描述
在这里插入图片描述

其中合并的地方需要补充节点,因此 9 和 10 需要补充两个节点。注意开头和结尾也算节点。

因此,共计 14 条边 - 12 个节点 +2 = 4 ,选择 B

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概念讲解
    • 示例
    • 二、题目
    相关产品与服务
    腾讯云服务器利旧
    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档