团队作业3
需求&原型改进
一、功能瘦身方案(聚焦核心功能)
- 学术资源循环站(核心)
- 简化为教材/笔记交易模块
- 采用"学科+课程编号"手动标签系统(替代复杂DNA匹配)
- 增加扫码查书功能(扫描教材ISBN码自动识别)
- 校园时间银行(特色)
- 保留基础技能交换功能
- 采用"1学分=1小时"简化计量单位
- 学长咨询改为预约制(去除拍卖机制)
- 宿舍经济特区(刚需)
- 拼单功能简化为楼栋群聊
- 床位出租改为假期闲置登记(手动审核)
- 移除NFT等复杂模块
- 成长体系改为积分制(1交易=10积分)
- 数字学生证改为普通实名认证
- 校际贸易改为校园文创专区
- 聚焦本校纪念品交易
二、技术方案降级
- 前端技术
- 框架:Uni-app(一套代码多端发布)
- UI库:uView基础组件库
- 地图定位:腾讯位置服务基础API
- 后端技术
-
框架:Node.js + Express
-
数据库:MySQL单库(表结构示例):
sql
复制
-- 商品表 CREATE TABLE items ( id INT PRIMARY KEY AUTO_INCREMENT, type ENUM('教材','服务','日用品','其他'), title VARCHAR(60), owner_id INT, price DECIMAL(10,2), location VARCHAR(20) -- 楼栋编号 ); -- 交易记录 CREATE TABLE transactions ( id INT PRIMARY KEY AUTO_INCREMENT, item_id INT, buyer_id INT, status ENUM('待支付','已完成','已取消') );
- 部署方案
- 服务器:腾讯云轻量应用服务器(2核4G)
- 存储:OSS对象存储(图片/文件)
- 监控:简单云监控(CPU/内存报警)
三、安全与性能优化
- 简化安全措施:
- 微信一键登录(免密认证)
- 交易资金走微信支付分担保
- 敏感字段AES加密存储
- 性能保障:
- 限制图片大小<500KB
- 采用CDN静态资源加速
- 定时任务清理过期数据
四、实施路线图
gantt
title 项目开发路线图
dateFormat YYYY-MM-DD
section 基础版本
用户系统 :2023-10-01, 15d
商品发布系统 :2023-10-16, 20d
即时通讯模块 :2023-11-05, 15d
section 进阶版本
学分兑换系统 :2023-11-20, 10d
扫码查书功能 :2023-12-01, 7d
楼栋拼单功能 :2023-12-08, 10d
五、成本控制方案
- 人力成本:
- 开发团队:2人(全栈开发+UI设计)
- 周期:3个月(基础版1.5个月)
- 云资源成本:
- 服务器:约500元/年
- 域名+SSL证书:200元/年
- 短信验证:0.05元/条(按需使用)
六、运营建议
- 冷启动策略:
- 建立"教材漂流"活动(捐赠教材送积分)
- 举办寝室带货大赛(拼单量竞赛)
- 用户激励:
- 完成首单送食堂代金券(与学校食堂合作)
- 邀请3位同学得打印店优惠
- 风险控制:
- 设置交易黑名单机制(3次差评自动封号)
- 敏感词过滤系统(基于百度内容审核API)
系统设计
一、系统架构设计
# 架构分层
前端(Web/H5)
↔ RESTful API
↔ 后端服务(Django)
↔ 数据库(MySQL)
↔ 第三方服务(微信登录/支付)
二、模块划分
1. 用户模块
# 伪代码示例
class UserService:
def login_by_wechat(code): # 微信快捷登录
→ 调用微信API获取openid
→ 创建本地用户记录
→ 返回JWT token
def get_user_profile(uid): # 获取用户资料
→ 返回{name, avatar, credit_score, dorm_building}
2. 商品模块
class ItemService:
def create_item(uid, type, title, price, isbn=None): # 发布商品
→ 校验用户宿舍楼栋
→ 如果是教材类,验证ISBN有效性
→ 存入数据库
def search_items(keyword, dorm, item_type): # 商品搜索
→ 按楼栋/类型过滤
→ 返回分页列表
3. 交易模块
class TransactionService:
def create_order(uid, item_id): # 创建订单
→ 检查商品状态
→ 调用微信支付生成预支付单
→ 冻结商品
def complete_order(order_id): # 确认收货
→ 解冻资金
→ 增加双方信用积分
4. 积分模块
class CreditService:
def exchange_credits(uid, action): # 积分兑换
if action == "交易完成":
user.credits += 10
elif action == "兑换食堂券":
if user.credits >= 100:
→ 生成电子优惠券
5. 即时通讯模块
class ChatService:
def send_dorm_message(uid, content): # 楼栋群聊
→ 根据用户宿舍号路由消息
→ 存储最近50条消息
三、接口设计示例
1. 用户登录
// 请求
POST /api/login
{ code: "微信临时code" }
// 响应
{
token: "jwt_token",
profile: {uid: 123, name: "张三", dorm: "3号楼"}
}
2. 商品发布
// 请求
POST /api/items
Headers: {Authorization: Bearer <token>}
{
type: "教材",
title: "高等数学 第七版",
isbn: "9787040375343",
price: 15.00
}
// 响应
{ item_id: 789, status: "已发布" }
3. 楼栋拼单
// 请求
GET /api/chat/dorm?last_id=0
→ 返回最新楼栋消息列表
四、数据库设计
-- 用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
wx_openid VARCHAR(64) UNIQUE, -- 微信唯一标识
dorm VARCHAR(20), -- 宿舍楼栋
credits INT DEFAULT 0 -- 积分
);
-- 商品表
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
type ENUM('教材','服务','日用品'),
title VARCHAR(60),
isbn VARCHAR(13), -- 教材ISBN
dorm VARCHAR(20), -- 所属楼栋
status ENUM('在售','已下架')
);
-- 交易记录
CREATE TABLE transactions (
id INT PRIMARY KEY,
item_id INT,
buyer_id INT,
wechat_order_no VARCHAR(32), -- 微信支付单号
status ENUM('待支付','已完成')
);
-- 消息表(楼栋群聊)
CREATE TABLE dorm_chat (
id INT PRIMARY KEY,
dorm VARCHAR(20),
content TEXT,
created_at DATETIME
);
五、安全设计
-
认证机制:
- 使用JWT Token,有效期为24小时
- 接口访问必须携带Authorization头
-
敏感数据处理:
# 伪代码:AES加密 def encrypt_wechat_info(data): → 使用AES-256-GCM模式加密 → 返回密文+IV+Tag -
交易安全:
- 资金流转全程依赖微信支付担保交易
- 订单状态变更需验证签名
六、性能优化设计
-
缓存策略:
# 伪代码:楼栋商品缓存 def get_dorm_items(dorm): cache_key = f"items:{dorm}" if not redis.exists(cache_key): → 查询数据库并缓存10分钟 return redis.get(cache_key) -
异步处理:
# 伪代码:消息发送 @background_task def async_send_message(msg): → 入库操作 → 清理过期消息
七、部署架构
+-----------------+
| 腾讯云CDN |
| (静态资源加速) |
+--------+--------+
↓
+-----------------+ +--------+-----------------+
| 前端部署 | | Nginx 反向代理 |
| (Vue.js打包) | ← → | → Django API (Gunicorn) |
+-----------------+ +--------+-----------------+
↓
+--------+--------+
| MySQL 数据库 |
+-----------------+
Alpha任务分配计划
人员分工矩阵
| 角色 | 人员代号 | 主要职责 |
|---|---|---|
| PM | PM1(张荣辉) | 需求管理、进度跟踪、资源协调 |
| 前端 | FE1(周戈)/FE2(陈曦) | 实现前端界面与接口联调 |
| 后端 | BE1(李永胜)/BE2(杨超民)/BE3(饶博勋) | 接口开发、数据库设计、系统集成 |
| 测试 | QA1(陈培然) | 用例编写、测试执行、缺陷管理 |
里程碑计划
gantt
title Alpha阶段里程碑
dateFormat YYYY-MM-DD
section 核心功能
用户系统 :active, 2023-11-01, 5d
商品交易流 :crit, 2023-11-06, 10d
即时通讯模块 :2023-11-13, 7d
积分兑换 :2023-11-20, 5d
section 质量保障
接口联调 :crit, 2023-11-15, 5d
系统测试 :2023-11-25, 5d
详细任务分配(按周拆分)
第1周(11.1-11.5)基础框架搭建
| 任务 | 负责人 | 交付物 | 关键依赖 |
|---|---|---|---|
| 需求确认与接口定义 | PM1+全体 | 接口文档v1.0 | 需11/2前冻结核心接口 |
| 微信登录集成 | BE1 | 可返回openid的测试接口 | 需要申请微信开发者账号 |
| 用户中心前端原型 | FE1 | 静态页面(登录/个人中心) | 等待接口文档 |
| 数据库建表 | BE2 | 初始化SQL脚本 | PM确认字段定义 |
| 测试环境搭建 | QA1 | 测试用例模板 | 需要服务器资源 |
第2周(11.6-11.12)核心功能开发
| 任务 | 负责人 | 交付物 | 关键依赖 |
|---|---|---|---|
| 商品发布功能 | BE2+FE1 | 支持教材ISBN扫码的完整流程 | 需调用ISBN查询API |
| 商品搜索列表页 | FE2 | 带楼栋筛选的H5页面 | 需要BE3提供搜索接口 |
| 交易担保流程 | BE3 | 微信支付回调处理逻辑 | 需联调沙箱环境 |
| 积分计算模块 | BE1 | 交易完成自动加分逻辑 | 依赖交易状态变更事件 |
第3周(11.13-11.19)交互优化
| 任务 | 负责人 | 交付物 | 关键依赖 |
|---|---|---|---|
| 楼栋聊天室 | FE2+BE2 | 基于WebSocket的简易通讯 | 需解决消息存储问题 |
| 信用分展示 | FE1 | 个人中心积分可视化 | 等待BE1提供数据接口 |
| 异常交易处理 | BE3 | 订单超时自动取消逻辑 | 需要Celery定时任务 |
| 压力测试方案 | QA1 | 核心接口压测报告 | 需要部署预发布环境 |
第4周(11.20-11.30)联调测试
| 任务 | 负责人 | 交付物 | 关键依赖 |
|---|---|---|---|
| 端到端测试 | QA1+FE | 完整交易流程验证 | 需要所有接口就绪 |
| 安全审计 | BE1 | 敏感数据加密验证报告 | 需PM协调第三方扫描 |
| 部署上线 | BE2 | 生产环境部署包 | 需要运维手册 |
| 用户培训材料 | PM1 | 校园推广PPT | 需要核心功能截图 |
每日执行节奏
09:00-09:15 每日站会(全员)→ 同步进度/阻塞问题
10:00-12:00 编码时间(开发)
14:00-15:00 接口联调(FE+BE结对)
16:00-17:00 测试用例评审(QA主导)
19:00前 提交当日代码(强制要求)
风险应对方案
-
接口延迟风险:
- 采取"接口先行"策略,BE提前1天提供Mock数据
- FE使用EasyMock工具模拟接口
-
微信审核延误:
- 准备备用方案:手机号+验证码登录(隐藏功能)
-
性能瓶颈:
- 对商品搜索接口做SQL优化(BE2负责)
- 启用数据库查询缓存(BE1实施)
测试计划
一、测试范围与优先级
# 测试重点矩阵(★越多优先级越高) ★★★★★ 用户注册/登录流程 ★★★★★ 商品发布与搜索 ★★★★☆ 微信支付全流程 ★★★★☆ 信用积分系统 ★★★☆☆ 楼栋聊天室 ★★★☆☆ 异常交易处理
二、测试策略
1. 分层测试策略
测试类型 执行者 工具/方法 覆盖率目标 单元测试 开发 pytest + unittest 核心模块70% 接口测试 测试+开发 Postman + 自动化脚本 100%接口 UI功能测试 测试 Cypress(关键路径) 主流程100% 性能测试 测试+BE JMeter(50并发) 交易接口90% 安全测试 测试 OWASP ZAP基础扫描 高危漏洞0 2. 测试阶段划分
gantt title 测试阶段规划 dateFormat YYYY-MM-DD section 单元测试 开发自测 :2023-11-01, 7d section 集成测试 接口联调 :2023-11-08, 5d section 系统测试 全链路测试 :2023-11-15, 10d section 验收测试 UAT测试 :2023-11-25, 3d
三、测试环境
环境类型 配置 用途 开发环境 本地Docker容器 单元测试 测试环境 腾讯云2核4G + MySQL 集成/系统测试 预生产 镜像生产环境配置 性能/安全测试
四、测试用例设计
1. 核心功能用例示例
### 用例ID: TRANSACTION_001 **名称**: 完整教材交易流程 **步骤**: 1. 用户A发布教材(ISBN校验) 2. 用户B搜索并购买 3. 微信支付成功 4. 用户A确认收款 5. 积分系统更新 **预期结果**: - 双方积分各+10 - 商品状态变更为"已售出"2. 异常场景用例
### 用例ID: ERROR_003 **名称**: 支付超时处理 **步骤**: 1. 创建订单后不支付 2. 等待15分钟 **预期结果**: - 订单自动取消 - 商品恢复可售状态
五、测试资源
1. 测试数据准备
# 伪代码:商品测试数据生成 def generate_test_items(): for i in range(100): create_item( type="教材", isbn=f"9787040375{str(i).zfill(3)}", dorm=random.choice(["3号楼","5号楼"]) )2. 测试工具栈
工具类型 具体工具 用途 接口测试 Postman + Newman 接口自动化 性能测试 JMeter 交易接口压测 缺陷管理 禅道 缺陷跟踪 监控 Prometheus+Grafana 生产环境监控(可选)
六、缺陷管理流程
# 缺陷生命周期 发现 → 录入禅道 → 开发确认 → 修复 → 回归测试 → 关闭 # 严重程度分级 S1-阻塞性缺陷(无法进行核心流程) S2-主要功能缺陷 S3-次要功能缺陷 S4-优化建议
七、测试执行计划
每周重点
周次 测试重点 人力分配 1 接口文档评审+单元测试督查 QA1 50% / 开发30% 2 接口自动化脚本开发 QA1 70% / FE1 30% 3 全链路场景测试+性能测试 QA1 100% + BE3协助 4 验收测试+线上监控 QA1 60% + PM支持 每日测试任务
09:30 检查昨日提交代码的单元测试报告 11:00 执行接口自动化测试套件 14:00 进行探索性测试(重点新功能) 16:00 缺陷分类与优先级调整 17:30 更新测试进度看板
八、风险与应对
风险项 应对方案 支付接口联调延迟 提前准备沙箱环境测试账号 性能测试未达标 简化测试场景,聚焦核心接口 测试数据不足 开发数据工厂工具快速生成测试数据 兼容性问题 重点覆盖iOS/Android主流机型
九、交付物标准
- 测试报告模板:
## 测试总结报告 - 测试范围:覆盖4大核心模块 - 缺陷统计:发现S1缺陷0个,S2缺陷3个 - 性能指标:交易接口平均响应时间<1.2s - 上线建议:通过/不通过- 质量红线:
- 所有S1缺陷必须关闭
- 核心接口成功率≥99.9%
- 支付流程通过率100%
团队成员
| 姓名 | 学号 |
|---|---|
| 周戈(队长) | 3123004164 |
| 张荣辉 | 3123004162 |
| 杨超民 | 3123004161 |
| 饶博勋 | 3123004152 |
| 李永胜 | 3123004148 |
| 陈曦 | 3123004137 |
| 陈培然 | 3123004134 |
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13329 |
| 这个作业的目标 | 需求改进&系统设计&Alpha任务分配计划&测试计划 |

浙公网安备 33010602011771号