关于 Visual Studio 的代码度量值
查看方式:Visual Studio -> Analyze -> Calculate code metrics feature
代码度量(Code Metrics)是用来测量专业标准的软件特性。在某些方面,它提供了量化的有用反馈给开发者。
查看代码度量值很简单:在项目或解决方案上按右键,选择"Calculate Code Metrics"。 以下是一些类似的结果:

结果窗口中有五个不同的度量特性:圈复杂度(Cyclomatic Complexity), 继承深度(Depth of Inheritance), 类耦合度(Class Coupling), 代码行数(Lines of Code), 和一个总的可维护指数(Maintainability Index)。 通过展开左边的树结点,你可以从整个项目深入观察类里面的方法。
但是特征中的那些数字是什么意思呢?
圈复杂度(Cyclomatic Complexity)
圈复杂度是调用方法时取得的线性独立路径的总数,基于if,switch,while和类似的分支语句的数量。 如果一个方法没有这样的语句存在,就表示方法中只有一条可行路线,这样的情况下圈复杂度的值为1。
public int DoSomething(int x)
{
if (x == )
{
// code that is executed when x is 1
} if (x == )
{
// code that is executed when x is 2
} // code that is executed even if x is neither 1 or 2 return x;
}
在这个例子中,有三条可行的路线存在,走哪条路线取决于x的值:
1、当x是1
2、当x是2
3、当x不是1也不是2
圈复杂度告诉你两件重要事:
首先,它指出一个方法的综合复杂度。值越低越好,如果数值较高,就说明方法可能覆盖了过多不同情况的处理(例如,尝试做太多容错处理),说明方法需要分解成更简单的只满足一种情况的单一职责方法(这样会更容易维护)。
其次,为了确保每种情况都被完全地测试,你必须为每条路线创建唯一的测试用例。 圈复杂度告诉你需要写多少个测试用例来确保所有可能的情况都已经被覆盖。
如果一个代码段的圈复杂度值多于测试用例的数量,你就会发现有些情况没有被处理,而且可能藏匿着bug。
继承深度(Depth of Inheritance)
继承深度是表示一个类的继承的级数,起始值为1(所有类都是继承自Object)。 这个例子有3级继承:

