audit full project flows and harden backend
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## 1. 目标
|
||||
|
||||
本计划用于验证当前已实现的两类 App、三个业务管理端、官网以及 API/Worker/IoT 三个后端进程,确保:
|
||||
本计划用于验证当前已实现的两类 App、三个业务管理端、官网以及 API、Worker、IoT Gateway、IoT Server 四个后端进程,确保:
|
||||
|
||||
- 业务主责与数据边界正确,没有通过其他终端越权改写事实。
|
||||
- 设备控制、安全事件、订单履约、资金和审计形成可追踪闭环。
|
||||
@@ -22,10 +22,11 @@
|
||||
| Web | `frontend/delivery_admin` | 配送点人员、用户、地址、订单、资金、报表和组织隔离 |
|
||||
| Web | `frontend/site` | 官网内容、导航、响应式、静态资源、可访问性、SEO 基础、构建与托管 Worker |
|
||||
| 后端 | `backend/api` | Gin API/BFF、JWT、权限、同步事务、状态动作、金额、幂等、审计、上传和数据库事实 |
|
||||
| 后端 | `backend/worker` | 配置、启动、Mock 循环、优雅退出;未来 Outbox/Streams 的投递、重试、死信和积压 |
|
||||
| 后端 | `backend/iot-gateway`、`backend/iot-server` | 配置、启动、无状态转发、协议编解码、MQTT TLS、身份、遥测、回执和断线重连 |
|
||||
| 后端 | `backend/worker` | 支付超时关单、IoT Outbox 认领与投递、重试触发、内部令牌、超时和优雅退出 |
|
||||
| 后端 | `backend/iot-gateway` | 无状态命令转发、上行回调转发、内部鉴权、过期拦截、请求体限制和上游故障映射 |
|
||||
| 后端 | `backend/iot-server` | Mochi MQTT Broker、每设备认证与 Topic ACL、V1.8 帧/AES/LRC8、上下行、回执和遥测解析 |
|
||||
|
||||
不修改 `sample/`。真实支付、短信、地图、对象存储、电子合同、MQTT 厂商接入等,以受控沙箱或 Mock 验证;生产联调另设上线前检查点。
|
||||
真实支付、短信、地图、对象存储、电子合同和 MQTT 厂商硬件等,以受控沙箱或模拟器验证;生产联调另设上线前检查点。
|
||||
|
||||
## 3. 测试分层
|
||||
|
||||
@@ -35,10 +36,10 @@
|
||||
| L1 单元测试 | 状态机、金额、权限、幂等、序列化、ViewModel、领域规则 | 每次提交;关键规则 100% 分支覆盖 | 函数/规则 |
|
||||
| L2 组件/接口测试 | Router+Logic+DB、Vue/Flutter 组件、上传边界、错误码 | 每次合并请求 | 组件/API |
|
||||
| L3 契约测试 | 后端路由、资源契约、请求响应 Schema、客户端 claim | 每次接口变更 | 契约消费者/提供者 |
|
||||
| L4 集成测试 | API+PostgreSQL+Redis/Mock、Worker、IoT、对象存储替身 | 每日或候选版 | 服务/依赖 |
|
||||
| L4 集成测试 | API+PostgreSQL+Redis、Worker、Gateway、MQTT Server、设备模拟器、对象存储替身 | 每日或候选版 | 服务/依赖 |
|
||||
| L5 跨端 E2E | App/Web 经真实 API 完成跨角色流程 | 每日冒烟、候选版全回归 | 业务链路 |
|
||||
| L6 专项测试 | 安全、性能、稳定性、弱网、兼容性、可访问性、灾备 | 候选版 | 系统能力 |
|
||||
| L7 UAT/发布验证 | AC-01~AC-24、运营/财务/安全签字、生产冒烟 | 发布前后 | 验收口径 |
|
||||
| L7 UAT/发布验证 | AC-01~AC-25、运营/财务/安全签字、生产冒烟 | 发布前后 | 验收口径 |
|
||||
|
||||
## 4. 核心测试设计原则
|
||||
|
||||
@@ -78,6 +79,8 @@
|
||||
- 金额均为最小货币单位整数,覆盖 0、边界值、超额、并发与溢出。
|
||||
- 充值、支付、退款、提现预扣/驳回/打款、结算、对账的事务一致性和不可变流水。
|
||||
- 回调签名、金额、订单、商户身份、重复/乱序回调和伪造回调。
|
||||
- 统一 `payment_order` 创建、客户端参数最小化、超时关单、过期后支付进入异常待确认。
|
||||
- 用户退款按订单项和数量校验退款窗口、履约状态与累计金额;审核通过后同事务入钱包并写不可变流水。
|
||||
- 始终满足 `0 <= 可提现余额 <= 总余额`,申请人不能篡改审核和打款状态。
|
||||
|
||||
### 5.5 内容、上传与隐私
|
||||
@@ -102,10 +105,18 @@
|
||||
- 敏感字段加密、日志/崩溃报告/缓存/剪贴板/截图风险,Release 包配置和调试入口。
|
||||
- MQTT 设备身份、TLS、主题 ACL、伪造遥测和命令回执在真实接入后专项验证。
|
||||
|
||||
### IoT 协议与链路
|
||||
|
||||
- API 创建命令与 Outbox 必须同事务;相同幂等键返回同一命令,不产生第二条待投递事实。
|
||||
- Worker 使用 `SKIP LOCKED` 认领 Outbox,经 Gateway 投递至 IoT Server;失败按状态与可用时间重试,卡在 processing 的记录可被重新认领。
|
||||
- Gateway 不保存业务事实;校验内部令牌、命令过期时间、动作和请求体大小,并正确映射上游拒绝或不可用。
|
||||
- IoT Server 验证每设备凭证和 Topic ACL;V1.8 帧覆盖边界、长度、大端序、AES-128、LRC8、BCD 时间、实时数据块和阀门动作编码。
|
||||
- ACK 依据设备号、包序号和控制位更新命令;无 ACK 保持待确认,重复 ACK 不产生重复命令或业务动作。
|
||||
|
||||
### 可靠性与恢复
|
||||
|
||||
- API、Worker、IoT 重启;数据库/Redis/对象存储/MQTT 短时不可用;网络分区与时钟偏移。
|
||||
- Outbox、消费幂等、重试、死信和积压只在持久化消息契约落地后作为上线硬门禁。
|
||||
- API、Worker、IoT Gateway、IoT Server 重启;数据库/Redis/对象存储/MQTT 短时不可用;网络分区与时钟偏移。
|
||||
- 当前 IoT Outbox 的认领、processing 超时回收、失败重试和积压必须测试;死信上限与 Redis Streams 唤醒尚未落地,作为上线待决项记录。
|
||||
- 备份恢复演练验证核心数据完整性,并记录实测 RPO/RTO;目标值需业务确认。
|
||||
|
||||
### 兼容性与可访问性
|
||||
@@ -127,14 +138,14 @@
|
||||
|
||||
- 测试负责人:版本范围、计划、排期、风险、日报和发布建议。
|
||||
- 开发负责人:单元/接口测试、可测试性、数据脚本、日志和缺陷修复。
|
||||
- 产品/业务:确认正常与异常口径,签署 AC-01~AC-24。
|
||||
- 产品/业务:确认正常与异常口径,签署 AC-01~AC-25。
|
||||
- 安全/财务/运维:分别签署高风险设备与隐私、资金、性能/备份/灾备结果。
|
||||
- 每轮必备产物:版本清单、环境清单、用例集、自动化报告、专项报告、缺陷清单、复测证据、残余风险和签字记录。
|
||||
|
||||
## 9. 完成标准
|
||||
|
||||
- AC-01~AC-24 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
|
||||
- AC-01~AC-25 均有用例、执行结果和证据,没有“未覆盖但默认通过”。
|
||||
- P0/P1 为 0;P2 延期均有责任人、截止时间、影响和风险接受人。
|
||||
- 所有受影响模块的静态检查、单元、契约和构建通过;关键链路 E2E 通过。
|
||||
- 设备、安全、订单、支付、提现、检查、整改、敏感访问的审计可按 `request_id`/`identity` 串联。
|
||||
- 安全、性能、弱网/离线和恢复专项完成;未具备真实依赖的项目明确标记“受限通过”,不得写成已完成生产验收。
|
||||
- 安全、性能、弱网/离线和恢复专项完成;IoT 模拟器、真实设备、TLS/证书与厂商联调分层记录,模拟通过不得写成真实设备验收通过。
|
||||
|
||||
Reference in New Issue
Block a user