测试左移

代码审查分类

代码审计关注的质量指标

  1. 代码坏味道

    代码规范
    技术债评估

  2. bug和漏洞(包括空指针异常、变量初始化只在一个分支里完成初始化、安全漏洞)
  3. 代码重复度
  4. 单测与集成

测试用例数量
覆盖率

静态分析技术分类

1.代码静态检查

代码分析:lint系列,通过分析语法树和源代码,检查代码规范;
编译器分析:借助于编译器获得代码关系

2.字节码静态分析

分析jar、war、dex等格式的文件,代表工具:findbugs

SonarQube搭建-docker方式

临时性搭建

  • 适合本地练习使用,因为使用的数据库是java自带的内存数据库,不是完整的数据库,性能没有那么快,功能也没有那么完整
docker run -d --name sonarqube -P 9000:9000 -P 9092:9092 sonarquebe

正常部署(适合8.0以上版本)

  • sonarqube
  • MySQL/PostgreSQL
运行postgresq数据库
docker run -d --name sonarqube_postgres \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $PWD/postgresql:/var/lib/postgresql/data postgres

创建后面运行sonarqube需要挂载的目录的核心数据及日志

mkdir sonarqube_data sonarqube_extensiions sonarqube_logs

对上面创建的目录进行权限修改(此修改适合8.2版本,最新版本不需要

chown -R 999:999 sonarqube_data sonarqube_extensions sonarqube_logs \
#由于挂载目录是默认root权限,而docker运行是使用sonarqube用户且内部使用默认用户名分组为999,所以要修改权限

运行sonarqube

docker run -d --name sonarqube_test \
 -p 9000:9000 \
 -p 9092:9092 \
 --link sonarqube_postgres:db \
-e SONARQUBE_JDBC_USERNAME=sonarqube \
-e SONARQUBE_JDBC_PASSWORD=sonarqube \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://db/sonarqube" \
-v $PWD/sonarqube_data:/opt/sonarqube/data \
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube

发现有报错
由于是在2c4g的云服务器上的docker上运行的,其宿主机内存不够,需设置下宿主机内存
原因:

因为给 Elasticsearch 分配内存的配置问题,解决方法为在宿主机执行:sysctl -w vm.max_map_count=262144
vm.max_map_count 参数,是允许一个进程在 VMA 中拥有的最大数量(VMA:虚拟内存地址, 一个连续的虚拟地址空间),当进程占用内存超过时, 直接 OOM。
由于 Elasticsearch 占用内存较高。官方要求 max_map_count 需要配置到最小 262144。
max_map_count 配置文件写在系统的 /proc/sys/vm 中
通过 docker inspect 命令, 可查看 docker 使用宿主机的 /proc/sys 作为只读路径之一。说明镜像使用宿主机的 max_map_count 参数。因此直接修改宿主机的 max_map_count 参数即可。

SonarQube与Jenkins集成

Sonarqube平台创建project以获取token

  • 创建project会设置token,我的token(test: 4939179617ac3543aa4ae93816fb31f9d5168ef3)要记住,便于后续分析代码用
  • 以分析maven项目为例
mvn sonar:sonar \
  -Dsonar.projectKey=test \
  -Dsonar.host.url=http://140.143.160.166:9000 \
  -Dsonar.login=4939179617ac3543aa4ae93816fb31f9d5168ef3
  • 之后返回sonarqube主页
    页面各个菜单详解

Projects:项目列表
Issue:所有暴露的问题
Rules:规则,制定多少个检测代码规则配置
Quality Profiles:规则集另外方式
Qualit Gates:类似断言
Administration:管理员配置

Jenkins配置sonarqube scanner插件

  • ManageJenkins > Configure System > SonarQube servers,如下图:

在这里插入图片描述
在这里插入图片描述

SonarQube+Jenkins+Maven项目分析

1.maven的settings.xml配置sonarscanner相关配置,sonarscanner作为分析代码客户端,需要在maven内配置相关信息。如下图:

<pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
 <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.host.url>
                  http://127.0.0.1:9000 //此处ip为sonarqube所搭建的那台机器的ip
                </sonar.host.url>
            </properties>
        </profile>
  </profiles>

2.配置被测maven项目的pom文件

<plugin>
         <groupId>org.sonarsource.scanner.maven</groupId>
         <artifactId>sonar-maven-plugin</artifactId>
         <version>3.4.0.905</version>
 </plugin>

3.Jenkins内执行

mvn clean verify sonar:sonar -Dsonar.login=sonar的token

若要单独在项目内执行,则

mvn clean install     
mvn sonar:sonar -Dsonar.login=myAuthenticationToken

最后的执行结果:
在这里插入图片描述

另:sonarscanner内的sonar-project.properties配置文件一些说明

  • sonar.projectName(项目名称,选取Jenkins内置变量JOB_NAME)
  • sonar.projectKey(项目唯一标识,自定义)
  • sonar.sources(扫描文件夹,当前目录.)
  • sonar.java.binaries(扫描Java项目需要排除target目录下内容)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值