1. 项目背景与定位
山东大学软件学院的创新实训项目是该院特色实践教学环节的重要组成部分。作为计算机相关专业的学生,我在大三下学期参与了为期8周的创新实训课程。这个项目不同于传统的课程设计或毕业设计,它更强调在真实开发环境中解决复杂工程问题的能力培养。
实训采用企业级项目开发流程,从需求分析到产品交付完整模拟了软件企业的运作模式。我们小组6名成员需要完成一个具备商业价值的完整软件系统开发,期间需要经历技术选型、架构设计、编码实现、测试部署等全流程环节。这种实战训练对于在校学生而言,是难得的将理论知识转化为工程能力的机会。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 团队组建与项目启动
2.1 团队成员角色分配
我们小组由4名开发、1名测试和1名项目经理组成。在首次团队会议上,我们根据个人技术特长进行了角色分工:
- 前端开发:负责Web界面和移动端应用开发
- 后端开发:处理业务逻辑和数据库设计
- 算法工程师:实现核心算法模块
- 全栈开发:协助前后端联调
- 测试工程师:制定测试方案和自动化测试
- 项目经理:协调进度和文档管理
这种分工既考虑了个人技术栈,也确保了每个关键岗位都有专人负责。作为后端开发,我需要重点掌握Spring Boot框架和MySQL数据库的应用。
2.2 项目选题与需求分析
经过多轮讨论和导师指导,我们最终确定开发一个"智能校园服务系统"。该系统主要解决三个核心问题:
- 教室资源智能预约与管理
- 校园活动线上化组织
- 学生个性化服务推荐
需求分析阶段我们采用了用户故事地图的方法,将系统功能拆分为8个核心模块。通过访谈20位在校师生,收集到37条具体需求,最终形成了一份25页的需求规格说明书。
3. 技术架构设计
3.1 整体技术栈选型
基于项目需求和团队技术储备,我们确定了以下技术方案:
- 前端:Vue.js + Element UI(Web端),Uni-app(移动端)
- 后端:Spring Boot 2.7 + MyBatis Plus
- 数据库:MySQL 8.0 + Redis缓存
- 基础设施:Docker容器化部署
- 算法服务:Python Flask + Scikit-learn
选型主要考虑因素包括:
- 团队成员已有基础,降低学习成本
- 技术社区活跃度,确保问题可解决
- 与学校现有系统的兼容性
- 未来可扩展性
3.2 微服务架构设计
系统采用领域驱动设计(DDD)思想,划分为四个微服务:
- 用户中心服务:处理认证授权和基础信息
- 资源管理服务:教室/设备等资源调度
- 活动服务:活动创建、报名和统计
- 推荐服务:个性化内容推荐
每个服务独立部署,通过Spring Cloud Gateway实现API聚合。服务间通信采用RESTful API和消息队列(RabbitMQ)两种方式,根据业务场景选择最佳方案。
4. 核心功能实现
4.1 智能预约系统
教室预约是系统的核心功能,我们实现了:
- 可视化日历选择界面
- 冲突检测算法
- 审批工作流引擎
- 使用记录信用评分
关键技术点包括:
java复制// 冲突检测核心逻辑
public boolean checkTimeConflict(Reservation newRes) {
return existingReservations.stream()
.anyMatch(r -> r.getRoomId().equals(newRes.getRoomId())
&& !(newRes.getEndTime().isBefore(r.getStartTime())
|| newRes.getStartTime().isAfter(r.getEndTime())));
}
4.2 推荐算法实现
基于用户行为数据,我们开发了混合推荐策略:
- 协同过滤:找到相似用户喜欢的活动
- 内容过滤:基于活动标签匹配
- 热门推荐:近期热门活动
算法服务采用Python实现,通过Flask提供REST接口。特征工程阶段我们处理了12维度的用户特征和8维度的活动特征。
5. 开发过程管理
5.1 敏捷开发实践
我们采用Scrum方法进行迭代开发:
- 每周一个冲刺周期
- 每日站会同步进度
- 使用Jira管理任务
- 代码评审制度
这种模式帮助我们及时发现并解决问题,保持项目稳步推进。
5.2 代码质量控制
为确保代码质量,我们建立了以下机制:
- Git分支策略:feature分支开发,PR合并到main
- 自动化测试:JUnit单元测试覆盖核心逻辑
- 代码规范检查:使用SonarQube静态分析
- CI/CD流程:Jenkins自动化构建部署
6. 项目成果与反思
6.1 最终交付成果
经过8周开发,我们完成了:
- 完整的系统文档(需求、设计、API)
- 可运行的Web和移动端应用
- 自动化测试套件
- 部署手册和运维脚本
系统在演示环节获得学院优秀项目评价,部分功能被建议整合到学校官方应用中。
6.2 经验教训总结
关键收获:
- 需求变更管理:建立正式变更流程
- 技术债务控制:定期重构和优化
- 团队沟通效率:使用可视化看板
- 时间管理:合理评估任务耗时
需要改进的方面:
- 测试覆盖率可以更高
- 监控系统需要完善
- 文档更新不及时
- 压力测试不足
这次实训让我深刻理解了软件工程实践中的各种挑战,也验证了课堂所学知识的实际应用价值。最大的体会是:优秀的软件不仅需要扎实的编码能力,更需要系统的工程思维和团队协作能力。
