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

夏中义 《文心独白》

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)或者指定路径自己主动搜索方式加入。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ19tYV9uaXU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ19tYV9uaXU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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,结果就显示出来了。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ19tYV9uaXU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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打印窗体中去。真是其乐无穷啊。

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

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

道路软件质量:SourceMonitor的更多相关文章

  1. 【转】软件质量之道:SourceMonitor

    转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...

  2. 免费道路 bzoj 3624

    免费道路(1s 128MB)roads [输入样例] 5 7 21 3 04 5 13 2 05 3 14 3 01 2 14 2 1 [输出样例] 3 2 04 3 05 3 11 2 1 题解: ...

  3. IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章

    十年前,笔者还是一个刚毕业的大学生,对IT业只是停留在学校的编程知识领域.刚出社会,有很多需要学习的地方.在这十年间,笔者经历了程序员,技术经理,项目经理,部门经理等职位.本文就是要说说如何从程序员到 ...

  4. AC日记——寻找道路 洛谷 P2296

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  5. 【BZOJ-3195】奇怪的道路 状压DP (好题!)

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Statu ...

  6. codevs1183 泥泞的道路

    题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...

  7. [NOIP2014]寻找道路(图论)

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  8. vijos1909寻找道路

      描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 ...

  9. 7、软件质量工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件质量工程师在项目组中的作用不是那么明显,但是它是软件质量的重要度量标准人员.有句话说:软件质量是生产出来的,不是开发出来的.通过软件质量审查,能够对软件项目的代码等质量进行衡量,最起码要能够对代码 ...

随机推荐

  1. SGU 242. Student's Morning( 网络流 )

    看英文题真是麻烦...理解题意花的时间比想的时间还长...裸的网络流, 我们只要限制每个人出发流量为1, 每个大学进入的流量至多为2即可, 相当于构造可行解. -------------------- ...

  2. PHP合并数组+与array_merge的区别分析

    主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面 ...

  3. break的使用例一

    /* Name:break的使用例一 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月21日 02:28:24 Description:本程序代码无如何含 ...

  4. ONFI闪存数据通道接口标准

    早期的闪存产品每个厂家的设计标准各有不同,会碰到各种各样的问题,特别是到了06年之后,闪存产业市场需求开始发力,造成了迫切需要一个统一的标准来改变这个问题. 2007年1月,以英特尔,镁光,海力士,意 ...

  5. Qt 如何处理密集型耗时的事情(频繁调用QApplication::processEvents)

    有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态.例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响 ...

  6. 精通 VC++ 实效编程280例 - 01 窗口

    窗口是屏幕上的一个矩形区域.窗口分为3种:重叠窗口.弹出窗口和子窗口.每个窗口都有由系统绘制的“非客户区”和应用程序绘制的“客户区”.在 MFC 中,CWnd 类为各种窗口提供了基类. 1 通过 HW ...

  7. uva 719 Glass Beads(后缀自动机)

    [题目链接] https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=524&am ...

  8. 菱形java代码

    public class boy { //菱形 public static void main(String[] args) { int m=4; for (int i=0;i<=m;i++){ ...

  9. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  10. 用JS判断两个数字的大小

    js中的var定义的变量默认是字符串,如果单纯的比较字符串的话,会出现错误,需要先转化为int类型在做比较. [备注:110和18在你写的程序中是18大的,因为 这两个数都是字符串,而1和1相等之后比 ...