道路软件质量:SourceMonitor

有些事情必须这样做,不是幸福,但是,缓解疼痛,因为不。更痛苦——这是无奈。

夏中义 《文心独白》

 

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部分进行特殊的声明凝视,能够再project属性中设置过滤。不计算在内。

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建立project。针对不同的Solution活着Project建立Checkpoint。

1. 安装SourceMonitor。这个不具体介绍,下载安装就可以。

2. 打开SourceMonitor,建立project。


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


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


5. 选择当前project要度量解析的文件。能够通过配置文件列表(XML)或者指定路径自己主动搜索方式加入。


6. 选择相关的配置,能够直接下一步忽略。假设有相关须要进行选择设定。



7. 指定当前Checkpoint的名称。


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


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


10. project建立完毕,并完毕第一个度量点。


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


12. 双击某个文件,查看具体信息。


这样,主要的一个project就建立完成了,其它的功能。比如设置各个指标的默认值,大家能够自己尝试一下。

 

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++后的文件名參数以及工作文件夹參数就可以。

 

6 进一步思考

又到了最后关键的一步了。谈一下最近的一些感悟吧。

有些事情不了解的时候,总会从消极的角度的方面去考虑问题。

比如说,曾经我对多线程不是非常了解,我便会极力的保护自己“不懂多线程”这个缺点,从而去从消极的角度及方面评判多线程。可是近期处理大规模数据文件时(大概2000万个以上)。我却深深的体会到了多线程的各个方面的优势,也学会了很多其它的知识,尽管也写出了让大牛们嘲笑的“自旋锁”代码。看过《Imperfect C++》关于多线程的那一节后,立刻脸红了,利用周末的时间,彻底改动了这个“问题”。

另外。再接触这方面的知识时。就会从不同的角度上去理解及思考。也发现了很多其它更有趣的内容,比如怎么用C++11的异步,把界面和处理扔到不同的线程中去。又如何把Log扔到相应的Log打印窗体中去。真是其乐无穷啊。

上周末,又看了一遍《星际宝贝》。也总结了近期各个不尽人意的方面。发现自己曾经实在是太过自我为中心,有非常多问题不知道从自己找原因,而不断的责怪别人(真心的对被我伤害的人说声对不起)。还是应该时时刻刻警醒自己。假设“坏蛋”成分要满了,那就临时放下全部的事,“治”好了,然后继续。因为,不要看错了!


版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-09-10 12:13  hrhguanli  阅读(1292)  评论(0编辑  收藏  举报