道路软件质量: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)或者指定路径自己主动搜索方式加入。
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的更多相关文章
- 【转】软件质量之道:SourceMonitor
转:https://blog.csdn.net/feng_ma_niu/article/details/40594799 SourceMonitor是一个源代码衡量工具,由http://www.cam ...
- 免费道路 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 题解: ...
- IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章
十年前,笔者还是一个刚毕业的大学生,对IT业只是停留在学校的编程知识领域.刚出社会,有很多需要学习的地方.在这十年间,笔者经历了程序员,技术经理,项目经理,部门经理等职位.本文就是要说说如何从程序员到 ...
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- 【BZOJ-3195】奇怪的道路 状压DP (好题!)
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 305 Solved: 184[Submit][Statu ...
- codevs1183 泥泞的道路
题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...
- [NOIP2014]寻找道路(图论)
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- vijos1909寻找道路
描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 ...
- 7、软件质量工程师要阅读的书籍 - IT软件人员书籍系列文章
软件质量工程师在项目组中的作用不是那么明显,但是它是软件质量的重要度量标准人员.有句话说:软件质量是生产出来的,不是开发出来的.通过软件质量审查,能够对软件项目的代码等质量进行衡量,最起码要能够对代码 ...
随机推荐
- Linux学习之Makefile文件的编写
转自:http://goodcandle.cnblogs.com/archive/2006/03/30/278702.html 目的: 基本掌握了 make 的用法,能在Linux系统上编 ...
- day5_python学习笔记_chapter6_字符串列表元组
1. 序列:seq[n], seq[x:y], seq * n序列重复n次,切片, 序列翻转 s=”abcde", s[::-1]="edcba" 内建函数:1. 类型转 ...
- springmvc结合freemarker,非自定义标签
参考:http://viralpatel.net/blogs/spring-mvc-freemarker-ftl-example/ 上图: 目录层级: 启动后的访问地址:http://localhos ...
- PHP学习(前言)
PHP学习(前言) 都说做IT技术的都该写写博客,以前没写过,现在开始写写吧.不是给别人看,就当是自己的学习笔记了. 大三结束了,该找工作了,对web前端感兴趣,想从事前端工作,自然要会一门后台语言了 ...
- 大数据技术 vs 数据库一体机[转]
http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...
- jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性
前言:在很多时候,我们需要文本框中显示默认值,获取焦点时,文字框中就会清空给的值,当失去焦点时,如果没有值,继续显示默认的文字,如果有输入值,就显示输入的值.现在项目中需要用到这个地方的功能比较多,于 ...
- tomcat部署不正确
我把一个名为cp的web项目导入myeclipse中,由于要再次导入该工程的新版本,我就把旧版本的cp项目改名成cp3.但是在运行新项目cp的时候,tomcat出问题,一直是之前旧cp对应的tomca ...
- SMT实用工艺
第一章 SMT概述 SMT(表面组装技术)是新一代电子组装技术.经过20世纪80年代和90年代的迅速发展,已进入成熟期.SMT已经成为一个涉及面广,内容丰富,跨多学科的综合性高新技术.最新几年,SMT ...
- Qt在windows与Mac OS中获取执行程序版本号
1 windows中获取执行文件exe的版本号 QString GetFileVertion(QString aFullName) { QString vRetVersion; string vF ...
- XmlDocument加载有Xmlns的xml文档,使用Xpath
using System; using System.IO; using System.Xml; public class Sample { public static void Main() { X ...