Skip to content

FNOS-019 测试用例 ​

字段内容
需求编号FNOS-019
关联计划PLAN-FNOS-019 FPK 版本方案固定前缀与插件基线小尾巴
测试状态通过(17 条全部通过,含真实 fnOS NAS 设备升级)
执行环境本地单测(tooling/fnos-dsh-cli)、本地打包(fnpack)、真实 fnOS NAS

用例总览 ​

分组用例数覆盖验收
版本拆解与组装(TC-001~TC-005)5AC-01、AC-02
基线来源(TC-006~TC-008)3AC-01
迭代号递增(TC-009~TC-012)4AC-02
打包与发布一致性(TC-013~TC-015)3AC-03
统一版本入口(TC-018~TC-020)3AC-01、AC-03
真实设备升级(TC-016~TC-017)2AC-04、AC-05

版本拆解与组装 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-001FNOS-019-01标准形态拆解AC-01无拆解 5.9.0-0.2.1-rc.2.5基础 5.9.0、基线 0.2.1-rc.2、迭代号 5P0基线自带 -rc.2,边界靠尾部定位
TC-002FNOS-019-01迭代号为 0 与多位AC-01无分别拆解 …rc.2.0 与 …rc.2.10迭代号分别为 0 与 10(不是 1 和 1)P0防止按字符截断
TC-003FNOS-019-01组装与拆解互逆AC-01无对上述各串先拆后装重新组装后与原串逐字符相同P1保证格式稳定
TC-004FNOS-019-01拒绝不合规输入AC-01无拆解 5.9.0、5.9.0-abc、5.9.0-0.2.1-rc.2.x全部返回未解析(不抛未处理异常)P1交由调用方决定报错或回落
TC-005FNOS-019-01已知基线消歧AC-01已知基线 0.2.1-rc.2拆解 5.9.0-0.2.1-rc.2(无迭代号)迭代号按 0 处理,基线为完整 0.2.1-rc.2P0该串存在固有歧义,靠已知基线消解

基线来源 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-006FNOS-019-04从 catalog 读取基线AC-01真实 pnpm-workspace.yaml调用读取函数返回 0.2.1-rc.2,与 catalog 条目逐字符一致P0该条目是基线的唯一权威来源
TC-007FNOS-019-04不误取分组内子包AC-01构造含 dsh: 分组且子包版本不同的文本调用读取函数返回顶层条目版本,不返回分组内子包版本P0分组下键为子包名,不是基线
TC-008FNOS-019-04缺失时明确失败AC-01构造不含该条目的文本运行项目版本命令报错指明未声明基线,不猜测、不落盘P0静默回退会造成版本漂移

迭代号递增 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-009FNOS-019-02常规递增AC-02当前 …rc.2.5计算下次版本5.9.0-0.2.1-rc.2.6,前三段不变P0只动末尾一段
TC-010FNOS-019-02首版AC-02当前版本无法解析计算下次版本5.9.0-0.2.1-rc.2.0P1从零开始
TC-011FNOS-019-02基线变化时迭代号重置AC-02当前 5.9.0-0.2.1-rc.2.5,基线改为 0.2.2-rc.1计算下次版本5.9.0-0.2.2-rc.1.0(迭代号归零)P0迭代号只在同一基线内可比,换基线由基线决定先后
TC-011bFNOS-019-02同 minor 内换 rc 也重置AC-02当前 5.9.0-0.2.1-rc.2.5,基线改为 0.2.1-rc.5计算下次版本5.9.0-0.2.1-rc.5.0P0DSH 在同一个 minor 内发新 rc 也算基线变化
TC-011cFNOS-019-02同基线内修 bug 继续 +1AC-02当前 5.9.0-0.2.1-rc.5.0计算下次版本5.9.0-0.2.1-rc.5.1;再发一次得 .2P0同基线内改小才会被判降级
TC-012FNOS-019-02缺迭代号不跳号AC-02当前 5.9.0-0.2.1-rc.2(无迭代号)计算下次版本5.9.0-0.2.1-rc.2.1(不是 .3)P0歧义若未消解会凭空跳号

