1. 项目概述与核心价值
这个测试项目管理系统是我在完成计算机专业毕业设计时的实战作品,采用前后端分离架构,后端基于SpringBoot框架,前端使用Vue.js实现。系统主要面向高校软件测试课程和毕业设计管理场景,实现了测试用例管理、缺陷跟踪、项目进度监控等核心功能模块。
对于计算机相关专业的同学来说,毕业设计既要体现技术深度,又要确保完整性和可展示性。这个项目特别适合作为毕设选题,因为它:
- 技术栈主流且完整(SpringBoot+Vue+MySQL)
- 业务场景明确(软件测试管理)
- 功能模块典型(CRUD+报表+权限)
- 部署文档详尽(含Linux/Windows双环境配置)
我在开发过程中特别注重"教学友好性"——所有功能模块都保留了清晰的开发轨迹,代码注释率达到40%以上,数据库设计文档包含完整的ER图和字段说明,方便后续学习者理解架构演进过程。
2. 技术架构解析
2.1 后端技术栈设计
SpringBoot 2.7.x作为后端框架,主要基于以下考量:
- 内嵌Tomcat简化部署(对比传统SSM需要外置容器)
- 自动配置减少XML编写(特别适合毕设周期短的特点)
- 丰富的starter依赖(整合MyBatis-Plus、Redis等组件只需添加依赖)
数据库选用MySQL 8.0,关键设计要点:
sql复制CREATE TABLE `test_case` (
`id` bigint NOT NULL AUTO_INCREMENT,
`project_id` bigint NOT NULL COMMENT '所属项目',
`case_name` varchar(100) NOT NULL COMMENT '用例名称',
`precondition` text COMMENT '前置条件',
`steps` text NOT NULL COMMENT '操作步骤',
`expected_result` text NOT NULL COMMENT '预期结果',
`actual_result` text COMMENT '实际结果',
`status` tinyint DEFAULT '0' COMMENT '执行状态',
`creator_id` bigint NOT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `idx_project` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 前端技术方案
Vue 3.x + Element Plus的组合优势明显:
- 组件化开发效率高(对比原生HTML开发速度提升3倍+)
- Axios拦截器统一处理HTTP状态码(401跳登录/500错误提示)
- 动态路由实现权限控制(根据角色加载不同菜单)
典型页面交互实现:
javascript复制// 测试用例批量导入
const handleImport = async (file) => {
loading.value = true;
try {
const formData = new FormData();
formData.append('file', file.raw);
const res = await importCase(formData);
ElMessage.success(`成功导入${res.data.successCount}条用例`);
getCaseList(); // 刷新列表
} catch (e) {
ElMessage.error(e.message);
} finally {
loading.value = false;
}
};
3. 核心功能实现细节
3.1 测试用例管理模块
采用树形结构组织用例,关键技术点:
- 递归组件实现无限级分类
- 富文本编辑器集成(Tinymce用于步骤描述)
- Excel导入导出使用EasyExcel(避免OOM)
性能优化技巧:
- 分类加载采用懒加载模式
- 列表查询添加debounce防抖
- 批量操作使用线程池处理
3.2 缺陷生命周期管理
状态机设计:
java复制public enum BugStatus {
NEW(0, "新建"),
OPEN(1, "打开"),
FIXED(2, "已修复"),
REJECTED(3, "已拒绝"),
REOPEN(4, "重新打开"),
CLOSED(5, "已关闭");
// 状态流转校验逻辑
public static boolean canTransfer(BugStatus from, BugStatus to) {
switch (from) {
case NEW: return to == OPEN || to == REJECTED;
case OPEN: return to == FIXED || to == REJECTED;
// 其他状态流转规则...
}
}
}
3.3 统计报表模块
使用ECharts实现:
- 项目进度燃尽图(Sprint维度)
- 缺陷分布雷达图(按模块/严重程度)
- 测试覆盖率趋势图(每日构建数据)
数据聚合优化:
sql复制-- 使用CTE优化复杂统计查询
WITH project_stats AS (
SELECT
project_id,
COUNT(CASE WHEN status = 1 THEN 1 END) as open_bugs,
COUNT(CASE WHEN severity = 'CRITICAL' THEN 1 END) as critical_bugs
FROM bug
GROUP BY project_id
)
SELECT p.*, s.*
FROM project p LEFT JOIN project_stats s ON p.id = s.project_id;
4. 部署实践与踩坑记录
4.1 后端部署要点
- 生产环境配置分离:
yaml复制# application-prod.yml
spring:
datasource:
url: jdbc:mysql://${DB_HOST:localhost}:3306/test_management?useSSL=false&serverTimezone=Asia/Shanghai
username: ${DB_USER:root}
password: ${DB_PASSWORD:123456}
redis:
host: ${REDIS_HOST:localhost}
- 日志切割配置(Logback+Logstash):
xml复制<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
4.2 前端部署陷阱
- 路由History模式需要Nginx额外配置:
nginx复制location / {
try_files $uri $uri/ /index.html;
}
- 静态资源缓存策略:
nginx复制location /static {
expires 1y;
add_header Cache-Control "public";
}
location /index.html {
add_header Cache-Control "no-cache, no-store";
}
5. 毕业设计特别建议
5.1 论文写作要点
技术章节建议结构:
- 系统需求分析(含用例图)
- 架构设计(部署图+组件图)
- 数据库设计(ER图+主要表结构)
- 关键技术实现(配核心代码片段)
- 系统测试(含压力测试结果)
5.2 答辩准备技巧
-
演示数据准备:
- 使用Mockaroo生成逼真测试数据
- 准备不同角色账号(管理员/测试员/开发员)
-
常见问题预演:
- 为什么选择这个技术栈?
- 系统有什么创新点?
- 遇到的最大技术挑战?
-
性能优化展示:
- 使用JMeter对比优化前后QPS
- 展示Redis缓存效果(命中率监控)
6. 项目扩展方向
对于想进一步提升项目的同学,可以考虑:
- 集成Jenkins实现自动化测试
- 增加Swagger接口文档
- 引入WebSocket实现实时通知
- 开发移动端适配(使用Vant或Uni-app)
代码组织方面特别建议:
- 保持清晰的Git提交记录
- 使用Git Tag标记关键版本
- 编写规范的CHANGELOG.md
这个项目最让我有成就感的是权限系统的实现——通过注解+AOP实现了方法级的细粒度控制。比如测试员只能修改自己创建的用例,而项目经理可以跨项目查看统计报表。在RBAC模型基础上,我还增加了数据权限控制,这在实际企业应用中非常实用。