引言

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

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

下面就来看一个常用的代码度量工具——SourceMonitor。

SourceMonitor

1.总体介绍

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

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

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

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

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

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

分支语句比例(Percent Branch Statements):该值表示分支语句占语句数目的比例,这里的“分支语句”指的是使程序不顺序执行的语句,包括if、else、for、while和switch;

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

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

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

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

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

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

3.度量值的呈现样式

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

项目视图(project view)

项目视图

SourceMonitor下建立项目须在一个文件夹下进行,该文件夹下的源码文件可以被分成一个或几个检查点,项目视图下列出了各个检查点的度量值信息。

检查点视图(checkpoint view)

检查点视图

检查点视图中列出了某个检查点中包含的各个源代码文件的度量值信息。

函数视图(method view)

函数视图

函数视图中展示了某个检查点下,某个源文件中所有函数的度量信息,双击某函数可以跳转到源文件中该函数的相应位置。

小结

本文介绍了代码度量工具SourceMonitor的使用以及圈复杂度等相关概念,SourceMonitor帮助编程人员更多地了解自己编写的代码。在我看来,使用代码度量工具的目的在于:了解我们的劳动成果,在代码层面上保证产品的质量;审视、改进自己的代码,提高自身的编程水平。

转自http://blog.csdn.net/yf210yf/article/details/17535713

转载于:https://www.cnblogs.com/szqmvp/p/7723326.html

静态检查------SourceMonitor的学习和使用相关推荐

  1. 软件构造-Reading 1:静态检查

    大纲: 阅读1:静态检查 目标: 冰雹序列 计算冰雹序列 类型 静态类型 静态检查.动态检查.无检查 惊喜:原始类型并不是真正的数字! 阅读练习 数组和集合 迭代 方法 变化的值与重新分配变量 记录假 ...

  2. 从静态检查工具谈代码编程规范

    提升自身编程能力是每一个码农的追求,也许我们每日都可以写上几百几千行代码,抑或每日只能修修补补添加几行代码,可是编写代码的行数的增加确实是提升编程能力的体现吗?从我个人的理解来看并不是这样. 从学校到 ...

  3. Go语言如何自定义 linter(静态检查工具)

    前言 哈喽,大家好,我是asong: 通常我们在业务项目中会借助使用静态代码检查工具来保证代码质量,通过静态代码检查工具我们可以提前发现一些问题,比如变量未定义.类型不匹配.变量作用域问题.数组下标越 ...

  4. Go 语言如何自定义 linter(静态检查工具)

    前言 哈喽,大家好,我是asong: 通常我们在业务项目中会借助使用静态代码检查工具来保证代码质量,通过静态代码检查工具我们可以提前发现一些问题,比如变量未定义.类型不匹配.变量作用域问题.数组下标越 ...

  5. Go语言如何自定义linter(静态检查工具)

    前言 哈喽,大家好,我是asong: 通常我们在业务项目中会借助使用静态代码检查工具来保证代码质量,通过静态代码检查工具我们可以提前发现一些问题,比如变量未定义.类型不匹配.变量作用域问题.数组下标越 ...

  6. React——Flow代码静态检查

    为什么80%的码农都做不了架构师?>>>    Flow Flow是Facebook开源的静态代码检查工具,他的作用是在运行代码之前对React组件以及Jsx语法进行静态代码的检查以 ...

  7. linux shell脚本 静态检查工具 shellcheck 简介

    简介 shellcheck 是一款实用的 shell脚本静态检查工具. 首先,可以帮助你提前发现并修复简单的语法错误,节约时间.每次都需要运行才发现写错了一个小地方,确实非常浪费时间. 其次,可以针对 ...

  8. linux sparse 内核代码静态检查

    Sparse简介 Sparse诞生于2004年,是由Linux之父开发的,目的就是提供一个静态检查代码的工具,从而减少Linux内核的隐患.起始,在Sparse之前已经有了一个不错的代码静态检查工具( ...

  9. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

最新文章

  1. sublime Text 2 安装Sublime Package Control
  2. linux send 失败_Epoll学习服务器的实现-Linux内核原始Epoll结构
  3. python隐藏启动台_如何在Python中启动后台进程?
  4. HTML列表标记符有哪些,在HTML中,表格标记符为( )
  5. 15个设计得最糟糕最变态的CAPTCHA验证码
  6. mysql连网安装和断网安装的区别_Linux 断网安装MySQL5.x操作步骤
  7. 佳能ir2002g无法扫描到计算机,佳能ir2002g扫描驱动官方版
  8. 智慧警务三维PGIS及一标三实采集、展示平台
  9. smith圆图重要性_smith圆图的理解
  10. matlab求极限分布,中心极限定理的Matlab演示
  11. 三线制接近开关原理及接线图
  12. JRebel安装、使用
  13. Office 2016 Pro Plus \ Project 专业版 \ Visio 专业版 \ 64 位vol版本方便KMS小马oem
  14. 51Nod 1677 treecnt
  15. Computational Intelligence Assisted Design -- In Industrial Revolution 4.0 (计算智能在工业4.0的应用) --绪论
  16. 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结
  17. html fmt转换日期格式,JSP JSTL fmt:parseDate标签:转换为时间
  18. 百度UEdit富文本编辑器的使用
  19. 陶泓达:周五黄金原油白银走势分析及操作建议
  20. 『Halcon与C#混合编程』第二章02_迈德威视工业相机SDK图像变量转换

热门文章

  1. 混过了2015,依然不知道你要什么?
  2. 类对象工厂设计模式(Factory Pattern)
  3. 串口循环缓存区 简单 免初始化 不用堆、指针、分段memcpy
  4. axios使用post请求服务端不能获取参数的解决方法
  5. 初学者,你应当如何学习C++以及编程-转
  6. 蓝桥杯 ALGO-46 算法训练 Hanoi问题
  7. Linux下安装informix11.5数据库
  8. 大陆集团:放弃内燃机,适用于高阶自动驾驶MK C1制动系统2020年国内投产
  9. 收藏一篇好文章,关于云计算和大数据的
  10. 【酷熊科技】工作积累 ----------- 内存优化之GC.MarkDependencies