加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SourceMonitor的学习和使用之静态检查

(2022-07-11 11:09:03)
标签:

it

sourcemonitor

分类: 资料收藏

引言

我们提倡编写功能单一、结构清晰、接口简单的函数,因为过于复杂的函数会给我们带来很多问题:加深其他开发人员理解代码的难度;不方便测试人员对其编写测试用例;容易隐藏错误;出现问题难以定位……怎样的函数算是复杂的函数?哪些代码散发着“臭味”?除了依靠经验丰富的程序员的敏锐嗅觉,我们还可以通过工具,对我们的函数和代码进行度量。

不像一位严格苛刻的代码检视人员,代码度量工具并不会板着脸对我们说:“嗯……这段代码糟糕透了!",它反馈给我们的是一组度量值(Metrics),怎么看待这些度量值,就因人而异了。对于某个项目组,圈复杂度(度量值中的一项,下文将给出详细解释)超过10的函数需要返工,而对另一个项目组来说,这个标准可能降到15。利用这些度量值,我们可以了解哪些方法应该返工或进行更彻底的测试、了解项目当前的状态,并跟踪软件开发的进度。

1.总体介绍

SourceMonitor是一款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括CC++C#JavaVBDelphiHTML,并且针对不同的语言,输出不同的代码度量值。

像其他代码度量工具一样,SourceMonitor只关注代码,并为编码人员提供及时的反馈,它不是一款项目管理工具,不关注项目实施中从功能分析到设计编码,再到测试这整个过程。

2.C语言度量值(C Metrics)

前面讲了那么多,还没提到代码度量的核心内容——度量值。下面以C语言度量值为例,看看SourceMonitor都给我们反馈了哪些信息。

1)总行数(Lines):包括空行在内的代码行数;

2)语句数目(Statements):在C语言中,语句是以分号结尾的。分支语句if,循环语句forwhile,跳转语句goto都被计算在内,预处理语句#include#define#undef也被计算在内,对其他的预处理语句则不作计算,在#else#endif#elif#endif之间的语句将被忽略;

3)分支语句比例(Percent Branch Statements):该值表示分支语句占语句数目的比例,这里的“分支语句”指的是使程序不顺序执行的语句,包括ifelseforwhileswitch

4)注释比例(Percent Lines with Comments):该值指示注释行(包括和//……形式的注释)占总行数的比例;

5)函数数目(Functions):指示函数的数量;

6)平均每个函数包含的语句数目(Average Statements per Function):总的函数语句数目除以函数数目得到该值;

7)函数圈复杂度(Function Complexity):圈复杂度指示一个函数可执行路径的数目,以下语句为圈复杂度的值贡献1if/else/for/while语句,三元运算符语句,if/for/while判断条件中的"&&"或“||”,switch语句,后接break/goto/ return/throw/continue语句的case语句,catch/except语句;

8)函数深度(Block Depth):函数深度指示函数中分支嵌套的层数。

对其他语言,SourceMonitor输出不同的度量值,例如在C++度量值中包括类的数目(Classes),在HTML中包括各个标签的数目(HTML Tags)、超链接数目(Hyperlinks)等。

3.度量值的呈现样式

SourceMonitor从几个不同的视图层次,为我们展示以上列举的度量值,包括项目视图、检查点视图和函数视图。

 

4.安装过程

5.使用过程

打开软件后点击File->New Project来创建一个新的项目,之后需要经过如下几个步骤:

1)程序语言选择,这里我们选择Java语言;

SourceMonitor的学习和使用之静态检查

2)命名当前项目并选择保存路径;

SourceMonitor的学习和使用之静态检查

3)选择该项目要度量解析的文件,可以通过XML配置文件导入,也可通过选择项目目录通过扩展名自动筛选文件;

SourceMonitor的学习和使用之静态检查

4)选择项目配置,这里可以根据自己的需要去选择这三项,选择不修改直接下一步;

SourceMonitor的学习和使用之静态检查

5)选择项目保存的格式,这里我们选择New SourceMonitor project format

SourceMonitor的学习和使用之静态检查

6)创建项目的第一个检查点并命名,如果涉及到UTF-8格式编码的,可以选择下面的选项窗口;

SourceMonitor的学习和使用之静态检查

7)最后再确认以上所选择的所有信息,如有错误点击上一步退回重新选择,无误则单机完成;

SourceMonitor的学习和使用之静态检查

8)完成后确认要度量的文件列表;

SourceMonitor的学习和使用之静态检查

9)这样项目就成功建立了,并且完成了第一个度量点的建立;

SourceMonitor的学习和使用之静态检查

10)双击我们刚才创立的度量点,我们可以看到项目中包含的各个Java文件的度量值;

SourceMonitor的学习和使用之静态检查

11)双击文件我们可以看到对这个文件进行分析的详细内容;

SourceMonitor的学习和使用之静态检查

下面再简要说一下在Eclipse中集成SourceMonitor的方法:

1)点击Run->External Tools->External Tools Configurations...

SourceMonitor的学习和使用之静态检查

2)点击Program下的New_configuration

SourceMonitor的学习和使用之静态检查

3)填写NameLocationArguments如下如所示,之后点击Apply

SourceMonitor的学习和使用之静态检查

4)此时再单击该窗口中的Run(以后可以点击Run->External Tools->SourceMoniter)即可运行处当前Eclipse中项目的SourceMonitor结果了,运行结果如下

SourceMonitor的学习和使用之静态检查

总结:

根据检验报告,就可以知道项目中那些class或者函数需要重构,相比起人工进行阅读代码,并确认重构代码部分,简单了很多,也算对代码质量有了最初步的量化概念,而不仅仅只是停留在过去只是在编码习惯优劣的认识。

数据会说话,程序员之间用这种方式更好沟通,talk is cheap, show me code and show me data

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有