转: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. 一起来看看JavaScript中==和===有何不同

    '; // => true 如果其中一个值是true,则将其转换为1再进行比较.如果其中一个值是false,则将其转换为0再进行比较: true == 0; // => false fal ...

  2. git中的ssh和https方式的使用(gitee为例)

    在使用git管理代码,或者使用github,国内的码云(gitee)的时候,有两种方式可以使用,分别是https和ssh,以下均使用gitee为例. ssh方式 配置ssh,如果不配置ssh的话,cl ...

  3. Python 多线程、多进程 (二)之 多线程、同步、通信

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...

  4. centos7下docker发布第一个微服务应用(Eureka)

    1.在windows下打包 微服务应用通过maven进行打包,在项目的pom.xml执行mvn clean package,或者直接通过idea或者eclipse进行maven打包 之上操作将在项目的 ...

  5. luogu P4108 [HEOI2015]公约数数列——solution

    -by luogu 不会啊.... 然后%了一发题解, 关键是 考虑序列{$a_n$}的前缀gcd序列, 它是单调不升的,且最多只会改变$log_2N$次,因为每变一次至少除2 于是,当我们询问x时: ...

  6. windows10 java环境变量设置

    由于安装的是jdk1.8所以不需要配置classpath了,只需要配置java_home和path即可. 我的电脑 -> 右键属性 -> 高级系统设置 -> 高级 -> 环境变 ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  8. 6个讨喜的 ES6 小技巧

    [编者按]本文作者为 Axel Rauschmayer,主要介绍6个 ES6 小技巧.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 在本文中,笔者将介绍6个由 ES6 新功能带来的小技巧. ...

  9. quarz时间配置

    Cron表达式的格式:秒 分 时 日 月 周 年(可选). 字段名                 允许的值                            允许的特殊字符     秒     ...

  10. EntityFramework Code-First 简易教程(一)

    前言:学习了EF框架这么久,还没有好好总结一番,正好遇到一国外的网站,发现不错,随即翻译过来,一是让自己复习一遍,二是供广大初学者学习,翻译过程中加入了一些自己的理解,如有错误,还请指出,多谢多谢.好 ...