转:https://blog.csdn.net/feng_ma_niu/article/details/40594799

SourceMonitor是一个源代码衡量工具,由http://www.campwoodsw.com/开发,免费下载。

1 引子

博客又有一阵子没更新了,最近认真思考了阿里上市的成功之处:选择和坚持。其实人生并没有绝对的对与错,也没有绝对的成功与失败。正如“有些人活着,他已经死了”云云,我总是拿对与错来让自己选择,其实就是根本的错误。决定走一条路,就继续走下去,终点虽然不知道在哪里,那就尽情享受沿途的风景,以及珍惜与身边的陪伴着的人的分分钟钟!

扯得有点远,回归主题。之前讨论了软件质量之道的各个方面,但是也都是一些虚话,达不到真正的目的。既然如此,还不如针对上一篇文章结尾部分的流程图的每个部分,进行详细的描述,达到人人可用的效果,使之发扬光大。

循序渐进,首先先说一下各个工具的用途以及使用方法,然后再说明如何用Ant进行管理,最后再统一加到CruiseControl中进行调度。

2 SourceMonitor简介

SourceMonitor是一款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括C、C++、C#、Java、VB、Delphi和HTML,并且针对不同的语言,输出不同的代码度量值。

像其他代码度量工具一样,SourceMonitor只关注代码,并为编码人员提供及时的反馈,它不是一款项目管理工具,不关注项目实施中从功能分析到设计编码,再到测试这整个过程。

SourceMonitor只是一个“度量”工具,但是通过基本的度量,可以从代码表面层次发现一些根本的,基础的问题,所以将其作为介绍的第一个工具,也应当成为最基础的一个工具来为软件质量把关。

3 SourceMonitor度量值

说到SourceMonitor的度量,对于不同的语言提供不同方面的度量,这里仅针对C++进行介绍,其提供了以下几方面的度量。(关于其他语言,请参考SourceMonitor的帮助文档Explanation of Language Metrics章节)

1. 总行数(Lines)

包括空行在内的代码行数。

2. 语句数(Statements)

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

3. 分支语句比例(Percent Branch Statements)

该值表示分支语句占语句数目的比例,这里的“分支语句”指的是使程序不顺序执行的语句,包括if、else、for、while、break、continue、goto、switch、case、default和return。需要注意的是,do不被计算在内,因为其对应的while已经计算了。另外,异常处理的catch也被作为一个分支计算。

4. 注释比例(Percent Lines with Comments)

