需求采集与场景定义:用户故事、非功能约束、边界假设
需求采集不是简单的“用户说什么就记什么”,而是架构师将混沌的业务诉求转化为可验证、可设计的边界条件的起点。本章聚焦于如何通过用户故事捕获功能意图,通过非功能约束钉死质量底线,通过边界假设划定方案的设计半径。三者共同构成原型落地前的“需求资产清单”。
2.1 用户故事:从“谁-要什么-为什么”到可验证场景
用户故事不是需求文档,而是结构化沟通卡。标准模板为:
As a [角色], I want [能力] so that [价值]
架构视角:每个故事必须明确“角色”对应的系统参与方(外部Actor)、“能力”对应的系统接口边界、“价值”对应的验收断言。不满足这三项的故事应退回补充。
| 字段 | 写作要点 | 反例(模糊) | 正例(可验证) |
|---|---|---|---|
| 角色 | 系统外部实体(人或系统) | 用户 | 已登录的配送员 / 第三方支付网关 |
| 能力 | 一次完整的交互结果,非内部步骤 | 能查看订单 | 能按订单号查询并查看该订单的物流轨迹 |
| 价值 | 与角色目标直接关联的业务收益 | 方便管理 | 以减少人工核对快递单号的时间 |
常见陷阱:将系统内部子功能表述为用户故事。例如“系统在数据库中保存支付记录”——这是内部实现细节,应从故事中移除或转化为验收条件。
2.2 非功能约束:刻在架构里的质量门槛
非功能约束(NFR)决定了原型选型与技术栈边界。它必须可测量、可测试。以下为典型约束分类与示例:
| 维度 | 约束描述 | 测量指标 | 对方案的影响 |
|---|---|---|---|
| 性能 | 99%的查询响应时间≤500ms | P99 延迟 | 缓存层、线程模型、数据库索引设计 |
| 可靠性 | 核心链路可用性≥99.99% | 年故障时长≤52.56分钟 | 冗余部署、熔断降级、主从切换 |
| 安全 | 数据传输必须TLS 1.2+;密码存储必须bcrypt | 加密算法与密钥轮换周期 | API网关、证书管理、数据脱敏层 |
| 可维护性 | 新增一个非枚举枚举域不应修改已有代码 | 扩展点数量与修改量 | 策略模式、配置中心、插件化架构 |
落地技巧:在原型阶段,不必验证所有约束,但必须选出3个最高风险的约束(例如延迟、并发、数据一致性)作为原型验收的通过/失败指标。
2.3 边界假设:主动标注的设计半径
边界假设是需求阶段未明确、但设计方案必须依赖的环境条件。未被书面化假设是架构回滚的首要风险源。假设必须包含“若假设不成立,则方案失效”的应对策略。
常见边界假设分为三类:
- 外部依赖假设:第三方接口的响应时间、限频、可用时间段;例如“支付网关的TPS不低于1000/s”。
- 基础设施假设:中间件版本、JDK版本、操作系统参数;例如“Redis 6.x 支持 RBAC 权限控制”。
- 业务规则假设:并发场景下不出现互斥操作;例如“同一用户不会同时从两个终端发起结算”。
设计陷阱:不写假设的架构方案等于“承诺不存在的环境条件”。原型落地时,当外部依赖缺失或版本不符,将出现大量返工。必须在方案中显式列出假设清单,并给出每个假设的验证手段。
2.4 从故事到结构:用户故事到系统边界的映射
下图展示了如何通过用户故事提取系统边界、模块职责和信任链路。彩色节点代表不同的参与者/系统,标色箭头代表边界数据流。
2.5 三个必须处理的专题
2.5.1 信任链路:谁信任谁,用什么协议
在用户故事中,当系统与外部Actor交互时,必须定义信任模型。配送员通过Token认证(身份信任);第三方网关通过签名(数据完整性信任)。每个故事必须回答:“是否允许该角色直接访问?是否需要验证?验证失败时的系统行为是什么?”
原型实现匹配要点:在原型中信任链路不能“绕过”。即使走轻量方案,也需要模拟认证验证流程,例如使用mock签名校验中间件。否则原型与生产间的信任模型差异会导致关键安全漏洞遗漏。
2.5.2 数据流与控制流:从故事到技术落地
用户故事隐含了数据流动方向和控制权转移。以“配送员查询轨迹”为例:
- 数据流:移动端→API网关→轨迹服务→数据库(读)→返回
- 控制流:请求-响应同步模型;若轨迹未生成,则返回204 No Content
将所有故事的数据流与控制流合并后,即得到初始的系统架构分层图,包括入口层、业务层、数据层和基础设施层。
2.5.3 原型实现匹配要点
根据上述分析,原型阶段应优先实现以下关键路径:
- 至少2个核心用户故事的全链路(从 Actor 到存储再到返回)
- 1个非功能约束的验证场景(例如延迟边界)
- 1个边界假设的验证测试(例如第三方接口超时后的降级行为)
原型验收标准示例(本章相关):
验收条件1:配送员以有效Token发起轨迹查询,系统在500ms内返回完整轨迹数据(包含至少3个节点)。
验收条件2:当第三方支付网关在回调时返回签名校验失败,系统记录安全日志并返回HTTP 401。
验收条件3:假设“配送员查询时轨迹数据存在”不满足时(即数据库无记录),系统返回含错误原因的204,不崩溃。
2.6 风险清单
| 风险点 | 出现阶段 | 影响 | 缓解措施 |
|---|---|---|---|
| 用户故事未与Actor一一对应 | 需求阶段 | 多角色故事混杂,系统职责模糊 | 强制每个故事指定唯一Actor |
| 非功能约束不可测量 | 方案设计阶段 | 原型验收无标准 | 每个约束附件测量方法与工具 |
| 边界假设未记录 | 编码阶段 | 环境不一致导致功能异常 | 假设写入架构决策记录 |