第 5 天:实操——动手写一份七要素完整、验收可量化的 spec

SDD+Harness 四周学习计划 · Week 1 · Day 5

Posted by LSG on August 14, 2026

SDD + Harness 四周学习计划 · Week 1 · Day 5(认知打底第 5 课 / 全计划第 1 个实操日)

今日主题:动手写——把 Day 1–4 学到的压成一次动作,产出你本周的唯一实物交付:一份七要素完整、验收标准可量化的 spec

建议用时:90 分钟(实操日可稍多)| 前置:Day 3 的《Day3-七要素骨架卡.md》草稿

输出物:一份完整 spec(建议命名 Day5-spec-<你的功能名>.md)+ 一张自查清单——这份 spec 就是 Day 7 周复盘与 Day 20 端到端交付的核心原料


0. 一句话剧透

前四天你学会了「什么样的 spec 合格」和「三种方式怎么选」。今天不再讲,只写——今天结束时你要交出一份真正的 spec。

标准就一条:把这份 spec 交给一个 AI(或交给三天后的你),它应该能独立做到「不跑偏、可验收」。 如果它还做不到,说明你写的不是 spec,是又一份模糊需求。

今天没有「标准答案作业」,只有一份你自己的活物。写不好很正常,Day 7 会拿 checklist 帮你查,Day 20 还会拿它端到端交付一次。 你先写,才有的改。


1. 今日目标(学完你能做到)

  • 独立产出一份七要素齐全的 spec(背景/目标/用户故事/验收标准/非目标/边界条件/验证方式一个不缺)
  • 其中每条验收标准都能转成一句可自动化断言(Given-When-Then + 数字),没有任何”形容词验收”
  • spec 里不混入 HOW(划掉 Redis/索引/重构/用某库……这类词)
  • 能站在 AI 视角反向通读,主动补上至少 3 处它可能”自由发挥”的空白
  • 完成一张自查清单并如实勾选(含没做到项——如实标注比假装全过更值钱)

今日目标 = 评估标准第 1 条(七要素完整、验收可量化)的实操版。只要求你写完,不要求你写对满分——”写得不够”在 Day 7 才有意义。


2. 学习动线(实操专用时间盒)

实操日按《研究式学习手册》4.3「实验三件套」走:预期(spec 写完长什么样)→ 观测(我真写完时哪里卡住)→ 复盘(卡住的点是什么新认知)

步骤 内容 用时
1 选题:选定功能,写一行「目的摘要」 10 分钟
2 先列要素骨架(尽量不查讲义) 15 分钟
3 逐要素填充 & 形容词翻成可测句(含 3 句小练习) 30 分钟
4 清理 HOW + AI 视角反向通读补漏 15 分钟
5 自查清单 + 收尾命名存盘 10 分钟
观测与记录 边写边记「我在哪一步最卡」,写进文末 全程

卡住 ≠ 失败。研究手册说得很直白:失败的实操是最肥的研究素材。 今天最卡的地方,就是你 Day 7 复盘最该写进学习笔记的地方。


3. 动笔前:选一个”够小、够真、够可测”的功能

3.1 选题三原则

原则 说明 反例
够小 1–2 天能做完的功能,别选跨模块大需求 “重构整个订单模块” ❌
够真 你手上真实要做的 / 真实遇到过的,才能写出真边界 随便编的”智能聊天系统” ❌
够可测 效果能量化(耗时/大小/成功率/覆盖率),别选纯主观体验 “让界面更好看” ❌

参考候选池(若一时想不出):登录验证码、头像上传、搜索分页、导入导出、消息已读回执、接口限流……拿你 Day 3 骨架卡里那个微需求扩写最省力。

3.2 先写一行「目的摘要」(第 0 稿,5 分钟内)

在动七要素之前,用一句话讲清你的 spec 是谁、改变什么、怎么算成功。它帮你随时拉回方向:

1
2
3
一句话摘要(模板):
给 <角色> 增加/优化 <能力>,以便 <价值>;
成功判据(初步):<一个可量化的"做到了"样子>。

先写”成功判据”,这是整份 spec 的北极星。 后面每一要素都要朝它收敛。


4. 写作流程六步(今天的主菜)

4.1 第一步:先列骨架,不填细节(回忆优先)

合上 Day 3 讲义,凭记忆列出七要素的标题和每个要素的一句话要点(2–3 分钟草稿)。列完再翻讲义对照补漏——这一步在训练你的提取记忆,不是在抄。

4.2 第二步:逐要素填充(按七要素顺序)

参照 Day 3 每要素的「试金石句」逐格填:

