1. 项目背景与团队组建
山东大学软件学院的创新实训课程是该院软件工程专业的特色实践环节,旨在通过真实项目开发培养学生的工程实践能力。作为大三下学期的重要必修课,这门课程要求学生以4-6人团队形式,在16周内完成从需求分析到产品上线的全流程开发。
去年我参与的"智能实验室预约系统"项目组,成员包括:
- 前端开发:2名(Vue技术栈)
- 后端开发:2名(Spring Boot)
- 产品经理:1名(兼UI设计)
- 测试工程师:1名(轮岗制)
组队建议:建议选择技术栈互补的队友,最好包含至少1名有实际项目经验的同学。我们组因为有位在腾讯实习过的后端同学,在技术方案选型上少走了很多弯路。
2. 选题策略与需求分析
2.1 选题方向确定
学院提供的选题范围通常包括:
- 校园服务类(如我们做的实验室预约系统)
- 企业合作项目(与浪潮、海尔等合作的实际需求)
- 竞赛孵化项目(挑战杯、"互联网+"等赛事的预备项目)
我们最终选择实验室预约系统主要基于:
- 需求明确:校内实验室管理确实存在预约流程繁琐的问题
- 技术匹配:团队成员都有Web开发基础
- 可扩展性:后期可加入人脸识别签到等模块
2.2 需求调研方法
采用"双线调研法":
- 用户访谈:对15名经常使用实验室的师生进行结构化访谈
- 竞品分析:研究市场上3款主流预约系统(如腾讯微校)
发现核心痛点:
- 现有Excel预约方式无法实时更新
- 设备使用情况无法可视化
- 紧急预约需求无法及时响应
3. 技术方案设计与实现
3.1 系统架构设计
采用前后端分离架构:
code复制前端:Vue3 + Element Plus + ECharts
后端:Spring Boot 2.7 + MySQL 8.0
部署:Docker + Nginx(学院提供的CentOS服务器)
关键技术选型原因:
- Vue3的Composition API更适合复杂状态管理
- ECharts满足实验室使用率可视化需求
- Docker简化了环境配置问题
3.2 核心功能实现
3.2.1 预约冲突检测算法
开发中最耗时的部分,最终采用时间片重叠检测算法:
java复制public boolean checkConflict(LabReservation newRes) {
return existingReservations.stream()
.anyMatch(existing ->
!(newRes.getEndTime().before(existing.getStartTime()) ||
newRes.getStartTime().after(existing.getEndTime())));
}
3.2.2 微信消息推送
通过微信公众号模板消息实现预约成功通知:
- 申请学校企业微信接口权限
- 使用WxJava SDK处理消息模板
- 建立消息队列应对高并发场景
4. 项目过程管理
4.1 敏捷开发实践
采用Scrum方法,每两周一个迭代:
- 每日站会:早课前的15分钟快速同步
- 看板管理:使用GitLab的Issue Board
- 代码规范:遵循Alibaba Java Coding Guidelines
4.2 质量保障措施
- 自动化测试:
- 后端:JUnit + Mockito(覆盖率85%)
- 前端:Jest + Testing Library
- 代码审查:Merge Request必须经过2人评审
- 压力测试:JMeter模拟100并发预约请求
5. 成果展示与答辩技巧
5.1 演示准备要点
- 准备两套演示方案:
- 5分钟精简版(重点展示创新点)
- 15分钟完整版(展示技术细节)
- 制作系统架构图和数据流图
- 录制备用演示视频(防止现场网络问题)
5.2 答辩常见问题
根据学长经验整理的高频问题:
- "你们的系统与市场上现有产品有什么区别?"
- 回答重点:突出针对校园场景的定制化功能
- "如果用户量增加10倍,系统哪些地方需要优化?"
- 建议回答方向:数据库分表、缓存策略、异步处理
6. 经验总结与建议
- 技术层面的收获:
- 第一次完整实践DDD领域驱动设计
- 掌握了微信生态开发的全流程
- 项目管理教训:
- 前期需求变更太频繁导致返工
- 测试案例编写不够及时
- 给学弟学妹的建议:
- 尽早确定技术栈并统一开发环境
- 每天至少commit一次代码
- 文档和代码注释要同步更新
这个项目最终获得学院优秀实训项目,并成功部署到软件学院实验室实际使用。最大的成就感不是答辩得分,而是看到老师们真正在用我们开发的系统管理实验室预约。
