methodology · F · P1 · active

功能与非功能需求分类

Functional and Nonfunctional Requirements
P1基础verified方法论 methodology方法F · 概念与需求质量属性GL-METHOD · 方法论层

§1摘要与结论

TL;DR · 一句话结论

把软件需求区分为功能需求(软件须执行的功能与行为)与非功能需求(功能之外的质量约束与属性),并另行识别技术约束与服务质量约束的分类方法。

别名:functional requirements、nonfunctional requirements、功能需求、非功能需求、质量约束 | 英文:Functional and Nonfunctional Requirements | 类型:方法 / classification

§2局部关系图

功能与非功能需求分类 的 1-2 跳邻域关系图依据推导(derives_from):规格说明落实可验证与可追溯特性前置依赖(prerequisite):获取到的需要需经规格化形成信息项前置依赖(prerequisite):需求分类是规格说明的结构化前提前置依赖(prerequisite):规格化后按属性与优先级管理需求案例印证(case_instance):印证:可机器解析的需求规约契约实现(implements):追溯与影响分析落地需求规格说明实现(implements):需求属性与追踪关系在平台中落地实现(implements):以规格质量特性识别需求技术债组合(combination):追溯链路为需求债度量提供覆盖缺口案例印证(case_instance):印证:requires 工件 DAG 建立需求到实现可追溯链功能与非功能需求分类功能与非功能需求分类(MTH-F-05)需求规格说明需求规格说明(MTH-F-04)OpenSpec 规约驱…OpenSpec 规约驱动解析(CAS-X-14)需求获取需求获取(MTH-F-02)需求可追溯性与影响分析需求可追溯性与影响分析(TEC-F-01)需求技术债识别与度量需求技术债识别与度量(TEC-F-02)需求属性与优先级需求属性与优先级(MTH-F-06)需求可追溯性与可验证性需求可追溯性与可验证性(ESS-F-03)
前置依赖实现依据推导案例印证对比冲突
以本节点为中心,静态内联 1–2 跳邻域:内环 1 个直接邻接、外环 6 个二跳节点,共 8 个节点;连线按边类型着色(六类配色见下)。构建期计算,无运行期脚本。

§3原理 · 为什么

需求若只以功能列表呈现,质量诉求就会被系统性忽略。功能需求描述系统做什么,非功能需求描述系统在做这些事时应达到什么水平与受何限制,二者是正交的:功能不决定质量属性的水平,架构选择才决定各质量属性的相对达成度。把质量诉求单列并显式表达,才能在架构设计前形成可操作的约束,而不是在交付时才抱怨系统慢、难改或不可用。技术约束(如必须遵循的接口、平台或法规)与服务质量约束也需单独识别,它们往往不可协商,却容易被淹没在功能描述中。分类的目的不是贴标签,而是确保各类需求都获得相应的分析与验证手段。分类还揭示了功能的实现方式会显著改变其质量代价,因此同一功能的不同设计选择需要与质量诉求一并权衡。分类之后,团队才能在架构讨论中把功能问题与质量权衡分开处理,使决策更清晰:功能回答系统做什么,质量与约束回答它应当做到何种程度、受何限制。分类也提醒团队,质量诉求需要在需求阶段就被表达,而非留待架构阶段补齐,否则选择余地已被大幅压缩。

§4机制 · 如何运作

分类通过两个维度运作:一是「行为与属性」,把系统要完成的动作与动作应满足的质量水平分开;二是「可协商与强制」,把可权衡的功能与难以妥协的约束分开。功能需求通常以行为与输入输出描述,非功能需求则需转化为可操作、可度量的表述,否则「系统应易用」一类陈述无法验证也无法据以设计。分类之后,功能需求交由功能设计与测试覆盖,非功能需求交由架构决策与专项度量覆盖,技术约束则作为设计前提管理。识别时应主动追问每项功能的质量期望与运行环境限制,因为干系人通常只陈述功能而隐去质量诉求;对每个质量维度还应判断其目标水平、可接受下限与相互间的张力,避免把所有维度都设为无限高。对每条功能需求,若能同时说明其性能、可修改性等期望水平,就能避免质量诉求在实现中被无声牺牲,也能让架构师在方案选择时看到功能与质量之间的真实关联。对每类需求指定相应的验证方式,可使其在评审中不被笼统带过,也便于在交付前判断是否真正满足。