要素 填之前问自己 试金石(写完自查)
背景 现状数据?代价?(给 1–2 个数字) 删掉它还知道”非做不可”吗?
目标 这是结果还是动作? 是 outcome,不是 output
用户故事 谁、何时、为何?2–3 条即可 每条能对应到至少一条验收吗?
验收标准 能转成自动化测试吗? 每个形容词都被我换成数字了吗?
非目标 我有没有”顺手做点啥”的念头? 至少 3 条明确”不做/不改/不重构”
边界条件 空/极限/超时/并发/格式错会怎样? 删掉它 AI 会不会在这自由发挥?
验证方式 我拿什么证明? 每条验收都有取证手段吗?

4.3 第三步:把”形容词”翻成”可测句”(含 3 句小练习)

形容词是验收标准死敌(Day 3)。做个小练习,顺手把 3 句常见”模糊验收”翻成可测句,练手答案在文末附录 A:

# 模糊写法(形容词) 你来翻成可测句
“头像上传要快” 已示范:>5MB 的图在 4G 下 ≤3s 完成上传并返回 URL(示例,非唯一答案)
1 “搜索要很快”
2 “错误提示要友好”
3 “系统要能撑住并发”

翻译工具包(挑合适的用):

  • Given-When-Then:给定 <数据/前置>,当 <动作>,则 <可观测结果 + 数字>
  • 给数字:阈值、上限、时间、百分比——模糊词后面一定跟一个数
  • 给判定规则:什么算”通过/不通过”,白纸黑字写下来
  • 若某条实在无法量化 → 说明它根本不是验收,是”感受”,删掉或降级成非目标

4.4 第四步:清扫 HOW

把 spec 里所有”技术实现词”圈出来:缓存、索引、重构、用 X 库改表结构拆微服务……凡是 AI 换个技术栈 spec 就变形的句子,划掉或挪走。 技术方案留给 plan.md(本周你不写 plan,只保证 spec 里干净)。

4.5 第五步:AI 视角反向通读(最值钱的一步)

把身份切换到”一个听话但爱自由发挥的 AI”:逐句问”这里没写清,我会怎么猜?” 每猜出一个空白,就补一处。最少补 3 处。

1
2
3
4
我写完之后假装是 AI 通读时,最容易自由发挥的 3 个空白:
① ______(例:'上传成功'的提示文案?我没写 → 补进验收或说明"提示不在此 spec 范围")
② ______
③ ______

4.6 第六步:收尾

  • 要素齐了没?编号规范(AC-1/AC-2…)?格式能一眼扫出七要素?
  • 保存为 Day5-spec-<你的功能名>.md,放本目录。
  • 写一句「交付说明」给 Day 7 的自己:我这次最没把握的是哪个要素?

5. 自查清单(写完后勾;Day 7 会复用同一张)

这一张清单就是 Day 7 周复盘要用来查你 spec 的那张。今天先自查一遍,如实勾;有 ✗ 的列出来,是 Day 7 的讨论点,不是今天的失败。

结构(六项)

  • 七要素标题齐全、顺序合理、易扫读
  • spec 只写 WHAT,无 HOW(可换技术栈仍成立)
  • 有编号约定(如背景 B / 目标 G / 故事 US / 验收 AC)

验收(最重要)

  • 每条 AC 都是 Given-When-Then + 可量化断言,零形容词
  • 每条 AC 都能直接变成一句自动化测试
  • 至少覆盖:主路径成功 + 一条失败路径

防漂移

  • 非目标 ≥3 条
  • 边界条件覆盖:空结果 / 极限数据 / 超时或失败 / 并发中的至少 3 类
  • 验证方式与 AC 一一对应(能指出用哪个脚本/指标证明哪条 AC)

方向

  • 我(或 AI)拿到它能讲清:做给谁、改变什么、怎么算成功
  • 我”顺手的念头”都被写进非目标,没留在脑子里

诚实项(Day 7 用)

  • 我最有把握的要素:;最没把握的要素:;没写出来的技术顾虑:__

6. 一份”达标样张”(示范,别照抄——用你自己的场景)

拿「用户头像上传」做示范(从 Day 3 的”优化订单查询”错开,避免你照着抄)。篇幅刻意精简,重点看”验收/边界/非目标”怎么写得可测。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
## Spec:用户头像上传(资料页)

### 1. 背景
注册用户约 1.2 万,目前无任何头像入口;评论与回复区展示默认灰头像,
运营反馈辨识度低、易误认账号。上周调研 200 人中 41% 表示"有头像入口会提高使用意愿"。

