如图所示,如果把质量问题与风险控制在研发期,解决bug修复的成本相比于在Production阶段再修复会大幅降低,这也就质量前移的基本思想。
如果一开始就写出优质的、经过测试的代码,那么后面测试阶段就会减少很多不必要的时间浪费,反之,如果把全部的质量责任交给测试工程师,则可能会导致:
如果一味地追求所谓的交付时间,很容易产生大量的“烂代码”,这些代码逻辑混乱、复杂度高、易读性差、没有测试或缺乏必要的注释。如果研发工程师把这些代码提测,那么势必会导致很多的低级错误,甚至无法正常运行,然后测试人员打回修规,那么势必浪费很多时间,延误测试与上线时间。
基于这种考虑,金融测试组制定了code review+静态扫描+自动化单元测试+代码覆盖率检测的标准,以保证提测质量,把问题与风险控制在前期。
其中的静态扫描,金融测试组采用了SonarCube+SonarScanner工具。SonarQube可以集成研发常用的FindBugs、PMD、CheckStyle等工具,且提供了统一的数据展示页面,支持分布式代码扫描。SonarQube通过安装插件的方式来扩展对各种语言的支持,比如Java、C++、Python、PHP、JS等。
1、设置默认编码格式
在/etc/my.cnf
中,设置:
character_set_server=utf8
init_connect='SET NAMES utf8'
2、创建sonar数据库及sonar用户于权限
➯ 创建数据库:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
➯ 创建SonarQube Server访问数据库的用户:
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
➯ 配置SonarQube Server访问数据库用户的权限
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
➯ 更新权限:flush privileges;
因SonarQube 6.7.2中包含了ElasticSearch,且ES不支持root权限运行,因此要创建sonar用户与其对目录的权限:
➯ 创建用户及用户组
useradd sonar
➯ 设置用户的密码
passwd sonar
我一般将此类软件会放在自建目录/application下,首先如上文所说,需要给sonar用户赋予对/application/sonarqube-6.7.2的权限,使自己能以普通用户身份能启动ES:
1、设置目录权限
➯ 设置目录的owner
chown -R sonar /application/sonarqube-6.7.2/
➯ 设置目录执行权限
chmod 777 /application/sonarqube-6.7.2/
2、编辑SonarQube配置文件
配置/application/sonarqube-6.7.2/conf/sonar.properties
1.3、启动服务
启动文件在/application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh
的脚本,一定要以普通用户启动服务,否则es会报错:
启动:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh start
重启:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh restart
关闭:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh stop
1.4、Log查询
所有的log会记录在/application/sonarqube-6.7.2/log
下,其中
[root@localhost logs]# tree
.
├── access.log
├── ce.log
├── es.log //es的log
├── sonar.log //sonar本身的log
└── web.log //web页面的log
0 directories, 5 files
支持,SonarQube启动成功。
1、登陆Web端
* 2、安装中文Pack *
找到配置-应用市场-Chinese Pack。
注:应用市场可以安装各类插件,包括其他语言的支持(Java、PHP、C++等)与一些常用,件(FindBugs、TFVC等),安装目录在/application/sonarqube-6.7.2/extensions/plugins
,可以自己手动安装。
1、下载
SonarScanner
2、安装
将包解压后放入/usr/local/sonar-scanner
3、配置
vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here
#----- Default SonarQube server
➯ SonarQube的地址
sonar.host.url=http://10.129.192.94:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
➯ 项目的唯一key
sonar.projectKey=duoqi:trade
➯ 项目的名字,会展示在web页面中
sonar.projectName=duoqi_trade
➯ 项目的版本
sonar.projectVersion=1.0
➯ 项目的语言
sonar.language=java
➯需要分析的源码的目录,多个目录用英文逗号隔开
sonar.sources=\application\paydayloan\src
➯项目的编码格式
sonar.sourceEncoding=UTF-8
* 4、执行*
在代码目录下,执行sonarscanner,扫描的结果会出现在SonarQube中:
cd /application/paydayloan/develop
/usr/local/sonar-scanner/bin/sonar-scanner
5、新版SonarQube报错解决
我在首次执行后,出现了如下问题:
ERROR: Error during SonarQube Scanner execution
org.sonar.squidbridge.api.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
经过google,发现的原因是SonarJava的版本太高了。
下载老版的jar包:
link
替换/application/sonarqube-6.7.2/extensions/plugins/
的文件,再次执行,成功。