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.
6.5 KiB
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.javaGUIApplication.javaWebApplication.javaMainActivity.javaTestRunner.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}"
}
}
}
}
}
}
项目链接
- Gitea 本地: http://localhost:3000/slms/SLMS
- Jenkins CI: http://localhost:8084/job/slms
- SonarQube: http://localhost:9000/dashboard?id=slms:slms
- 头歌远程: https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git
测试流程
-
删除 SonarQube 旧项目
# 在 SonarQube Web UI 中删除旧项目 http://localhost:9000 → Projects → slms:slms → Delete -
推送代码触发流水线
git add sonar-project.properties Jenkinsfile git commit -m "feat: 配置四端应用 SonarQube 分析" git push -
观察 Jenkins 构建
- 查看 Stage 4: SonarQube 质检
- 查看 Stage 5: 质量阈检查
- 确认四端代码都被扫描
-
验证 SonarQube 报告
- 访问 http://localhost:9000/dashboard?id=slms:slms
- 检查代码行数是否包含所有四端
- 查看各模块的质量指标
故障排查
问题:Android 代码未被扫描
原因: Android 项目未编译
解决: 在 SonarQube 扫描前先编译 Android 项目
cd android
gradlew assembleDebug
cd ..
mvn sonar:sonar
问题:Web 模板文件未被分析
原因: HTML 文件未包含在扫描范围
解决: 已在配置中添加
sonar.web.file.suffixes=.html,.xhtml,.jsp
问题:覆盖率过低
原因: 四端应用的入口类和 UI 代码难以测试
解决: 已排除入口类,专注于共享模块的测试覆盖率
最佳实践
- 优先测试共享模块 - 这些是核心业务逻辑
- UI 代码适当降低要求 - GUI/WUI/MUI 的 UI 层测试成本高
- 保持代码复用 - 四端应用尽量共享业务逻辑
- 定期检查质量报告 - 每次提交后查看 SonarQube 报告
- 及时修复代码异味 - 不要让技术债务累积
总结
SLMS 四端应用的 SonarQube 配置已经完整支持:
- ✅ CLI、GUI、WUI、MUI 四端代码全覆盖
- ✅ 共享模块重点分析
- ✅ 合理的排除规则
- ✅ 完整的质量阈配置
- ✅ Jenkins 流水线集成
现在可以开始测试流水线了!