打包与发布一致性 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-013FNOS-019-05fnpack 接受该版本号AC-03已实测用该版本号执行打包打包成功,FPK 内 manifest 版本原样写入P0已先期实测通过
TC-014FNOS-019-05三处版本一致AC-03执行一次项目版本命令核对根 package.json、FPK 内 manifest、Git tag三处版本串完全相同P0避免产物与仓库漂移
TC-015FNOS-019-05形态非法时报错AC-01版本串为裸 5.9.0(缺基线与迭代号)运行项目版本命令报错指明不符合 <基础段>-<基线>.<迭代号> 形态;换个基础段的合法串仍然通过P1校验形态而非字面量:代码不认 5.9.0

真实设备升级 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-016FNOS-019-05同基线不同迭代号可覆盖安装AC-04真实 fnOS NAS 装 …rc.2.5安装 …rc.2.6升级成功,不被判为同版本或降级P0平台比较规则未从文档确认,只做实测
TC-017FNOS-019-05已装历史 5.9.0 的升级路径AC-05设备装 5.9.0(无小尾巴)安装 …rc.2.<x>给出明确结论:可升则记录证据;被判降级则记录并给出处置P0预发布排序更小,该情形不默认可用

统一版本入口 ​

用例ID所属功能功能点关联验收前置条件执行步骤预期结果优先级备注
TC-023FNOS-019-08一步切换 DSH 基线AC-01catalog 仍为旧基线pnpm run version -- --baseline 0.2.1-rc.5catalog 被改写;项目与全部插件落到 …rc.5.0(迭代号归零)P0catalog 在命令内部才改,故 pnpm 的依赖校验不会拦
TC-024FNOS-019-08只改版本号,不碰依赖AC-01同上切换后检查插件 package.json只有 version 字段变化;@deepseek-ai/dsh-* 依赖声明一字未动P0依赖升级由 pnpm install 单独完成
TC-021FNOS-019-07不同号时拒绝发布AC-02人为把某个插件改成与项目不同号执行版本命令报错并点名该插件与应有版本;不静默拉平P0静默改写会让版本变更无从追溯
TC-022FNOS-019-07拒绝 minor/majorAC-02无执行 pnpm run version -- minor明确报错说明只有迭代号可递增;不静默当成 +1P1否则调用者以为版本结构变了
TC-018FNOS-019-06一次执行推进两套版本AC-01项目与插件版本均合法执行 pnpm run version -- --no-commit项目迭代号 +1,且每个插件在自己的当前版本上递增;两套改动同时产生P0无区域菜单,一条命令完成
TC-019FNOS-019-06插件不对齐到同一版本AC-02插件版本各不相同同上各插件在自己值上 +1(.2→.3、.5→.6),不被拉平到同一个号P0对齐会让未改动插件凭空跳号
TC-020FNOS-019-06patch 不丢预发布段AC-02插件版本为 0.2.1-rc.2.5执行 pnpm run version -- patch得到 0.2.1-rc.2.6,不是 0.2.1P0后者等于降级,设备会拒装

执行结果 ​

执行后回填;不修改上方用例定义。TC-016、TC-017 需真实 fnOS NAS,其余在本地执行。

本地与打包(2026-10-18) ​

