﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Noah-文章分类-Sonar</title><link>http://www.blogjava.net/Noah/category/53875.html</link><description>&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang="ZH-CN"&gt;不是经典我不发&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 05 Sep 2013 07:39:05 GMT</lastBuildDate><pubDate>Thu, 05 Sep 2013 07:39:05 GMT</pubDate><ttl>60</ttl><item><title>Sonar在检查java代码隐患中的作用[转]</title><link>http://www.blogjava.net/Noah/articles/403711.html</link><dc:creator>眼镜蛇</dc:creator><author>眼镜蛇</author><pubDate>Thu, 05 Sep 2013 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/Noah/articles/403711.html</guid><wfw:comment>http://www.blogjava.net/Noah/comments/403711.html</wfw:comment><comments>http://www.blogjava.net/Noah/articles/403711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Noah/comments/commentRss/403711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Noah/services/trackbacks/403711.html</trackback:ping><description><![CDATA[<p>Sonar作为一个非常实用的代码质量检查工具，可以在各个维度对整个工程进行一个量化，如代码的测试覆盖率、代码内聚性指标、代码复杂度、代码的重复性检查、包之间的依存度以及代码冲突性等，可以非常直观的通过图标看到这些数据，关于sonar的安装和使用在本博的另一篇文章（《<a href="http://www.blogjava.net/Noah/articles/403710.html" target="_blank">代码质量检查工具Sonar结合hudson、maven使用</a>》）有详细描述</p>
<p>&nbsp;</p>
<div><img alt="" src="http://img.blog.csdn.net/20130526225420036" /><br /></div><br />
<p>&nbsp;</p>
<p>本文主要介绍sonar能够检查出的代码隐患。</p>
<ul><li>Avoid Decimal Literals In Big Decimal Constructor 应避免使用Decimal(0.5)这样的做法，因为这样是错误的不精确的<br /></li><li>Avoid Rethrowing Exception 不应当在catch语句中重新抛出另外的异常<br /></li><li>Avoid Throwing Null Pointer Exception 不应该抛出空指针异常<br /></li><li>Boolean Instantiation 不需要实例化布尔变量，只需=Boolean.True or =Boolean.Flase<br /></li><li>Close Resource 有未关闭的资源，需要使用finally语句块确保安全<br /></li><li>Collapsible If Statements 如果有多条if语句连续出现，可以使用短路条件if(A &amp;&amp; B &amp;&amp; ......)提高效率<br /></li><li>Compare Objects With Equals 比较两个对象应该使用equal而不是等于<br /></li><li>Cyclomatic Complexity 通常来讲，这个方法或者类太长了，需要分解<br /></li><li>Dont Import Java Lang Java.Lang是默认引入的不需要显示引入<br /></li><li>Empty Finalizer或Empty Finally Block或Empty If Stmt或Empty Statement或Empty Static Initializer或Empty Switch Statements或Empty Synchronized Block或Empty Try Block或Empty While Stmt：这个是非常常见的代码问题，if、switch、finally、try等内部是空的，很有可能是码农忘记处理了</li><li>Equals Hash Code 方法equal重写了但是hashcode未重写<br /></li><li>Equals Null 和null比较用==而不是用equals<br /></li><li>If Else Stmts Must Use Braces或If Stmts Must Use Braces 编码时if或者else不写大括号，很容易出现问题<br /></li><li>Magic Number 魔术数，指的是一个数字无端的出现在代码中，但是却不知道其含义，很常见<br /></li><li>Naming - *** 通常是类、方法、变量的命名不规范<br /></li><li>Replace Vector With List 应使用List来代替Vector提高效率<br /></li><li>Security - Array is stored directly 通常是数组类型的参数使用时，没有使用clone，方法直接改变了引用所指的对象<br /></li><li>Singular Field 仅在某方法中使用的变量不应该声明为实例变量<br /></li><li>Unconditional If Statement 通常是If语句永远为真或者永远为假<br /></li><li>Unnecessary Case Change 使用equalsIgnoreCase（）更高效<br /></li><li>Unused Private Field或Unused formal parameter或Unused local variable或Unused private method没 有用到的变量、参数、方法</li><li>Useless Operation On Immutable 在方法体中修改了某值意图想传出来，但实际上操作的是一个新的对象或者值，如改变基本类型的参数</li></ul>
<p>以上是部分常见的隐患类型，还有不少其他的没有写入。<br /></p><img src ="http://www.blogjava.net/Noah/aggbug/403711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Noah/" target="_blank">眼镜蛇</a> 2013-09-05 15:14 <a href="http://www.blogjava.net/Noah/articles/403711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码质量检查工具Sonar结合hudson、maven使用[转]</title><link>http://www.blogjava.net/Noah/articles/403710.html</link><dc:creator>眼镜蛇</dc:creator><author>眼镜蛇</author><pubDate>Thu, 05 Sep 2013 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/Noah/articles/403710.html</guid><wfw:comment>http://www.blogjava.net/Noah/comments/403710.html</wfw:comment><comments>http://www.blogjava.net/Noah/articles/403710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Noah/comments/commentRss/403710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Noah/services/trackbacks/403710.html</trackback:ping><description><![CDATA[<h1><a name="t0"></a>一、安装</h1>
<p>安装方式：</p>
<p>Sonar的安装方式有多种，可以单独安装，也可以结合maven、hudson使用；可以使用自带的内存型数据库，也可以使用自定义的数据库如mysql、oracle等</p>
<p>本文介绍结合maven和hudson并使用自带的数据库，可以实现sonar的自动监测代码质量变化</p>
<p>&nbsp;</p>
<p>安装步骤：</p>
<p>1、 下载sonar-3.0.zip包，以版本v3.0为例</p>
<p>地址http://dist.sonar.codehaus.org/sonar-3.0.zip</p>
<p>2、 准备web容器，以安装tomcat6为例，修改tomcat的启动参数</p>
<p>至少是-Xmx 1024m -XX:MaxPermSize=256m</p>
<p>在tomcat的bin目录下的catalina.sh中添加</p>
<p align="left">JAVA_OPTS="$JAVA_OPTS-server -XX:PermSize=128M -XX:MaxPermSize=512m -Xmx1024m-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true"</p>
<p>3、 解压sonar-3.0.zip至sonar-3.0目录，进入sonar-3.0目录下执行build-war.sh命令，则会在当前目录下生成sonar.war文件，待部署</p>
<p>如果要修改相关配置可以进入sonar-3.0目录下，修改sonar.properties文件，可选项包括端口、数据库信息等，若修改则需要在执行build-war.sh命令之前</p>
<p>4、 将sonar.war部署至tomcat的webapps目录下</p>
<p>5、 启动tomcat，访问相关端口即可看到页面</p>
<p>&nbsp;</p>
<p>使用nginx做代理：</p>
<p>为了安全考虑，应使用nginx做代理并加上basic认证</p>
<h1><a name="t1"></a>二、配置</h1>
<p>安全方面的配置：</p>
<p>1、 为安全考虑，建议使用iptables将9080端口禁止直接访问</p>
<p>#iptables -A INPUT -s 127.0.0.1 -p tcp --dport 9080 -j ACCEPT</p>
<p>#iptables -A INPUT -p tcp --dport 9080 -j DROP</p>
<p>2、 登录sonar，点击右上角Log in，使用默认管理员账户admin/admin登录</p>
<p>3、 进入<a href="http://sonar.book.163.com/sonar/profiles"><span style="color: windowtext">Configuration</span></a>-&gt;Security-&gt;Users修改管理员账户用户和密码、添加需要的用户</p>
<p>&nbsp;</p>
<p>Maven配置：</p>
<p>1、 进入工作目录，执行mvnsonar:sonar命令则可以对当前版本进行质量分析，形成一个质量版本</p>
<p>2、 将mvnsonar:sonar命令放到hudson中自动执行，可以选择每周执行两次，那么工程代码将会每周两个质量版本</p>
<p>&nbsp;</p>
<h1><a name="t2"></a>三、sonar使用</h1>
<p>直接使用配置好的用户进入地址可以看到相关的信息</p>
<p>可以为某个工程建立相应的组或者用户</p>
<p>可以为用户分配相应的工程权限</p>
<p>可以通过各种视图查看各种指标</p>
<p>可以进行代码review</p>
<p>可以看到代码质量的变化</p>
<p>集成了如pmd、checkstyle、findbugs、metric等各种插件</p><img src ="http://www.blogjava.net/Noah/aggbug/403710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Noah/" target="_blank">眼镜蛇</a> 2013-09-05 15:13 <a href="http://www.blogjava.net/Noah/articles/403710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>