sonar( [url]http://www.sonarsource.org/[/url] )作为2009 jolt 生产力大奖的获得者, 可以看成一个代码质量检测工具, 用来帮助我们分析评估我们平时代码的质量.
在没有这些可衡量, 标准化的工具之前, 大家都是凭一定的经验来写出好的代码.
而对于一个新手来说, 可以将sonar作为一种学习工具, 通过sonar的分析结果, 知道什么样的代码才是好的代码.
而对于一个经验丰富的开发人员, 可以借助他的经验写出高质量的代码, 但是也没法完全避免一些低级错误, 这时sonar就成了一种check工具
[b]关于软件测量的几个术语[/b]
[b]DSM[/b](参考IDEA的DSM功能 http://developer.51cto.com/art/200802/65920.htm)
用来分析整个工程的依赖关系, 一般的原则是高层依赖底层代码(这个跟那个具体依赖于抽象不是同一回事儿), 也可以说应该正向依赖, 否则互相依赖容易出现循环依赖. 这个是我们应该避免的.
[b]LCOM4 [/b](Lack of cohesion of methods, 参见http://www.aivosto.com/project/help/pm-oo-cohesion.html)
用来说明class内部方法和变量之间的关系, 值越大, 说明内聚性越差. 一般情况下 LCOM4=1是内聚性最佳的. 2说明可以拆成两个类, 以此类推.
但是这种测量对门面服务类来说不适用. 有时候很小的类也会根据需要合并在一起, 尽管关联不大
[b]RFC[/b](Response For Class http://www.virtualmachinery.com/jhawkmetricsclass.htm )
通过检查一个方法被调用的情况来反映一个class的复杂程度. 也可以简单的理解为一个类所包含的方法多寡.
[b]趋势分析[/b]
在sonar中有一个趋势分析的概念, 用来反映目前代码的质量的发展趋势如何. sonar采用两种方式来分析这种趋势, 即定性分析和定量分析, 灰色的箭头表示定性分析, 红色, 绿色箭头表示定量分析, 箭头向下, 表示下降趋势, 向上表示上升趋势. 定量分析表明可以直接根据数量来判断一个趋势的好坏, 而定性则需要参考多种因素加以综合考虑才能进行考评. 比如说测试通过率, 过了就是过了, 没过就是没过, 因此是定量分析.
[b]抓住重点[/b]
sonar包含了太多的东西, 但是根据项目的不同, 可能你的关注点也会有所不同, 或者你的时间有限, 不可能对所有的问题都照顾到, sonar有一个hotspots页面, 里面列出了每个方面的top 5, 我觉得大部分看这个页面就可以解决主要问题了.
不过本人主要用sonar来对代码做静态分析, 用来替换findbugs+checkstyle+pmd. 因为它的可配置性比较方便, 而且通过maven来运行速度貌似比较快.
另外发现用sonar发现的问题和用eclipse中的findbugs插件发现的问题貌似不一致. 感觉它做的更多的是checkstyle+pmd的工作
[b]使用感受[/b]
安装非常简单, 基本是一键式安装
功能极其丰富, 可以对代码从可靠性, 执行效率, 可移植性, 可维护性, 可用性等多个方面进行评估
基本涵盖了市面上几乎所有静态代码分析工具所具有的功能(checkstyle, findbugs, clover, pmd….)
是目前本人看到的最强大, 最全面的静态分析工具
[b]注意事项[/b]
要将sonar服务器与要分析的代码放在同一台机器
我采用的sonar版本为最新的2.1.2, 但是sonar的maven插件在目前的maven仓库中的最新版本为1.8, 因此mvn命令必须为:
mvn org.codehaus.sonar:sonar-maven-plugin:1.8:sonar -Dsonar.skipInstall=true -e
在没有这些可衡量, 标准化的工具之前, 大家都是凭一定的经验来写出好的代码.
而对于一个新手来说, 可以将sonar作为一种学习工具, 通过sonar的分析结果, 知道什么样的代码才是好的代码.
而对于一个经验丰富的开发人员, 可以借助他的经验写出高质量的代码, 但是也没法完全避免一些低级错误, 这时sonar就成了一种check工具
[b]关于软件测量的几个术语[/b]
[b]DSM[/b](参考IDEA的DSM功能 http://developer.51cto.com/art/200802/65920.htm)
用来分析整个工程的依赖关系, 一般的原则是高层依赖底层代码(这个跟那个具体依赖于抽象不是同一回事儿), 也可以说应该正向依赖, 否则互相依赖容易出现循环依赖. 这个是我们应该避免的.
[b]LCOM4 [/b](Lack of cohesion of methods, 参见http://www.aivosto.com/project/help/pm-oo-cohesion.html)
用来说明class内部方法和变量之间的关系, 值越大, 说明内聚性越差. 一般情况下 LCOM4=1是内聚性最佳的. 2说明可以拆成两个类, 以此类推.
但是这种测量对门面服务类来说不适用. 有时候很小的类也会根据需要合并在一起, 尽管关联不大
[b]RFC[/b](Response For Class http://www.virtualmachinery.com/jhawkmetricsclass.htm )
通过检查一个方法被调用的情况来反映一个class的复杂程度. 也可以简单的理解为一个类所包含的方法多寡.
[b]趋势分析[/b]
在sonar中有一个趋势分析的概念, 用来反映目前代码的质量的发展趋势如何. sonar采用两种方式来分析这种趋势, 即定性分析和定量分析, 灰色的箭头表示定性分析, 红色, 绿色箭头表示定量分析, 箭头向下, 表示下降趋势, 向上表示上升趋势. 定量分析表明可以直接根据数量来判断一个趋势的好坏, 而定性则需要参考多种因素加以综合考虑才能进行考评. 比如说测试通过率, 过了就是过了, 没过就是没过, 因此是定量分析.
[b]抓住重点[/b]
sonar包含了太多的东西, 但是根据项目的不同, 可能你的关注点也会有所不同, 或者你的时间有限, 不可能对所有的问题都照顾到, sonar有一个hotspots页面, 里面列出了每个方面的top 5, 我觉得大部分看这个页面就可以解决主要问题了.
不过本人主要用sonar来对代码做静态分析, 用来替换findbugs+checkstyle+pmd. 因为它的可配置性比较方便, 而且通过maven来运行速度貌似比较快.
另外发现用sonar发现的问题和用eclipse中的findbugs插件发现的问题貌似不一致. 感觉它做的更多的是checkstyle+pmd的工作
[b]使用感受[/b]
安装非常简单, 基本是一键式安装
功能极其丰富, 可以对代码从可靠性, 执行效率, 可移植性, 可维护性, 可用性等多个方面进行评估
基本涵盖了市面上几乎所有静态代码分析工具所具有的功能(checkstyle, findbugs, clover, pmd….)
是目前本人看到的最强大, 最全面的静态分析工具
[b]注意事项[/b]
要将sonar服务器与要分析的代码放在同一台机器
我采用的sonar版本为最新的2.1.2, 但是sonar的maven插件在目前的maven仓库中的最新版本为1.8, 因此mvn命令必须为:
mvn org.codehaus.sonar:sonar-maven-plugin:1.8:sonar -Dsonar.skipInstall=true -e