Sonarqube (nee Sonar)是炸弹。 不必每天检查一次,但是如果您对质量很认真,则可以在Sprint计划期间(如果不是每周一次)对其进行检查。
在nemo.sonarqube.com上查看示例项目,例如OpenJPA ,以了解可用的信息。 您可能首先需要专注于特定组件,例如OpenJPA JDBC 。
作为开发人员,我对“问题”(主要是FindBugs和Squid)和“单元测试覆盖率”最感兴趣。 作为一名架构师,我最感兴趣的是“包装缠结指数”和“复杂性” –前者是对封装和去耦进行适当衡量的方法,后者是对可维护性进行衡量的方法。
重要的是要用适量的盐查看这些数字。 他们提供了宝贵的见解,但需要一些经验才能充分利用它们。 这就是为什么要使这些信息远离Bean计数器很重要,因为Bean计数器会设置不合理的标准,例如在所有单元测试中90%的代码覆盖率。 (如果您拥有丰富的异常处理能力,但没有办法模拟将引发这些异常的类,那么这将是不可能实现的。只有傻瓜才能用代码健壮性换取更高的分数。)
安装Sonarqube
安装声纳法很简单。 它与自己的webapp服务器和嵌入式数据库捆绑在一起,因此您只需解压缩并运行启动脚本即可将其检出。 生产系统应使用真实的数据库。 支持多个数据库。
检查sonarqube网站以获取详细信息。
创建我们的项目
我承认–创建项目非常违反直觉。 简而言之,一切都是通过将数据推送到服务器来处理的,而无需先在声纳服务器上创建任何东西。 (您仍然需要在sonarqube服务器上创建管理员用户。)
实际上,这意味着我们添加了一个maven插件。 这是一个昂贵的插件,因此通常使用自定义配置文件,例如“声纳”(用于旧名称)。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><profiles><profile><id>sonar</id><properties><sonar.language>java</sonar.language><sonar.host.url>http://chaos:9000</sonar.host.url><sonar.jdbc.url>jdbc:postgresql://chaos/sonar</sonar.jdbc.url><sonar.jdbc.username>sonar</sonar.jdbc.username><sonar.jdbc.password>sonar</sonar.jdbc.password></properties><build><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.6.4.201312101107</version><executions><execution><id>default-prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>default-prepare-agent-integration</id><goals><goal>prepare-agent-integration</goal></goals></execution><execution><id>default-report</id><goals><goal>report</goal></goals></execution><execution><id>default-report-integration</id><goals><goal>report-integration</goal></goals></execution><execution><id>default-check</id><goals><goal>check</goal></goals><configuration><rules><!-- implmentation is needed only for Maven 2 --><rule implementation="org.jacoco.maven.RuleConfiguration"><element>BUNDLE</element><limits><!-- implmentation is needed only for Maven 2 --><limit implementation="org.jacoco.report.check.Limit"><counter>COMPLEXITY</counter><value>COVEREDRATIO</value><minimum>0.60</minimum></limit></limits></rule></rules></configuration></execution></executions></plugin></plugins></build></profile></profiles>
</project>
更新我们的项目
声纳插件很昂贵,因此不应将其作为例行程序的一部分运行。 一种常见的做法是安排在CI服务器(Hudson,Continuum等)上进行每晚构建。开发人员可能还希望在处理问题积压时执行计划外构建–一种解决方案引入其他较低优先级的情况并不罕见。问题。
源代码
使用此插件的示例项目位于https://github.com/beargiles/project-student [github]和http://beargiles.github.io/project-student/ [github页面]。
这个项目说明需要对我们如何解释结果有一定的认识。 我使用两种常见的做法-抛出内部异常而不是返回空值,并使用自定义的'UnitTestException'测试失败代码,而不会在日志中堆满无关的信息。 该代码看起来与可疑代码相同,因此已正确标记,但似乎没有办法消除鱿鱼警告。 (Findbugs有其自己的SuppressWarnings注释。)
总体而言,这仍然是一个巨大的胜利。
(更新:可以通过sonarqube的“质量配置文件”选项卡控制鱿鱼警告。这可用于将严重性级别降低为“信息”,但由于这些有时是合法警告,因此我不愿直接禁用这些测试。为什么我强烈希望使用每个实例的FindBugs SuppressWarnings注释而不是更改这些警告级别。)
翻译自: https://www.javacodegeeks.com/2014/02/creating-sonarqube-projects.html