§5工程 · 怎么落地

实践中维护分开的需求类别,避免把质量诉求写成功能需求的附注。对每条非功能需求追问其可度量形式,必要时转化为具体的运行条件与判定标准。在评审中单独核查质量属性与约束是否被覆盖,而非只看功能是否齐全。把技术约束登记为不可协商项,并在架构决策中显式回应。用追溯连接功能需求与其相关的质量诉求,避免两者在后续变更中脱节。对约束类需求确认其来源与依据,防止把可协商的实现选择误当作强制约束。分类结果应驱动设计与测试的资源分配,而非停留在文档分类;对同时具有行为与质量含义的需求,可允许其跨类引用,而不必强行归入单一类别。把质量诉求纳入评审检查项,并在架构决策中回应,可使其从抽象愿望变为可跟踪的承诺,避免出现功能齐全却在关键质量上不达标、难以投入使用的系统。把分类结果写入检查清单,有助于在评审中系统性地覆盖各类需求,降低因关注功能而遗漏约束的概率。

§6权衡卡

收益 · 正确姿势

分类的价值最终体现在质量诉求是否在架构决策前被真正纳入考量,而非文档分类是否整齐。

反例 · 误区

另一个反例是重视功能、把质量诉求视为后期优化项,导致架构选择已定才提出性能或可修改性要求,此时修正代价极高。

原文要点
  • 对功能与非功能的二分本身有局限:某些需求同时具有行为与质量属性,硬性归类可能割裂其含义;把一切质量诉求都塞进非功能类别,也会制造一个庞大而难以管理的清单。
  • 反过来,若把所有可想象的质量维度都写成需求,又会造成范围膨胀与优先级稀释。
  • 因此分类应服务于能否被分析与验证,而非追求类别纯洁;关键质量属性应被显式、可度量地表达并优先排序,其余可归入一般约束或非目标,避免清单化带来的伪完备。
  • 质量维度并非越多越好,列出过多无法度量的维度只会稀释重点;应聚焦少数关键属性并明确其目标与边界,把其余诉求作为一般约束管理,以免清单掩盖真正的优先级。
  • 分类的粒度应服务于分析需要,避免因类别过细而增加无谓的维护负担,使分类本身成为额外工作。

权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。

§7学习路径条

MTH-F-05功能与非功能需求分类→MTH-F-04需求规格说明

§8案例带

CAS-X-01 · 2 跳派生:当前节点 → MTH-F-04 → TEC-F-02

去中心化聊天架构逆向

对一个仅有 58 份设计文档、尚未实现的开源去中心化聊天项目做架构逆向:从设计文本提炼 18 个模块及其依赖关系,重建模块依赖 DAG 与三条核心数据流 DAG,并输出全景理解与深度需求分析。

CAS-X-14 · 经 MTH-F-04

OpenSpec 规约驱动解析

对比规约驱动开发工具链 OpenSpec 与 Superpower 的元模型、工件依赖 DAG 与安全门控,提炼「规约先于实现」工程形态的解析案例。

§9信源与核验

核验状态True(verified)
置信度high
复核日期2026-10-12
生命周期active
规范信源OFF-010、BK-036、OFF-001、STD-005
书证核验BK-036 ChModifiability Scenario(direct),ChQUALITY ATTRIBUTE SCENARIO GENERATION(direct),ChQUALITY ATTRIBUTE SCENARIOS(direct)
勘误
常见误解:非功能需求是锦上添花,可以在功能完成后再处理
核验结论:功能不决定质量属性水平,是架构选择决定各质量属性的相对水平;质量诉求须在架构设计前以可度量方式显式表达 [BK-036]

§10原始关系清单

展开:本节点的全部原始关系边(1 条,含边 ID 与方向)
关系方向对端节点说明
前置依赖→ MTH-F-04需求规格说明
E-314
需求分类是规格说明的结构化前提