转自: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. HDU1816(二分+2-SAT)

    Get Luffy Out * Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  2. socket 模拟 HTTP请求

    一.socket介绍 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层.socket则是对TCP/I ...

  3. 【代码笔记】iOS-长条蓝色button

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

  4. 【读书笔记】iOS-网络-使用Game Kit实现设备间通信

    Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...

  5. 【读书笔记】iOS-网络-解析响应负载

    Web Service可以通过多种格式返回结构化数据, 不过大多数时候使用的是XML与JSON.也可以让应用只接收HTML结构的数据.实现了这些Web Service或是接收HTML文档的应用必须能解 ...

  6. 纯小白入手 vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

  7. Js利用Canvas实现图片压缩

    最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢.为此,需要对图片进行压缩处理来优化上传功能.以下是具体实现: /* * 图片压缩 * img 原始图片 ...

  8. android开发之braodCast

    广播问题: 遇到了broadcast中sendBroadcast之后,注册registerReceiver的receiver接受不到广播,原因是permisson权限问题. 自定义的permissio ...

  9. 想涨工资吗?那就学习Scala,Golang或Python吧

    [编者按]据薪水调查机构 PayScale 提供的数据显示,掌握 Scala,Golang 和 Python 语言以及诸如 Apache Spark 之类的大数据技术,能带来最大的薪水提升.本文作者为 ...

  10. c#经典算法之冒泡排序(Bubble Sort)

    转载于:https://www.cnblogs.com/shen-hua/p/5422676.html 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面, ...