团队作业3--需求改进&系统设计

团队作业3--需求改进&系统设计

这个作业属于哪个课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 需求改进和系统设计

一、需求改进

(一)课堂讨论问题及修改

  • 问题1:如何对接学校系统进行获取数据
    修改1:使用API接口,通过学校提供的RESTful API或SOAP服务获取实时数据(如学生信息、课程表、成绩)。
  • 问题2:如何针对核心用户进行增删功能
    修改2:核心用户为学生,针对学生开发
    1.备忘录(考试或代办);
    2.课表换背景;
    3.在课表请假;
    4.当堂课评价;
    5.查课表点外卖;
    6.每次点击弹出人文关怀鸡汤。

(二)需求规格说明书改进

  1. 原初稿不足
    • 风险分析(如开发进度延迟、技术复杂度风险)

    • 附录:

      • 术语表(如SSM、MVP)
      • 接口文档链接(与学校API的对接样例)
    • 验收标准(如系统响应时间<1秒为及格指标)

(四)功能分析四个象限

实现难度低 实现难度高
用户价值高 第二象限:选课冲突检测 第一象限:成绩查询、课程表
用户价值低 第四象限:IoT监控 第三象限:移动端适配

(五)调整任务分解WBS及项目进度计划

调整后的WBS(工作分解结构)

任务层级 任务名称 负责人 交付物 优先级
1. 项目启动
1.1 需求澄清会议(用户访谈) 项目经理 用户需求清单(签字确认版) ★★★★★
2. 核心功能开发
2.1 学生模块功能
2.1.1 学生成绩查询功能(支持按学期筛选) 前端开发 接口文档+可交互页面 ★★★★★
2.1.2 课程表展示与订阅提醒 日历组件+邮件/短信通知服务 ★★★★★
2.2 教师模块功能
2.2.1 成绩录入模板校验与分批次保存 后端开发 Excel解析接口+校验规则文档 ★★★★★
2.3 教务模块功能
2.3.1 选课冲突检测基础版(时间/教室) 后端开发 冲突检测API(支持1000并发) ★★★★
3.支撑功能开发
3.1 权限系统(RBAC模型设计) 权限流程图+数据库表设计 ★★★★
3.2 数据对接(学校LDAP同步) 后端开发 单点登录接口+定时同步脚本 ★★★
4. 测试与交付
4.1 压力测试(选课模块高并发验证) 测试 JMeter测试报告+SQL慢查询优化方案 ★★★

项目进度计划(示例周次)

周次/阶段 核心任务 关键产出物 依赖关系
第6周 需求分析定稿 需求规格说明书V2.0
第7-8周 原型设计+技术验证 高保真原型(Figma) 需求确认后启动
Spring Security权限模块开发 RBAC权限表结构设计 需完成权限设计评审
第9周 Alpha冲刺阶段启动 每日Scrum会议记录 原型评审通过
学生成绩查询功能联调 学生端功能演示 依赖后端接口完成
第10周 选课冲突检测(第一版) 冲突检测逻辑白皮书+测试用例 依赖教室/课程数据准备
第11周 用户测试+反馈迭代 测试报告(10个核心场景通过率≥95%) Beta版发布前必须完成
第12周 风险应对(预留缓冲时间) 风险处理报告(如学校API延迟应对方案) 根据实际风险触发

二、系统设计(架构设计)

基于高并发、可扩展性需求,采用前后端分离 + 分布式微服务架构,以下为关键技术选型与模块划分:

1. 架构分层与技术栈

系统架构技术方案