该值指示注释行(包括/*……*/和//……形式的注释)占总行数的比例。一般公司会对每个文档的header或者footer部分进行特殊的声明注释,可以再工程属性中设置过滤,不计算在内。

5. 类个数(Classes)

包括class,struct和template在内的个数。

6. 平均每个类方法数(Methods per Class)

平均每个类的方法数,即包括内联和非内联的,template函数在内的类方法数除以所有类的个数。

7. 函数个数(Functions)

所有函数的个数。

8. 平均每个函数包含的语句数目(Average Statements per Method)

总的函数语句数目除以函数数目得到该值。

9. 函数圈复杂度(Function Complexity)

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

10. 函数深度(Block Depth)

函数深度指示函数中分支嵌套的层数。对应有最大深度(Max Depth)和平均深度(Avg Depth)。

4 SourceMonitor实战

下面介绍如何使用SourceMonitor建立工程,针对不同的Solution活着Project建立Checkpoint。

1. 安装SourceMonitor,这个不详细介绍,下载安装即可。

2. 打开SourceMonitor,建立工程。

3. 选择语言,并点击下一步。

4. 为当前工程命名,并选择工程文件保存路径。

5. 选择当前工程要度量解析的文件,可以通过配置文件列表(XML)或者指定路径自动搜索方式添加。

6. 选择相关的配置,可以直接下一步忽略,如果有相关需要进行选择设定。

7. 指定当前Checkpoint的名称。

8. 查看配置项,并确定。

9. 确认要度量的文件列表。

10. 工程建立完毕,并完成第一个度量点。

11. 双击检查点,查看各个文件的度量值。

12. 双击某个文件,查看详细信息。

这样,基本的一个工程就建立完毕了,其他的功能,例如设置各个指标的默认值,大家可以自己尝试一下。

5 配置SourceMonitor到编辑器内

由于SourceMonitor是代码度量最基础的一个模块,所以每个程序员都可能会将其作为代码评测的一个常用功能项添加到熟悉的编辑器中。这样每写完一段代码,都可以执行检测一下当前文件是否满足度量指标。

5.1 Visual Studio设置

1. 设置外部工具。

2. 添加并配置选项

Title: SourceMonitor

Command: 安装SourceMonitor的目录

Arguments: /DC++ $(ItemPath)

Initial directory: $(SolutionPath)

3. 添加快捷键

选择刚才添加SourceMonitor是ExternalTools里面第几个,例如说我刚才添加的位置为第六个,则选择Command6,并指定快捷键(我默认指定为Alt + 1,这个根据个人喜好来,但是尽量别造成快捷键冲突)。

4. 打开某个文件,按快捷键执行SourceMonitor,结果就显示出来了。

5.2 UltraEdit设置

由于很多公司都会开发二次语言,来适合自己工具的使用。这种语言可能跟C或者某些语言很相似,但是用Visual Studio这种庞大的工具来打开,效率不是很高,所以有可能选择使用一些轻量级的编辑器,例如说UltraEdit这种,那么添加方法跟Visual Studio类似,如下。

1. 工具栏配置添加新工具。

2. 进行参数设置

名称: SourceMonitor

命令行: "D:\SourceMonitor\SourceMonitor.exe" /DC++"%f"

工作目录: %p

3. 点击执行,或者通过快捷键执行。

5.3 其他工具设置

如果使用其他工具,则可以参考工具的帮助文档,修改/DC++后的文件名称参数以及工作目录参数即可。

【转】软件质量之道:SourceMonitor的更多相关文章

  1. 软件质量之道:PCLint之中的一个

    故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能. 孟子 1引子 今天听老韩一席话,当真是感慨万千啊.心怀斗志昂扬.奋斗十年,到头来.却看到身 ...

  2. 道路软件质量:SourceMonitor

    有些事情必须这样做,不是幸福,但是,缓解疼痛,因为不.更痛苦--这是无奈. 夏中义 <文心独白> 1 简介 博客没有更新了一段时间,了阿里上市的成功之处:选择和坚持.事实上人生并没有绝对的 ...

  3. 《Google软件测试之道》基础

    <Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...

  4. <读书笔记> 代码整洁之道

    概述      1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...

  5. 130道C#面试题

    C#/.Net/数据库笔试资料C#资料(一)1.静态成员和非静态成员的区别?答:静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做 ...

  6. 《代码整洁之道》(Clean Code)- 读书笔记

    一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...

  7. Programming好文解读系列(—)——代码整洁之道

    注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...

  8. 《Google软件测试之道》简介

    <Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...

  9. 品味性能之道<七>:索引基础

    一.索引概述      索引(index),它是数据库必不可少的一部分.它其实很简单呐!很好理解.      索引好比如一本书的目录,一张地图,一个写字楼里挂在大堂墙上的公司名录,一个地铁站的出口指示 ...

随机推荐

  1. HDU2859(KB12-Q DP)

    Phalanx Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. js 复制粘贴

    input输入框<div id="top-title" style="position: relative"> <img class=&quo ...

  3. 【代码笔记】iOS-NSSearchPathForDirectoriesInDomainsDemo

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...

  4. HTTP协议学习随笔

    一 HTTP概述 HTTP简单说其实就是一套语言交流规则!Http使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,也能够确保数据在传输过程中不会被损坏或产生混乱. B/S结构 用户在浏览器, ...

  5. Memcached+WebApi记录

    一.安装Memcached Memcached1.2.6 http://files.cnblogs.com/files/jasonduan/11465401756756.zip Memcached.C ...

  6. my big day is coming!

    明天博士学位论文答辩,给自己加油! 期望一切顺利!

  7. android开发之braodCast

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

  8. MVC与单元测试实践之健身网站(一)-项目概述

    前不久刚刚通过租房网站的开发学习了MVC,并随后学习了单元测试相关的基础,现在开始健身网站的开发,该项目将结合MVC与单元测试,在开发实践过程中,趁热打铁,巩固并运用之前的内容. 一 健身网站功能描述 ...

  9. Retrofit+RxJava(1)-在Android Studio中配置

    在build.gradle中添加 //加入retrolambda需要的plugin声明 apply plugin: 'me.tatarka.retrolambda' //retrolambda的编译路 ...

  10. python 实现int函数

    拖了这么久,最终还是战胜了懒惰,打开电脑写了这篇博客,内容也很简单,python实现字符串转整型的int方法 python已经实现了int方法,我们为什么还要再写一遍,直接用不就好了?事实确实如此,但 ...