《编码 - 代码分析》代码结构分析

article/2025/5/14 13:33:38

1 代码结构分析概述

在编写代码时,要求要结构清晰、接口简单。如果代码结构过于复杂,会带来很多问题:代码很难被理解,不方便编写测试用例,容易隐藏错误,出现问题难以定位,修改代码容易产生新的Bug等等。因此,需要有一些指标来评估代码的复杂度,以方便对过于复杂的代码进行重构。

代码的复杂度通常可通过以下几个指标来评估:

 总行数:包括注释以及空行在内的代码行数;
 语句数目:有效的语句行数,包括#include、#define、#undef 这三个预处理命令在内,括号不包含在内;
 分支语句比例:分支语句占总语句数目的比例;
 注释比例:注释占总行数的比例;
 函数数目:函数的数量;
 平均每个函数的语句数;
 函数圈复杂度;
 函数最大嵌套层数;
 类的数量;
 平均每个类的函数数量。

2 基于的SourceMonitor代码结构检查

当前能够进行代码结构检查的工具有不少,本文中选择 SourceMonitor 作为代码结构检查工具。

2.1 SourceMonitor简介

官网地址

SourceMonitor 是 Campwood Software LLC 拥有版权的自由软件,非商业用途可免费使用。
SourceMonitor的主要功能是对代码的一个分析和度量。即使用SourceMonitor软件我们可以清晰的看到代码的总行数,注释比例,语句数以及类的个数和函数的个数。

SourceMonitor 有以下特点:

 支持对 C、 C++、 C#、 VB.NET、 java、 Delphi、 Visual Basic 以及 HTML 在内的多种语言的源代码的分析;
 效率高,每秒钟能够分析 10000 行以上的代码;
 可以修改各个度量指标的阈值。

2.2 C语言度量值(C Metrics)

下面以C语言度量值为例,看看SourceMonitor都给我们反馈了哪些信息。

总行数(Lines):包括空行在内的代码行数;

语句数目(Statements):在C语言中,语句是以分号结尾的。分支语句if,循环语句for、while,跳转语句goto都被计算在内,预处理语句#include、#define和#undef也被计算在内,对其他的预处理语句则不作计算,在#else和#endif、#elif和#endif之间的语句将被忽略;

分支语句比例(Percent Branch Statements):该值表示分支语句占语句数目的比例,这里的“分支语句”指的是使程序不顺序执行的语句,包括if、else、for、while和switch;

