需求采集与场景定义:用户故事、非功能约束、边界假设

需求采集不是简单的“用户说什么就记什么”,而是架构师将混沌的业务诉求转化为可验证、可设计的边界条件的起点。本章聚焦于如何通过用户故事捕获功能意图,通过非功能约束钉死质量底线,通过边界假设划定方案的设计半径。三者共同构成原型落地前的“需求资产清单”。

2.1 用户故事:从“谁-要什么-为什么”到可验证场景

用户故事不是需求文档,而是结构化沟通卡。标准模板为:
As a [角色], I want [能力] so that [价值]

架构视角:每个故事必须明确“角色”对应的系统参与方(外部Actor)、“能力”对应的系统接口边界、“价值”对应的验收断言。不满足这三项的故事应退回补充。

字段写作要点反例(模糊)正例(可验证)
角色系统外部实体(人或系统)用户已登录的配送员 / 第三方支付网关
能力一次完整的交互结果,非内部步骤能查看订单能按订单号查询并查看该订单的物流轨迹
价值与角色目标直接关联的业务收益方便管理以减少人工核对快递单号的时间

常见陷阱:将系统内部子功能表述为用户故事。例如“系统在数据库中保存支付记录”——这是内部实现细节,应从故事中移除或转化为验收条件。

2.2 非功能约束:刻在架构里的质量门槛

非功能约束(NFR)决定了原型选型与技术栈边界。它必须可测量、可测试。以下为典型约束分类与示例:

维度约束描述测量指标对方案的影响
性能99%的查询响应时间≤500msP99 延迟缓存层、线程模型、数据库索引设计
可靠性核心链路可用性≥99.99%年故障时长≤52.56分钟冗余部署、熔断降级、主从切换
安全数据传输必须TLS 1.2+;密码存储必须bcrypt加密算法与密钥轮换周期API网关、证书管理、数据脱敏层
可维护性新增一个非枚举枚举域不应修改已有代码扩展点数量与修改量策略模式、配置中心、插件化架构

落地技巧:在原型阶段,不必验证所有约束,但必须选出3个最高风险的约束(例如延迟、并发、数据一致性)作为原型验收的通过/失败指标。

2.3 边界假设:主动标注的设计半径

边界假设是需求阶段未明确、但设计方案必须依赖的环境条件。未被书面化假设是架构回滚的首要风险源。假设必须包含“若假设不成立,则方案失效”的应对策略。

常见边界假设分为三类:

  1. 外部依赖假设:第三方接口的响应时间、限频、可用时间段;例如“支付网关的TPS不低于1000/s”。
  2. 基础设施假设:中间件版本、JDK版本、操作系统参数;例如“Redis 6.x 支持 RBAC 权限控制”。
  3. 业务规则假设:并发场景下不出现互斥操作;例如“同一用户不会同时从两个终端发起结算”。

设计陷阱:不写假设的架构方案等于“承诺不存在的环境条件”。原型落地时,当外部依赖缺失或版本不符,将出现大量返工。必须在方案中显式列出假设清单,并给出每个假设的验证手段。

2.4 从故事到结构:用户故事到系统边界的映射

下图展示了如何通过用户故事提取系统边界、模块职责和信任链路。彩色节点代表不同的参与者/系统,标色箭头代表边界数据流。

图:用户故事到系统边界映射结构 配送员(Actor) 第三方支付网关 故事:查询配送轨迹 As 配送员, want 查询轨迹 故事:发起支付回调 As 支付网关, want 回调通知 配送查询服务 支付回调服务 信任边界 时间戳+签名 信任边界 MD5+白名单 非功能约束注入点 每个系统服务都必须承载 latency≤500ms, availability≥99.99%, integrity校验 边界假设示例 假设:第三方支付网关接口 P99 ≤ 700ms;若不成立,方案需引入本地排队与异步重试

2.5 三个必须处理的专题

2.5.1 信任链路:谁信任谁,用什么协议

在用户故事中,当系统与外部Actor交互时,必须定义信任模型。配送员通过Token认证(身份信任);第三方网关通过签名(数据完整性信任)。每个故事必须回答:“是否允许该角色直接访问?是否需要验证?验证失败时的系统行为是什么?”

原型实现匹配要点:在原型中信任链路不能“绕过”。即使走轻量方案,也需要模拟认证验证流程,例如使用mock签名校验中间件。否则原型与生产间的信任模型差异会导致关键安全漏洞遗漏。

2.5.2 数据流与控制流:从故事到技术落地

用户故事隐含了数据流动方向和控制权转移。以“配送员查询轨迹”为例:

  • 数据流:移动端→API网关→轨迹服务→数据库(读)→返回
  • 控制流:请求-响应同步模型;若轨迹未生成,则返回204 No Content

将所有故事的数据流与控制流合并后,即得到初始的系统架构分层图,包括入口层、业务层、数据层和基础设施层。

2.5.3 原型实现匹配要点

根据上述分析,原型阶段应优先实现以下关键路径:

  1. 至少2个核心用户故事的全链路(从 Actor 到存储再到返回)
  2. 1个非功能约束的验证场景(例如延迟边界)
  3. 1个边界假设的验证测试(例如第三方接口超时后的降级行为)

原型验收标准示例(本章相关):

验收条件1:配送员以有效Token发起轨迹查询,系统在500ms内返回完整轨迹数据(包含至少3个节点)。
验收条件2:当第三方支付网关在回调时返回签名校验失败,系统记录安全日志并返回HTTP 401。
验收条件3:假设“配送员查询时轨迹数据存在”不满足时(即数据库无记录),系统返回含错误原因的204,不崩溃。

2.6 风险清单

风险点出现阶段影响缓解措施
用户故事未与Actor一一对应需求阶段多角色故事混杂,系统职责模糊强制每个故事指定唯一Actor
非功能约束不可测量方案设计阶段原型验收无标准每个约束附件测量方法与工具
边界假设未记录编码阶段环境不一致导致功能异常假设写入架构决策记录