转自:https://www.geekzone.co.nz/vs2008/4773

Visual Studio 2008 Team Developer和Team Suite版本中提供的许多新功能之一是Code Metrics(CM)。

代码度量标准衡量行业标准软件特征。它涵盖了一系列方面,可为开发人员提供有用且可量化的反馈。

显示代码指标非常简单; 只需在解决方案资源管理器中右键单击项目或解决方案,然后选择“计算代码度量标准”。以下是结果:

结果窗口显示五个不同指标中的每一个:循环复杂性,继承深度,类耦合,代码行和整体可维护性指数。通过展开左侧的树,您可以从整个项目向下钻取到类中的各个方法。但是这些数字意味着什么?

Cyclomatic Complexity
Cyclomatic Complexity是在执行方法时可以采用的线性独立路径的总数,基于“if”,“switch”,“while”和其他类似的分支语句的数量。如果一个方法中没有这样的语句,那么只有一个路径可以遵循,因此Cyclomatic Complexity就是一个。

在此示例中,执行此方法时可以遵循三个可实现的路径,具体取决于X的值:

  • X为1时遵循的路径
  • X为2时遵循的路径
  • X不是1或2时遵循的路径

Cyclomatic Complexity告诉你两件重要的事情。首先,它表明了方法的一般复杂性。越低越好; 如果数字很高,该方法可能试图涵盖太多不同的情况(即试图太聪明),需要分解成更简单,专门的方法,专门针对个别情况(并且更容易维护) 。

其次,为了确保每个方案都经过适当的测试,您必须为每个路径创建一个唯一的测试用例。Cyclomatic Complexity会告诉您需要编写的测试用例总数,以确保涵盖所有可能的情况。

如果Cyclomatic Complexity高于一段代码的单元测试数量,您将会知道某些场景没有被考虑,并且可能存在漏洞。

继承
深度继承深度是类层次结构中继承级别的总数,从1开始(记住所有内容都从Object继承)。这个例子的继承深度为3:

越低越好; 如果继承深度高于三或四,您的代码可能过度设计并且难以维护。

数字越大,您需要修改的子类越多 - 花费时间和金钱,并可能引入错误 - 如果您对基类进行了重大更改。

如果您认为您对这些子类所做的每一项更改都可能会引入与他们交互的所有对象的潜在错误......那么,您明白我的观点。

类耦合
类耦合计算类与之交互的不同类型的总数,不包括原始类型和内置类型,如Int32和String。越低越好; 数字越大,一个类的“束缚”越多,对其周围环境的其余部分的依赖性越大。

随着阶级耦合的增加,越来越难以“撕掉”并在另一个项目中使用。简而言之,类的耦合越高,它的可重用性就越低。

从理论上讲,我们都看过应该可重用的类的例子,但在实践中,证明是高度针对项目的,并且每次“移植”到另一个时都必须或多或少地完全重写。项目。
如果这个类在最初创建时设计得更好,我们以后可以节省很多时间。

代码
代码行(LOC)通过计算代码行中可执行代码行的总数来衡量一个软件的大小。与其他指标一样,较低的通常更好,仅仅是因为您最终需要更少的源代码来解决问题。但请记住,在使用此指标之前,您应该注意一些注意事项:

  • 不是每条线都是平等的。有些线条很简单,有些线条非常复杂,需要花费数小时才能搞清楚。
  • 它不计算已删除和替换的代码。
  • 有时将东西分成多行会使它们更易于理解; 在这种情况下,增加LOC可提高可维护性。
  • 除非经过精心设计,经过全面测试和生产就绪的代码,每次坐在键盘上时都会直接从手指流出,因此LOC无法准确反映出已放入软件中的工作量。

明智地使用此指标。在过去,LOC一直被滥用来衡量日常编程生产力,带来灾难性后果。请记住,软件开发不仅仅是键入代码!

可维护性指数
最后,但并非最不重要的是,可维护性指数,从0到100,表示类,成员,命名空间或项目的整体可维护性。它实际上是其他指标的集合,但它还包括一些额外的位,如Halstead Volume,它测量程序的总长度和词汇量。对于变化,这里更高更好。

可维护性指数还提供红色/黄色/绿色交通灯图标,使您可以快速查看问题区域。当数字低于20时,交通信号灯变为黄色,红色低于10时,交通信号灯将变为黄色,此时您应该跑到山上。