注释比例(Percent Lines with Comments):该值指示注释行(包括/……/和//……形式的注释)占总行数的比例;

函数数目(Functions):指示函数的数量;

平均每个函数包含的语句数目(Average Statements per Function):总的函数语句数目除以函数数目得到该值;

函数圈复杂度(Function Complexity):圈复杂度指示一个函数可执行路径的数目,以下语句为圈复杂度的值贡献1:if/else/for/while语句,三元运算符语句,if/for/while判断条件中的"&&"或“||”,switch语句,后接break/goto/ return/throw/continue语句的case语句,catch/except语句;

函数深度(Block Depth):函数深度指示函数中分支嵌套的层数。

对其他语言,SourceMonitor输出不同的度量值,例如在C++度量值中包括类的数目(Classes),在HTML中包括各个标签的数目(HTML Tags)、超链接数目(Hyperlinks)等。

2.2.1 SourceMonitor使用指南

首先在SourceMonitor官网下载SourceMonitor安装包后,双击安装包,按向导进行安装即可,这里就不再赘述了。

打开 SourceMonitor,选择菜单“File→New Project”新建项目。

在这里插入图片描述

弹出如图所示的语言选择对话框,选择源文件的语言以及需要扫描的文件类型,SourceMonitor 对自动扫描对应的源文件进行分析。 闰年判断函数是使用 C 语言编写的, 所以选择 C 语言,扫描的文件类型指定.c 和.h,然后点击下一步继续。

在这里插入图片描述

在接下来弹出的如下图所示的对话框中,设置项目的名称和保存路径,并点击下一步继续。

在这里插入图片描述

在接下来弹出的如下图所示的对话框中,填入源文件所在的目录,并点击下一步继续。

在这里插入图片描述

设置源代码目录后,后面所有设置都采用默认设置即可,一直点击下一步直到完成。

在这里插入图片描述

在新建项目完成后,系统会自动创建一个检查点,可以手动修改检查点的名称和需要检查的文件列表。修改完毕后,点击OK 按钮检查点的创建,详见下图。

在这里插入图片描述

2.2.2 分析代码结构

新建项目并创建检查点后,接下来就可以进行代码结构分析了。在检查列表中列出了当前已经创建的所有的检查点,详见下图。

在这里插入图片描述

针对每个检查点,SourceMonitor 给出了每个度量指标的具体的值,可以通过左右划动滚动条进行查看。

如果需要查看某个检查点是否有指标超标,可右击对应的检查点,然后在右键菜单中选择“Display CheckPoint Metrics Kiviat Graph”,详见下图。

在这里插入图片描述

打开的指标度量图标详见下图。

在这里插入图片描述

从指标度量图表中可以看出,每个指标都有下限和上限值。 在实际应用中,要求注释比例和平均每个函数的代码数必须在下限和上限指示的范围内,而其他的指标则要求不能超出上限,否则代码就需要重构。

若从指标度量图中发现某项指标不合格,则可双击对应的检查点打开文件列表。在打开的文件列表中,可以通过点击表头改变排序方式以快速找到指标不合格的文件。如下图所示为按文件名升序进行排序。

在这里插入图片描述

找到指标不合格的文件,单击鼠标右键,然后在右键菜单中选择“Display Function Metrics”打开函数列表,详见下图。

在这里插入图片描述

同样在打开的函数列表中,可以通过点击表头改变排序方式以快速找到指标不合格的函数,然后就可以对对应的函数进行重构。如下图所示为按照函数名称升进行排序。

在这里插入图片描述

2.2.3 修改指标阈值

在有些时候,开发者可能并不希望使用系统默认的指标阈值,而是希望能够自定义指标阈值。 SourceMonitor 支持对各个指标的阈值进行自定义,这样使用时就会更加灵活。选择菜单“File→Option”,打开选项设置对话框。

在这里插入图片描述

如果需要修改对应语言的阈值,可以选中对应的选项卡进行修改即可。详见图Figure 2 14。

在这里插入图片描述



欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


http://chatgpt.dhexx.cn/article/esruEx3L.shtml

相关文章

利用宏让ERStudio生成代码文件

Embarcadero ERStudio 是一个数据模型工具,用起来很方便。在ERStudio里建完数据模型后,可以利用宏来帮助生成对应的实体类文件以及对应的简单的数据访问类文件。为了实现这一目的,需要自己写脚本,支持的语言为 VB(以前…

Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程

Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimensional(多维) 两种在这里主要以关系型数据库为主来介绍模型的创建过程。 第二和第三项均是重…

ERStudio如何显示entity的tableName(表名的英文)和defaultColumnName(英文字段名)

转换为物理模型就可以了 物理模型中会优先显示tableName和defaultColumnName 这个mysql选择自己使用的数据库即可, ** 温馨提示:只想单纯看一下英文名而且不会转物理模型的话可以参考我的这个步骤,专业转化物理模型的话,建议另…

【SpringBoot】4. ERStudio初使用

1. 逻辑结构 (1)创建文件 (2)建立实体对象entity (3)编辑实体对象 (4)添加属性 (5)图表显示选项 (6)实体之间建立联系 (7…

如何使用ERStudio 生成comment

在ER使用中,在生成sql过程中,如何批量生成字段描述,如何批量添加Owner,请看下文: 1、ER生成字段描述 2、ER生成描述添加Owner 使用的ER版本是8.0,英文版本,在操作过程中,有些配置细节…

使用ERStudio6创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮 来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按…

ER/Studio知识汇总

一、关系 网上找了一下,大部分说得不太清楚,我在这里举上个例子。注意,这里的关系是逻辑上的,并非表结构也要如此。 1. 标识关系identifying relationship 意思:子实体的主键包含父实体的外键(可能成为复合…

【NodeJS】20 koa 企业级Cms内容管理系统-XMind功能分析、ERStudio设计数据库ER图

一、 什么是 CMS CMS 是"Content Management System“的缩写,意为"内容管理系统”。 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场。对于内容管理,业界还没有一个统一的定义,不同的机构有不同…

ER-studio显示选项设置

新建erstudio文件,默认不显示entity的datatype,用起来不方便。 设置如下: 当前页面->右键选择 Diagram And object Display Options->Entity->Datatype(勾选即可)。效果如上图

(10)ERStudio

1.外键 https://jingyan.baidu.com/article/f79b7cb37e9d219144023ea6.html 第一个图标:Identifying Relationship。 一对多的关联,主表的主键既是子表的外键也是子表的主键 第二个图标:Non-Identifying, Mandatory Relationship。 一对多的关…

ERStudio逆向工程生成ER模型

首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,选择第二个单选按钮 接着,点击“Login”按钮,弹出如下的对话框&…

使用ERStudio创建数据表与ER图

下面以一个教育网站的用户数据表来举例说明ERStudio的一些基本操作方法: 1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文…

使用ERStudio创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“Ctrl+N”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按钮从灰色编程了彩色可用。 下面开始创建一个…

esStudio 逆向工程 导出 ER图

第一步:mysql 配置odbc驱动 :驱动安装 第二步配置 ERStudio 首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,…

erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。

使用ERStudio生成数据库设计文档 1、用逻辑模型(Logical Model)生成物理模型(Physical Model)。 2、选择Tools->Generate Reports...。 3、在弹出的对话框中选择RTF格式、生成文件的位置和名称,如下图。 3、单击“Next”按钮,在新窗口的左边树Tables项…

erstudio连接mysql_ERStudio的使用

打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimensional(多维) 两种在这里主要以关系型数据库为主来介绍模型的创建过程。 第二和第三项均是重新设计已存在的数据库…

ERStudio使用细则

ER-Studio是一种有助于设计数据库中各种数据结构和逻辑关系的可视化工具,并可用于特定平台的物理数据库的设计和构造,可生成sql和DM1两种文件 工具栏的认知 共有5种逻辑关系,从左到右依次是: Identifying Relationship&#xff…

ERStudio操作指南

ERStudio操作指南 一、创建逻辑模型二、生成SQL脚本 本文使用的ER/Studio版本:ER/Studio Version 8.0.2 一、创建逻辑模型 1、打开ER/Studio后,选择:File>New,打开如下界面,选择Draw a new data model。 如上图&…

DataBseDesign工作笔记003---ERStudio使用笔记_基本使用方法详解

JAVA技术交流QQ群:170933152 场景 这里我采用一个“最经典”的学生选课场景来使用ERStuidio 场景分析 学生与课程是多对多的关系,而在数据库设计中大部分都是将多对多转化成一对多,即需要”第三方”表(选课表)来连接这个关系 学生表一…

ER/Studio生成数据库设计文档

ER/Studio生成数据库设计文档 用ER/Studio生成数据库设计文档之前,至少应该完成数据库的逻辑模型(Logical Model),如果有需要,再进一步可以生成物理模型(Physical Model)。之后,就可…