在互联网企业,每个角色都得是五十八般武艺样样精通,作为一名合格的QA,如果只会只是整整CMMI文档,弄弄ISO材料,没有点编程基础,那估计会举步维艰,所以没办法谁让咱在互联网公司呢(自冠),QA的小伙伴还要了解一丢丢的技术吧。
本次系列文章主要从5W2H的角度介绍下主角Sonar工具,小编在整理学习的过程中,才真正发现Sonar工具很强大,乐观估计我平时工作中只用到了10%的功能。
1、What(Sonar是什么?)
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
2、Why(Sonar能带来什么?)
复杂度分布(complexity):代码复杂度过高将难以理解。
重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方。
单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范。
注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读。
潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug。
结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度。
3、How(如何安装,本章节的重点)
4、When
组织需要对代码进行静态检查的时候可考虑引入Sonar扫描工具。
5、Where
Sonar支持linux和windows两种环境,安装部署可以采用Sonarqube+Jenkins持续集成方式、Sonarqube+maven、Sonarqube+SVN模式。小编的安装部署步骤也是最简单的Sonarqube+SVN,各自独立模式。
6、Who
安装步骤并不复杂,所以只要稍微有点计算机知识的均可尝试安装,有问题可以度娘解决。
7、How much
Sonarqube工具是免费开源的,主要是前期部署安装投入的人力,可节省后期代码规范化要求的人力投入,所以从这个角度来讲对于提升工作效率还是有帮助的。
具体安装步骤如下:
第一步:搭建服务端:
创建用户组:登录到linux环境中,命令:groupadd -g 550sonargroup(groupadd)并把设置组ID加入到系统中 /etc/group
创建用户useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。命令:useradd sonar –d /home/sonar –gsonargrp –m,用户信息会被保存到/etc/passwd 文件中。
设置sonar的用户密码,命令:Passwd sonar,根据命令提示输入两次用户密码。
Unzip解压sonar包,命令:unzip sonarqube-4.4.1.zip,解压之后,进入到bin目录下会看到:
然后查看linux系统的位数命令:getconf LONG_BIT显示为64位。
下载好sonarQube后,解压打开conf目录,修改 wrapper.conf
搭建数据库,Sonar支持多种数据库类型,小编搭建的数据库类型为mysql型的,数据库的搭建大家可在网上随意搭建步骤。
mysql数据库搭建完成之后,添加sonar用户,命令如下:
mysql>CREATEDATABASE sonar CHARACTERSET utf8 COLLATE utf8_general_ci;
mysql>CREATEUSER'sonar' IDENTIFIED BY'sonar';
mysql>GRANTALLON sonar.*TO'sonar'@'%' IDENTIFIED BY'sonar';
mysql>GRANTALLON sonar.*TO'sonar'@'localhost' IDENTIFIED BY'sonar';
mysql> FLUSH PRIVILEGES;
sonarQube配置mysql,修改/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://数据库IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=你的本地IP
sonar.web.context=/sonar
sonar.web.port=9000
设置环境变量 用java–version命令查看,Sonar要求JDK为1.8以上。
修改sonar配置文件,编辑/home/sonar/sonarqube-4.4.1/conf/sonar.properties文件,配置数据库设置,默认已经提供了各类数据库的支持这里使用mysql,因此取消mysql模块的注释
vi sonar.properties
sonar.jdbc.username=sonar(创建的数据库用户名)
sonar.jdbc.password=sonar(创建的数据库密码)
sonar.jdbc.url=jdbc:mysql://172.16.6.225:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
添加数据库驱动,除了Oracle数据库外,其它数据库驱动都默认已经提供了,目录在/home/sonar/sonarqube-4.4.1/extensions/jdbc-driver,且这些已添加的驱动是sonar唯一支持的,因此不需要修改
如果是Oracle数据库,需要复制JDBC驱动至/extensions/jdbc-driver/oracle目录
一切就绪之后进入/home/sonar/sonarqube-4.4.1/bin/linux-x86-64目录,执行./soar.sh start命令启动sonar服务,结果启动失败,查看log日志下的sonar.log报错如下:
看日志提示是权限不对,百度之后解决方案是在home/sonar/sonarqube-4.4.1/conf/wrapper.conf下增加:
wrapper.java.command=/usr/java/jdk1.8.0_72/bin/java
将sonar服务器进行汉化,直接将汉化包 sonar-l10n-zh-plugin-1.8.jar放在/home/sonar/sonarqube-4.4.1/extensions/plugins目录下,重启sonar。
./sonar.sh start 启动服务
./sonar.sh stop 停止服务
./sonar.sh restart 重启服务
sonar启动成功的显示:第一次启动sonar的时候从日志中显示Sonar会将数据库脚本信息直接刷入到第八步所建的sonar数据库中,即初始化数据库。
启动成功之后打开页面如下:
Sonar的扫描机制:就是通过插件+数据库中的rules机制共同作用来扫描源码的。可以在/home/sonar/sonarqube-4.4.1/extensions/plugins目录下查看sonar默认的插件。
Sonar系统表可以直接登录到mysql数据库中去查看,直接在本机安装客户端工具NavicatforMySQL可以直接链接sonar数据库,其中有rules表。
第二步:搭建客户端。
客户端是装在本机,本机首先要安装JDK,具体可以问度量。
将sonar-scanner-2.6.1.zip解压到某个目录下,我的是F:\TOOL\sonar-scanner-2.6.1\sonar-scanner-2.6.1
配置系统环境变量,变量名:SONAR_RUNNER_HOME 变量值:F:\sonar-scanner-2.5,Path中最后增加;%SONAR_RUNNER_HOME%\bin
在本机运行cmd,输入sonar-runner 出现以下画面则表示配置成功。配置环境变量的好处就是在任一目录下运行sonar-runner都可以直接运行sonar命令。
配置文件的修改。在待扫描的工程下新建一个sonar-project.properties文件,sonar-project.properties所在位置和配置文件中的内容如下所示:
sonar.projectKey=my:project(可以自己随便取,项目标识,类似于主键)
sonar.projectName=myshop(这个工程的名字,最终在sonar首页显示的名字会是这个)
sonar.projectVersion=1.0(项目的版本号)
sonar.sources=src(需要扫描的源代码目录,多个目录采用英文逗号隔开)
sonar.exclusions=**/jquery-ui.js(不需要扫描的文件)
执行扫描,有两种方式可以进行扫描,第一种就是利用上面配置的环境变量,直接进入CMD模式敲命令sonar-runner进入扫描;第二种就是将sonar.bat文件copy到工程目录下,与sonar-project.properties 在同一目录,PC机上双击bat运行。也可以执行sonar-runner的命令
最终执行结果如下,表示执行成功。
在浏览器上打开http://localhost:9000,你将会看到使用sonar-scanner扫描过的项目,看扫描结果:
下一章节将重点介绍Sonar扫描结果的查看。
附:
sonarQube官网地址:http://www.sonarqube.org/
sonarQube官方文档地址:http://docs.codehaus.org/display/SONAR/Documentation
sonarQube示例地址:http://nemo.sonarqube.org/
网上另两篇相关的文章:
http://www.cnblogs.com/gao241/p/3190701.html
http://www.myexception.cn/open-source/1307345.html
领取 专属20元代金券
Get大咖技术交流圈