总结
Visual Studio 2008的代码度量标准不会衡量性能或安全性,也不会帮助您解决任何错误。但是,在您开发软件时,它将帮助您识别软件中的潜在问题区域。

如果您尽早解决这些问题,您将节省时间和金钱,而这些时间和金钱将在以后重新分解不可维护的代码。知道你第一次就做对了,你也会觉得自己很好!

【转】VISUAL STUDIO 2008代码指标为您节省资金的更多相关文章

  1. [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

    前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...

  2. SQL SERVER 2005快捷键+visual studio 2008 快捷键

    一.SQL SERVER 2005快捷键  快捷键                                       功能           CTRL       +       SHIF ...

  3. VISUAL STUDIO 2008 WINDOWS FORM项目发布生成安装包详解(转)

    转自:http://www.cnblogs.com/killerofyang/archive/2012/05/31/2529193.html Visual Studio 2008 Windows Fo ...

  4. Qt5 FOR WINCE7, Visual Studio 2008环境的搭建

    Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...

  5. Visual Studio 2008中FormatX源代码格式化插件

    原地址:http://www.cr173.com/html/15492_1.html 我总是对组里的兄弟代码规范性近乎完美的要求,举个简单的例子: 1.  每个方法必须有注释,方法参数详细说明 2.  ...

  6. SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍

    原文:SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍 由于开发SSMS2008插件是通过VS2008进行的,有必要先介绍一下VS2008的插件开 ...

  7. 使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍

    使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍 Windows MobileMobileWindowsMicrosoftWinForm 介绍 Microso ...

  8. Windows 7 Visual Studio 2008配置OpenGL开发环境

    Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...

  9. Visual Studio 2008常见问题

    1.asp.net在什么软件上运行?学习asp往往需要测试asp程序,电脑不能直接测试,需要装IIS才能运行,但装IIS要么需要安装盘,要么需要安装包,而且设置也很复搜索杂.这里给大学推荐两个替代II ...

随机推荐

  1. vue-router重定向 不刷新问题

    前阵子太忙了,自己一个人一边开发着新项目,一边维护着旧项目,没时间写博客,终于让我腾出时间了.废话少说,开始正文. 问题描述: 之前项目是angular开发的,后来用vue重构后.项目路径和vue路径 ...

  2. 洛谷P2045 方格取数加强版(费用流)

    题意 题目链接 Sol 这题能想到费用流就不难做了 从S向(1, 1)连费用为0,流量为K的边 从(n, n)向T连费用为0,流量为K的边 对于每个点我们可以拆点限流,同时为了保证每个点只被经过一次, ...

  3. 【代码笔记】iOS-字体从右向左滚动

    一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...

  4. 【代码笔记】iOS-动画的跳转

    一,工程图. 二,代码. //点击任何处跳转到页面 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CATransi ...

  5. Nginx的location剖析

    1.location的作用: location指令的作用是根据用户的请求的URL来执行不同的应用 2.location的语法: location [ = | ~ | ~* | ^~ ] uri { . ...

  6. OpenCV多版本管理

    OpenCV在Ubuntu下经常会安装多个版本,比如默认版本,自己安装的,ros安装的等等.有时候需要给程序指定某个OpenCV版本,网上有一些方法,但还是会遇到很多问题. 这里提供一种选择,即指定O ...

  7. Android长按事件和点击事件 冲突问题

    长按点击的时候默认会触发点击事件,android系统是优先点击的,并且没有返回值:而长按事件是有返回值的,如果返回false,两个事件都会有响应,如果返回true则只响应长按事件.

  8. Android手机上,利用bat脚本模拟用户操作

    ………… 那么你就可以来看看这篇帖子了. 言归正传 利用bat脚本模拟用户操作,需要用到两点: ①就是adb命令了,adb命令可以用来模拟用户在手机上的操作 ②bat语言,就是批处理语言,主要用来进行 ...

  9. 1.print()与input()

    hello world必备->print函数 print(): 作用: 打印函数,打印数据到屏幕中 参数列表: print(value, ..., sep=' ', end='\n', file ...

  10. python unnitest 经验总结

    由于我的用例是数据驱动,每个用例保存为一个txt或者xls文件,执行时候需要读取文件,并将所有变量实例化成一个用例: 之前自己设计了框架,由于考虑需要生成一个美观通用的报告格式(原格式都是手写的htm ...