### 2. 目标
支持用户上传并保存头像,评论/资料页即时展示;单次上传 ≤5MB;
全部文件持久化保留,接口契约稳定。技术方案(存储介质/压缩库)留待 plan 阶段决定。

### 3. 用户故事
- 作为普通用户,我想上传一张头像,以便评论与资料页能显示我的样子。
- 作为老用户,我想随时更换头像,以便标识我的最新身份。
- 作为运营,我不想在无审核下看到超规/超大文件泛滥,以便控制存储与风控成本。

### 4. 验收标准
- AC-1(主路径):Given 已登录用户选择一张 ≤5MB 的 jpg/png/webp,When 提交上传,
  Then 接口 200 且返回稳定 URL,页面刷新后头像更新,全流程 ≤3s(4G 网络、样例集 50 张)。
- AC-2(成功判定):Given 上传返回的 URL,When 访问该 URL,Then 返回图像可正常解码
  且宽高不超过 1024×1024(超过则被等比压缩后落库)。
- AC-3(非法输入):Given 文件 >5MB / 非白名单格式 / 0 字节,When 上传,
  Then 返回 4xx + 明确错误码,不落任何文件。
- AC-4(鉴权):Given 未登录用户,When 调上传接口,Then 返回 401,不执行上传。
- AC-5(回归):Given 既有资料页用例,When 执行回归,Then 全部通过。

### 5. 非目标
- 不做 gif/动图与视频头像。
- 不做原图下载/原图查看入口。
- 不迁移存量"默认头像"方案,不改其它模块。
- 不接第三方 CDN / 不做头像内容自动审核(本期仅做格式与大小限制)。

### 6. 边界条件
- 断网/超时:上传中断时前端可重试 ≤2 次,服务端不留半截文件。
- 并发:同一账号连续快速提交时,以最后一次为准,不发生重复入库或错乱。
- 文件名冲突:存储键不与历史文件冲突,覆盖行为以"新头像替换旧头像"为准。
- 磁盘/存储异常:写入失败返回 5xx 明确错误,不静默成功。

### 7. 验证方式
- 样例集 50 张(各格式/各尺寸/超限样本各若干)跑通 AC-1/2/3,输出通过表。
- 自动化单测:AC-4(401)、文件键冲突、超时重试。
- 回归集:资料页既有用例。上线后观察 7 天上传成功率与 P95 耗时监控。

对着它检查你自己的 spec:它的”快”变成了 ≤3s+4G+样例集;”友好”变成了明确错误码;”撑住并发”变成了最后一次为准+防重复入库——每一个模糊词都被翻译成了可测条件。你的 spec 也应该能这样逐句解释。


7. 今日打卡输出

  1. 主产出Day5-spec-<你的功能名>.md(本目录)。
  2. 三句话交付说明(写在 spec 文末或单独一行):
    • 我选的场景是:__;它够小/够真/够可测吗(各自打勾)?
    • 我全程最卡的一步是:__(对应研究手册:这是最有价值的研究素材)。
    • 我最有把握 / 最没把握的要素分别是:__ / __。
  3. 自查清单已勾(第 5 节那张,如实标注 ✗ 项)。

全部完成 = 本周实物交付到手。Day 7 会拿同一张 checklist 复查它、并把它改写成第一篇正式学习笔记的骨架。


附录 A:形容词→可测句练习参考答案

翻译没有唯一答案,够”可转成断言”就算对。这里给的都是”把它变成一条 Given-When-Then”的思路:

  1. “搜索要很快” → 给定含 300 万行的订单表,当输入关键词回车并加载第 10 页,则首屏响应 ≤500ms(P95,同规格测试机)。→ 或拆成”接口 P95 ≤500ms + 前端从点击到首条结果 ≤800ms”。
  2. “错误提示要友好” → 当输入非法时,则返回人类可读的错误文案(错误码 + 一句话解释),且不泄露堆栈/内部信息;文案通过 i18n 键引用,长度 ≤60 字。(把”友好”翻译成”可断言的行为”:有文案、无堆栈、有码。)
  3. “系统要能撑住并发” → 给定 500 个并发用户同时提交上传,当持续 5 分钟,则请求失败率 ≤1%、P95 耗时 ≤5s,且无 5xx 之外的数据错误。(给并发数、时长、失败率三个数字。)

评分标准:每条答案只要包含”前置 + 动作 + 带数字的可观测结果”,就算通过;数字可以不是最终值,但必须存在,Day 7 复查时再校准量级。


本工作纸依据《SDD+Harness四周学习计划.md》Day 5 主题编制。演示样张仅示范写法与达标形态,请勿照抄;正式学习请结合真实需求完成。整理日期:2026-09-08