You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
slms/docs/SONARQUBE_FOUR_PLATFORMS.md

6.5 KiB

SLMS 四端应用 SonarQube 配置说明

项目架构

SLMS 是一个多平台图书管理系统,支持四端应用:

1. CLI (Command Line Interface) - 命令行界面

  • 入口类: com.smartlibrary.cli.CLIApplication
  • 代码位置: src/main/java/com/smartlibrary/cli/
  • 打包方式: JAR 可执行文件
  • 特点: 轻量级,适合服务器端和自动化脚本

2. GUI (Graphical User Interface) - 桌面图形界面

  • 入口类: com.smartlibrary.gui.GUIApplication
  • 代码位置: src/main/java/com/smartlibrary/gui/
  • 技术栈: JavaFX
  • 打包方式: EXE/MSI 安装包
  • 特点: 原生桌面应用,用户体验好

3. WUI (Web User Interface) - Web 界面

  • 入口类: com.smartlibrary.web.WebApplication
  • 代码位置: src/main/java/com/smartlibrary/web/
  • 模板位置: src/main/resources/templates/
  • 技术栈: Spring Boot + Thymeleaf
  • 打包方式: WAR 部署包
  • 特点: 跨平台,无需安装,浏览器访问

4. MUI (Mobile User Interface) - 移动端界面

  • 入口类: com.smartlibrary.android.MainActivity
  • 代码位置: android/src/main/java/com/smartlibrary/android/
  • 技术栈: Android SDK
  • 打包方式: APK 安装包
  • 特点: 移动端原生应用,支持触摸操作

共享模块

所有四端应用共享以下核心模块:

模块 位置 说明
数据模型 src/main/java/com/smartlibrary/model/ Book, Loan 等实体类
业务服务 src/main/java/com/smartlibrary/service/ BookService 业务逻辑
数据库 src/main/java/com/smartlibrary/database/ 数据库连接和初始化
工厂模式 src/main/java/com/smartlibrary/factory/ 图书工厂(物理书、电子书、期刊)
观察者模式 src/main/java/com/smartlibrary/observer/ 图书状态变更通知
通知系统 src/main/java/com/smartlibrary/notification/ 邮件、短信、应用内通知

SonarQube 配置要点

源代码扫描范围

# 包含 Java 主代码和 Android 代码
sonar.sources=src/main/java,android/src/main/java

# 测试代码
sonar.tests=src/test/java

编译输出配置

# 包含主项目和 Android 编译输出
sonar.java.binaries=target/classes,android/build/intermediates/javac/debug/classes

# 依赖库(主项目 + Android
sonar.java.libraries=target/dependency/*.jar,android/build/intermediates/compile_library_classes_jar/debug/*.jar

覆盖率排除

排除了四端应用的入口类和测试运行器:

  • CLIApplication.java
  • GUIApplication.java
  • WebApplication.java
  • MainActivity.java
  • TestRunner.java

文件排除

  • Android 资源文件:android/src/main/res/**
  • Android 生成文件:R.java, BuildConfig.java
  • 构建目录:target/**, build/**
  • 配置文件:**/*.xml, **/*.gradle, **/*.properties

代码质量指标

预期覆盖率目标

模块 目标覆盖率 说明
共享模块 ≥ 80% 核心业务逻辑,需要高覆盖率
CLI ≥ 60% 命令行交互,部分难以测试
GUI ≥ 50% 图形界面UI 测试复杂
WUI ≥ 70% Web 控制器,相对容易测试
MUI ≥ 50% Android UI需要模拟器

质量阈配置建议

在 SonarQube 中创建 SLMS-Quality-Gate,建议配置:

  • 新代码覆盖率 < 70% → Failed
  • 重复代码率 > 3% → Failed
  • 可维护性评级 差于 A → Failed
  • 可靠性评级 差于 A → Failed
  • 安全性评级 差于 A → Failed
  • 代码异味 > 10 个 → Warning

Jenkins 流水线集成

Stage 4: SonarQube 质检

stage('4. SonarQube 质检') {
    steps {
        dir('SLMS') {
            withSonarQubeEnv('SonarQube') {
                bat '''
                    mvn sonar:sonar -Dsonar.qualitygate.wait=true -Dsonar.qualitygate.timeout=300
                '''
            }
        }
    }
}

Stage 5: 质量阈检查

stage('5. 质量阈检查') {
    steps {
        timeout(time: 10, unit: 'MINUTES') {
            script {
                withSonarQubeEnv('SonarQube') {
                    def qg = waitForQualityGate()
                    if (qg.status != 'OK') {
                        error "质量门禁未通过: ${qg.status}"
                    }
                }
            }
        }
    }
}

项目链接

测试流程

  1. 删除 SonarQube 旧项目

    # 在 SonarQube Web UI 中删除旧项目
    http://localhost:9000 → Projects → slms:slms → Delete
    
  2. 推送代码触发流水线

    git add sonar-project.properties Jenkinsfile
    git commit -m "feat: 配置四端应用 SonarQube 分析"
    git push
    
  3. 观察 Jenkins 构建

    • 查看 Stage 4: SonarQube 质检
    • 查看 Stage 5: 质量阈检查
    • 确认四端代码都被扫描
  4. 验证 SonarQube 报告

故障排查

问题Android 代码未被扫描

原因: Android 项目未编译

解决: 在 SonarQube 扫描前先编译 Android 项目

cd android
gradlew assembleDebug
cd ..
mvn sonar:sonar

问题Web 模板文件未被分析

原因: HTML 文件未包含在扫描范围

解决: 已在配置中添加

sonar.web.file.suffixes=.html,.xhtml,.jsp

问题:覆盖率过低

原因: 四端应用的入口类和 UI 代码难以测试

解决: 已排除入口类,专注于共享模块的测试覆盖率

最佳实践

  1. 优先测试共享模块 - 这些是核心业务逻辑
  2. UI 代码适当降低要求 - GUI/WUI/MUI 的 UI 层测试成本高
  3. 保持代码复用 - 四端应用尽量共享业务逻辑
  4. 定期检查质量报告 - 每次提交后查看 SonarQube 报告
  5. 及时修复代码异味 - 不要让技术债务累积

总结

SLMS 四端应用的 SonarQube 配置已经完整支持:

  • CLI、GUI、WUI、MUI 四端代码全覆盖
  • 共享模块重点分析
  • 合理的排除规则
  • 完整的质量阈配置
  • Jenkins 流水线集成

现在可以开始测试流水线了!