1. 项目背景与核心价值
这个测试项目管理系统是我在完成计算机专业毕业设计时的实战作品,采用前后端分离架构,后端基于SpringBoot框架,前端使用Vue.js实现。系统主要面向高校软件测试课程和中小型IT团队的测试流程管理需求,实现了从测试用例设计到缺陷跟踪的全流程数字化管理。
在实际开发过程中,我发现很多同学在毕设选题时都会遇到这样的困境:要么选题太简单难以体现技术深度,要么选题太复杂导致无法按期完成。这个项目的设计初衷就是找到一个平衡点——既能展示完整的企业级开发流程,又能在3-4个月开发周期内高质量完成。
关键提示:选择SpringBoot+Vue技术栈不仅因为其市场普及度高,更重要的是两者都有完善的脚手架工具,可以快速搭建符合企业标准的项目结构,避免在基础配置上耗费过多时间。
2. 系统架构设计解析
2.1 技术选型决策过程
后端选择SpringBoot主要基于以下考量:
- 自动配置特性大幅减少XML配置
- 内嵌Tomcat简化部署流程
- Starter依赖机制规范了技术组件集成
- Actuator模块提供生产级监控端点
前端选用Vue.js的核心原因:
- 渐进式框架适合逐步完善功能模块
- 组件化开发与测试管理系统的模块化特性高度契合
- Vue CLI提供的可视化项目管理界面降低学习曲线
- Element UI组件库能快速构建专业的管理后台界面
2.2 系统模块划分
系统采用经典的三层架构设计:
code复制src/
├── main/
│ ├── java/
│ │ ├── config/ # Spring配置类
│ │ ├── controller/ # 表现层
│ │ ├── service/ # 业务逻辑层
│ │ ├── dao/ # 数据访问层
│ │ └── entity/ # 实体类
│ └── resources/
│ ├── static/ # 静态资源
│ ├── templates/ # 模板文件
│ └── application.yml # 配置文件
3. 核心功能实现细节
3.1 测试用例管理模块
采用树形结构组织测试用例,关键技术点包括:
- 使用@Transactional保证用例版本更新的原子性
- 通过MyBatis的嵌套查询实现无限级分类
- 前端采用Vue的递归组件渲染树形菜单
关键代码片段:
java复制// 用例树查询接口
@GetMapping("/tree")
public Result<List<TestCaseNode>> getTestCaseTree(@RequestParam Integer projectId) {
List<TestCase> cases = testCaseService.listByProject(projectId);
return Result.success(TestCaseTreeBuilder.build(cases));
}
3.2 缺陷跟踪工作流
实现状态机模式的缺陷生命周期管理:
mermaid复制stateDiagram
[*] --> 新建
新建 --> 已分配: 分配处理人
已分配 --> 处理中: 开始修复
处理中 --> 已修复: 提交修复
已修复 --> 已关闭: 验证通过
已修复 --> 处理中: 验证失败
避坑指南:不要在数据库直接存储状态字符串,应该使用枚举类型。我们定义了DefectStatus枚举类,配合@Enumerated(EnumType.STRING)注解实现安全映射。
4. 关键技术难点解决方案
4.1 前后端分离的权限控制
采用JWT+RBAC的混合方案:
- 后端定义权限注解:
java复制@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresPermissions {
String[] value();
}
- 前端通过动态路由控制菜单显示:
javascript复制// 过滤有权限的路由
function filterAsyncRoutes(routes, roles) {
return routes.filter(route => {
if (route.meta && route.meta.roles) {
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
}
})
}
4.2 测试报告生成优化
使用POI-TL模板引擎解决Word报告性能问题:
- 预先制作.docx模板文件
- 采用异步生成+进度查询机制
- 引入Redis缓存常用报告模板
配置示例:
yaml复制poi-tl:
template-path: classpath:/templates/report
cache:
enable: true
expire-time: 3600
5. 部署实践与性能调优
5.1 生产环境部署方案
推荐使用Docker Compose编排服务:
dockerfile复制version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./mysql/data:/var/lib/mysql
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
frontend:
build: ./frontend
ports:
- "80:80"
5.2 性能优化关键指标
通过JMeter压测后采取的优化措施:
- 启用HikariCP连接池:
properties复制spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=30000
- 添加二级缓存:
java复制@CacheConfig(cacheNames = "testCase")
@Repository
public interface TestCaseMapper extends BaseMapper<TestCase> {
@Cacheable(key = "#id")
TestCase selectById(Integer id);
}
6. 论文写作要点指南
6.1 技术章节结构建议
-
系统需求分析
- 绘制用例图时注意区分系统角色
- 使用Swagger生成API文档作为附录
-
数据库设计
- 展示完整的ER图
- 说明索引设计考虑(如用例表的project_id索引)
-
系统实现
- 重点描述创新点(如测试用例版本控制算法)
- 截图需带系统界面和URL地址栏
6.2 答辩常见问题准备
高频问题清单:
- 如何保证测试用例的版本一致性?
- 缺陷状态流转的约束条件是什么?
- 系统在100人并发时的响应时间?
- 与主流测试工具(如Jira)的区别?
7. 项目扩展方向建议
已完成基础功能的同学可以考虑:
- 集成Jenkins实现自动化测试
- 增加测试数据生成器模块
- 开发移动端适配界面
- 引入ELK实现日志分析
我在开发过程中最大的体会是:不要过度追求技术新颖性,毕业设计更应该展示扎实的工程实现能力。这个项目虽然采用了主流技术栈,但通过完整的测试覆盖率(Jacoco报告达到85%+)和规范的代码风格(Checkstyle验证通过),充分体现了软件工程的最佳实践。