当前位置:   article > 正文

基于小米便签开源代码在Android中配置SonarQube并进行分析_小米便签代码质量分析

小米便签代码质量分析

首先,确保你的机器上已经安装了Java 11(Oracle JRE 11或OpenJDK 11),并且配置了相应的环境变量,这是运行SonarQube的先决条件。

SonarQube的版本为9.1。

图1配置jdk

其次,在Android Studio中安装SonarLint插件。这可以通过访问Android Studio的插件市场,搜索并下载SonarLint插件来完成。安装完成后,按照指导重启Android Studio。

图2 安装SonarLint插件

在官网下载SonarQube

图3下载SonarQube

安装 SonarQube,将SonarQube的压缩包解压至 Windows 某个路径

图4解压SonarQube

找到Path…\sonarqube-9.1.0.47736\bin\windows-x86-64\ StartSonar.bat 双击启动

图5 启动SonarQube

SonarQube服务器启动成功。

图6 SonarQube启动成功

在网页中打开http://localhost:9000,初始账号密码都是admin。

图7登录服务器

在Android Studio配置SonarQube,在Android Studio的菜单栏中点击 File > Settings,在搜索框中搜索SonarLint

图8-1 找到settings

图8-2 搜索SonarLint

在小米便签项目中配置SonarQube,自定义Connection Name,并在SonarQube URL:中粘入http://localhost:9000/

图9 配置SonarQube URL

选择Login/Password,填入登录的SonarQube 账号密码

图10-1 配置SonarQube账号密码

图10-2 配置SonarQube账号密码

在项目中配置SonarQube

在build:gradle(Project)中添加插件:

classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3"

11-1 添加SonarQube插件

在build:gradle(Project)中添加如下代码:

  1. maven {
  2.     url "https://plugins.gradle.org/m2/"
  3. }

图11-2在项目中配置SonarQube

在build:gradle(Project)中添加如下代码:

apply plugin: "org.sonarqube"

图11-3在项目中配置SonarQube

在gradle.properties中添加服务器配置

  1. systemProp.sonar.host.url=http://localhost:9000
  2. systemProp.sonar.login=admin
  3. systemProp.sonar.password=admin

打开网页http://localhost:9000,新建一个手工项目

图13-1 新建新建一个手工项目

自定义新建项目名称,需要记住

图13-2 自定义新建项目名称

创建本地分析项目

图13-3 创建本地分析项目

在app项目中的build.gradle中添加配置,注意sonar.projectKey,对应的是自定义的名字

  1. sonarqube {
  2.         properties {
  3.             property "sonar.host.url", "http://localhost:9000"  //sonar管理系统地址
  4.             property "sonar.login", "admin" // sonar管理系统账号
  5.             property "sonar.password", "admin" // sonar管理系统密码
  6.             property "sonar.sourceEncoding", "UTF-8"
  7.             property "sonar.projectKey", "MItest" //sonar平台中相对应项目的key
  8.             property "sonar.projectName", "MItest" //sonar平台中相对应项目的名字
  9.             property "sonar.sources", "src/main/java" //源码,sonar检测的源文件目录
  10.             property "sonar.projectVersion", project.version //版本,随意
  11.             property "sonar.projectName", project.name
  12.         }
  13.     }

图14 在app项目中的build.gradle中添加配置

在Android Studio的File>>settings中,找到SonarLintConnection中找到刚才设置的Connection Name 名称

图15 在Android Studio中配置SonarLint

打开Android Studio 的Terminar(终端)。

在Project 项目文件名字位置右键,打开Terminal

图16-1 打开Terminal

在Terminal中执行

./gradlew sonarqube

或者

gradlew sonarqube

开始运行

图16-2 输入命令

图16-3执行命令

命令执行成功

图16-4 执行成功

  1. http://localhost:9000/中打开项目,可以看到已经生成项目分析报告了

图17-1 查看分析报告

查看报告

图17-2 查看分析报告

图17-3 查看分析报告

  • 使用SonarQube进行分析

对小米代码分析情况概述

在项目视图中选中待分析的包,在右键选项中使用SonarLint进行分析。对小米便签全部源码(37个文件)自动完成质量审查,得到如下代码质量分析报告:

