SonarQube

来源:互联网 发布:001a航母 知乎 编辑:程序博客网 时间:2024/05/27 12:21

SonarQube带来什么?

2.1.1.糟糕的复杂度分布
  文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,

  且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试

2.1.2.重复
  显然程序中包含大量复制粘贴的代码是质量低下的

  sonar可以展示源码中重复严重的地方


2.1.3.缺乏单元测试

  sonar可以很方便地统计并展示单元测试覆盖率


2.1.4.没有代码标准
  sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
2.1.5.没有足够的或者过多的注释
  没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降
  而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
2.1.6.潜在的bug

  sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug


2.1.7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
  通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系
  可以检测自定义的架构规则
  通过sonar可以管理第三方的jar包
  可以利用LCOM4检测单个任务规则的应用情况
  检测耦合

2.2纯SonarQube

支持oracle、mysql、PostgreSQL、SQLServer等主流数据库,建议采用mysql数据库

 

*注意:当使用oracle数据库时,需要导入jdbc的jar包支持(导入路径为sonarqube安装目录\extensions\jdbc-driver\oracle),jar包的版本需要与oracle版本一致对应,(select * from v$version可以查看oracle版本号),SonarQube 5.3及以上仅支持oracle11.2以上的oracle版本,所以推荐使用SonarQube自身支持的Mysql。

 

2.2.1 Oracle数据库

(1).下载sonarQube(相当于服务器)和sonar-runner(执行代码检测的工具)

(2).将sonarQube加压到D盘,sonar-runner解压到任意盘,建议解压到sonarQube安装根目录下。

(3).添加SONAR_HOME、SONAR_RUNNER_HOME环境变量,

并将SONAR_RUNNER_HOME加入PATH。(与JDK配置大同小异,前两个只需要指定到SONAR_HOME、SONAR_RUNNER_HOME的根目录,Path里添加%SONAR_RUNNER_HOME%\bin即可)。运行sonar-runner –h查看是否配置成功。

(4).如果你的JDK版本低于1.7(高于1.7请忽略此条),你需要为系统下载双JDK,采用1.8的JDK成功通过测试,并未该版本的JDK配置环境变量,进入sonar-runner安装目录..\bin,用文本编辑器打开sonar-runner.bat,将JAVA_HOME替换成为高版本JDK的路径值,例如:JAVA1.8_HOME(用户配置环境变量时自定义)。同时修改wrapper.con文件的wrapper.java.command=“JDK路径/bin/java”

(5).创建oracle数据库用户:sonar/sonar

(6).打开sonarQube安装目录...\conf\sonar.properties文件,

   加入:

sonar.jdbc.username:sonar

sonar.jdbc.password:sonar

sonar.jdbc.url:jdbc:oracle:thin:@192.168.0.160:1521/orcl

sonar.jdbc.driverClassName:oracle.jdbc.driver.OracleDriver

(8).将oracle的jar包导入到sonarQube安装目录..\extensions\jdbc-driver\oracle

(9).进入sonarQube的bin目录,进入相应操作系统,位数根据JDK决定,启动StartSonar。

(10).在项目根路径下,创建配置文件,文件名为sonar-project.properties。

sonar-runner执行分析时,会读取该文件。如图:




(11).代码扫描切换到项目源码根目录,(使用DOS窗口的CD命令),执行以下命令:sonar-runner扫描结果中出现“EXCUTION SUCCESS”字样则表示代码扫描成功。


(12).查看代码扫描结果查看代码扫描结果地址:http://192.168.0.160:9000/注:此处192.168.0.160为SonarQube服务所在服务器的IP地址。

 

 

2.2.2Mysql 数据库

(1).创建Mysql数据库、用户名、密码都为sonar。

(2).打开sonarQube安装目录...\conf\sonar.properties文件,配置:

sonar.jdbc.username:sonar

sonar.jdbc.password:sonar

sonar.jdbc.url:                           jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

sonar.jdbc.driverClassName:com.mysql.jdbc.Driver

(3).余下步骤与其他数据库一致。

2.3与Jenkins集成

(1).下载sonarqube plugin插件

(2).在pom.xml加入maven-war-plugin

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>2.1.1</version>

</plugin>

</plugins>

</build>

 

(3).在jenkins配置sonarqube

 

(4).配置sonar-runner环境

 

 

 

2.4与Maven集成

(1)进入maven/conf/settings.xml文件,配置:

<profile>

  <id>sonar</id>

  <activation>

     <activeByDefault>true</activeByDefault>

  </activation>

  <properties>

     <sonar.jdbc.url>jdbc:oracle:thin:@192.168.0.160:1521/oanet</sonar.jdbc.url>

     <sonar.jdbc.driver>oracle.jdbc.driver.OracleDriver</sonar.jdbc.driver>

     <sonar.jdbc.username>sonar</sonar.jdbc.username>

     <sonar.jdbc.password>sonar</sonar.jdbc.password>

  

     <sonar.host.url>http://localhost:9000</sonar.host.url>

  </properties>

</profile>

(2).进入CMD控制台,使用CD命令进入要进行代码巡查的工程目录下,执行

mvn cleaninstall mvn sonar:sonar

(3).进入sonarqube的主页查看结果。

2.5存在的问题

2.5.1 SVN报E170001错误

解决方案有2种:

(1)进入sonarqube禁止SCM。(目前采用)


(2)进入sonarqube下载SCM SVN插件。

 

2.5.2 潜在问题

(1)JDK下在JENKINS后台报JDK版本不支持的错误(跟踪解决)

 

2.6 指标

Code coverage(代码覆盖率):团队要求代码覆盖率在80%以上;

Test success(测试通过率):团队要求测试成功率在100%;

Duplications(代码重复率):团队要求代码重复率在10%以下;

Violations(违规):团队要求Major类别的代码规则缺陷在20以下;

 

2.6 技术债务

技术债务, 是匆忙实现的功能而采取的不规范的方案导致引发连锁反应 -- 为了快速实现A功能,缺少整体规划,导致后期不得不打补丁A.1解决A的问题,然后又引入A1.1,A2, A2.1等等一堆补丁,导致项目越来越难维护。(比方说把某个条件写死,再比方说采用一些捷径达到目的,而这只是特殊情况,无法应用在其他模块中)

参考文档:http://blog.csdn.net/lingyun2005/article/details/5610133

 

 

 

技术债务金字塔包括

Reusability                 可重用性

Portability                  可移植性

Maintainability         可维护性

Security                      安全

Usability                     可用性

Efficiency                    效率

Changeability            可变性

Reliability                            可靠性

Testability                  可测性

 

以上债务金字塔已经通过仪表盘的形式在SonarQube首页显示。

并且显示出了模型等级评价(SQALERating)和技术债务比率(Technical Debt Ratio)。

0 0