有些事非做不可,并不是为了幸福,而是减缓痛苦,由于不做,则更痛苦――这便是无奈。
夏中义 《文心独白》
博客又有1阵子没更新了,最近认真思考了阿里上市的成功的地方:选择和坚持。其实http://www.wfuyu.com/cxrs/并没有绝对的对与错,也没有绝对的成功与失败。正如“有些人活着,他已死了”云云,我总是拿对与错来让自己选择,其实就是根本的毛病。决定走1条路,就继续走下去,终点虽然不知道在哪里,那就纵情享受沿途的风景,和珍惜与身旁的陪伴着的人的分分钟钟!
扯得有点远,回归主题。之前讨论了软件质量之道的各个方面,但是也都是1些虚话,达不到真实的目的。既然如此,还不如针对上1篇文章结尾部份的流程图的每一个部份,进行详细的描写,到达人人可用的效果,使之发扬光大。
按部就班,首先先说1下各个工具的用处和使用方法,然后再说明如何用Ant进行管理,最后再统1加到CruiseControl中进行调度。
SourceMonitor是1款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括C、C++、C#、Java、VB、Delphi和HTML,并且针对不同的语言,输出不同的代码度量值。
像其他代码度量工具1样,SourceMonitor只关注代码,并为编码人员提供及时的反馈,它不是1款项目管理工具,不关注项目实行中从功能分析到设计编码,再到测试这全部进程。
SourceMonitor只是1个“度量”工具,但是通过基本的度量,可以从代码表面层次发现1些根本的,基础的问题,所以将其作为介绍的第1个工具,也应当做为最基础的1个工具来为软件质量把关。
说到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也被作为1个分支计算。
4. 注释比例(Percent Lines with Comments)
该值唆使注释行(包括/*……*/和//……情势的注释)占总行数的比例。1般公司会对每一个文档的header或footer部份进行特殊的声明注释,可以再工程属性中设置过滤,不计算在内。
5. 类个数(Classes)
包括class,struct和template在内的个数。
6. 平均每一个类方法数(Methods per Class)
平均每一个类的方法数,即包括内联和非内联的,template函数在内的类方法数除以所有类的个数。
7. 函数个数(Functions)
所有函数的个数。
8. 平均每一个函数包括的语句数目(Average Statements per Method)
总的函数语句数目除以函数数目得到该值。
9. 函数圈复杂度(Function Complexity)
圈复杂度唆使1个函数可履行路径的数目,以下语句为圈复杂度的值贡献1:if/else/for/while语句,3元运算符语句,if/for/while判断条件中的"&&"或“||”,switch语句,后接break/goto/ return/throw/continue语句的case语句,catch/except语句等。对应有最大圈复杂度(Max Complexity)和平均圈复杂度(Avg Complexity)。
10. 函数深度(Block Depth)
函数深度唆使函数中分支嵌套的层数。对应有最大深度(Max Depth)和平均深度(Avg Depth)。
下面介绍如何使用SourceMonitor建立工程,针对不同的Solution活着Project建立Checkpoint。
1. 安装SourceMonitor,这个不详细介绍,下载安装便可。
2. 打开SourceMonitor,建立工程。
3. 选择语言,并点击下1步。
4. 为当前工程命名,并选择工程文件保存路径。
5. 选择当前工程要度量解析的文件,可以通过配置文件列表(XML)或指定路径自动搜索方式添加。
6. 选择相干的配置,可以直接下1步疏忽,如果有相干需要进行选择设定。
7. 指定当前Checkpoint的名称。
8. 查看配置项,并肯定。
9. 确认要度量的文件列表。
10. 工程建立终了,并完成第1个度量点。
11. 双击检查点,查看各个文件的度量值。
12. 双击某个文件,查看详细信息。
这样,基本的1个工程就建立终了了,其他的功能,例如设置各个指标的默许值,大家可以自己尝试1下。
由于SourceMonitor是代码度量最基础的1个模块,所以每一个http://www.wfuyu.com都可能会将其作为代码评测的1个经常使用功能项添加到熟习的编辑器中。这样每写完1段代码,都可以履行检测1下当前文件是不是满足度量指标。
1. 设置外部工具。
2. 添加并配置选项
Title: SourceMonitor
Command: 安装SourceMonitor的目录
Arguments: /DC++ $(ItemPath)
Initial directory: $(SolutionPath)
3. 添加快捷键
选择刚才添加SourceMonitor是ExternalTools里面第几个,例如说我刚才添加的位置为第6个,则选择Command6,并指定快捷键(我默许指定为Alt + 1,这个根据个人喜好来,但是尽可能别造成快捷键冲突)。
4. 打开某个文件,按快捷键履行SourceMonitor,结果就显示出来了。
由于很多公司都会开发2次语言,来合适自己工具的使用。这类语言可能跟C或某些语言很相似,但是用Visual Studio这类庞大的工具来打开,效力不是很高,所以有可能选择使用1些轻量级的编辑器,例如说UltraEdit这类,那末添加方法跟Visual Studio类似,以下。
1. 工具栏配置添加新工具。
2. 进行参数设置
名称: SourceMonitor
命令行: "D:SourceMonitorSourceMonitor.exe" /DC++"%f"
工作目录: %p
3. 点击履行,或通过快捷键履行。
如果使用其他工具,则可以参考工具的帮助文档,修改/DC++后的文件名称参数和工作目录参数便可。
又到了最后关键的1步了,谈1下近期的1些感悟吧。有些事情不了解的时候,总会从消极的角度的方面去斟酌问题。
例如说,之前我对多线程不是很了解,我便会极力的保护自己“不懂多线程”这个缺点,从而去从消极的角度及方面评判多线程。但是最近处理大范围数据文件时(大概2000万个以上),我却深深的体会到了多线程的各个方面的优势,也学会了更多的知识,虽然也写出了让大牛们嘲笑的“自旋锁”代码,看过《Imperfect C++》关于多线程的那1节后,立马酡颜了,利用周末的时间,完全修改了这个“问题”。
另外,再接触这方面的知识时,就会从不同的角度上去理解及思考,也发现了更多更有趣的内容,例如怎样用C++11的异步,把界面和处理扔到不同的线程中去,又怎样把Log扔到对应的Log打印窗口中去,真是其乐无穷啊。
上周末,又看了1遍《星际宝贝》,也总结了最近各个不尽人意的方面,发现自己之前实在是太过自我为中心,有很多问题不知道从自己找缘由,而不断的责备他人(真心的对被我伤害的人说声对不起)。还是应当时时刻刻警省自己,如果“坏蛋”成份要满了,那就暂时放下所有的事,“医治”好了再继续,不要由于自己而出错!