该值是越低越好; 如果继承深度在3或4以上,你的代码可能超出设计标准(over-engineered),说明代码是难以维护的。
数值越高,就越多子类需要修改 -- 消耗时间和金钱,也潜在地引入bug -- 如果你对基类做出重大变更的话。
只要你考虑下每个变更对于子类会引入一些潜在的bug,这些bug会影响到他们引用的所有对象。。。 你就懂我意思了。
类耦合度(Class Coupling)
类耦合度是计算一个类中引用到的对象类型数,不包括原始的和内置的类型,像int和string。 该值是越低越好; 值越高,就代表类绑定了越多类,也意味着存在越多依赖关系在它的中间环境中。
随着类的耦合度的增加,它就会变得难以分离出来用在另一个项目中。 简单来讲,类的耦合度越高,它的重用性就越低。
我们都看过很多理论案例说类要尽量可重用,但实际编程,大部分类都是高度针对特定项目而编写的,或多或少需要完全重写才能"重用"在另一个项目中。
如果类在它最初被创建的时候设计得更完善,我们就可以在之后省掉很多时间。
代码行数(Lines of Code)
代码行数是通过计算执行的代码行数来量度软件块的大小。 虽然和上面的特征一样,这个值也是越低越好(原因很简单,你以更少的代码完成功能就能减少你思考的负担),但在用这个特征前有几条告诫你需要知道:
1、不是每行代码都相等。 有些行是非常简单,有些却非常复杂,会花费数小时来计算。
2、它不计算已删除或已覆盖的代码
3、有时将一行复杂的代码分割成几行会令它更容易理解; 在这样的情况下,增加了代码行但更容易维护。
4、除非设计完善并彻底测试过,而且已成型的所有代码是出自你本人,否则代码行数不会精确反映投入软件中的努力的量。
要聪明地使用这个度量值。 在以前,代码行数出名地被滥用于测量每日的编程生产力,带来了灾难性的结果。 请记住,比起写代码,软件开发有更多重要的东西。
可维护指数(Maintainability Index)
最后是可维护指数,范围是0到100,用来指示所有类,成员,命名空间或项目的可维护性。 事实上,它是一个之前所有度量值的合计值,但它也同时包含一些额外的度量值,像霍尔斯特德量(Halstead Volume),该值用来量度程序的总长度和词汇数。 与之前的度量值不同,这个值是越高越好。
可维护指数还提供了一个红/黄/绿的交通灯图标,让你一眼看见问题的区域。 交通灯会转黄当数值低于20,当数值低于10时会转红,这时你需要重新检查你的代码以躲避危险。
参考资料
https://blog.csdn.net/zh_geo/article/details/52954145
https://docs.microsoft.com/zh-cn/visualstudio/code-quality/code-metrics-values?view=vs-2017
关于 Visual Studio 的代码度量值的更多相关文章
- 通过 Visual Studio 的“代码度量值”来改进代码质量
1 软件度量值指标 1.1 可维护性指数 表示源代码的可维护性,数值越高可维护性越好.该值介于0到100之间.绿色评级在20到100之间,表明该代码具有高度的可维护性:黄色评级在10到19之间,表示该 ...
- 通过Visual Studio 的“代码度量值”来改进代码质量
1 软件度量值指标 1.1 可维护性指数 表示源代码的可维护性,数值越高可维护性越好.该值介于0到100之间.绿色评级在20到100之间,表明该代码具有高度的可维护性:黄色评级在10到19之间,表示该 ...
- visual studio制作代码片段
使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来.ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代 ...
- Visual Studio 的代码片段工具
当安装完Visual Studio之后,会有附带一些原生的代码片段文件(*.snippet),对于vs2013参考目录如下: X:\Program Files (x86)\Microsoft Visu ...
- Visual Studio 创建代码注释默认模版方法
在日常的开发中我们经常需要为页面添加注释和版权等信息,这样我们就需要每次去拷贝粘贴同样的文字,为了减少这种重复性的工作,我们可以把这些信息保存在Visual Studio 2012类库模版文件里 1. ...
- [搬运] 将 Visual Studio 的代码片段导出到 VS Code
原文 : A Visual Studio to Visual Studio Code Snippet Converter 作者 : Rick Strahl 译者 : 张蘅水 导语 和原文作者一样,水弟 ...
- 【转】VISUAL STUDIO 2008代码指标为您节省资金
转自:https://www.geekzone.co.nz/vs2008/4773 Visual Studio 2008 Team Developer和Team Suite版本中提供的许多新功能之一是 ...
- Visual Studio模板代码注释小技巧分享
在日常开发过程中,难免有这样一种需求:就是你所建的每一个类文件或者接口文件都需要标注下作者姓名以及类的用途.如果我们每次创建文件的时候都需要写一遍这些信息是很烦神的.还好Visual Studio给我 ...
- Visual Studio模板代码注释小技巧
在日常开发过程中,难免有这样一种需求:就是你所建的每一个类文件或者接口文件都需要标注下作者姓名以及类的用途.如果我们每次创建文件的时候都需要写一遍这些信息是很烦神的.还好Visual Studio给我 ...
随机推荐
- 浅谈Python-IO多路复用(select、poll、epoll模式)
1. 什么是IO多路复用 在传统socket通信中,存在两种基本的模式, 第一种是同步阻塞IO,其线程在遇到IO操作时会被挂起,直到数据从内核空间复制到用户空间才会停止,因为对CPython来说,很多 ...
- HugeGraph入门
一.HugeGraph简介 最近在搞好友推荐方便的工作,选择了图数据的方法,使用并学习了HugeGraph,再次记录一下. HugeGraph是百度在2018年中旬开源的一款图数据库(Graph Da ...
- Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softma
import numpy as np from matplotlib import pyplot as plt # 创建线性回归数据集 def create_dataset(): X = 2 * ...
- essential
essential - 必应词典 美[ɪ'senʃ(ə)l]英[ɪ'senʃ(ə)l] n.要点:要素:实质:必需品 adj.完全必要的:必不可少的:极其重要的:本质的 网络基本的:必需的 变形复数: ...
- phpstorm 使用xdebug断点
1.下载对应版本 xdebug 下载地址:https://download.csdn.net/download/q2104574/11185239 比如你用的php7.0.12以上的版本,xdebug ...
- 006 认识BeanNameAware
在看Spring的生命周期,就要注意到Spring Aware,Aware是什么,在这篇文章中,主要是说明三个部分,Spring的生命周期[这个在后面会继续说明,这里这是一个大纲],然后说明Sprin ...
- shell编程系列19--文本处理三剑客之awk中的字符串函数
shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...
- vs Qt mysql 打包程序 Driver not loaded Driver not loaded
vs下开发Qt连接mysql程序,开发过程中操作MySQL没有问题,但打包以后安装在别的电脑上发现竟然无法连接MySQL,打包的时候,所需的libmysql.dll等dll文件拷贝到exe同级目录了, ...
- Qt widget使用QML自定义导航栏
具体方法: https://www.cnblogs.com/judes/p/11359243.html qml: import QtQuick 2.0 import QtQuick 2.9 impor ...
- CentOS7下yum安装Redis
(1).Redis概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value(键值型)数据库(非关系型数据库),并提供多种语言的API. Redi ...