1 简介
本文基于ISO/IEC 29148:2011版的第五章,主要介绍适用于需求本身以及在记录需求过程中所生成的信息项的概念。这些概念适用于相关系统各级需求的属性,同时也适用于需求的获取、分析、分配、记录和管理过程中所使用的流程。 需要注意的是这里是基于2011版的规范,而最新的版本是2020版的,如需要最新信息,请跟随2020版。或者参考国家标准GB/T 25000.30-2021: 软件和系统工程 - 软件和系统的质量需求和验证(SQuaRE) - 质量验证框架
2 需求基础
2.1 一般规定
需求工程是一种跨学科的功能,处于采购方和供应商 1之间,旨在建立和维护系统、软件或相关服务需满足的需求。需求工程涵盖发现、引出、开发、分析、确定验证方法、验证、传达、记录和管理需求等环节。其成果是一个需求层次结构,它能够使利益相关者(如收购方、用户、客户、运营商、供应商)达成一致理解,经过验证,符合实际需求且可实施,并为验证设计和接受解决方案提供基础。 需求层次结构可用一个或多个需求规范来表示(有关规范模板和内容,请参阅软件需求规格说明书IEEE模板 2)。
2.2 利益相关者
从需求工程的角度看,不同项目的利益相关者 3各异。最小的利益相关者集合由用户和收购方组成(他们可能不同)。复杂项目可能影响众多用户和众多收购方,每个用户和收购方都有不同关注点。项目要求可能需要将另外两组人纳入最小利益相关者集合。首先,开发、维护或操作系统或软件的组织有合法利益从系统中受益。其次,监管机构可能有法定、行业或其他外部要求,需要仔细分析。
2.3 将要求转化为需求
区分下这两种概念: 要求:needs。 我想要什么什么。 需求:requirements。 我需要什么已达成什么目的。
定义需求始于利益相关者的意图(称为要求、目标或目的),这些意图在成为有效的利益相关者需求之前会演变为更正式的陈述。初始利益相关者意图不作为利益相关者需求,因为它们通常缺乏定义、分析,甚至缺乏一致性和可行性。需求工程使用操作概念来帮助理解组织层面的利益相关者意图,并使用系统视角的系统操作概念,引导利益相关者从初始意图转向结构化和更正式的利益相关者需求陈述。 这些陈述格式正确,符合下文中的特征。然后,将利益相关者的要求转化为相关系统的系统需求。一致的实践表明,此过程需要通过系统设计层次结构与其他生命周期过程并行执行迭代和递归步骤。
注:可以参考 ISO/IEC 26551: 软件和系统工程 - 产品线需求工程和管理的工具和方法。
2.4 需求的制定与规范
应制定格式良好的利益相关者需求、系统需求和系统元素需求,这有助于与利益相关者进行需求验证 4,并确保需求准确捕捉利益相关者的需求。
格式良好的需求陈述: - 可验证。 - 必须由系统满足或拥有,以解决利益相关者的问题或实现利益相关者的目标。 - 符合可测量的条件并受到约束。 - 定义了系统被特定利益相关者使用时的性能或系统相应的能力,但不定义用户、操作员或其他利益相关者的能力。
该描述提供了一种区分需求和这些需求的属性(条件、假设、设计决策和约束)的方法。
编写格式良好的需求的指导: 需求是翻译或表达需求及其相关约束和条件的陈述,此陈述以可以采用自然语言形式的语言编写。如果以自然语言形式表达,则该陈述应包含主语、动词和补语。需求应说明需求的主题(例如,系统、软件等)以及应做什么(例如,在功率级别上运行,提供字段)。图 1 显示了需求的示例语法。条件-动作表和用例是捕获需求的其他方法。
提前商定表示存在需求的特定关键字和术语非常重要。常见的规定如下: - 要求是强制性的约束性规定,使用“必须”。 - 事实陈述、未来性或目的声明是非强制性、非约束性条款,使用“will”。“will”也可用于建立上下文或使用限制。但“will”可能被解释为具有法律约束力,最好避免用于要求。 - 偏好或目标是期望的、非强制性、非约束性的规定,使用“应该”。 - 建议或允许是非强制性、不具约束力的规定,使用“可以”。 - 非要求(例如描述性文字)使用诸如“是”“是”和“是”之类的动词。最好避免使用“必须”一词,以免被误解为要求。
使用肯定的陈述,避免使用“不得”等否定的要求。使用主动语态,避免使用被动语态,例如“应当能够选择”。所有特定于需求工程的术语都应在系统的所有需求中正式定义和一致应用。
[条件] [主体] [行动] [客体] [约束] 示例:当接收到信号 x [条件] 时,系统[主体]应在 2 秒内[约束]设置[操作]信号 x 的接收位[对象] 。
或者
[条件] [行动或约束] [价值] 示例:在海况 1 [条件] 下,雷达系统应探测到距离[行动或限制] 100 海里[值] 范围内的目标。
或者
[主题] [操作] [值] 示例:发票系统[主题]应按升序[值]显示待支付的客户发票[操作] 。
条件: 条件是针对需求规定的可测量的定性或定量属性。它们进一步限定了所需的需求,并提供允许以可验证和核实的方式制定和陈述需求的属性。条件可能会限制设计师的选择。
将利益相关者的需求转化为利益相关者的要求非常重要,且不应对解决方案空间施加不必要的限制。
约束: 约束限制了系统工程流程的设计解决方案或实施。约束可能适用于所有需求,可能与特定需求或需求集有关系,也可能被确定为独立需求(即不限制任何特定需求)。
约束的示例包括: - 与现有系统(例如格式、协议或内容)的接口无法更改。 - 物理尺寸限制(例如,控制器必须安装在飞机机翼的有限空间内)。 - 特定国家的法律。 - 可用的期限或预算。 - 现有的技术平台。 - 用户或操作员的能力和限制。
需求可以按等级或权重排序,以表明优先级 5、时间或相对重要性。场景形式的需求从用户的角度描述系统的操作。
2.5 个体需求的特征
每个利益相关者、系统和系统元素需求应具备以下特征:
必要: 该需求定义了一项基本能力、特性、约束和/或质量因素。若将其移除或删除,会存在缺陷,产品或流程的其他能力无法满足该缺陷。此需求当前适用,且不会随时间过时。明确标识了计划到期日期或适用日期的需求。
无需实施: 需求在明确系统中必要和充分的内容时,避免对架构设计施加不必要限制。目标独立于实施,说明了需要什么,而非如何满足需求。
注:此类信息虽重要,但应以其他形式文档记录和传达,如下文中的需求属性(如基本原理),以协助设计和实施。且需求中包含设计解决方案可能会忽略或消除潜在设计方案,例如陈述确切商业系统集或可购买而非制造的系统需求,陈述概念系统项目的公差,或建立不一定反映父需求的约束。
明确无误: 需求表述应确保只有一种解释方式,表述简单易懂。
一致: 该要求与其他要求无冲突。
完整: 需求无需进一步详述,因可衡量且充分描述满足利益相关者需求的能力和特性。
单数: 需求陈述仅含一个需求,不使用连词。
可行: 要求技术上可实现,无需重大技术进步,符合系统约束(如成本、进度、技术、法律、监管),风险可接受。
可追溯: 需求可向上追溯到特定记录的利益相关者需求声明、更高层级需求或其他来源(如贸易或设计研究),也可向下追溯到较低层级需求规范或其他系统定义工件中的具体需求。即需求的所有父子关系在跟踪中已识别,可追溯到来源和实施。
可验证: 需求有证明系统满足指定要求的手段,可收集证据证明系统能满足指定要求。需求可测量时,可验证性增强。
2.6 需求集(一组需求)的特征
需要考虑利益相关者、系统和系统元素需求集(而非任何单个需求)的某些特征,这将确保需求集共同提供满足利益相关者意图和约束的可行解决方案。每组需求都应具备以下特征:
- 完整: 该需求集无需进一步扩展,因其包含与正在指定的系统或系统元素的定义相关的所有内容。此外,该集合不含待定义(TBD)、待指定(TBS)或待解决(TBR)条款。TBx 指定的解决可能是迭代的,且 TBx 项有一个可接受的时间框架,由风险和依赖关系决定。
一些实践被推荐用于提高完整性,包括所有需求类型;考虑生命周期所有阶段的需求;并让所有利益相关者参与到需求获取活动中。
一致: 需求集不包含相互矛盾的个别需求。需求是不重复的,所有需求中,对同一项目使用同一术语。
代价合理: 在生命周期约束(如成本、进度、技术、法律、法规)内,可获得/可行的解决方案能够满足整套要求。
有界: 需求集维持预期解决方案的既定范围,不会超出满足用户需求的范围。
仔细检查具有这些特征的需求集和可追溯的架构设计对于避免生命周期内需求的变化和增长(“需求蔓延”)至关重要,因为这些变化和增长会影响系统的成本、进度或质量。
2.7 需求语言标准
在编写文本需求时,以下考虑将有助于确保采用良好的需求特征。
需求表述: 需求应该说明“需要什么”,而非“如何做”。需求应该说明感兴趣的系统需要什么,而不是包括设计决策。但是,随着需求在系统的各个层次上分配和分解,将认识到在更高层次上定义的设计决策/解决方案架构。这是需求分析和架构设计过程的迭代和递归应用的一部分。
避免模糊笼统的术语: 应避免使用模糊和笼统的术语。它们会导致要求往往难以甚至无法验证,或可能允许多种解释。以下是无限制或模棱两可的术语类型:
- 最高级(例如“最佳”、“最”)
- 主观语言(例如“用户友好”、“易于使用”、“成本效益”)
- 模糊代词(例如“它”、“这个”、“那个”)
- 模棱两可的副词和形容词(例如“几乎总是”、“显著”、“最小”)
- 开放式、不可验证的术语(例如“提供支持”、“但不限于”、“至少”)
- 比较短语(例如“优于”、“更高质量”)
- 漏洞(例如“如果可能”、“视情况而定”、“视适用而定”)
- 参考文献不完整(未指定参考文献的日期和版本号;未仅指定参考文献的适用部分以限制验证工作)
- 负面陈述(例如不提供系统能力的陈述)
关于需求的所有假设都应在需求属性小节的需求属性中记录并验证(例如,理由),这些属性与需求相关联或在伴随文件中。将定义作为陈述性声明包含,而不是作为需求。
2.8 需求属性
为了支持需求分析,格式良好的需求应具有定义描述性属性,以帮助理解和管理需求。属性信息应与所选需求存储库中的需求相关联。
2.8.1 需求属性示例
需求属性的重要示例包括:
标识:每个需求都应有唯一的标识(即编号、名称标签、助记符)。如需,识别可反映联系和关系,或与识别分开。唯一标识符有助于需求跟踪。一旦指定,标识必唯一,永不变(即便需求变),也不重复用(即便需求删)。
利益相关者优先级:应定每项需求的优先级,可通过潜在利益相关者的共识过程确定。适当时,可用 1 - 5 等级或高、中、低方案定优先级。优先级不意味某些需求不必要,却能表明做替代方案决定时,哪些需求是交易空间候选。排序需考虑相关利益者,助权衡需求并平衡影响。
依赖性:有依赖时,应定义需求间的依赖。某些要求从利益者角度看优先级低,却对系统成功关键。如测外温要求对支持他要求(如维持内舱温度)重要。应确定关系,以便删主要求时,可删支持要求。
风险:风险分析技术可据系统需求后果或风险规避程度定系统需求等级。主风险与潜在财务损失、商业机会错失、利益者信心丧失、环境影响、安全健康问题及国家法律有关。
注:有关风险分析的附加指导,请参阅 ISO/IEC 16085。
来源:每个需求应含指示发起者的属性,创建者可有多个来源。识别来源助确定咨询组织以澄清、消冲突、改或删需求。所有权与来源有关,适用于需求来源。利益者需求,发布者获所有权。需求下放,责任传相应产品团队。
理由:应记录每项要求的理由,提供需该要求的因,并指出支持分析、交易研究、建模、模拟等实质客观证据。
难度:应注明每项要求的假定难度(如简单/正常/困难),提供需求广度和可负担性的额外信息,助成本建模。
类型:需求意图和代表的属性种类不同,助需求分组,以便分析和分配。
2.8.2 需求类型属性示例
需求类型属性的重要示例包括:
- 功能:功能需求描述系统或系统元素要执行的功能或任务。
- 性能:定义功能或任务的执行程度、执行效果和执行条件的要求。这些是系统性能的定量要求,可单独验证。注意,单个功能、功能要求或任务可能有多个性能要求。
- 可用性/使用质量要求:(针对用户性能和满意度)为系统设计和评估提供依据,以满足用户需求。可用性/使用质量要求是与系统总体要求规范一起制定的,并构成其一部分。
- 接口:接口需求是系统与外部系统交互(外部接口),或系统内部系统元素(包括人为元素)相互作用(内部接口)的定义。
- 设计约束:通过施加不可移动的边界和限制来限制解决方案设计人员的选项的要求。例如,系统应包含遗留或提供的系统元素,或某些数据应保存在在线存储库中。
- 流程要求:这些是利益相关者(通常是采购方或用户)通过合同或工作说明提出的要求。包括:遵守国家、州或地方法律(含环境法);行政要求;采购方/供应商关系要求;以及具体工作指令。公司政策或惯例也可能对项目提流程要求。系统或系统元素实施流程要求(如强制采用特定设计方法)通常包含在项目协议文档(如合同、工作说明和质量计划)中。
- 非功能性:这些要求指定系统运行或存在所需的要求或系统属性,定义了系统应如何。质量要求和人为因素要求是此类例子。
- 质量要求包括许多“功能”,如可运输性、生存性、灵活性、可移植性、可重用性、可靠性、可维护性和安全性 6。在开始编写需求文档前,应先制定非功能性质量需求(如“功能”)列表,根据正在开发的系统量身定制。适当时,应包括质量要求的措施。
注 1:有关软件质量要求的更多指导可在 ISO/IEC SQuaRE 标准中找到,尤其是 ISO/IEC 25030 和 ISO/IEC 25010。
- 人因工程要求描述与人类用户(以及使用过程中受影响的其他利益相关者)交互的结果所需的特性,包括安全性、性能、有效性、效率、可靠性、可维护性、健康、福祉和满意度。这些包括可用性特性的度量,如有效性、效率和满意度;人的可靠性;不受不利健康影响的自由。
3 实践考虑因素
3.1 迭代过程和递归过程
两种过程应用形式——迭代和递归,对于应用本国际标准中定义的过程至关重要且有用。
3.1.1 流程的迭代应用
当在系统的同一层级上重复应用相同的流程或流程集时,这种应用被称为迭代应用。迭代不仅恰当,而且是预期的。应用一个流程或流程集会产生新信息,通常这些信息以与需求、分析的风险或机会有关的问题的形式出现。这些问题应在完成一个流程或流程集的活动之前得到解决。当重新应用活动或流程可以解决这些问题时,这样做是有用的。在将下一个流程或活动集应用于感兴趣的系统之前,可能需要迭代来确保使用具有可接受质量的信息。在这种情况下,迭代为使用这些流程的系统增加了价值。
3.1.2 流程的递归应用
当同一组流程或同一组流程活动应用于系统结构中连续的系统元素层时,应用形式称为递归。一个应用的结果被用作系统结构中下一个较低(或较高)系统的输入,以得出更详细或更成熟的结果集。这种方法为系统结构中的连续系统增加了价值。
利益相关者需求定义流程 7可能只应用于感兴趣的系统层。但是,需求分析和架构设计流程将应用于每个连续的递归层。
注:递归也可以是双向的,系统需求在相关系统层面进一步分析。
3.2 需求工程中的迭代和递归
由于不同的利益相关者群体通常从不同的抽象层次看待系统,因此有必要在更低、更详细的抽象层次上定义和记录需求陈述,而非仅针对整个感兴趣的系统。这通过将系统需求分配或分发给系统元素来达成。把需求分配给系统元素的活动是架构设计过程的一部分,与系统架构的定义同步进行。需求分析和架构设计过程之间可能会有多次迭代,以解决需求和架构之间的权衡。
架构设计的主要目标之一是确定如何划分系统,即明确应将哪些需求分配给哪些系统元素。在定义系统元素时,应创建其他需求陈述(称为派生需求),用于定义系统架构元素之间的关系,在系统元素的较低抽象级别上下文中提供必要的清晰性,或者指定系统元素的设计约束或性能级别。这通过需求分析过程的递归应用来实现。
此外,有些需求只有在架构或设计的某部分发展之后才能得出。一些需求取决于多个系统元素的交互。例如,系统的信息吞吐量取决于系统硬件、软件、人员操作和环境的交互。需求分析和架构设计过程的递归和迭代应用可用于捕捉这些需求。
即使在需求工程资源充足的情况下,分析水平也很少统一应用。
例如,在需求分析过程早期,经验丰富的工程师通常能确定现有或现成的解决方案在哪些方面可适应系统元素的实施。分配给这些需求的可能需要较少分析,而其他解决方案不明显的需求可能需要更详细的分析。关键需求,即具有高风险或影响公共安全、环境或健康的需求,应始终进行严格分析。
4 需求信息项
本节通过说明项目中的典型应用风格来描述需求流程和需求信息项之间的关系。
- 外部环境
市场趋势
法律法规
法律责任
社会责任
技术基础
劳动力资源
竞争产品
标准与规范
公共文化
物理/自然环境
组织环境
政策和程序
标准与规范
指导方针
领域技术
当地文化
业务运作
业务运营
进程
约束
政策与规则
模式
质量
业务结构
系统操作
- 系统
- 系统元素
- 软件
- 系统元素
- 系统元素
- 系统
需求流程及其产生的规范取决于要定义需求的系统的范围。要开发或更改的系统或系统元素的需求取决于业务或组织运营的组织级需求。系统或系统元素的需求会逐渐分配给较低级别的系统。
注:尽管术语“业务”能适用于公共部门等非营利组织,但仍用“业务”一词。本标准的用户可根据自身环境将每次出现的“业务”替换为“组织”或“组织”。
利益相关者需求规范 (StRS)、系统需求规范 (SyRS) 和软件需求规范 (SRS) 意在表示不同的需求信息项集。
- StRS - 利益相关者需求(业务管理层和业务运营层);
- SyRS - 系统需求;
- SRS - 软件需求。
这些信息项能迭代或递归地应用于多个规范(实例)。
操作概念 (ConOps) 和系统操作概念 (OpsCon) 有助于从组织中的各利益相关者获取需求,还能作为沟通和分享组织意图的实用手段。在组织层面,ConOps 涉及领导层运营组织的预期方式。可能指将一个或多个系统用作“黑匣子”。OpsCon 从用户角度解决特定感兴趣的系统。
StRS、SyRS、SRS、ConOps 和 OpsCon 文件所表示的信息项相互依赖。这些项目的开发需要互动与合作,尤其在业务流程、组织实践和技术解决方案选项方面。
不同类型的系统可能针对其所包含的各种要求有并行文档。然而,一般来说,它们会从 StRS 和 SyRS 开始,并包括软件规格以及硬件和接口的规格。