层级 技术方案 说明
前端 Vue3 + Vite + Element-Plus + Axios - 响应式界面
- 动态路由 + 权限指令控制
网关层 Spring Cloud Gateway + JWT - 统一鉴权、限流
- 路由分发(/api/user → 用户微服务)
微服务层 Spring Boot 3.x + Nacos(注册中心) - 核心服务:用户服务、课程服务、选课服务、成绩服务
- 使用 OpenFeign 实现服务间通信
数据库层 MySQL 8.0(主从复制) + Redis 7.0 - 读写分离
- Redis 缓存选课库存、分布式锁
安全权限 Spring Security + RBAC 模型 - 接口级权限控制(@PreAuthorize
- 数据权限隔离(教师仅能访问任课班级)
监控运维 Prometheus + Grafana + SkyWalking - 接口性能监控
- SQL 慢查询报警

2. 服务拆分与通信设计

  1. 前端

    • 技术栈: Vue SPA
    • 通信方式: 调用网关接口
  2. 网关层

    • 组件: Spring Cloud Gateway (端口 8080)
    • 依赖服务发现: Nacos
  3. 微服务层

    • 用户服务 (端口 8001)
      • 核心功能: 登录/注册、权限管理
    • 课程服务 (端口 8002)
      • 核心功能: 课程增删改查、教室时间分配
    • 选课服务 (端口 8003)
      • 核心功能: 选课冲突检测、选课队列处理
  4. 公共依赖

    • JWT 工具类、异常处理封装

3.数据库分析

采用符合第三范式的设计,确保数据一致性,同时针对性优化高频查询。

(1). 核心表结构

用户与权限相关

点击查看代码
-- 用户表(所有角色基础信息)
CREATE TABLE `user` (
  `user_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
  `username` VARCHAR(50) UNIQUE NOT NULL COMMENT '学号/工号',
  `password` VARCHAR(100) NOT NULL COMMENT 'BCrypt加密密码',
  `real_name` VARCHAR(20) NOT NULL COMMENT '真实姓名',
  `role_id` INT NOT NULL COMMENT '关联角色表',
  INDEX `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 角色表(RBAC模型)
CREATE TABLE `role` (
  `role_id` INT PRIMARY KEY AUTO_INCREMENT,
  `role_name` VARCHAR(20) NOT NULL COMMENT '学生/教师/教务'
);

-- 权限表(细粒度控制)
CREATE TABLE `permission` (
  `perm_id` INT PRIMARY KEY AUTO_INCREMENT,
  `perm_code` VARCHAR(50) NOT NULL COMMENT '如 course:add'
);

课程与选课相关

点击查看代码
-- 课程信息表
CREATE TABLE `course` (
  `course_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `course_code` VARCHAR(20) UNIQUE NOT NULL COMMENT '课程编号',
  `course_name` VARCHAR(100) NOT NULL,
  `credit` TINYINT NOT NULL COMMENT '学分',
  `max_students` INT NOT NULL COMMENT '最大选课人数'
);

-- 课程安排表(上课时间地点)
CREATE TABLE `course_schedule` (
  `schedule_id` BIGINT PRIMARY KEY,
  `course_id` BIGINT NOT NULL,
  `teacher_id` BIGINT NOT NULL COMMENT '任课教师',
  `semester` VARCHAR(10) NOT NULL COMMENT '如2024-SPRING',
  `week` TINYINT NOT NULL COMMENT '周次 (1-16)',
  `time_slot` VARCHAR(20) NOT NULL COMMENT '时间枚举:MON-MORNING2',
  `classroom` VARCHAR(50) NOT NULL,
  FOREIGN KEY (`course_id`) REFERENCES `course`(`course_id`),
  FOREIGN KEY (`teacher_id`) REFERENCES `user`(`user_id`),
  INDEX `idx_time` (`semester`, `week`, `time_slot`)  -- 加速冲突检测
);

-- 学生选课表
CREATE TABLE `student_course` (
  `sc_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `student_id` BIGINT NOT NULL,
  `schedule_id` BIGINT NOT NULL,
  `status` TINYINT DEFAULT 0 COMMENT '0-待确认 1-成功 2-已退选',
  `select_time` DATETIME NOT NULL,
  FOREIGN KEY (`student_id`) REFERENCES `user`(`user_id`),
  FOREIGN KEY (`schedule_id`) REFERENCES `course_schedule`(`schedule_id`),
  UNIQUE KEY `uk_student_schedule` (`student_id`, `schedule_id`)  -- 防止重复选课
);

成绩管理相关

点击查看代码
-- 学生成绩表
CREATE TABLE `student_score` (
  `score_id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `student_id` BIGINT NOT NULL,
  `course_id` BIGINT NOT NULL,
  `exam_type` VARCHAR(20) COMMENT '期中/期末/平时',
  `score` DECIMAL(5,2) CHECK (`score` BETWEEN 0 AND 100),
  `teacher_id` BIGINT NOT NULL COMMENT '录入教师',
  FOREIGN KEY (`student_id`) REFERENCES `user`(`user_id`),
  FOREIGN KEY (`course_id`) REFERENCES `course`(`course_id`)
);

三、Alpha任务分配计划

召开迭代计划会议,为下周进入Sprint做准备,具体内容如下:
1. 迭代计划会议准备
会议目标:基于当前团队资源(7人,总开发时间约240小时/周),从Product Backlog中筛选高优先级任务,拆分为可执行单元。

关键输入:

  • 需求优先级排序结果(核心功能:学生成绩查询、教师成绩录入、选课冲突检测)
  • 技术风险清单(如Redis未部署可能影响选课性能)

2. Sprint Backlog生成(示例分解)
总原则:任务粒度控制在1人天内(约6-8小时),明确输出物与验收标准。

功能模块 分解任务 预计耗时 负责人 依赖关系 验收标准
学生成绩查询 1. 后端:MyBatis多表查询接口开发(学生-课程-成绩) 6h 后端开发 需先完成数据库设计评审 接口返回符合Swagger定义,支持分页
2. 前端:Element-Table动态渲染成绩表格 5h 前端开发 依赖接口完成 表格支持按学期筛选,加载时间<1s
教师成绩录入 1. 后端:Excel导入工具类开发(POI + 校验规则) 8h 后端开发 需确定模板格式 解析1000行数据耗时<2s,错误提示定位准确
2. 前端:上传组件+错误展示弹窗 4h 前端开发 依赖工具类完成 用户可下载错误报告,支持断点续传
选课冲突检测 1. 算法:时间冲突检测核心逻辑(基于课程Schedule) 10h 需获取教室时间数据 检测准确率100%,响应时间<50ms(压测)
2. Redis:库存扣减原子操作实现 6h 后端开发 需完成Redis环境配置 并发测试无超卖,日志可追溯
系统支撑 1. 权限系统:JWT令牌签发与校验 6h 支持角色鉴定,Token过期自动刷新
2. 日志监控:ELK日志收集配置 4h 需服务器权限 可在Kibana中按模块检索错误日志

3. 迭代冲刺甘特图(Alpha阶段)
时间范围:第6周至第9周(共4个Sprint,每周迭代)

关键里程碑:

  • Sprint 1结束:完成基础框架搭建(6月10日)
  • Sprint 3结束:核心功能联调(6月24日)
posted @ 2025-04-22 20:04  窗帘盒子  阅读(93)  评论(0)    收藏  举报