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)。
---------------------
作者:老虎_tiger
来源:CSDN
原文:https://blog.csdn.net/liuyuehu/article/details/51532720
版权声明:本文为博主原创文章,转载请附上博文链接!