test(运单资料文件包下载): 需求文档与 QE Fleet 全流程测试设计产物入库

- 需求 v1.0 定稿(md+docx)与 UI 原型入库;确认单判定 docx 为同文载体、安徽运八并行无冲突
- 全流程产物:分析 + 59 测试点 + 85 用例 + 测试数据 145 组;评审 3 阻断与覆盖缺口 GAP-001 已修复,裁决 PASS_WITH_FIX
- 导出 Excel(云效模型)+ XMind + 版本快照 v1;含 docx 生成脚本与转换校验产物
- .gitignore 排除 node_modules 与 Excel 锁文件
This commit is contained in:
xst
2026-09-09 09:31:55 +08:00
parent c7cc4d5648
commit 901b6741ff
48 changed files with 8183 additions and 0 deletions
@@ -0,0 +1,19 @@
# 运单资料文件包下载需求 关联需求与冲突检查
## 目标需求
- `requirements\运单资料文件包下载需求.md`
## 项目画像
- `knowledge_base\00_project\project_profile.md`
## 关联技术方案
- 未识别到同主题技术方案文档。
## 关联需求识别
| 序号 | 关联需求 | 相似度 |
| :--- | :--- | :--- |
| 1 | `requirements\运单资料文件包下载需求.docx` | 0.8336 |
| 2 | `requirements\安徽运八需求.md` | 0.1051 |
## 潜在冲突与修改建议
- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。
@@ -0,0 +1,163 @@
# 运单资料文件包下载需求 结构化分析
> 生成时间: 2026-09-08
> 需求文档: requirements/运单资料文件包下载需求.md(v1.0 定稿)
> 原始载体: requirements/运单资料文件包下载需求.docx(同版本 Word 载体,内容一致,见 decisions/运单资料文件包下载需求_确认结论.md)
> 原型: resources/prototypes/anhuibaba_file_package.html(任务列表 / 上传弹窗 / 文件包结构预览 / 失败清单)
> 项目画像: knowledge_base/00_project/project_profile.md
> 确认状态: 需求方已于 2026-09-08 确认全部 13 项待确认事项(需求文档第八章),本文档无遗留待确认项
## 1. 需求背景
运营人员在线下归档、审计、对账场景中需要按批次收集运单资料:运单合同、电子回单,以及司机证件照片、车辆证件照片。目前只能逐单进入运单详情手工下载整理,效率低且易遗漏。
## 2. 目标
提供"上传运单清单 → 系统自动生成资料文件包 → 任务完成后下载"的批量导出能力。核心规则:**司机姓名+身份证号+车牌号三要素完全一致的运单归为一批,生成一个文件包**;文件包内按运单建运单包;批次内**最小序号**运单包额外含司机及车辆证件照片。
**本期范围**:仅做资料导出打包;不新增数据采集,合同、电子回单、司机证件、车辆证件均读取运八平台现有数据。
## 3. 用户角色
| 角色 | 职责 |
| :--- | :--- |
| 运营人员 | 唯一可见角色:下载模板、上传清单、查看任务进度、下载文件包/失败清单 |
| 系统后台 | 异步打包任务:校验、归批、逐运单下载关联文件、组装 zip、清理过期包 |
| 平台管理员 | 权限分配(菜单仅授权运营人员) |
## 4. 功能模块
### 4.1 菜单入口(运八平台端)
运单管理相关模块下新增独立菜单"运单文件包"。页面结构:上方"上传任务"入口(模板下载 + 上传按钮),下方"任务列表"。菜单需权限控制——文件包含身份证等敏感证件照片。
### 4.2 文件上传
- 模板列:序号(正整数,全文件唯一)/ 货源单号 / 运单号,格式 .xlsx,提供模板下载。
- 限制:单文件 ≤2000 行,≤10MB。
- 文件级校验(整体拒绝,不创建任务):非 xlsx、列名缺失或不符、文件损坏、行数/大小超限。
- 数据级校验(该行计入失败清单):序号非正整数或重复、货源单号/运单号为空、运单号不存在、货源单号与运单实际所属货源不一致、运单号文件内重复、运单缺司机或车辆信息无法归批。
- 处理原则:文件级错误整体拒绝;数据级错误剔除失败行后继续处理有效行。
### 4.3 任务
- 状态机:待处理 → 处理中 → 已完成(全部有效行成功)/ 已完成·部分失败(部分行失败)/ 失败(系统级错误整体未生成文件包)。
- 任务列表字段:任务编号、源文件名、上传人、上传时间、任务状态、总行数/成功数/失败数、完成时间、操作(下载文件包——任务成功后显示;下载失败清单——存在失败行时显示,xlsx,含序号/货源单号/运单号/失败原因)。
### 4.4 文件包生成
- 批次划分:按有效行运单在**系统内**的司机姓名+身份证号+车牌号归组。同一司机换车、同一车辆换司机拆分为不同批次。
- 目录结构(三层):任务总包 `运单资料_【任务编号】.zip` → 批次包 `【司机姓名】-【身份证号】-【车牌号】` → 运单包 `【序号】-【运单号】-【货源单号】`(最小序号运单追加 `-含司机及车辆证件` 后缀)。
- 运单包子目录:合同 / 电子回单 / 司机证件 / 车辆证件;文件保留系统原文件名,重名自动追加 (1)、(2)。
- 内容矩阵:合同+电子回单 → 全部运单;司机证件+车辆证件 → 仅批次内最小序号运单(证件以最小序号运单挂载的司机、车辆档案为准)。
- 合同口径:以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同。
- 电子回单口径:运单全部支付记录对应的银行电子回单。
- 文件缺失:不阻断任务,对应子目录不生成,原因记入失败清单;最小序号运单被剔除时重算最小序号并改挂证件;单个文件下载失败自动重试 3 次,仍失败记入失败清单。
### 4.5 下载
任务完成后任务列表显示"下载"按钮,下载任务总包 zip;支持重复下载,不重复生成(幂等);下载记录审计日志(操作人、时间、任务编号);按批次文件包单独下载本期不做。
## 5. 核心规则
### 5.1 归批与证件挂载
- 三要素 = 系统内司机姓名+身份证号+车牌号,完全一致归一批(非按上传行顺序、非按货源单号)。
- 最小序号 = 上传清单中该批次内序号最小的运单;序号全文件唯一。
- 单运单批次的运单包仍含司机及车辆证件。
- 失败行剔除后,证件挂载到批次内剩余运单中序号最小者。
### 5.2 校验与失败处理
- 文件级 → 整体拒绝;数据级 → 行级剔除继续。
- 无电子回单(如运单被关闭、无支付记录):不阻断,子目录不生成,原因记失败清单。
### 5.3 异步与性能
- 打包为后台异步任务,上传后无需等待;任务列表可见进度(成功/失败条数)。
- 1000 单规模任务 30 分钟内完成。
- 多任务并发:后台排队处理,并发上限 1~2,防磁盘/带宽压力。
### 5.4 存储与幂等
- 文件包默认保留 7 天,过期自动清理,不可下载,需重新上传生成。
- 同一任务重复点击下载不重复生成文件包。
- 同一文件重复上传:允许,各自生成独立任务,不合并去重。
### 5.5 敏感数据合规
- 司机身份证号、证件照片属敏感个人信息:菜单需权限控制、下载记审计日志。
- 批次包命名含完整身份证号(确认决议 #3);zip 不加密,依赖权限+审计(确认决议 #12)。
## 6. 状态流转
```
任务:待处理 → 处理中 → 已完成 | 已完成·部分失败 | 失败
失败/完成后可删除任务重新上传(系统异常场景)
文件包:已生成 →(7天)→ 过期清理 → 不可下载
```
## 7. 异常与边界场景(需求第六章汇总)
1. 模板格式/列名错误 → 上传即拒绝
2. 序号重复、非正整数 → 行级失败清单
3. 运单号不存在 / 货源单号不匹配 → 行级失败清单
4. 运单被关闭、未产生支付记录无电子回单 → 不阻断,记失败清单
5. 运单缺司机或车辆信息无法归批 → 行级失败清单
6. 批次内最小序号运单被剔除 → 证件改挂重算后的最小序号运单
7. 同一文件重复上传 → 允许,独立任务
8. 多任务并发 → 排队,并发上限 1~2
9. 文件包超保留期 → 不可下载,重新上传
10. 任务处理中系统异常 → 任务置"失败",支持删除重传
## 8. 歧义标注与待确认项
> ✅ **无遗留待确认项**:原 v0.1 草稿 13 项待确认事项已于 2026-09-08 经需求方全部确认并采纳文档建议方案(需求文档第八章确认决议记录):
| # | 事项 | 确认结论 |
|:---:|:---|:---|
| 1 | 菜单名称与挂载位置 | "运单文件包",挂运单管理模块下 |
| 2 | 可见角色/权限 | 运营人员 |
| 3 | 批次文件包命名 | 司机姓名-身份证号-车牌号(含完整身份证号) |
| 4 | 运单包内子目录 | 合同/电子回单/司机证件/车辆证件 |
| 5 | "运单相关合同"范围 | 以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同 |
| 6 | 货源单号与系统不一致时 | 该行失败 |
| 7 | 数据级校验失败行处理 | 剔除后继续,任务记"已完成·部分失败" |
| 8 | 失败行剔除后证件挂载 | 挂到批次内剩余运单的最小序号运单 |
| 9 | 行数/大小上限 | 2000 行 / 10MB |
| 10 | 文件包保留期 | 7 天 |
| 11 | 按批次包单独下载 | 本期不做 |
| 12 | zip 是否加密 | 不加密(依赖权限+审计) |
| 13 | 序号唯一性范围 | 全文件唯一 |
## 9. 需求条目清单(追溯链骨干,供测试点/用例/覆盖率审计引用)
| 需求条目 | 内容摘要 | 来源章节 | 优先级基准 |
| :--- | :--- | :--- | :---: |
| REQ-001 | 新增"运单文件包"菜单挂运单管理模块下,页面为上传入口+任务列表结构 | 4.1 | P0 |
| REQ-002 | 菜单权限控制:仅运营人员可见可操作(敏感数据) | 4.1/七 | P0 |
| REQ-003 | 模板下载:xlsx 模板,列=序号/货源单号/运单号 | 4.2.1 | P1 |
| REQ-004 | 上传限制:xlsx、≤2000 行、≤10MB | 4.2.1 | P1 |
| REQ-005 | 文件级校验整体拒绝:非 xlsx/列名缺失或不符/损坏/超限,不创建任务并提示具体原因 | 4.2.2 | P0 |
| REQ-006 | 数据级校验行级失败:序号非法/重复、单号为空、运单号不存在、货源不匹配、运单号文件内重复、无法归批 | 4.2.2 | P0 |
| REQ-007 | 数据级处理原则:剔除失败行继续有效行,任务记"已完成·部分失败" | 4.2.2 | P0 |
| REQ-008 | 任务状态机:待处理→处理中→已完成/已完成·部分失败/失败 | 4.3.1 | P0 |
| REQ-009 | 任务列表字段完整:任务编号/源文件名/上传人/上传时间/状态/总·成功·失败数/完成时间/操作 | 4.3.2 | P1 |
| REQ-010 | 批次划分:系统内司机姓名+身份证号+车牌号三要素归批,换车/换司机拆批 | 4.4.1 | P0 |
| REQ-011 | 三层目录结构与命名:总包/批次包/运单包命名规则,最小序号运单包带"-含司机及车辆证件"后缀 | 4.4.2 | P0 |
| REQ-012 | 运单包内容矩阵:合同+回单全员,司机证件+车辆证件仅最小序号运单;单运单批次仍含证件 | 4.4.3 | P0 |
| REQ-013 | 数据来源口径:合同=运单详情-合同附件(含承运不含委托/框架);回单=全部支付记录银行电子回单;证件=司机/车辆档案 | 4.4.3 | P1 |
| REQ-014 | 子目录组织与重名处理:合同/电子回单/司机证件/车辆证件子目录,原文件名保留,重名追加(1)(2) | 4.4.2 | P1 |
| REQ-015 | 文件缺失处理:无合同/回单不阻断记失败清单;最小序号剔除重算改挂;单文件下载失败重试 3 次 | 4.4.4 | P0 |
| REQ-016 | 下载:任务完成后可下载总包 zip;重复下载不重复生成(幂等) | 4.5/七 | P0 |
| REQ-017 | 下载审计日志:操作人、时间、任务编号 | 4.5/七 | P0 |
| REQ-018 | 失败清单下载:存在失败行时显示,xlsx 含序号/货源单号/运单号/失败原因 | 4.3.2 | P1 |
| REQ-019 | 异步处理:后台打包,上传后无需等待,列表可见进度 | 七 | P1 |
| REQ-020 | 性能:1000 单规模任务 30 分钟内完成 | 七 | P1 |
| REQ-021 | 保留期:7 天过期自动清理,不可下载需重新上传 | 七/六#9 | P1 |
| REQ-022 | 并发控制:多任务排队,并发上限 1~2 | 六#8 | P1 |
| REQ-023 | 重复上传:同一文件重复上传允许,独立任务不合并 | 六#7 | P2 |
| REQ-024 | 系统异常:任务处理中异常置"失败",支持删除后重新上传 | 六#10 | P1 |
| REQ-025 | 按批次文件包单独下载:本期不做(负向范围确认) | 4.5/八#11 | P3 |
| REQ-026 | zip 不加密,依赖权限控制+审计日志保障敏感数据(确认决议 #12) | 八#12 | P2 |
## 10. 项目差异化约束
- 所属端:运八平台端(Web 管理后台,Vue.js + Element UI SPA),非 C 端。
- 测试环境:管理端 https://ybxcx.ynyun8.com:8000/admin;超级管理员账号 super_admin(项目画像 §1)。
- 文件存储依赖华为云 OBS(项目画像 §6.1)——打包任务需从 OBS 拉取合同/回单/证件原件,OBS 不可用是打包失败的主要外部依赖风险。
- 敏感个人信息(身份证号、证件照片)导出场景:权限隔离 + 审计日志为合规必测项;批次包命名含完整身份证号放大泄露面。
- Excel 大文件处理:本项目既有 Excel 导出惯例默认 20000 条(项目画像 §8.3),本需求上传方向限 2000 行/10MB,测试需覆盖边界(2000/2001 行、10MB 临界)。
- 异步任务与并发:项目画像必测异常场景含"重复提交(幂等)、并发提交、超时重试、依赖服务不可用"——对应本需求重复下载幂等、并发任务排队、OBS 依赖失败重试 3 次。
- 与 requirements/安徽运八需求.md 为并行模块(相似度 0.105,见 decisions/运单资料文件包下载需求_确认结论.md),不共享数据口径,无冲突防御需求;历史缺陷防御重点关注文件打包下载类通用缺陷(见 knowledge_base/02_history/historical_defects.md)。
- 风险矩阵基线(output/analysis/运单资料文件包下载需求_风险评估.md):P0=0,P1=1(RISK-AVAILABILITY:并发/重试/幂等),P2=4(资损/合规/数据/兼容性);P1 风险对应测试点不得静默省略。
@@ -0,0 +1,297 @@
# 运单资料文件包下载需求 测试数据
> 本文件由 data-builder Agent 自动生成,为测试用例提供精确数据支持。
> 生成时间:2026-09-08
> 数据依据:requirements/运单资料文件包下载需求.md(v1.0 定稿)、output/analysis/运单资料文件包下载需求_分析.md(REQ-001~026)、knowledge_base/00_project/project_profile.md、knowledge_base/01_standards/terminology.md、resources/prototypes/anhuibaba_file_package.html
> 来源标注说明:**需求提取**=可直接追溯至需求原文;**原型提取**=来自 UI 原型演示数据;**构造**=按需求示例风格构造的结构化数据;**需补充**=必须从测试环境获取/创建的真实数据,不得编造。
> 数据ID前缀:ACC-账号 / XLS-上传清单行 / BND-边界值 / STT-状态 / IDC-ID与命名 / ERR-异常 / CMB-组合 / CNC-并发。
---
## 自动提取数据
### 账号数据
| 数据ID | 角色 | 账号 | 权限 | 用途 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ACC-001 | 超级管理员(代行运营人员) | super_admin / 951260684NiAn.. | 全部权限(含"运单文件包"菜单) | 主流程上传/下载/审计日志操作人 | 项目画像 §1(测试环境真实账号) |
| ACC-002 | 运营人员(受控权限) | 需补充 | 仅授权"运单文件包"菜单 | 权限正向验证(REQ-002:菜单仅授权运营人员) | 需求提取(4.1/七章);账号需在平台管理-角色管理创建 |
| ACC-003 | 非授权角色(对照) | 需补充 | 未授权"运单文件包"菜单 | 菜单不可见/接口越权验证(敏感证件照片隔离) | 构造(需求 4.1 权限控制要求的反向场景) |
| ACC-004 | 车队长 | 13113113113 / 88888888 | 车队长端权限 | 后台造数:接单并分派运单,形成"车队长运单" | 项目画像 §1 |
| ACC-005 | 司机 | 15188888888 / 88888888 | 司机端权限 | 后台造数:司机接单/上传装卸货资料,形成可打款运单 | 项目画像 §1 |
| ACC-006 | 第二运营账号 | 需补充 | 与 ACC-001 等同 | 多账号并发上传、下载审计日志"操作人"字段区分验证 | 构造(需求 4.5 审计日志:操作人/时间/任务编号) |
### 上传清单数据(合法行)
> 模板 3 列:序号(正整数、全文件唯一)/ 货源单号 / 运单号(需求 4.2.1)。下表"系统内三要素"指该运单在系统中挂载的司机档案,用于批次划分(需求 4.4.1)。单号为需求示例风格格式,落地时须映射为测试环境真实运单(见数据缺口 #1)。
| 数据ID | 序号 | 货源单号 | 运单号 | 系统内三要素(司机/身份证/车牌) | 用途 | 来源 |
| :--- | :---: | :--- | :--- | :--- | :--- | :--- |
| XLS-001 | 1 | HY202609001 | YD20260901001 | 张三 / 340102199001011234 / 皖A12345 | 基准合法行(批次①成员) | 需求提取(五章示例);真实单号需补充 |
| XLS-002 | 2 | HY202609002 | YD20260901002 | 李四 / 340102199001015678 / 皖B67890 | 单运单批次(批次②) | 需求提取(五章示例);真实单号需补充 |
| XLS-003 | 3 | HY202609001 | YD20260901003 | 张三 / 340102199001011234 / 皖A12345 | 与 XLS-001 同批成员 | 需求提取(五章示例);真实单号需补充 |
| XLS-004 | 5 / 10 | HY202609001 | YD20260901004 / YD20260901005 | 张三 / 340102199001011234 / 皖A12345 | 非连续、乱序序号合法(最小序号判定与行顺序无关) | 构造(依据 4.4.1"非按上传行顺序") |
| XLS-005 | 50000 | HY202609001 | YD20260901006 | 张三 / 340102199001011234 / 皖A12345 | 大数值序号合法(序号不要求连续、不与行数挂钩) | 构造 |
| XLS-006 | 1~2000 | 真实货源单号 | 2000 个真实运单号 | 混合(多批次) | 行数上限合法文件(2000 行全有效) | 构造;运单号需补充 |
| XLS-007 | 1 | 真实货源单号 | 真实运单号 | 任意有效运单 | 最小合法清单(1 行) | 构造;运单号需补充 |
| XLS-008 | — | 序号 | 货源单号 | 运单号 | 模板下载产物(仅表头),作为后续所有清单的格式基准 | 需求提取(REQ-003);原型提取(运单清单模板.xlsx) |
### 上传清单数据(非法行——数据级校验,行级剔除)
> 预期处理:该行计入失败清单(xlsx,含序号/货源单号/运单号/失败原因),剔除后有效行继续处理,任务记"已完成·部分失败"(需求 4.2.2、确认决议 #7)。
| 数据ID | 构造行(序号/货源单号/运单号) | 预期失败原因 | 关联需求 | 来源 |
| :--- | :--- | :--- | :---: | :--- |
| XLS-101 | 0 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 |
| XLS-102 | -1 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 |
| XLS-103 | 1.5 / HY202609001 / YD20260901001 | 序号非正整数(小数) | 4.2.2 | 构造 |
| XLS-104 | abc / HY202609001 / YD20260901001 | 序号非正整数(非数字文本) | 4.2.2 | 构造 |
| XLS-105 | (空)/ HY202609001 / YD20260901001 | 序号非正整数(为空) | 4.2.2 | 构造 |
| XLS-106 | 两行序号均为 1(运单号不同) | 序号重复(重复行计入失败,首行有效性需验证) | 4.2.2、决议#13 | 构造 |
| XLS-107 | 1 / (空) / YD20260901001 | 货源单号为空 | 4.2.2 | 构造 |
| XLS-108 | 1 / HY202609001 / (空) | 运单号为空 | 4.2.2 | 构造 |
| XLS-109 | 1 / (空) / (空) | 货源单号、运单号均为空(验证失败原因提示合并或并列) | 4.2.2 | 构造 |
| XLS-110 | 1 / HY202609001 / YD20991231001 | 运单号在系统中不存在 | 4.2.2 | 构造 |
| XLS-111 | 1 / HY202609009 / 真实运单号 | 文件中货源单号与该运单实际所属货源不一致 | 4.2.2、决议#6 | 构造;真实运单号需补充 |
| XLS-112 | 两行同一运单号(序号 1、2 不同) | 同一运单号在文件中重复(重复行失败,首行保留) | 4.2.2 | 构造 |
| XLS-113 | 1 / 真实货源单号 / 系统内缺司机信息的运单号 | 运单缺少司机信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) |
| XLS-114 | 1 / 真实货源单号 / 系统内缺车辆信息的运单号 | 运单缺少车辆信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) |
| XLS-115 | 序号 4 与前文重复、且运单号与序号 2 行相同 | 单行多重非法(验证失败原因取值与优先级) | 4.2.2 | 构造 |
### 状态数据
#### 任务状态机(需求 4.3.1)
| 数据ID | 对象 | 状态值 | 驱动数据 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-001 | 任务 | 待处理 | 上传成功但并发占满排队中(配合 CNC-003) | 需求提取(4.3.1) |
| STT-002 | 任务 | 处理中 | 有效行打包进行中,列表可见进度条(成功/失败条数,如原型 186/200) | 需求提取(4.3.1/七章);原型提取 |
| STT-003 | 任务 | 已完成 | 全部有效行成功(如 XLS-001~003 三行清单) | 需求提取(4.3.1) |
| STT-004 | 任务 | 已完成·部分失败 | 部分行数据级失败(如 5 行 3 成 2 败,同原型 RW20260907002) | 需求提取(4.3.1/决议#7);原型提取 |
| STT-005 | 任务 | 失败 | 系统级错误整体未生成文件包(如 OBS 不可用,见项目画像 §6.1) | 需求提取(4.3.1/六#10) |
| STT-006 | 任务 | 已过期(原型展示标签) | 文件包超 7 天保留期。注意:需求 4.3.1 状态机不含该状态,原型任务列表却显示"已过期"tag——状态字段值 vs 文件包生命周期标记的实现口径需澄清 | 原型提取(与需求差异标注) |
| STT-007 | 任务 | 已删除 | 失败任务支持删除后重新上传(原型"删除"按钮) | 需求提取(六#10);原型提取 |
#### 运单侧驱动状态(决定电子回单/合同数据的有无,术语以 terminology.md 为准)
| 数据ID | 对象 | 状态值 | 对文件包的影响 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-011 | 运单 | 已结算/已打款 | 有支付记录 → 有银行电子回单(术语表:电子回单=运单产生支付记录后银行推送的回单) | 需求提取(4.4.3)+术语表 |
| STT-012 | 运单 | 运单关闭(司机取消) | 无支付记录 → 无电子回单,不阻断,记失败清单 | 需求提取(六#4)+术语表 |
| STT-013 | 运单 | 运输中(未产生支付) | 无电子回单,处理同 STT-012 | 构造(依据 4.4.3 回单口径推断) |
| STT-014 | 运单 | 含承运合同附件 | 合同目录导出该附件(含承运合同) | 需求提取(决议#5) |
| STT-015 | 运单 | 仅含委托合同/框架合同 | 合同目录不导出(不含委托合同/框架合同),原因记失败清单 | 需求提取(决议#5) |
#### 文件包生命周期
| 数据ID | 对象 | 状态值 | 说明 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| STT-021 | 文件包 | 已生成(≤7 天) | 可重复下载、幂等不重复生成;zip 不加密(决议#12),下载记审计日志 | 需求提取(4.5/七章/决议#12) |
| STT-022 | 文件包 | 过期已清理(>7 天) | 不可下载,提示重新上传(原型提示文案:"文件包已超过 7 天保留期,请重新上传清单生成") | 需求提取(七章);原型提取 |
### ID/编码数据
| 数据ID | 对象 | ID值/命名规则 | 说明 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| IDC-001 | 任务编号 | RW20260908001(原型格式:RW+日期+3位流水) | 系统生成;实际编码规则以实现为准,用例断言不得写死格式 | 原型提取;实现口径需补充 |
| IDC-002 | 运单号 | YD20260901001 | 需求示例格式;环境中真实运单号需补充 | 需求提取(五章示例) |
| IDC-003 | 货源单号 | HY202609001 | 需求示例格式;环境中真实货源单号需补充 | 需求提取(五章示例) |
| IDC-004 | 司机身份证号 | 340102199001011234(张三)、340102199001015678(李四) | 需求示例值(非真实档案);批次包名含完整身份证号(决议#3) | 需求提取(五章示例) |
| IDC-005 | 车牌号 | 皖A12345 / 皖B67890 | 需求示例值 | 需求提取(五章示例) |
| IDC-006 | 任务总包名 | `运单资料_【任务编号】.zip` | 一层目录 | 需求提取(4.4.2) |
| IDC-007 | 批次包名 | `【司机姓名】-【身份证号】-【车牌号】` | 二层目录,含完整 18 位身份证号 | 需求提取(4.4.2/决议#3) |
| IDC-008 | 运单包名 | `【序号】-【运单号】-【货源单号】`;最小序号追加 `-含司机及车辆证件` | 三层目录 | 需求提取(4.4.2) |
| IDC-009 | 子目录名 | 合同 / 电子回单 / 司机证件 / 车辆证件 | 四个固定子目录 | 需求提取(4.4.2/决议#4) |
| IDC-010 | 失败清单文件 | `失败清单_【任务编号】.xlsx`(原型:失败清单_RW20260907002.xlsx) | 含序号/货源单号/运单号/失败原因 4 列 | 需求提取(4.3.2);文件名原型提取 |
| IDC-011 | 模板文件名 | 运单清单模板.xlsx | 模板下载按钮产物 | 原型提取 |
| IDC-012 | 源文件名示例 | 运单清单_合肥仓0908.xlsx | 任务列表"源文件名"字段展示值 | 原型提取 |
### 边界值数据
#### 行数边界(数据行数,不含表头行;上限 2000 行,需求 4.2.1/决议#9)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-001 | 行数 | 最小值-1 | 0(仅表头) | 需求未明确:按文件级拒绝 or 0 行任务——见数据缺口 #15 | 构造(边界推导) |
| BND-002 | 行数 | 最小值 | 1 | 正常创建任务 | 需求提取(上限规则的合法侧) |
| BND-003 | 行数 | 最小值+1 | 2 | 正常创建任务 | 构造 |
| BND-004 | 行数 | 最大值-1 | 1999 | 正常创建任务 | 构造 |
| BND-005 | 行数 | 最大值 | 2000 | 正常创建任务(≤2000 合法) | 需求提取(4.2.1) |
| BND-006 | 行数 | 最大值+1 | 2001 | 文件级整体拒绝,提示行数超限,不创建任务 | 需求提取(4.2.2) |
| BND-007 | 行数 | 性能基准 | 1000 | 1000 单规模任务 30 分钟内完成(REQ-020) | 需求提取(七章) |
#### 文件大小边界(上限 10MB,需求 4.2.1/决议#9)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-011 | 文件大小 | 最大值-1 | 10MB-1B | 合法 | 构造(按上限推导);10MB=10^6 还是 2^20 字节需确认(缺口 #16) |
| BND-012 | 文件大小 | 最大值 | 10MB 整 | 合法("不超过 10MB"含等于) | 需求提取(原型 hintbox:"大小不超过 10MB") |
| BND-013 | 文件大小 | 最大值+1 | 10MB+1B | 文件级整体拒绝 | 需求提取(4.2.2"大小超上限") |
| BND-014 | 文件大小 | 下限 | 0 字节(空文件) | 文件级拒绝(损坏/空文件) | 构造 |
| BND-015 | 文件大小 | 典型值 | 12KB(3 行清单) | 合法 | 原型提取 |
#### 序号数值边界(正整数,需求 4.2.1)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-021 | 序号 | 最小值-1 | 0 | 行级失败(非正整数) | 需求提取(4.2.2) |
| BND-022 | 序号 | 最小值 | 1 | 合法,可被判定为批次最小序号 | 需求提取(4.2.1) |
| BND-023 | 序号 | 最小值+1 | 2 | 合法 | 构造 |
| BND-024 | 序号 | 无上限合法值 | 50000 | 合法(序号唯一即可,不要求连续) | 构造 |
| BND-025 | 序号 | int32 上限 | 2147483647 | 合法(若后端用 32 位整型存储则为存储上限) | 构造 |
| BND-026 | 序号 | int32 上限+1 | 2147483648 | 溢出风险验证:合法或明确报错,不得异常成功/静默截断 | 构造 |
| BND-027 | 序号 | 超 Excel 精度 | 12345678901234567890(20 位) | Excel 15 位精度截断风险:验证读取值与录入值一致性,溢出须失败 | 构造 |
#### 文件包保留期边界(7 天,需求七章/决议#10)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-031 | 保留期 | 最大值-1 | 完成后第 6 天 23:59 | 可下载 | 构造(按 7 天推导) |
| BND-032 | 保留期 | 最大值 | 完成后满 7 天整 | 临界:可下载/进入清理(以"完成时间+7天"为界的实现口径需确认) | 需求提取(七章) |
| BND-033 | 保留期 | 最大值+1 | 第 7 天+1(第 8 天) | 过期清理,不可下载,提示重新上传 | 需求提取(六#9);原型提示文案 |
#### 单文件下载重试边界(重试 3 次,需求 4.4.4)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-041 | 重试次数 | -/最小 | 第 1、2 次失败 | 自动重试,任务继续 | 需求提取(4.4.4) |
| BND-042 | 重试次数 | 最大值 | 第 3 次成功 | 不记失败清单,文件正常入包 | 需求提取(4.4.4) |
| BND-043 | 重试次数 | 最大值+1 | 3 次全失败后第 4 次 | 不再重试,记入失败清单,不阻断其余文件 | 需求提取(4.4.4) |
#### 并发上限边界(1~2,需求六#8)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-051 | 并发任务数 | 最小值 | 1 | 单任务直接处理 | 需求提取(六#8) |
| BND-052 | 并发任务数 | 最大值 | 2 | 两任务同时处理 | 需求提取(六#8) |
| BND-053 | 并发任务数 | 最大值+1 | 3 | 第 3 个任务排队"待处理",前序完成后自动开始 | 需求提取(六#8"后台排队") |
#### 电子回单数量边界(回单=全部支付记录对应回单,需求 4.4.3)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-061 | 支付记录数 | 最小值-1 | 0 笔(无支付/运单关闭) | 不阻断:无"电子回单"子目录,失败清单记原因(原型文案示例:"无电子回单:运单无支付记录") | 需求提取(4.4.4/六#4) |
| BND-062 | 支付记录数 | 最小值 | 1 笔 | 电子回单目录 1 份回单 | 术语表+需求 4.4.3 |
| BND-063 | 支付记录数 | 最大值+方向 | 2 笔及以上 | 多份回单;同名回单自动追加 (1)、(2) | 需求提取(4.4.3/4.4.2) |
#### 子目录内文件重名边界(原文件名保留、重名追加 (1)(2),需求 4.4.2)
| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 |
| :--- | :--- | :--- | :---: | :--- | :--- |
| BND-071 | 证件文件重名 | 重名+1 | 同目录第 2 个同名文件(如 身份证.jpg ×2) | 第 2 个命名为 身份证(1).jpg | 需求提取(4.4.2) |
| BND-072 | 证件文件重名 | 重名+2 | 同目录第 3 个同名文件 | 命名为 身份证(2).jpg | 需求提取(4.4.2) |
| BND-073 | 证件文件重名 | 名字已含后缀 | 档案中同时存在 身份证.jpg 与 身份证(1).jpg,再导出一份 身份证.jpg | 追加规则不与既有文件冲突(去重基于实际文件集合) | 构造 |
---
## 构造数据
### 异常数据
#### 文件级异常(整体拒绝,不创建任务,需求 4.2.2)
| 数据ID | 字段/对象 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-001 | 文件格式 | .xls(97-2003 老格式) | 上传即拒绝,提示仅支持 .xlsx | 参数非法 | 构造 |
| ERR-002 | 文件格式 | .csv / .docx / .jpg | 上传即拒绝 | 参数非法 | 构造 |
| ERR-003 | 文件格式 | 伪造 xlsx:zip/docx 改后缀名为 .xlsx | 拒绝(需魔数校验,防仅校验后缀) | 伪造格式 | 构造 |
| ERR-004 | 列名 | 缺失一列(仅"序号/运单号"两列) | 整体拒绝,提示列名缺失或不符 | 列名校验 | 需求提取(4.2.2) |
| ERR-005 | 列名 | 列名不符:`序号 `(尾空格)、`单号`、`序号(必填)`、`No.` | 整体拒绝 | 列名校验 | 构造(需求"列名缺失或不符") |
| ERR-006 | 列名 | 全半角/大小写变体:`序 号`、`货源单号` 全角空格分隔 | 整体拒绝(是否 trim 后匹配以实现为准,需验证) | 列名校验 | 构造 |
| ERR-007 | 列顺序 | 运单号列在货源单号列之前(列名均正确) | 需求未明确:按列名匹配应通过——预期口径需澄清(缺口 #15) | 边界探讨 | 构造 |
| ERR-008 | 文件完整性 | 截断的 xlsx / 伪 xlsx(zip 包无 workbook.xml) | 整体拒绝,提示文件损坏 | 文件损坏 | 需求提取(4.2.2) |
| ERR-009 | 多 Sheet | Sheet1 合法 + Sheet2 含额外数据 | 需求未明确(仅读 Sheet1 or 拒绝)——见缺口 #15 | 边界探讨 | 构造 |
| ERR-010 | 表头结构 | 表头行后含说明行/合并单元格/空行间隔 | 需求未明确;合并单元格读取行为需验证 | 边界探讨 | 构造 |
#### 数据级行异常(行级失败清单,需求 4.2.2——数据构造见 XLS-101~115,此处为校验维度汇总)
| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-020 | 序号 | 0 / -1 / 1.5 / abc / 空(对应 XLS-101~105) | 行级失败:序号非正整数 | 参数非法 | 需求提取 |
| ERR-021 | 序号 | 全文件内重复(对应 XLS-106) | 重复行计入失败清单 | 重复 | 需求提取(决议#13:全文件唯一) |
| ERR-022 | 货源单号/运单号 | 空串、纯空格 ` `(对应 XLS-107~109) | 行级失败:单号为空;验证空格是否等同空值(trim 行为) | 参数非法 | 需求提取+构造 |
| ERR-023 | 运单号 | 系统中不存在的单号(对应 XLS-110) | 行级失败:运单号在系统中不存在 | 数据不存在 | 需求提取 |
| ERR-024 | 货源单号 | 与运单实际所属货源不一致(对应 XLS-111) | 行级失败:货源单号不一致 | 数据不一致 | 需求提取(决议#6) |
| ERR-025 | 运单号 | 文件内重复出现(对应 XLS-112) | 重复行计入失败清单 | 重复 | 需求提取 |
| ERR-026 | 归批条件 | 运单缺司机信息或车辆信息(对应 XLS-113/114) | 行级失败:无法归批 | 数据缺失 | 需求提取(六#5) |
| ERR-027 | 运单号 | 前后带空格 `YD20260901001 `(系统存在该运单) | 需求未明确:trim 后匹配 or 判不存在——预期需确认 | 边界探讨 | 构造 |
#### 安全异常数据(注入/超长/穿越——文件名类数据 Windows 本地选择文件时受系统限制,需通过接口层直传构造)
| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ERR-030 | 货源单号(SQL 注入) | `HY202609001' OR '1'='1` | 行级失败(查无此单),不得注入生效、不得 500 | SQL注入 | 构造 |
| ERR-031 | 运单号(SQL 注入) | `YD20260901001'; DROP TABLE waybill;--` | 行级失败,数据库无异常 | SQL注入 | 构造 |
| ERR-032 | 序号(SQL 注入) | `1 OR 1=1` | 行级失败:序号非正整数 | SQL注入 | 构造 |
| ERR-033 | 运单号(XSS) | `<script>alert('xss')</script>` | 行级失败;失败清单 xlsx 与页面回显转义,不执行脚本 | XSS | 构造 |
| ERR-034 | 源文件名(XSS) | `<img src=x onerror=alert(1)>.xlsx`(接口构造) | 任务列表"源文件名"展示转义,不触发弹窗 | XSS | 构造 |
| ERR-035 | 运单号(超长文本) | 256+ 字符连续字符串 | 行级失败,不崩溃、不截断误判为存在 | 超长文本 | 构造 |
| ERR-036 | 源文件名(超长) | 255 字节边界文件名 / 300 字符文件名 | 正常处理或明确拒绝;列表展示截断(原型 `.te` 省略样式),下载失败清单文件名不异常 | 超长文本 | 构造 |
| ERR-037 | 源文件名(路径穿越) | `..\..\etc\passwd.xlsx`、`../../webapps/evil.xlsx`(接口构造) | 不得逃逸上传/下载目录;总包/失败清单命名不受污染 | 路径穿越 | 构造 |
| ERR-038 | 源文件名(特殊字符) | 含 `# % & { } ~ $ ! ' " @ + = 空格 全角字符` 的合法 xlsx | 正常上传处理,任务列表/失败清单展示与下载不异常 | 特殊字符 | 构造 |
| ERR-039 | 源文件名(Unicode) | emoji 文件名(运单清单🚛.xlsx)、生僻字(𠮷)、繁体 | 编码/存储/展示正常(UTF-8 兼容) | 编码兼容 | 构造 |
| ERR-040 | 司机姓名(影响批次包目录名) | 系统档案司机姓名含 `.` `-` 空格 `·`(如 阿依古丽·买买提)、含 Windows 非法字符 `\/:*?"<>|` 的档案 | 批次包命名 `【司机姓名】-【身份证号】-【车牌号】` 在 Windows/zip 内合法可解压;非法字符需实现侧处理 | 命名兼容 | 构造;档案需补充 |
| ERR-041 | 身份证号(敏感数据合规) | 批次包名含完整 18 位身份证号(340102199001011234) | 按决议#3/#12:zip 不加密,依赖菜单权限+下载审计日志;验证越权不可达、日志完整 | 敏感合规 | 需求提取(决议#3、#12) |
### 组合数据
> 批次划分核心规则:系统内司机姓名+身份证号+车牌号三要素完全一致归一批(需求 4.4.1)。
| 数据ID | 组合场景 | 数据构成 | 预期行为 | 来源 |
| :--- | :--- | :--- | :--- | :--- |
| CMB-001 | 同司机同车多运单(基准示例) | 序号 1、3 均为 张三/340102199001011234/皖A12345 | 归 1 批;运单包 `1-…-含司机及车辆证件`(合同+回单+双方证件)、`3-…`(仅合同+回单) | 需求提取(五章示例) |
| CMB-002 | 单运单批次 | 序号 2:李四/340102199001015678/皖B67890 | 独立 1 批;运单包仍含司机及车辆证件 | 需求提取(五章/4.4.3) |
| CMB-003 | 同司机换车 | 序号 1:张三+皖A12345;序号 2:张三+皖C88888(身份证相同) | 拆分为 2 批 | 需求提取(4.4.1) |
| CMB-004 | 同车换司机 | 序号 1:张三+皖A12345;序号 2:王五+皖A12345 | 拆分为 2 批 | 需求提取(4.4.1) |
| CMB-005 | 同名同车不同身份证 | 序号 1:张三/340102199001011234/皖A12345;序号 2:张三/330102199201012345/皖A12345 | 拆分为 2 批(身份证号不同即不同批,验证三要素缺一不可) | 构造 |
| CMB-006 | 最小序号运单被剔除(校验失败) | 同批序号 1、3、5;序号 1 行运单号不存在 | 序号 1 记失败清单;重新计算最小序号,证件改挂序号 3,包名 `3-…-含司机及车辆证件` | 需求提取(4.4.4/六#6、决议#8) |
| CMB-007 | 跨货源归批 | 张三+皖A12345 的运单分属 HY202609001、HY202609002 两个货源 | 仍归 1 批(归批不看货源单号),两个运单包分属不同货源目录名 | 构造(依据 4.4.1) |
| CMB-008 | 乱序/非连续序号 | 同批序号 10、2、5 | 最小序号=2;序号 2 运单包含证件,命名按各自序号 | 需求提取(二章"最小序号运单"定义) |
| CMB-009 | 批次内混合成功失败 | 同批 3 行(序号 1、2、3),序号 1 运单不存在 | 有效 2 行成批,任务"已完成·部分失败";证件挂有效行最小序号 2 | 构造(组合 4.2.2+4.4.1) |
| CMB-010 | 最小序号运单全部文件下载失败 | 批次内序号 1 运单的合同/回单/证件 OBS 拉取均 3 次重试失败 | 需求 4.4.4 条款二"因文件缺失剔除、重算改挂"是否适用需澄清(缺口 #17);验证不阻断其余运单 | 需求提取(4.4.4)+构造 |
| CMB-011 | 最小序号运单无电子回单 | 批次内序号 1 运单无支付记录,序号 2 正常 | 解读一(不剔除):1 号包仍为最小序号、缺"电子回单"子目录、含证件;解读二(剔除改挂):证件改挂 2 号——两种解读需澄清(缺口 #17) | 需求提取(4.4.4 两条款并存)+构造 |
| CMB-012 | 多批次混合清单 | 张三批(2 运单)+李四批(1 运单)+王五批(1 运单),共 4 行 | 总包含 3 个批次包;每批各自最小序号含证件 | 需求提取(五章示例扩展) |
| CMB-013 | 同文件重复上传 | 同一 xlsx 上传 2 次 | 生成 2 个独立任务,各自打包、互不合并去重(REQ-023) | 需求提取(六#7) |
| CMB-014 | 多支付记录运单 | 1 个运单含 2 笔支付记录,2 份银行电子回单同名 | 电子回单目录 2 份回单,第 2 份追加 (1)(结合 BND-063/071) | 构造(术语表回单定义+4.4.2) |
| CMB-015 | 合同口径组合 | 运单 A 含承运合同;运单 B 仅委托合同;运单 C 含承运+框架合同 | A 导出;B 不导出并记失败清单;C 仅导出承运合同 | 需求提取(决议#5/REQ-013) |
| CMB-016 | 无合同运单 | 运单详情-合同附件为空 | 合同子目录不生成,不阻断,记失败清单 | 需求提取(4.4.4) |
| CMB-017 | 2000 行同司机单批次 | 2000 行全部为 张三/340102199001011234/皖A12345 的运单 | 归 1 批、1 个运单包层级树含 2000 个运单包(仅序号 1 含证件);验证打包性能与目录深度 | 构造 |
| CMB-018 | 全部行失败(0 有效行) | 2000 行全部非法(或 3 行全非法) | 需求未明确 0 有效行时任务终态(已完成·部分失败 or 失败 or 其他)与是否生成空文件包——见缺口 #14 | 构造(边界推导) |
### 并发数据
| 数据ID | 场景 | 账号数 | 并发量 | 数据构成与说明 | 来源 |
| :--- | :--- | :---: | :---: | :--- | :--- |
| CNC-001 | 单任务处理(并发下限) | 1 | 1 | 1 个 1000 行清单任务独占处理 | 需求提取(六#8) |
| CNC-002 | 双任务并发(并发上限) | 1~2 | 2 | 2 个合法清单(如 500 行+500 行)几乎同时上传,两任务同时"处理中" | 需求提取(六#8) |
| CNC-003 | 三任务排队(超上限) | 1 | 3 | 第 3 个任务保持"待处理",任一前序完成后自动开始(配合 STT-001/BND-053) | 需求提取(六#8) |
| CNC-004 | 大小任务混跑 | 1 | 2 | 2000 行任务(XLS-006)+3 行任务(XLS-001~003)并发,小任务不被大任务长时间阻塞 | 构造 |
| CNC-005 | 同一任务并发下载 | 1 | 2+ | 已完成任务并发双击/双会话同时点"下载文件包":幂等,不重复生成文件包,均返回合法 zip | 需求提取(4.5/七章幂等) |
| CNC-006 | 性能基准 | 1 | 1 | 1000 单规模清单(如 500 批×2 运单混合 CMB-001/002 结构)30 分钟内完成 | 需求提取(七章 REQ-020) |
| CNC-007 | 多账号并发上传 | 2 | 2 | ACC-001 与 ACC-006 同时上传不同清单,任务互不干扰,上传人字段各自正确 | 构造 |
| CNC-008 | 上传按钮防重复提交 | 1 | 2+ | 同一文件选中后快速重复点击"开始上传并创建任务":仅创建 1 个任务(项目画像 §8.2 必测幂等) | 项目画像提取+构造 |
---
## 数据缺口
| 序号 | 缺失数据 | 用途(关联数据ID) | 建议来源 |
| :--- | :--- | :--- | :--- |
| 1 | 测试环境真实运单号+货源单号映射(≥20 单:已完成且已打款、含 ≥1 笔支付记录与银行电子回单、运单详情含承运合同附件) | XLS-001~003/006/007、CMB-001/002/012 等全部合法行落地 | 测试环境运单管理/承运结算-电子回单查询现有数据;不足时用 ACC-004/005 走"发货源→接单→卸货→打款"完整流程造数 |
| 2 | 仅含委托合同的运单 1 单(合同附件仅委托合同) | CMB-015(合同口径排除验证)、STT-015 | 测试环境查找或通过合同管理-委托书合同造数 |
| 3 | 含框架合同(或仅框架合同)的运单 1 单 | CMB-015("不含框架合同"口径验证) | 测试环境合同管理模块查找 |
| 4 | 无支付记录的已关闭运单 1 单(司机取消终止流转) | BND-061、STT-012(无回单不阻断记失败清单) | 司机端接单后取消,或测试环境查找已关闭运单 |
| 5 | 系统内缺司机信息的运单 1 单、缺车辆信息的运单 1 单 | XLS-113/114、ERR-026(无法归批) | 承运管理后台造数清空关联字段,或查找历史脏数据 |
| 6 | 含 ≥2 笔支付记录的运单 1 单(多笔货主支付/分笔打款) | BND-063、CMB-014(多回单+回单重名 (1) 追加) | 对同一运单执行 2 次货主打款+财务打款流程 |
| 7 | 同名同车不同身份证号的司机档案 1 组(两个司机档案:姓名相同、车牌相同、身份证不同) | CMB-005(三要素缺一不可验证) | 承运管理-司机管理创建两个档案,车辆绑定同一辆车 |
| 8 | 同司机换车历史运单组、同车换司机历史运单组各 1 组 | CMB-003/004(拆批验证) | 司机档案换绑车辆后各跑 1 单;或两司机先后接同一车辆货源 |
| 9 | 运营人员专用账号(角色仅授权"运单文件包"菜单)+ 无该菜单权限的对照账号 | ACC-002/003(REQ-002 权限正向/反向、越权) | 平台管理-角色管理新建角色并配置菜单权限 |
| 10 | 第二运营账号(可与 #9 复用) | ACC-006、CNC-007(多账号并发上传、审计日志操作人区分) | 同 #9 |
| 11 | OBS 文件失效/证件照片缺失的运单(合同或回单或证件对象被删除、URL 失效) | BND-041~043、CMB-010(单文件下载失败重试 3 次场景) | 后台直接删除 OBS 对象或篡改档案文件 URL(需开发/运维配合) |
| 12 | 大文件构造物:2001 行 xlsx、10MB±1B xlsx、截断损坏 xlsx、伪装后缀 xlsx | BND-006/011~013/014、ERR-001/003/008 | 本地 Python(openpyxl) 脚本生成后存入测试数据目录,纳入版本管理之外的 fixtures |
| 13 | 司机/车辆档案中同名字件照片(同一档案上传 2~3 个同名附件) | BND-071~073、CMB-014(重名 (1)(2) 追加) | 司机管理-证件照片处重复上传同名文件 |
| 14 | "0 有效行"任务的预期终态(全部行数据级失败时:已完成·部分失败 / 失败 / 是否生成空包) | CMB-018、STT-004/005 边界 | 需求方/开发确认(需求 4.2.2 未覆盖全失败场景) |
| 15 | 文件级边界处理预期:0 行文件(仅表头)、多 Sheet、表头后附加行、列顺序颠倒 | BND-001、ERR-007/009/010 | 需求方/开发确认读取与拒绝口径 |
| 16 | 上限口径确认:10MB=10^6 还是 2^20 字节;2000 行是否含表头行;序号与运单号单元格为数值型 vs 文本型时的读取规则 | BND-005/011、XLS-006 | 开发确认实现口径后回填边界值定义 |
| 17 | "最小序号运单因文件缺失剔除改挂"的触发口径:无合同/无回单(4.4.4 条款一:不阻断仅记清单)是否也触发条款二的剔除改挂 | CMB-010/011(证件挂载预期直接冲突,影响 P0 断言) | 需求方/开发澄清 4.4.4 两条款关系 |
| 18 | 多机构部署形态确认 + B 机构运营账号与 B 机构有效运单(含证件回单资料) | ACC-B01(B 机构运营账号,行内临时记号)、YDB-001(B 机构运单,007/008 机构隔离断言) | 开发/运维确认部署形态;多机构环境由平台管理-机构管理造数;若为单机构部署或 super_admin 按设计跨机构可见,007/008 改用绑定 A 机构的非超管账号(ACC-002 补机构绑定)执行 |
@@ -0,0 +1,22 @@
# 运单资料文件包下载需求 测试策略
## 1. 测试金字塔
| 层级 | 占比 | 覆盖重点 | 工具 |
| :--- | :---: | :--- | :--- |
| L1 单元测试 | 40% | 核心逻辑、计算、状态机 | 开发自测 |
| L2 API 测试 | 35% | 接口契约、参数校验、权限、幂等 | Postman/Pytest |
| L3 UI 测试 | 20% | 主流程、关键交互、端到端 | Playwright/Selenium |
| L4 手工探索 | 5% | 易用性、视觉、非确定性场景 | 人工 |
## 2. P0 必测清单
## 3. 优先级覆盖规则
| 优先级 | 覆盖要求 | 评审标准 |
| :--- | :--- | :--- |
| P0 | 100% 覆盖,不可遗漏 | 必须包含正向+异常+边界+幂等 |
| P1 | ≥ 90% 覆盖 | 必须包含正向+异常 |
| P2 | ≥ 80% 覆盖 | 至少覆盖主流程+关键异常 |
| P3 | ≥ 60% 覆盖 | 覆盖典型场景 |
@@ -0,0 +1,254 @@
# 运单资料文件包下载需求 覆盖率审计
> 生成时间: 2026-09-08
> 审计对象: output/test_points/运单资料文件包下载需求_测试点.md(59 个 TP)→ output/test_cases/运单资料文件包下载需求_测试用例.md(82 条 TC)
> 追溯骨干: output/analysis/运单资料文件包下载需求_分析.md 第 9 章(26 条 REQ)
> 风险基线: output/analysis/运单资料文件包下载需求_风险评估.md(P0=0,P1=1 RISK-AVAILABILITY,P2=4)
> 质量门限: fleet_config quality_gate.min_coverage = 0.95;P0 测试点→用例 100%;P1 测试点→用例 ≥90%;P0 风险 100%
> 审计方法: 以用例"备注列"与测试点"对应 REQ 标注"建立三级追溯;对全部 59 个 TP→TC 映射逐条核对关键验证点承接情况(非仅核对编号),并对 REQ→TP 表与 TP 描述的标注一致性做了交叉验证
## 覆盖概览
| 指标 | 值 | 目标 | 状态 |
| :--- | :---: | :---: | :---: |
| 需求→测试点覆盖率 | 100%(26/26) | ≥ 95% | ✅ |
| 测试点→用例覆盖率(全量) | 100%(59/59) | - | ✅ |
| P0 测试点→用例覆盖率 | 100%(25/25,且均有 P0 级用例承接) | 100% | ✅ |
| P1 测试点→用例覆盖率 | 100%(26/26) | ≥ 90% | ✅ |
| P2/P3 测试点→用例覆盖率 | 100%(8/8) | - | ✅ |
| P0 风险覆盖率 | 100%(P0 风险项=0,空集成立) | 100% | ✅ |
| P1 风险(RISK-AVAILABILITY)覆盖率 | 100%(关联缓解测试点全部有用例) | ≥ 90% | ✅ |
| 用例逆向追溯率 | 100%(82/82 条用例均可追溯到 REQ/TP) | - | ✅ |
| 过度覆盖率 | 0%(0/82 硬性冗余;另 1 条条件性冗余待 Q1 确认) | ≤ 5% | ✅ |
**总体结论**: 三级追溯链完整,全部量化指标达标,无"无测试点的需求"、无"无用例的测试点"、无"无需求依据的用例"。但存在 7 项覆盖缺口,其中 **GAP-001 为 BLOCKED 级**(P0 需求 REQ-015 的关键验证点未固化为用例断言,源于需求 4.4.4 条款边界未确认),其余 6 项为待确认口径传导的断言未固化或边角场景未覆盖。详见"覆盖缺口"。
**抽查验证说明**(对可疑标注的实测核对,非仅采信编号):
1. TC-001(冒烟)同时承接 TP-U-002/TP-T-001/TP-D-001 —— 核实其步骤覆盖模板下载→上传建任务→状态流转→下载解压全链路,与三个 TP 的主验证点相符;TP 的细粒度验证点(如统计卡片 +1、标签颜色)由 TC-010/032/033 完整承接,冒烟仅为主链路补充,判定合理。
2. TC-030(TP-U-017)备注"防重复点击归 PLT_TMS_FPKG_074 验证" —— 核实 TC-074 确以"1 秒内连点 5 次 + 接口并发重放"验证防抖与幂等,交叉引用成立,非断言遗漏。
3. TC-053/054(TP-P-007,全需求最易错点)—— 核实覆盖"校验失败剔除→证件改挂重算"与"单运单批次整批不生成"两条路径,但 TP-P-007 关键验证点 2"最小序号运单仅缺电子回单(文件缺失剔除)时同样重算挂载"无用例固化(用例文件自认数据缺口 #17 未收敛),登记为 GAP-001(BLOCKED)。
4. TC-047(TP-P-002)为"同名同车牌不同身份证"变体 —— 核实在 TP-P-002 关键验证点范围内(同车牌+不同司机/身份证拆批),非冗余拆分。
5. REQ-017 追溯表列有 TP-N-005,而 TP-N-005 描述写"对应 REQ-002/REQ-026" —— 核实其关键验证点含"审计日志可反查谁在何时下载了哪个任务(联动 TP-D-003)",实质支撑 REQ-017,判定为标注不一致而非覆盖缺口(建议下版统一 TP 描述)。
6. TC-009(TP-U-001)"模板内填写说明不参与数据解析"与 TP-U-001 关键验证点逐字对应;TC-013(TP-U-004)"列顺序打乱允许"与 TP-U-004 关键验证点逐字对应 —— 标注可信。
## 需求→测试点 追溯矩阵
> 26/26 全覆盖。测试点列表以测试点文档文末"REQ 追溯对照表"为准,并已与各 TP 描述中的"对应 REQ-X"标注逐条交叉验证一致(除上述 TP-N-005 描述标注差异)。
| 需求条目 | 测试点 | 用例数 | 覆盖状态 |
| :--- | :--- | :---: | :---: |
| REQ-001: 新增"运单文件包"菜单挂运单管理下,上传入口+任务列表结构(P0) | TP-M-001、TP-U-002、TP-N-008 | 4(001/002/010/082) | ✅ |
| REQ-002: 菜单权限控制,仅运营人员可见可操作(P0) | TP-M-002、TP-M-003、TP-M-004、TP-M-005、TP-N-005 | 7(003~008/078) | ✅ |
| REQ-003: 模板下载 xlsx 三列(P1) | TP-U-001 | 1(009) | ✅ |
| REQ-004: 上传限制 xlsx、≤2000 行、≤10MB(P1) | TP-U-002、TP-U-006、TP-U-007、TP-U-017、TP-N-007 | 8(001/010/015~018/030/081) | ✅ |
| REQ-005: 文件级校验整体拒绝并提示具体原因(P0) | TP-U-002、TP-U-003、TP-U-004、TP-U-005 | 6(001/010~014) | ✅ |
| REQ-006: 数据级校验六类行级失败(P0) | TP-U-008~TP-U-016(9 个) | 11(019~029) | ✅ |
| REQ-007: 剔除失败行继续有效行,记"已完成·部分失败"(P0) | TP-U-015、TP-T-002 | 3(026/027/034) | ✅ |
| REQ-008: 任务状态机五态(P0) | TP-T-001、TP-T-002、TP-T-003、TP-D-004 | 7(001/032~036/068) | ✅ |
| REQ-009: 任务列表十字段完整(P1) | TP-T-004 | 2(037/038) | ✅ |
| REQ-010: 三要素归批,换车/换司机拆批(P0) | TP-P-001、TP-P-002 | 3(045~047) | ✅ |
| REQ-011: 三层目录结构与命名,最小序号带证件后缀(P0) | TP-P-003、TP-P-011、TP-T-008 | 3(044/048/060) | ✅ |
| REQ-012: 运单包内容矩阵,单运单批次仍含证件(P0) | TP-P-004、TP-P-012 | 2(049/061) | ✅ |
| REQ-013: 合同/回单/证件数据来源口径(P1) | TP-P-005、TP-P-006、TP-P-013 | 5(050~052/062/063) | ✅ |
| REQ-014: 子目录组织与重名追加 (1)(2)(P1) | TP-P-010 | 1(059) | ✅ |
| REQ-015: 文件缺失不阻断记清单;最小序号剔除重算改挂;单文件重试 3 次(P0) | TP-P-007、TP-P-008、TP-P-009、TP-P-013、TP-N-006 | 10(053~058/062/063/079/080) | ✅(⚠️ GAP-001 子验证点未固化) |
| REQ-016: 任务完成后下载总包 zip,重复下载幂等(P0) | TP-D-001、TP-D-002、TP-D-004、TP-D-005、TP-D-006、TP-N-007 | 8(001/065~071/081) | ✅ |
| REQ-017: 下载审计日志:操作人/时间/任务编号(P0) | TP-D-003、TP-N-005 | 2(067/078) | ✅(⚠️ GAP-004 失败清单留痕待确认) |
| REQ-018: 失败清单下载 xlsx 四列(P1) | TP-T-006 | 2(041/042) | ✅ |
| REQ-019: 异步处理,列表可见进度(P1) | TP-T-005 | 2(039/040) | ✅ |
| REQ-020: 1000 单规模 30 分钟内完成(P1) | TP-N-001 | 1(072) | ✅ |
| REQ-021: 保留 7 天过期清理不可下载(P1) | TP-N-004 | 2(076/077) | ✅(⚠️ GAP-003 展示/临界口径待确认) |
| REQ-022: 多任务排队,并发上限 1~2(P1) | TP-N-002、TP-N-003 | 3(073~075) | ✅ |
| REQ-023: 同一文件重复上传允许,独立任务(P2) | TP-U-018、TP-N-003 | 3(031/074/075) | ✅ |
| REQ-024: 系统异常置"失败",删除后重传(P1) | TP-T-003、TP-T-007、TP-N-006 | 5(035/036/043/079/080) | ✅ |
| REQ-025: 按批次包单独下载本期不做(P3,负向范围) | TP-D-005 | 1(069) | ✅ |
| REQ-026: zip 不加密,依赖权限+审计补偿(P2) | TP-P-014、TP-N-005(追溯表口径;TP-M-005 描述亦标注 REQ-026) | 4(007/008/064/078) | ✅ |
## 测试点→用例 追溯矩阵
> 59/59 全覆盖,按模块归组呈现。用例编号省略前缀 PLT_TMS_FPKG_。"优先级"列为测试点优先级;已核实全部 P0 测试点均有 P0 级用例承接,无高风险场景下沉。
### 模块 TP-M 菜单与权限(5 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-M-001 菜单入口与页面骨架 | P0 | 002 | ✅ |
| TP-M-002 运营人员可见可操作 | P0 | 003 | ✅ |
| TP-M-003 非授权角色不可见且 URL 直达被拦截 | P0 | 004、005 | ✅ |
| TP-M-004 接口层越权防御 | P1 | 006 | ✅ |
| TP-M-005 机构数据隔离 | P2 | 007、008 | ✅ |
### 模块 TP-U 上传与校验(18 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-U-001 模板下载 | P0 | 009 | ✅(⚠️ GAP-006 多 Sheet/合并单元格口径未覆盖) |
| TP-U-002 正常上传创建任务正向链路 | P0 | 001、010 | ✅ |
| TP-U-003 非 xlsx 格式整体拒绝 | P0 | 011 | ✅ |
| TP-U-004 列名缺失或不符整体拒绝 | P0 | 012、013 | ✅(⚠️ GAP-006 同上关联) |
| TP-U-005 文件损坏整体拒绝 | P1 | 014 | ✅ |
| TP-U-006 行数边界 2000/2001/空清单 | P1 | 015、016 | ✅(Q2/Q3 已收敛) |
| TP-U-007 文件大小边界 10MB 临界 | P1 | 017、018 | ✅ |
| TP-U-008 序号非正整数行级失败 | P0 | 019 | ✅(⚠️ GAP-005 序号极值边界未单列) |
| TP-U-009 序号重复行级失败(全文件唯一) | P0 | 020 | ✅ |
| TP-U-010 货源单号/运单号为空行级失败 | P0 | 021 | ✅ |
| TP-U-011 运单号不存在行级失败 | P0 | 022 | ✅(⚠️ GAP-007 大小写口径未显式覆盖) |
| TP-U-012 货源单号不一致行级失败 | P0 | 023 | ✅ |
| TP-U-013 运单号文件内重复行级失败 | P0 | 024 | ✅ |
| TP-U-014 缺司机/车辆信息无法归批 | P0 | 025 | ✅ |
| TP-U-015 单文件混合多类错误(规则组合) | P1 | 026、027 | ✅ |
| TP-U-016 单元格特殊字符与超长内容防御 | P1 | 028、029 | ✅ |
| TP-U-017 上传弹窗交互细项 | P1 | 030(防重复点击交叉引用 074) | ✅ |
| TP-U-018 同一文件重复上传独立任务 | P2 | 031 | ✅ |
### 模块 TP-T 任务与列表(8 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-T-001 状态机正向流转与状态标签 | P0 | 001、032、033 | ✅ |
| TP-T-002 已完成·部分失败状态 | P0 | 034 | ✅ |
| TP-T-003 失败状态与删除重传 | P1 | 035、036 | ✅ |
| TP-T-004 列表字段、排序与分页 | P1 | 037、038 | ✅ |
| TP-T-005 异步处理与进度可见 | P1 | 039、040 | ✅ |
| TP-T-006 失败清单下载内容 | P1 | 041、042 | ✅ |
| TP-T-007 处理中系统异常一致性 | P1 | 043 | ✅ |
| TP-T-008 任务详情与结构预览弹窗(原型功能) | P3 | 044 | ✅(⚠️ Q1 待确认,条件性 RED-001) |
### 模块 TP-P 打包归批与文件包结构(14 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-P-001 三要素归批正向 | P0 | 045 | ✅ |
| TP-P-002 换车/换司机拆批(规则组合) | P0 | 046、047 | ✅ |
| TP-P-003 三层目录结构与命名规则 | P0 | 048 | ✅ |
| TP-P-004 内容矩阵与单运单批次 | P0 | 049 | ✅ |
| TP-P-005 合同口径(含承运不含委托/框架) | P1 | 050 | ✅ |
| TP-P-006 电子回单与证件档案口径 | P1 | 051、052 | ✅ |
| TP-P-007 最小序号剔除后证件挂载重算 | P0 | 053、054 | ✅(⚠️ GAP-001 BLOCKED:文件缺失剔除路径断言未固化) |
| TP-P-008 文件缺失不阻断任务 | P0 | 055、056 | ✅ |
| TP-P-009 单文件下载失败自动重试 3 次 | P1 | 057、058 | ✅ |
| TP-P-010 子目录组织与重名文件处理 | P1 | 059 | ✅ |
| TP-P-011 批次包命名特殊字符与超长防御 | P1 | 060 | ✅ |
| TP-P-012 大批量打包完整性与统计一致性 | P1 | 061 | ✅ |
| TP-P-013 打包数据来源溯源与实时性 | P1 | 062、063 | ✅(⚠️ GAP-002 Q4 口径未确认) |
| TP-P-014 zip 不加密暴露面确认 | P2 | 064 | ✅ |
### 模块 TP-D 下载与幂等审计(6 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-D-001 任务完成后下载总包 | P0 | 001、065 | ✅ |
| TP-D-002 重复下载幂等 | P0 | 066 | ✅ |
| TP-D-003 下载审计日志 | P0 | 067 | ✅(⚠️ GAP-004 Q6 失败清单留痕待确认) |
| TP-D-004 处理中/未完成任务不可下载(双重校验) | P1 | 068 | ✅ |
| TP-D-005 按批次包单独下载不做(负向确认) | P3 | 069 | ✅ |
| TP-D-006 下载中断与大文件弱网 | P1 | 070、071 | ✅ |
### 模块 TP-N 非功能:性能/并发/保留期/异常恢复(8 个测试点)
| 测试点 | 优先级 | 用例 | 覆盖状态 |
| :--- | :---: | :--- | :---: |
| TP-N-001 性能基线 1000 单 30 分钟 | P1 | 072 | ✅ |
| TP-N-002 多任务并发排队上限 1~2 | P1 | 073 | ✅ |
| TP-N-003 并发提交与重复提交幂等 | P1 | 074、075 | ✅ |
| TP-N-004 保留期 7 天过期边界 | P1 | 076、077 | ✅(⚠️ GAP-003 Q5/临界口径待确认) |
| TP-N-005 敏感数据合规补偿控制 | P2 | 078 | ✅ |
| TP-N-006 OBS 依赖不可用降级与恢复 | P1 | 079、080 | ✅ |
| TP-N-007 zip 中文目录与多来源 xlsx 兼容性 | P2 | 081 | ✅ |
| TP-N-008 新增菜单对既有功能回归隔离 | P2 | 082 | ✅ |
## 风险覆盖审计
| 风险项 | 等级 | 关联缓解测试点 | 用例承接 | 覆盖判定 |
| :--- | :---: | :--- | :--- | :---: |
| (无 P0 风险项) | P0 | - | - | ✅ 100%(空集成立,无阻断项) |
| RISK-AVAILABILITY 可用性(并发/重试/幂等/容量,评分 12) | P1 | TP-N-002(并发排队主场景)、TP-N-003(重复/并发提交幂等)、TP-D-002(下载幂等)、TP-P-009(OBS 重试 3 次)、TP-N-001(容量基线)、TP-T-007/TP-N-006(异常恢复) | 073、074/075、066、057/058、072、043、079/080 | ✅ 100% ≥ 90%(测试点文档明确"不得静默省略"的主场景 TP-N-002 已有专项用例 073) |
| RISK-FINANCIAL 资损(评分 5) | P2 | 无专属 TP(本需求为只读导出,无直接资损动作);缓解依赖幂等/并发类 TP | 同上幂等/并发用例 | ✅ 缓解面已覆盖 |
| RISK-COMPLIANCE 合规(评分 5) | P2 | TP-M-004、TP-M-005、TP-P-014、TP-N-005、TP-D-003 | 006、007/008、064、078、067 | ✅ 100%(权限+审计补偿链均有用例) |
| RISK-DATA 数据(评分 4) | P2 | TP-P-012、TP-P-013、TP-U-016 | 061、062/063、028/029 | ✅ 100% |
| RISK-COMPATIBILITY 兼容性(评分 3) | P2 | TP-N-007 | 081 | ✅ 100% |
**说明**: 本项目 P0 风险 = 0,无 P0 风险阻断项。P1 风险 RISK-AVAILABILITY 的缓解面(并发排队、重复提交幂等、下载幂等、OBS 重试、容量基线、异常恢复共 7 个测试点)全部有用例承接且无断言缺失,覆盖率 100%,满足 ≥90% 目标。
## 覆盖缺口
### 缺口 GAP-001: 最小序号运单因文件缺失被剔除后证件改挂重算——关键验证点未固化为用例断言 【BLOCKED】
- 需求条目: REQ-015(P0)/ 测试点 TP-P-007(P0,测试点文档自评"全需求最易错点")
- 缺口类型: 关键验证点未固化为用例(部分覆盖——TC-053/054 已覆盖"校验失败剔除"与"单运单批次整批剔除"两条路径,缺"文件缺失剔除"路径)
- 风险等级: P0
- 现状: TP-P-007 关键验证点 2"最小序号运单仅缺电子回单(文件缺失剔除)时同样重算挂载"无用例承接;用例文件已自认该场景依赖需求 4.4.4 条款一(缺失不剔除仅记清单)与条款二(剔除改挂)的适用边界未确认(实现口径确认项 3,数据缺口 #17,CMB-010/011 未固化)
- 建议: 【阻断验收签发,不阻断用例执行】需求方确认 4.4.4 条款一/二在"最小序号运单仅缺回单/合同"场景的边界后,基于 TC-053 补充变体用例(批次最小序号运单仅缺回单)并固化证件改挂断言;确认前该子项按 BLOCKED 跟踪
### 缺口 GAP-002: 打包期间源数据变更口径(快照 vs 实时)未确认,断言无法取值
- 需求条目: REQ-013/REQ-015(P1/P0)/ 测试点 TP-P-013 / 用例 063
- 缺口类型: 断言未固化(用例已建,核心断言 1 依赖 Q4 二选一)
- 风险等级: P1
- 现状: TC-063 仅能验证"全任务一致"(不混杂),无法验证口径正确性;新回单是否入包无判定基准
- 建议: 需求方在快照/实时中二选一后回填 TC-063 断言 1,并同步 TP-P-013 回归口径
### 缺口 GAP-003: 过期任务展示形态与 7 天临界口径未确认,两条用例断言双口径悬置
- 需求条目: REQ-021(P1)/ 测试点 TP-N-004 / 用例 076、077
- 缺口类型: 断言未固化(TC-077 断言 1 依赖 Q5:新增"已过期"展示态 or 原状态+按钮置灰;TC-076 断言 2 依赖 BND-032"完成时间+7 天整"实现口径)
- 风险等级: P1
- 建议: 确认 Q5 展示形态与保留期临界算法后回填断言;临界口径建议直接写死为"完成时间 +7×24h"或明确实现值
### 缺口 GAP-004: 失败清单下载是否记审计日志未确认,审计留痕范围存在豁口
- 需求条目: REQ-017(P0)/ 测试点 TP-D-003 / 用例 067
- 缺口类型: 断言未覆盖(失败清单含货源单号/运单号,属敏感业务数据,其下载留痕当前无用例断言,依赖 Q6)
- 风险等级: P1(REQ-017 主体"文件包下载审计"已由 TC-067 完整覆盖,本缺口为其延伸留痕项)
- 建议: 采纳用例文件建议"一并留痕"(与文件包下载同表或同流水),确认后在 TC-067 补充失败清单下载审计断言
### 缺口 GAP-005: 序号 int32 上限与 Excel 15 位精度截断边界无用例固化
- 需求条目: REQ-006(P0)/ 测试点 TP-U-008 / 用例 019
- 缺口类型: 边界场景无用例(用例文件实现口径确认项 9 自认"TP-U-008 未单列用例,建议执行 019 时顺带探测")
- 风险等级: P2(序号业务上通常 ≤2000,极值输入概率低,但一旦静默截断将破坏"最小序号"判定链)
- 建议: 在 TC-019 清单中显式追加 2 行极值序号数据(int32 上限、15 位以上数字),固化断言"合法或明确报错,不得静默截断"
### 缺口 GAP-006: 多 Sheet 工作簿、表头后附加说明行、合并单元格清单的解析口径无用例
- 需求条目: REQ-004/REQ-005(P1/P0)/ 测试点 TP-U-001、TP-U-004
- 缺口类型: 边界场景无用例(数据缺口 #15 自认"本文件未固化断言")
- 风险等级: P2
- 现状: TC-009 仅覆盖"模板自带说明行不参与解析"这一特例;用户自造多 Sheet/说明行/合并单元格文件的读取行为(读取首 Sheet?整体拒绝?)无任何用例约束
- 建议: 补充 1 条解析口径用例,或经需求/开发确认后显式声明"仅读首 Sheet、其余忽略"并写入用例前置说明
### 缺口 GAP-007: 运单号大小写匹配口径未显式覆盖
- 需求条目: REQ-006(P0)/ 测试点 TP-U-011 / 用例 022
- 缺口类型: 边界场景无用例(TP-U-011 关键验证点含"大小写/前后空格匹配口径一致",TC-022 仅覆盖前后空格变体,无大小写变体行)
- 风险等级: P3
- 建议: 在 TC-022 清单追加 1 行大小写变体运单号,验证存在性校验与实际导出同口径
## 过度覆盖
### 冗余 RED-001(条件性): TC-044 结构预览弹窗用例悬于未确认功能之上
- 用例: PLT_TMS_FPKG_044(承接 TP-T-008,标注 REQ-011)
- 问题: "查看结构/文件包结构预览"仅见于原型、需求正文未定义(待确认 Q1)。当前状态下可追溯到 TP-T-008→REQ-011,不计为硬性冗余;但若需求方确认本期裁剪该功能,TC-044 即成为无需求依据的过度覆盖
- 建议: Q1 确认裁剪则删除 TC-044 并同步移除 TP-T-008;确认实现则按弹窗实际字段回填断言后保留。冗余率影响: 裁剪情形下 1/82 ≈ 1.2%,仍 ≤ 5% 门限
**硬性冗余统计**: 0/82 = 0%(全部 82 条用例均可逆向追溯到 REQ/TP),≤ 5% 门限 ✅
**冗余倾向观察(不判为 RED,保留合理)**: TC-081 断言 3(.xls 改后缀 .xlsx 被拒)与 TC-011 部分重叠——属兼容性维度的跨模块交叉验证(RISK-COMPATIBILITY),且两用例执行环境不同(解压工具/浏览器 vs 接口直传),保留合理;TC-001 冒烟与明细用例存在主链路重叠,属用例文件声明的"端到端冒烟单独成条"设计原则,保留合理。
## 覆盖热力图
> 按 TP 文档六大模块统计。关联需求条目数为该模块 TP 触及的去重 REQ 数(一条 REQ 可跨多模块被计数,合计 40 条次 > 26 条);用例数含跨模块共用的 TC-001(冒烟,在三个模块各计 1 次,合计 84 计次 - 2 重复 = 82 条唯一)。
| 模块 | 关联需求条目 | 测试点(P0/P1/P2/P3) | 用例 | 覆盖密度 |
| :--- | :---: | :---: | :---: | :--- |
| 菜单与权限 | 3(REQ-001/002/026) | 5(3/1/1/0) | 7 | ███ 适中 |
| 上传与校验 | 7(REQ-001/003/004/005/006/007/023) | 18(11/6/1/0) | 24 | ██████████ 密集 |
| 任务与列表 | 7(REQ-007/008/009/011/018/019/024) | 8(2/5/0/1) | 14 | ██████ 较密 |
| 打包归批与文件包结构 | 7(REQ-010/011/012/013/014/015/026) | 14(6/7/1/0) | 20 | ████████ 密集 ⚠️ GAP-001 |
| 下载与幂等审计 | 4(REQ-008/016/017/025) | 6(3/2/0/1) | 8 | ███ 适中 ⚠️ GAP-004 |
| 非功能 | 12(REQ-001/002/004/015/016/017/020/021/022/023/024/026) | 8(0/5/3/0) | 11 | █████ 较密 ⚠️ GAP-003 |
**盲区高亮**:
- 无硬盲区: 不存在"无测试点的需求"(26/26)、"无用例的测试点"(59/59)、"无需求依据的用例"(82/82)。
- 待确认型盲区(需求侧未决传导,非用例缺失): 集中在 **打包归批**(GAP-001,文件缺失剔除触发证件改挂的口径,BLOCKED)与 **非功能**(GAP-003,过期展示/临界口径);**下载与幂等审计** 的盲区为审计留痕范围延伸(GAP-004)。
- 密度观察: 上传与校验(24 用例/18 TP,均值 1.33)与打包归批(20/14,均值 1.43)覆盖最厚,与"校验规则 + 归批规则是本需求复杂度核心"的判断一致;下载与幂等审计均值 1.33 但绝对量最少(8 条),其中 3 个 P0(下载/幂等/审计)均有专项 P0 用例,密度虽低但关键面无缺口。
- 模块口径说明: 用例文件的模块分布(菜单权限 7/上传校验 13/数据校验 10/任务列表 13/打包归批 20/下载审计 7/非功能 11/跨模块冒烟 1)中,"数据校验"10 条在本热力图中并入"上传与校验"(对应 TP-U-008~016 的承接用例),"跨模块冒烟"001 按其实际承接的 TP 归入三个模块重复计数。
## 审计结论
量化指标全部达标(需求覆盖 100%、P0/P1 测试点覆盖 100%、过度覆盖 0%),追溯标注质量高(抽查 6 处可疑标注,5 处成立、1 处为无害的描述不一致)。**签发建议: 有条件通过** —— 以 GAP-001(BLOCKED,REQ-015 关键验证点"文件缺失剔除→证件改挂"断言未固化)的需求侧确认为签发前置条件;GAP-002~004 随 Q4/Q5/Q6 确认回填断言;GAP-005~007 为低成本补强项,建议随执行批次吸收。
@@ -0,0 +1,138 @@
# 运单资料文件包下载需求 评审报告
> 评审人: case-reviewer(Agentic QE Fleet · review 战区)
> 评审时间: 2026-09-08
> 被评审对象: output/test_cases/运单资料文件包下载需求_测试用例.md(82 条,PLT_TMS_FPKG_001~082)
> 评审依据: agents/review/case_reviewer.md(7 维度)、knowledge_base/01_standards/review_checklist.md、test_case_template.md、definition_of_done.md
> 校准输入: requirements/运单资料文件包下载需求.md(v1.0 定稿,13 项确认决议)、output/test_points/运单资料文件包下载需求_测试点.md(59 测试点)、output/analysis/运单资料文件包下载需求_风险评估.md(P1=RISK-AVAILABILITY)、output/analysis/运单资料文件包下载需求_测试数据.md(145 组数据)、knowledge_base/01_standards/terminology.md
> 核验手段: 逐条人工评审 + 脚本核验(表格列数、编号连续性、优先级/类型/模块分布、必填列空值、数据 ID 与数据文件交叉比对)
## 评审概览
| 指标 | 值 |
| :--- | :--- |
| 用例总数 | 82 |
| 阻断项 | 3 |
| 建议项 | 4 |
| 优化项 | 7 |
| 评分 | 89/100 |
总体结论:用例集质量高——表头/列数/编号/模块路径零缺陷(脚本核验),59/59 测试点全部承接,13 项确认决议全部落地无违背,术语与术语表一致,预期结果普遍做到"UI/接口反馈 + 数据状态"双覆盖。3 个阻断项集中在 2 处测试数据引用缺陷与 1 处场景遗漏(0 有效行终态待确认项未显式标注),均可精确定位、快速修复;修复后即可达到可执行标准。
## 阻断项
### B-001: 039 的测试数据引用与数据文件定义冲突(XLS-006 行数标注错误)
- 用例编号: PLT_TMS_FPKG_039
- 行号: 表格数据行第 39 行(文件 L69)
- 问题: 测试数据列标注 `XLS-006(1000 行)`,但 XLS-006 在测试数据文件中定义为 1~2000 行的"行数上限合法文件(2000 行全有效)"(测试数据文件 L35),且同文件 015/061/072/082 均按 2000 行使用 XLS-006。本用例步骤与前置条件均要求"1000 行规模合法清单(CNC-001/CNC-006)"。数据 ID 与行数标注自相矛盾,执行人按 ID 取数会取到 2000 行文件,与步骤"上传 1000 行清单"冲突,无法按写明数据直接操作。
- 修复建议: 测试数据列改为 `BND-007(1000 行清单,按 CNC-006 的 500 批×2 运单混合结构构造)`,与 072 的写法保持一致。
- 修复后预期: 数据 ID、步骤、前置条件、数据文件定义四方一致,执行人可直接构造 1000 行清单执行进度观察断言。
### B-002: 026 的数据构造自相矛盾(序号重复行 vs 序号互不相同)
- 用例编号: PLT_TMS_FPKG_026
- 行号: 表格数据行第 26 行(文件 L56)
- 问题: 前置条件为"1 行合法(XLS-001)+1 行序号重复(XLS-106 重复行)+……各行序号取互不相同的合法值"。序号重复行必须与文件内另一行同序号才会触发"序号重复"失败;若按字面"各行序号互不相同"构造,该行不会失败,实际失败数=4,与预期断言"成功数=1+失败数=5=总行数 6"冲突。执行人按字面执行将得到与预期不符的结果。
- 修复建议: 前置条件改写为"重复行与合法行 XLS-001 共用序号 1(XLS-001 为首现行保留并成功,重复行计失败,口径同 020),其余 4 个失败行(XLS-110/111/113/107)序号取互不相同的合法值(如 2/3/4/5)"。
- 修复后预期: 按前置条件可直接构造 6 行数据,执行结果与断言 1/4(成功=1、失败=5)自洽,5 类失败原因互不串行。
### B-003: "全部行数据级失败(0 有效行)"场景无用例承接且待确认口径未显式标注
- 用例编号: 无(场景缺口,涉及 CMB-018 / 数据缺口 #14)
- 行号: 用例集整体(文末"未收敛的 ⚠️ 待确认清单"与"其他实现口径确认项"均未收录该项)
- 问题: 需求 4.2.2 处理原则未定义"剔除失败行后 0 有效行"的任务终态(已完成·部分失败 or 失败)与是否生成空文件包;测试数据文件已将该场景构造为 CMB-018 并列为数据缺口 #14("需求方/开发确认")。用例文件对缺口 #15/#16/#17 均已显式纳入文末确认项,唯独遗漏 #14:既无用例承接该异常/边界场景,也无 ⚠️ 待确认标注。对照 review_checklist 阻断项"需求存在明显待确认项,但未显式标注"及 DoD §4"不得静默遗漏",属于状态流转维度的不闭合。
- 修复建议: 新增 1 条 P1 功能测试用例(建议编号 PLT_TMS_FPKG_083,模块 平台端-运单管理-运单文件包-数据校验):前置构造 3 行全非法清单(XLS-101+XLS-110+XLS-107),断言任务终态、成功数=0、统计一致且对象存储无空包(口径按缺口 #14 确认后回填,暂按"已完成·部分失败、不生成空 zip"设计并在备注标注 `⚠️ 待确认:0 有效行终态,见数据缺口 #14`);同时在"其他实现口径确认项"补充缺口 #14 条目。
- 修复后预期: 0 有效行边界具备可执行用例与显式待确认标注,与其他数据缺口处理方式一致,无静默遗漏。
## 建议项
### S-001: 007/008 多机构隔离用例的数据与环境前置未闭环
- 用例编号: PLT_TMS_FPKG_007 / PLT_TMS_FPKG_008
- 行号: 表格数据行第 37/38 行(文件 L37/L38)
- 问题: B 机构运营账号、任务编号 TB、运单号 YDB-001 均为行内临时记号,未分配数据 ID,也未列入数据缺口清单(缺口 #1 仅覆盖本机构运单号映射);测试环境是否为多机构部署亦无来源标注(脚本核验:YDB-001 是全部 82 条中唯一在数据文件无定义的引用)。执行前无法确认数据可获取,前置条件可复现性存疑。
- 修复建议: 为 B 机构数据分配数据 ID(如 ACC-B01、YDB-001)并在测试数据文件"数据缺口"补充"多机构部署环境 + B 机构运营账号 + B 机构运单"条目;若测试环境不支持多机构部署,在 007/008 备注显式说明取舍原因,不得静默保留。
- 修复后预期: 007/008 的前置条件可复现、数据来源可追溯,与全文件数据 ID 纪律一致。
### S-002: 007/008 以 super_admin 充当"A 机构运营账号"做隔离断言存在口径风险
- 用例编号: PLT_TMS_FPKG_007 / PLT_TMS_FPKG_008
- 行号: 表格数据行第 37/38 行(文件 L37/L38)
- 问题: 数据文件定义 ACC-001 为"超级管理员(代行运营人员)、全部权限"。超管在多机构部署下可能按设计具备跨机构可见性:若如此,断言"ACC-001 任务列表不显示 B 机构任务"会因角色能力而失败(误报缺陷),或掩盖机构隔离缺陷(漏报)。
- 修复建议: 机构隔离断言改用绑定 A 机构的非超管运营账号(可复用 ACC-002 并补充机构绑定关系),或在 007 前置条件中先与开发确认 super_admin 在多机构下的可见范围并将结论写入预期结果。
- 修复后预期: 隔离断言基于受控权限角色,失败时可归因到数据权限缺陷而非角色差异。
### S-003: 007 的 P2 与项目画像"权限类必测机构隔离"硬约束权重不匹配
- 用例编号: PLT_TMS_FPKG_007(关联 PLT_TMS_FPKG_008)
- 行号: 表格数据行第 37 行(文件 L37)
- 问题: 项目画像 §10 要求权限类用例必须验证机构数据隔离,007 承载任务列表+下载双隔离主场景却为 P2(沿袭测试点 TP-M-005 的 P2 定级),008(上传行级失败隔离)同为 P2。按 review_checklist §8"不得把高风险场景错误下沉到 P2"的精神,主隔离场景降权依据不足。
- 修复建议: 将 007 升为 P1(008 可保持 P2);或在"P2/P3 用例取舍说明"中补充机构隔离保持 P2 的权重论证(如当前部署形态下跨机构风险实际较低)。
- 修复后预期: 优先级与项目画像硬约束的权重口径一致,或有显式的降权理由。
### S-004: 跨货源归批(不拆批侧)规则组合未承接
- 用例编号: 无(建议并入 045 或 046,涉及 CMB-007)
- 行号: 关联表格数据行第 75/76 行(文件 L75/L76)
- 问题: "同一司机+身份证+车牌三要素一致、运单分属不同货源时仍归 1 批(归批不看货源单号)"是归批规则(REQ-010)的关键组合验证:现有用例覆盖了"任一要素不同即拆批"(046/047),但"三要素一致不因货源不同而拆批"的负向对照缺失;数据文件已构造 CMB-007 却无用例承接。
- 修复建议: 在 045 或 046 的上传清单中并入 CMB-007 行组(张三+皖A12345 跨 HY202609001/HY202609002 的运单各 1 单),增加断言"跨货源运单仍归同一批次包,两个运单包分别按各自货源单号命名"。
- 修复后预期: 归批维度"拆批"与"不拆批"两侧均有用例,防止实现按货源单号错误分组。
## 优化项
### O-001: 046 单条用例合并两个真实业务场景,与文末取舍说明表述不一致
- 用例编号: PLT_TMS_FPKG_046
- 行号: 表格数据行第 76 行(文件 L76)
- 说明: 046 含两次独立上传(CMB-003 同司机换车、CMB-004 同车换司机),而文末取舍说明将 TP-P-002 列为"不同真实业务场景拆为独立用例",与实际不符。两场景验证点同为"任一要素不同即拆批",故列为优化。
- 建议: 拆为两条独立用例(同司机换车 / 同车换司机),或将取舍说明中 TP-P-002 的表述修正为"按要素维度拆分(046 换车与换司机、047 同名不同证)"。
### O-002: 033 五种状态颜色映射未列明"待处理"标签颜色
- 用例编号: PLT_TMS_FPKG_033
- 行号: 表格数据行第 63 行(文件 L63)
- 说明: 断言 2 仅列处理中蓝/已完成绿/失败红/已完成·部分失败橙,未明确"待处理"标签颜色(原型为灰色态)。
- 建议: 补齐"待处理灰色",使五种状态的颜色映射断言完整闭环。
### O-003: 049 断言 2 措辞"(非空目录亦无文件)"存在歧义
- 用例编号: PLT_TMS_FPKG_049
- 行号: 表格数据行第 79 行(文件 L79)
- 说明: 括号内表述易被误读,测试点原文意图是"既不得生成空的司机/车辆证件子目录,也不得含任何证件文件"。
- 建议: 改写为"确无司机证件/车辆证件子目录(既不生成空目录,目录内也不得含任何证件文件)"。
### O-004: 041"构造同 026 数据"的引用与实际失败集不一致
- 用例编号: PLT_TMS_FPKG_041
- 行号: 表格数据行第 71 行(文件 L71)
- 说明: 041 实际为 XLS-101/110/111/113 四类失败行(序号 0/不存在/错配/无法归批),026 为 XLS-106/110/111/113/107 五类;"构造同 026 数据"会误导执行人复制错误失败集。
- 建议: 改为"参照 026 的构造方式,含 XLS-101/110/111/113 四类失败行 + 1 行合法行"。
### O-005: ERR-034(源文件名 XSS)已定义数据但无用例承接
- 用例编号: 建议并入 PLT_TMS_FPKG_029
- 行号: 关联表格数据行第 59 行(文件 L59)
- 说明: 数据文件定义了 ERR-034(`<img src=x onerror=alert(1)>.xlsx`,接口构造,列表转义展示断言),029 已覆盖源文件名超长/特殊字符/Unicode,仅差 XSS 变体一处断言(属 TP-U-016 防御完整性)。
- 建议: 在 029 断言 2 中并入"含脚本标签的源文件名在任务列表转义展示、不触发弹窗"。
### O-006: CNC-007(双账号并发上传)未承接
- 用例编号: 建议并入 PLT_TMS_FPKG_073 或 066
- 行号: 关联表格数据行第 103/96 行(文件 L103/L96)
- 说明: CNC-007(ACC-001 与 ACC-006 同时上传,任务互不干扰、上传人字段各自正确)为数据文件已构造的多账号并发场景,当前无用例覆盖;066 仅覆盖双账号下载。
- 建议: 在 073 的 5 任务并发中安排双账号提交并核对上传人字段,成本极低。
### O-007: XLS-005/BND-024 与 XLS-115 两处已构造数据未承接
- 用例编号: 建议在 019/026 执行时顺带探测
- 行号: 关联表格数据行第 49/56 行(文件 L49/L56)
- 说明: 大数值序号 50000 合法(XLS-005/BND-024)与单行多重非法的失败原因取值优先级(XLS-115)均无用例显式承接;前者可与确认项 #9 的 BND-025~027 同批探测,后者可在 026 执行时顺带验证原因展示优先级(019 断言 2 已有"首要或并列展示"的铺垫)。
- 建议: 不新增用例,在 019/026 的步骤或备注中补一句顺带探测说明即可。
## 专项核查结论(任务指定核查项)
1. **预期结果双覆盖(UI/接口 + 数据状态)**: 通过。82 条用例的预期结果均同时覆盖页面/接口反馈与数据状态校验(典型:010 统计卡片计数与数据库任务表比对、011 数据库无任务记录、016 对象存储无空包残留、061 zip 全量清点与统计"不出现两张皮"、065 下载前后数据库字段一致、066 服务端完成时间与存储不变、076 保留期字段与清理记录)。仅 030(易用性)与 033(标签映射)以 UI 断言为主,与类型定位匹配,且状态字典的数据侧校验由 032 断言 4 兜底。
2. **测试步骤引用具体测试数据**: 通过。全部 82 条步骤/数据列均引用数据文件 ID(XLS/ERR/BND/IDC/STT/CMB/CNC),脚本核验引用 ID 100% 在数据文件有定义(唯 B-001 的错误标注与 S-001 的 YDB-001 除外);多数步骤还写明构造手段(openpyxl 构造、接口直传、抓包重放、运维配合 mock)。
3. **P1 风险 RISK-AVAILABILITY(并发排队/幂等/重试)专项**: 已覆盖且步骤可执行——073 并发上限与排队(BND-051~053/CNC-002/003,10 秒级轮询+终态逐一验证 zip,备注显式"不得省略")、074 毫秒级并发幂等(前端防抖+后端幂等键双断言,CNC-008)、075 上传超时提示与重试防双任务、057/058 OBS 单文件重试两侧边界(恰 3 次)、079/080 OBS 整体不可用降级与恢复、066 下载幂等(CNC-005 哈希比对)、043 处理中服务异常置失败。P1 风险缓解链完整。
4. **术语一致性**: 通过。菜单名"运单文件包"、批次/文件包(批次包)/运单包/总包/最小序号运单/电子回单/失败清单/审计日志/幂等性等用法与需求二章、4.4.2 及 terminology.md 一致;角色用"车队长""运营人员"无同义词混用;"银行电子回单"口径与术语表定义吻合。
5. **已确认决议核对(第八章 13 项)**: 全部落地且无违背——#1→002、#2→003/004、#3/#12→048/064、#4→049、#5→050、#6→023、#7→034、#8→053/054、#9→015/017、#10→076、#11→069(防过度实现)、#13→020。Q1/Q4/Q5/Q6 四项保留待确认已在 044/063/077/067 备注显式标注(符合 DoD,不计缺陷);Q2/Q3 的收敛在 015/016 备注留有"实现不符需回归修订"的触发条件,处理得当。
6. **追溯与统计**: 59/59 测试点全部有用例承接(文件头映射表逐条核对无遗漏);历史缺陷 BUG-202607-01/02/03 分别落到 068、058/074、061/062/063 且备注带 [AI修正] 来源标注;文末自述的优先级/类型/模块分布与脚本实测完全一致。
## 维度评分
| 维度 | 得分 | 说明 |
| :--- | :---: | :--- |
| 结构完整性 | 20/20 | 表头与 template 逐字一致;82 行均 10 列、无残缺无全角竖线;必填列无空;模块全部为层级路径且分布与自述一致;编号 001~082 连续唯一(脚本核验) |
| 可执行性 | 18/25 | 数据 ID 纪律优秀、步骤含轮询/构造/抓包等可操作手段;扣分项:039 数据引用错误(B-001)、026 数据构造自相矛盾(B-002)、007/008 环境与数据前置未闭环(S-001/S-002) |
| 原子性 | 14/15 | 无"多关键断言混杂"的阻断问题;拆分/合并总体遵循文末原则;扣分项:046 双场景合一且取舍说明表述不一致(O-001) |
| 预期结果质量 | 18/20 | 预期具体可验证、普遍含数据库/对象存储侧校验、失败可定位(前端/后端/规则/数据/异步分层断言);扣分项:0 有效行状态流转场景缺失致覆盖不闭合(B-003) |
| 类型准确性 | 10/10 | 枚举全部合法且与内容匹配(安全性 10 条对应越权/注入/审计/合规,回归 7 条均有历史缺陷或冲突修订依据,性能 3 条对应 RT/并发容量);自述类型分布与实测一致 |
| 优先级合理性 | 9/10 | P0=32(39%)与测试点 P0 占比(42%)匹配,全部 P0 测试点有 P0 用例承接,无高风险下沉;扣分项:007 机构隔离 P2 权衡存疑(S-003) |
| **合计** | **89/100** | 3 个阻断项修复后即可达到可执行与可导出标准 |
@@ -0,0 +1,74 @@
# 运单资料文件包下载需求 质量裁决
## 裁决结果: 🔧 PASS_WITH_FIX
**裁决时间**: 2026-09-08 17:46:10
**裁决人**: quality-gatekeeper (Agentic QE Fleet · review 战区)
## 裁决依据
| 检查项 | 实际值 | 阈值 | 状态 |
| :--- | :---: | :---: | :---: |
| 阻断项数量 | 0(原 3 项 B-001/B-002/B-003,已全部自动修复并复核落地) | ≤ 0(max_blockers=0) | ✅ |
| P0 测试点→用例覆盖率 | 100%(25/25,修复后 TP-P-007 增至 053/054/084 三路径承接) | 100% | ✅ |
| P0 风险覆盖率 | 100%(P0 风险项=0,空集成立) | 100% | ✅ |
| P1 风险(RISK-AVAILABILITY)覆盖率 | 100%(7 个缓解测试点全部有用例:073/074/075/066/057/058/072/043/079/080) | ≥ 90% | ✅ |
| 需求→测试点覆盖率 | 100%(26/26) | ≥ 95%(min_coverage=0.95) | ✅ |
| 待确认项 | 未处理 0(7 条用例 ⚠️ 均已显式标注 + 默认设计口径 + 回填路径,符合 DoD 不计缺陷) | 0(未处理) | ✅ |
| 用例文件存在 | 是,85 条(001~085 连续唯一,脚本核验 10 列/必填列无空/分布统计与文首自述一致) | 是 | ✅ |
| 测试数据构造(require_data_builder) | 满足:数据文件 145 组 + 缺口 #14~#18 已补(CMB-018、BND-007 1000 行、BND-025~027、ACC-B01/YDB-001) | 必须提供 | ✅ |
| 风险评估(require_risk_assessment) | 满足:5 项风险(P0=0 / P1=1 / P2=4),P1 缓解面 100% 承接 | 必须提供 | ✅ |
| 过度覆盖率 | 0%(82→85 条均可逆向追溯 REQ/TP;RED-001 条件性冗余 1/85≈1.2% ≤ 5%) | ≤ 5% | ✅ |
**逐条对照 BLOCKED 条件(全部不成立)**:
1. 阻断项 > 0 —— 不成立:3 项阻断已全部修复落地(见自动修复摘要),抽查未发现新引入阻断;
2. P0 测试点覆盖率 < 100% —— 不成立:25/25 = 100%,且原 GAP-001 对应的 TP-P-007"文件缺失剔除→证件改挂"路径已由新增 P0 用例 084 固化断言;
3. P0 风险覆盖率 < 100% —— 不成立:P0 风险=0,空集成立;
4. 存在未解决的确认门禁 —— 不成立:设计战区确认门禁已 confirmed(需求 v1.0 定稿、13 项确认决议全部落地);剩余 Q1/Q4/Q5/Q6 与缺口 #14/#15/#17/#18 均为需求侧"待需求方/开发确认口径"类,已在用例中显式 ⚠️ 标注、给出默认设计口径(083 按"已完成·部分失败、不生成空 zip";084 按决议#8+4.4.4 条款二字面固化证件改挂断言;085 按"不得静默丢数据"不变式)与回填路径,对照评审报告对 Q1/Q4/Q5/Q6 的既有裁定("显式标注符合 DoD,不计缺陷")与 B-003 的修复方向(补用例 + 显式标注即为闭合态),此类项按同一口径判定为"已处理",不构成未解决确认门禁;
5. 测试用例文件不存在或为空 —— 不成立:85 条用例完整。
## 裁决详情
1. **评审阻断项修复复核(3/3 落地)**:
- B-001(039 数据引用冲突):测试数据列已改为 `BND-007(1000 行清单,按 CNC-006 的 500 批×2 运单混合结构构造)`,数据 ID、步骤(上传 1000 行)、断言(186/1000 形式)与数据文件定义(BND-007=1000 行性能基准)四方一致;
- B-002(026 序号自相矛盾):前置条件已改为"重复行与合法行 XLS-001 共用序号 1(首现行保留成功、重复行计失败,口径同 020),其余 4 个失败行序号取互不相同的合法值(如 2/3/4/5)",与断言"成功数=1+失败数=5=总行数 6"自洽;
- B-003(0 有效行场景遗漏):新增 PLT_TMS_FPKG_083(P1/功能测试/数据校验模块),按 CMB-018 构造 3 行全非法清单,断言含"无下载入口、对象存储无空包残留",备注 ⚠️ 指向文末确认项 #10(数据缺口 #14),确认项 #10 已收录该缺口——静默遗漏已闭合。
2. **覆盖率缺口修复复核**:
- GAP-001(BLOCKED 级):新增 PLT_TMS_FPKG_084(P0/打包归批),最小序号运单因仅缺电子回单被剔除(CMB-010,缺口 #17),按决议#8+4.4.4 条款二字面口径固化证件改挂断言(断言 2:序号 3 运单包含证件后缀+四子目录、序号 5 仅合同+回单,且该断言在运单包最终形态两种口径下均须成立);TP-P-007 现有 053/054/084 三条覆盖"校验失败剔除/整批剔除/文件缺失剔除"全部路径,P0 关键验证点已固化为断言,GAP-001 在用例层面闭合(残留为需求侧 4.4.4 条款边界的口径回填,已显式标注);
- GAP-005:019 备注已锚定 BND-025/026/027 极值序号顺带探测(int32 上限 2147483647 / 上限+1 / 20 位超 Excel 精度),固化断言"合法或明确报错,不得静默截断",与确认项 #9、数据文件定义三方一致;
- GAP-006:新增 PLT_TMS_FPKG_085(P2/上传校验),固化"多 Sheet 数据无一被静默丢弃"不变式断言(要么全部解析总行数=3,要么整体拒绝),⚠️ 指向确认项 #1(缺口 #15);
- GAP-007:022 已追加运单号小写变体行(yd20260901001),断言 3 固化"存在性校验与实际导出同口径,不出现校验通过但导出缺单的不一致";
- GAP-002/003/004:属断言取值类(用例 063/076/077/067 已建且已承接),随 Q4/Q5/Q6 确认回填,不构成覆盖缺口。
3. **建议项/优化项采纳复核**:S-003(007 已升 P1,取舍说明同步更新);S-001/S-002(007/008 备注补环境依赖与替代口径"改用绑定 A 机构的非超管账号 ACC-002 补机构绑定执行,不得静默跳过",数据文件已补缺口 #18:ACC-B01/YDB-001);S-004(045 已并入 CMB-007 跨货源不拆批断言,批次①含 4-【CMB-007 运单号】-HY202609002,与 046 拆批两侧互补);O-001(取舍说明已改为"TP-P-002 按要素维度处理");O-002(033 已补"待处理灰",五色映射闭环);O-003(049 已改写为"既不生成空目录,目录内也不得含任何证件文件");O-004(041 已改为"参照 026 的构造方式,含 XLS-101/110/111/113 四类失败行 + 1 行合法行");O-005(029 数据列已含 ERR-034,断言 2 补 XSS 文件名转义展示不触发弹窗);O-006(073 已并入 CNC-007 双账号并发与上传人字段一一对应断言);O-007(主路径已采纳:019 极值探测锚定 BND-025~027;XLS-115 单行多重失败原因优先级与 BND-024 大数值合法序号未在 026/019 显式点名,见遗留事项 2)。
4. **结构复核(脚本实测)**:85 行×10 列、编号 001~085 连续唯一、必填列无空值;文首统计与实测完全一致(P0=33/P1=43/P2=7/P3=2;功能 62/安全 10/回归 7/性能 3/兼容 1/易用 1/冒烟 1;菜单权限 7/上传校验 14/数据校验 11/任务列表 13/打包归批 21/下载审计 7/非功能 11/跨模块冒烟 1);用例编号与测试点映射总览已同步(TP-U-001→009/085、TP-U-004→012/013/085、TP-U-015→026/027/083、TP-P-007→053/054/084),59/59 测试点映射关系无断裂。
5. **遗留非阻断事项(不改变裁决,建议导出前/执行前处理)**:
- ① 022 步骤 1 仍写"上传该 3 行清单",与前置条件"构造 4 行清单"(GAP-007 修复新增大小写变体行后)行数表述不一致。属文案级遗留(与评审 O-004 同族、按其定级口径为优化级):前置条件已完整定义 4 行且断言 1~3 均要求四行行为,不会导致错误判定或无法构造,不影响门禁,但建议导出前顺手将"3 行"改为"4 行";
- ② O-007 部分残留:XLS-115(单行多重非法的失败原因优先级)与 XLS-005/BND-024(50000 合法大数值)未显式点名;019 断言 2 已有"一行并存多项问题时原因以首要或并列展示"铺垫、BND-026/027 已覆盖更极端的数值边界,可在执行 026/019 时按备注顺带探测,不再单独开项;
- ③ 断言回填类:063(Q4 快照/实时)、076/077(Q5 与 BND-032 临界口径)、067(Q6 失败清单留痕)、044(Q1 结构预览)、083(缺口 #14 终态)、084 断言 3(缺口 #17 条款边界)、085 断言 1 取值(缺口 #15 口径)——均已内置默认口径与回填路径,须在对应确认完成后回填,未确认前相关断言按用例内标注的默认口径执行并在执行报告记录。
## 自动修复摘要
| 序号 | 修复项 | 修复内容 | 抽查验证结果 |
| :--- | :--- | :--- | :--- |
| 1 | 评审 B-001 | 039 测试数据列 XLS-006(1000 行)→ BND-007(1000 行,按 CNC-006 结构构造) | ✅ 落地(用例表 039 行;数据文件 BND-007=1000 行一致) |
| 2 | 评审 B-002 | 026 前置条件改为重复行与 XLS-001 共用序号 1,其余 4 失败行序号 2/3/4/5 互不相同 | ✅ 落地(与断言成功 1+失败 5=6 自洽) |
| 3 | 评审 B-003 | 新增 PLT_TMS_FPKG_083(P1,0 有效行终态场景),确认项 #10 收录缺口 #14 | ✅ 落地(CMB-018 构造、⚠️ 显式标注、数据文件缺口 #14 在册) |
| 4 | 覆盖 GAP-001 | 新增 PLT_TMS_FPKG_084(P0,文件缺失剔除→证件改挂重算,固化决议#8+4.4.4 条款二字面断言) | ✅ 落地(TP-P-007→053/054/084,⚠️ 运单包最终形态待确认已标注) |
| 5 | 覆盖 GAP-005 | 019 备注锚定 BND-025/026/027 极值序号顺带探测,"合法或明确报错,不得静默截断" | ✅ 落地(与确认项 #9、数据文件定义一致) |
| 6 | 覆盖 GAP-006 | 新增 PLT_TMS_FPKG_085(P2,多 Sheet 不得静默丢数据不变式) | ✅ 落地(TP-U-001/TP-U-004 映射同步,确认项 #1/缺口 #15 收录) |
| 7 | 覆盖 GAP-007 | 022 清单追加大小写变体行,断言"存在性校验与实际导出同口径" | ✅ 落地(遗留步骤 1"3 行"文案未同步,见遗留事项①,非阻断) |
| 8 | 建议 S-001/S-002 | 数据文件补缺口 #18(ACC-B01/YDB-001/多机构部署形态),007/008 备注补环境依赖与替代口径 | ✅ 落地(缺口 #18 在册,007 备注含"不得静默跳过"约束) |
| 9 | 建议 S-003 | 007 由 P2 升 P1 | ✅ 落地(优先级列 P1,取舍说明同步"升为 P1") |
| 10 | 建议 S-004 | 045 并入 CMB-007 跨货源不拆批断言 | ✅ 落地(前置/步骤/断言 2/备注四处一致) |
| 11 | 优化 O-001~O-007 | 取舍说明表述修正、033 补待处理灰、049 措辞消歧、041 失败集改写、029 并入 ERR-034、073 并入 CNC-007、019 锚定极值探测 | ✅ 全部落地(O-007 的 XLS-115/BND-024 显式点名残留,见遗留事项②,非阻断) |
| 12 | 结构复核 | 85 行×10 列、编号连续、统计一致、类型合法、必填列无空 | ✅ 脚本实测通过(本次裁决独立复测) |
## 后续步骤
- 🔧 自动修复已完成并通过复核:3 项评审阻断全部修复、GAP-001(BLOCKED 级)在用例层面闭合、GAP-005/006/007 已补齐、S-001~S-004 与 O-001~O-007 已采纳,修复后状态等同于 PASS(结构脚本核验零缺陷、三级追溯 26/26→59/59→85/85 无断裂)。
- ✅ 可执行 `/qe-fleet export` 导出 Excel(建议导出前顺手修正 022 步骤 1 的"3 行→4 行"文案,1 处改动)。
- 📋 需求侧确认回填清单(不阻断导出,须在执行前/执行中闭环,回填路径已内置于用例):
1. Q1→044(结构预览裁剪或回填)、Q4→063 断言 1、Q5→077 断言 1 与 BND-032 临界(076)、Q6→067 失败清单留痕;
2. 缺口 #14→083 断言 3/4 终态、#15→085 断言 1 取值、#17→084 断言 3 运单包最终形态、#18→007/008 多机构环境与 B 机构造数;
3. 执行阶段按缺口清单 #1~#13 完成造数(2000 有效运单、多笔支付运单、OBS 失效对象等),并执行 019/026 时顺带探测 BND-024~027 与失败原因优先级。
- 📝 本裁决为 review 战区最终裁定;若后续需求方确认口径与默认设计不符(如 083 终态确认为"失败"、084 确认为条款一不剔除),须按回填路径修订对应断言后重新执行 `/qe-fleet review` 复核,无需整体重新裁决。
@@ -0,0 +1,21 @@
# 运单资料文件包下载需求 风险评估报告
> 生成时间: 2026-09-08T08:11:23.797170+00:00
## 风险概览
- 总风险项: 5
- P0 高风险: 0
- P1 中风险: 1
## 风险矩阵
| 风险ID | 类别 | 可能性(1-5) | 影响度(1-5) | 风险评分 | 等级 | 冲突放大 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: |
| RISK-AVAILABILITY | 可用性 | 3 | 4 | 12 | **P1** | 否 |
| RISK-FINANCIAL | 资损 | 1 | 5 | 5 | **P2** | 否 |
| RISK-COMPLIANCE | 合规 | 1 | 5 | 5 | **P2** | 否 |
| RISK-DATA | 数据 | 1 | 4 | 4 | **P2** | 否 |
| RISK-COMPATIBILITY | 兼容性 | 1 | 3 | 3 | **P2** | 否 |
## 风险缓解建议