功能性需求与非功能性需求:性能、安全与可用性
做网站或 SaaS 时,很多人把"需求"等同于"功能列表",却漏掉了定义"系统做得怎么样"的那部分。IIBA 的 BABOK 指南明确区分了两类需求:功能性需求描述系统必须做什么,而非功能性需求(BABOK 中也称质量需求)描述系统在多大程度上满足这些功能。
两类需求的区别
| 维度 | 功能性需求 | 非功能性需求 |
|---|---|---|
| 回答的问题 | 系统做什么 | 系统做得怎么样 |
| 例子 | 用户能注册、能支付、能导出报表 | 页面 3 秒内加载、数据加密存储、可用性 99.9% |
| 可测性 | 通常可明确验收 | 需要量化指标,如响应时间、并发数 |
| 常见来源 | 用户故事、业务流程 | 性能、安全、合规、可用性约束 |
IEEE 29148 等软件工程标准也采用类似划分:功能需求定义行为,质量需求定义行为应达到的程度。
常见的非功能性需求类型
- 性能:响应时间、吞吐量、并发用户数,例如"API P95 响应 < 200ms"。可参考Core Web Vitals来量化前端体验。
- 安全:认证授权、数据加密、审计日志、合规要求(如 GDPR),可结合网站安全最佳实践落地。
- 可用性:正常运行时长占比(SLA),例如 99.9% 可用性,对应SLO 与错误预算。
"99.9%"听起来只是少一个 9,实际可用时间差别很大:
| 可用性 | 年停机时间 | 月停机时间 | 适合场景 |
|---|---|---|---|
| 99% | 87.6 小时 | 7.3 小时 | 内部工具、非关键系统 |
| 99.9% | 8.76 小时 | 43 分钟 | 大多数商业站点 |
| 99.95% | 4.38 小时 | 21 分钟 | 交易型网站 |
| 99.99% | 52.6 分钟 | 4.3 分钟 | 支付、核心基础设施 |
写 SLA 时,先回答"业务能容忍多久不可用",再倒推技术方案——99.99% 通常意味着多可用区 + 自动故障转移,成本和复杂度都不是中小站点随手能承担的。
- 可扩展性:流量增长时能否水平扩展,常见于技术栈评估环节。
- 可维护性与可访问性:代码可维护、无障碍(a11y)达标。
为什么非功能性需求总被忽略
非功能性需求没有"按钮"可以点,容易被当成"以后再说"。等上线才发现慢、不安全、撑不住流量,返工成本极高。写PRD时,应给每类非功能性需求写下"可度量的验收标准",而不是"系统要快、要安全"这类模糊描述。
如何在 PRD 中写清楚
- 量化:把"性能好"改成"首屏 LCP < 2.5s、API P95 < 300ms"。
- 场景化:注明峰值场景,例如"支持 500 并发、单日 10 万请求"。
- 给验收方法:写明用什么工具测、阈值多少,方便 QA 与验收标准对齐。
- 定优先级:并非所有质量属性都同等重要,用需求优先级框架取舍。
举个具体的写法对照:
| 模糊写法 | 可度量写法 |
|---|---|
| 系统要快 | 首页 LCP < 2.5s(移动端中位数) |
| 要撑得住流量 | 促销峰值 1,000 并发、单日 100 万请求,P95 延迟 < 300ms |
| 数据要安全 | 传输 TLS 1.2+,静态加密,敏感字段脱敏 |
| 要可靠 | 月可用性 ≥ 99.9%,每季度做一次故障演练 |
权衡与取舍
性能、安全、成本常常此消彼长:更强的加密与审计会增加延迟,更高的冗余会提高成本。BABOK 的价值在于把"取舍"显性化——每条非功能性需求都记录其约束与折中,让团队在开发前而非上线后做决定。
质量属性要持续验证
非功能性需求应当贯穿整个开发周期,而不是写进 PRD 就结束:性能在联调期就要做压测,安全在编码期就要走查,可用性在上线前就要演练。把这些质量属性纳入持续集成与监控告警,让它们像功能需求一样被持续验证,才不会在发布后才发现问题。对已经上线的产品,还可以用真实流量数据(如响应时间分位、错误率)反向校准最初设定的阈值,让质量目标随业务增长而演进。
一个被"以后再说"拖垮的例子
某电商团队上线前 PRD 只写了功能清单,"并发支撑"一栏写的是"需要稳定"。双 11 当天首页接口 P95 延迟从 300ms 涨到 6 秒,订单页超时率飙升,最终通过限流保住了支付链路,但错过了大量加购转化。复盘时发现:如果当时把"峰值 5,000 并发、P95 < 300ms"写成可度量的验收标准,压测会在联调期就暴露瓶颈,而不是等到大促当天。
非功能性需求的代价在于:它们不会在上线当天"报错",只会以缓慢、累积的方式变成事故。这也是为什么建议把性能、安全、可用性目标写进 CI 的自动化检查里,而不是只留在 PRD 文档中。
参考:IEEE 29148 软件需求工程标准 https://standards.ieee.org/ieee/29148/6710/;IIBA BABOK 指南 https://www.iiba.org/business-analysis-body-of-knowledge/
16IDC 观察
对中小网站来说,非功能性需求不必一上来就"全都要"。建议先锁定 3-5 条关键质量属性(通常是性能与安全),写成可度量的标准;随着业务增长再补充可扩展性与可用性目标。真正区分成熟团队与草台班子的,往往不是功能多少,而是"做得怎么样"有没有被定义清楚。
原文来源:https://www.iiba.org/business-analysis-body-of-knowledge/