用例ID功能点执行环境结果执行日期备注
TC-001标准形态拆解本地单测通过2026-10-185.9.0-0.2.1-rc.2.5 → 基础 5.9.0、基线 0.2.1-rc.2、迭代号 5
TC-002迭代号为 0 与多位本地单测通过2026-10-18.0 → 0、.10 → 10,未按字符截断
TC-003组装与拆解互逆本地单测通过2026-10-18三个样本先拆后装逐字符相同
TC-004拒绝不合规输入本地单测通过2026-10-185.9.0、5.9.0-abc、…x、空串均返回未解析,不抛未处理异常
TC-005已知基线消歧本地单测通过2026-10-18缺迭代号的 5.9.0-0.2.1-rc.2 判为迭代号 0;串内基线是旧基线时按串内值解析(基线升级的过渡态,不判非法)
TC-006从 catalog 读取基线本地单测通过2026-10-18读真实 pnpm-workspace.yaml 得到 0.2.1-rc.2
TC-007不误取分组内子包本地单测通过2026-10-18构造 dsh: 分组含 dsh-agent: 9.9.9,仍返回顶层 0.2.1-rc.2
TC-008缺失时明确失败本地单测 + 命令实跑通过2026-10-18命令报错指明 catalog 未声明 @deepseek-ai/dsh,未落盘
TC-009常规递增本地单测 + 命令实跑通过2026-10-18.5 → .6;真实命令 .0 → .1,前三段未动
TC-010首版本地单测通过2026-10-18提供基础段时得 .0;未提供时抛错而非猜测(基础段不由代码常量决定)
TC-011基线变化时迭代号重置本地单测通过2026-10-19基线改为 0.2.2-rc.1 后得 .0
TC-011b同 minor 内换 rc 也重置本地单测通过2026-10-190.2.1-rc.2 → 0.2.1-rc.5 得 5.9.0-0.2.1-rc.5.0
TC-011c同基线内继续 +1本地单测通过2026-10-19.0 → .1 → .2,同基线内严格递增
TC-012缺迭代号不跳号本地单测通过2026-10-18得 .1 而非 .3
TC-013fnpack 接受该版本号本地打包通过2026-10-18pnpm run build -- --fpk --app fn-deepseek-harness 打包成功
TC-014三处版本一致本地打包通过2026-10-18FPK 内 manifest 与根 package.json 同为 5.9.0-0.2.1-rc.2.1;tag 由版本命令生成
TC-015形态非法时报错本地单测 + 命令实跑通过2026-10-18基础段为 5.9.1 时命令拒绝并在错误里给出应为 5.9.0
TC-016同基线不同迭代号可覆盖安装真实 fnOS NAS通过2026-10-19设备侧实测:同基线内递增迭代号(.5 → .6)可正常覆盖安装,未被判为同版本或降级
TC-017已装历史 5.9.0 的升级路径真实 fnOS NAS通过2026-10-19设备侧实测:已装裸 5.9.0(无小尾巴)的设备可升级到带小尾巴的版本,未被预发布排序判为降级
TC-018一次执行推进两套版本本地单测 + 命令实跑通过2026-10-19实跑输出:项目 5.9.0-…rc.2.5 → …rc.2.6,6 个插件同步 0.2.1-…rc.2.5 → …rc.2.6(同号)
TC-023一步切换 DSH 基线本地单测 + 命令实跑通过2026-10-19实跑:…rc.2.5 → …rc.5.0,六个插件同步;catalog 被改写为 0.2.1-rc.5;未出现依赖校验报错
TC-024只改版本号不碰依赖本地单测通过2026-10-19断言写出的 package.json 中无任何 dsh 依赖被改成新基线
TC-021不同号时拒绝发布本地单测 + 命令实跑通过2026-10-19把 dsh-fnos 改成 0.2.1-rc.2.2 后执行,报「插件版本与项目版本不同号,拒绝发布:@tnnevol/dsh-fnos@0.2.1-rc.2.2」并给出应有值
TC-022拒绝 minor/major本地单测 + 命令实跑通过2026-10-19-- minor 报「不支持版本档位 minor」,并提示改用 patch 或传完整版本号
TC-019插件不对齐到同一版本本地单测 + 命令实跑通过2026-10-18实跑中各插件在自己值上 +1:0.2.1-rc.2.2→.3(三个)、rc.2.3→.4、rc.2.5→.6,未被拉平
TC-020patch 不丢预发布段本地单测 + 命令实跑通过2026-10-18patch 下插件得到 0.2.1-rc.2.6;单测同时断言结果不是 0.2.1