图4-1-1 使用SonarQube进行分析

图4-1-2 SonarLint分析结果

在小米便签软件的源代码中,共审查出37个文件中的372个问题,经过人工审查,其中大量的问题在于规范和代码的简洁性要求,例如有45个Critical Issues为GTaskClient类中的常量命名问题,所以总体来说,小米便签软件的质量较为不错。

代码中的缺陷分为如下几个等级:

Blocker(阻断级): 这是最严重的缺陷级别,表示代码中存在严重的问题,可能会导致系统崩溃、数据丢失或者安全漏洞等严重后果。这些问题需要立即解决,以确保系统的可靠性和安全性。

Critical(严重级): 这类缺陷表示代码中存在严重的问题,可能会导致系统功能严重受损或性能显著降低。尽管它们不会导致系统崩溃,但仍然需要尽快修复,以免对系统的整体可用性和用户体验造成不利影响。

Major(重要级): 这类缺陷表示代码中存在较严重的问题,可能会对系统功能或性能产生一定影响,但影响程度没有严重缺陷那么严重。尽管修复这些问题不是非常紧急,但也应该在适当的时候解决,以确保系统的质量和稳定性。

Minor(次要级): 这类缺陷表示代码中存在一些小问题或者改进建议,对系统功能或性能影响较小。修复这些问题通常是可选的,可以在其他重要任务完成之后再考虑。

Info(信息级): 这类缺陷并不影响代码的功能或性能,而是提供一些额外的信息或者改进建议,以帮助开发人员编写更好的代码。

现对代码存在的质量问题进行汇总统计,对严重程度为Blocker、Critical和Major的问题进行逐一的分析:

1)严重程度:Blocker

  1. Use try-with-resources or close this "FileQutputStream" in a "finally" clause.

图4-2-1 严重程度Blocker

这个警告表明在使用 FileOutputStream 打开文件时,没有使用 try-with-resources 或在 finally 语句块中手动关闭流。这可能导致资源泄漏,因为文件流没有被正确地关闭。

在 Java 中,可以使用 try-with-resources 语句来自动关闭实现了 AutoCloseable 接口的资源,包括文件流。这样可以确保资源在使用完毕后被正确关闭,无需手动编写 finally 语句块。

2)严重程度:Critical

  1. Use static access with "android.provider.ContactsContract$DataColumns" for "MIMETYPE"

图4-2-2 严重程度Critical

要使用静态访问 "MIMETYPE",你可以直接使用类名 "ContactsContract.DataColumns",而不需要创建该类的实例。这样做可以更清晰地表达意图,因为 "MIMETYPE" 是该类的静态成员。

  1. Use static access with "android.provider.ContactsContract$DataColumns" for "RAW CONTACT ID".

图4-2-3 严重程度Critical

要使用静态访问 "RAW CONTACT ID",你可以直接使用类名 "ContactsContract.DataColumns",并结合内部类 "RawContacts",而不需要创建该类的实例。这样做可以更清晰地表达意图,因为 "RAW CONTACT ID" 是该类的静态成员。

3)严重程度:Major

Add a private constructor to hide the implicit public one.

图4-2-4 严重程度Major

添加一个私有构造函数来隐藏隐式公共构造函数。

Change the visibility of this constructor to "protected".

图4-2-5 严重程度Major

将这个构造函数的可见性改为"protected"。

4)严重程度:Minor

Replace the type specification in this constructor call with the diamond operator ("<>").

图4-2-6 严重程度Minor

将此构造函数调用中的类型说明替换为菱形操作符("<>")

Rename this fieId "NOTES SNIPPET SEARCH QUERY" to match the regular expression '^[a-z][a-zA-Z0-9]*$'

图4-2-7 严重程度Minor

将此字段重命名为“NOTES SNIPPET SEARCH QUERY”以匹配正则表达式“^[a-z][a-zA-Z0-9]*$”。

5)严重程度:Info

Complete the task associated to this ToDO comment.

图4-2-8 严重程度Info

完成与此ToDO注释关联的任务。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/656120
推荐阅读
相关标签
  

闽ICP备14008679号