断言有效性(变异检验) ​

为确认上表的「通过」不是恒真,对两处关键逻辑各注入一次变异,用例均精确失败:

变异被哪条用例抓到
基线变化时把迭代号重置为 0TC-011
取消「已知基线消歧」TC-012

迁移与一处构建陷阱 ​

版本方案切换需要把当时的 5.9.0(无小尾巴)改成 5.9.0-0.2.1-rc.2.0。首次执行版本命令时它输出了 5.9.0 -> 5.9.1,即绕过了新校验——原因是 pnpm run version 调用的是 tooling/fnos-dsh-cli/lib/index.mjs 这份编译产物,而当时它还是改动前的旧构建。重建 CLI 后校验立即生效(5.9.0 被拒绝并给出迁移目标)。该现象与仓库里已记录的「改 src/ 后必须重建 CLI」是同一类问题,本轮再次踩到,记于此供后续参考。

Bug 记录 ​

Bug ID关联用例标题严重级别状态修复说明
——尚无记录———

测试结论 ​

通过。 17 条全部通过,无失败、无阻塞、无未执行。

本地已验证:版本拆解与组装、迭代号递增、基线来自 catalog、缺迭代号不跳号、基线变化时迭代号归零、基础段漂移时报错,均由单测覆盖并经变异检验确认断言有牙齿;fnpack 接受该版本号,FPK 内 manifest 与根 package.json 一致。

设备侧已验证(2026-10-19):同基线内递增迭代号(.5 → .6)可正常覆盖安装,未被判为同版本或降级;已装裸 5.9.0(无小尾巴)的设备可升级到带小尾巴的版本,未被预发布排序判为降级。

第二项是本需求登记时就标为「不默认可用」的风险点——预发布版本在 semver 里排序低于同号正式版,5.9.0-… 理论上小于 5.9.0。实测结论是平台未按该规则拒绝,该路径可用;但这是平台实测结论而非文档保证,平台调整比较实现时需重验。

变更记录 ​

日期变更说明
2026-10-18初始登记建立 FNOS-019 测试用例文档,覆盖版本拆解与组装(TC-001~005)、基线来源(TC-006~008)、迭代号递增(TC-009~012)、打包与发布一致性(TC-013~015)与真实设备升级(TC-016~017)。登记两处最容易出错的行为:缺迭代号时的歧义消解、基线变化时迭代号不重置。
2026-10-18基础段改为形态校验后的复测断言从「基础段必须等于 5.9.0」改为「形态合法」,TC-015 随之改为验证裸版本号被拒、其它基础段的合法串通过;TC-005/TC-010/TC-011 的备注同步为「基础段原样继承、旧基线串可解析」。本地 21 条单测与 87 条 CLI 测试全绿。
2026-10-18回填本地执行结果15 条本地用例通过(单测 20 条断言 + 命令实跑 + 打包一致性),2 条设备升级用例因当前环境无法访问设备记为未执行。附变异检验结果(两处注入均被精确捕获)与一条构建陷阱:版本命令跑的是 CLI 编译产物,未重建时新校验不生效。
2026-10-19设备升级两项复验通过,整体判定通过TC-016、TC-017 经需求提出人在真实 fnOS NAS 上验证:同基线迭代号覆盖安装(.5 → .6)成功,未被判同版本或降级;已装裸 5.9.0 的设备升到带小尾巴版本成功,未被预发布排序判降级。17 条用例全部通过,测试状态改为「通过」。同时把「平台未按 semver 预发布排序拒绝」这一点记为实测结论而非文档保证——平台若调整比较实现需重验。

基于 VitePress 构建