功能需求和非功能需求有什么区别?

310

在设计软件系统的背景下,“功能性”和“非功能性”要求有何区别?

请分别给出两种情况的示例。


@TravisJ 再次强调,在我们完成标签烧毁的第一阶段之前,请让我们将标签保留在问题上。 - TylerH
6个回答

563
功能需求描述软件系统应该做什么,而非功能需求则对系统如何做出限制。 举个例子,功能需求可以是:当满足某种条件时(例如下订单、客户注册等),系统必须发送电子邮件。相关的非功能性要求可能是:电子邮件的延迟不能超过12小时。 功能需求描述了系统的行为方式,与系统的功能相关。而非功能性要求详细说明了系统的性能特征
通常,非功能性要求分为以下几个方面:
- 可访问性 - 容量,当前和预测 - 合规性 - 文档编写 - 灾难恢复 - 效率 - 有效性 - 可扩展性 - 容错性 - 互操作性 - 可维护性 - 隐私 - 可移植性 - 质量 - 可靠性 - 弹性 - 响应时间 - 鲁棒性 - 可扩展性 - 安全性 - 稳定性 - 支持性 - 可测试性
更完整的列表可在维基百科的非功能性要求条目中找到。

非功能性需求有时候会通过度量标准的方式(即可以对系统进行测量的东西)来定义,以使它们更加具体化。非功能性需求还可能描述与系统的执行无关,而是与其随时间演进相关的方面(例如可维护性、可扩展性、文档等)。


当然,我会遵循您的建议,考虑到您的声望和专业工作历史(在撰写此文本之前,我已经查看了它们):您所提供的“非功能性需求”示例是否可以被认为是一种行为?或者您的观点更多的是指非功能性需求描述约束行为的情况? - Thomas
1
为了更清楚地阐明我的问题(也许无法回答):是否有一种方法可以更好地阐明行为的界限? - Thomas
加1分,因为提供了一个很好的电子邮件系统示例。 :) - Ahtisham

35

功能需求是用户对软件主要期望的东西,例如,如果应用程序是银行应用程序,则应该能够创建新账户、更新账户、删除账户等。功能需求是详细说明,并在系统设计中指定。

非功能需求不是系统直接要求的需求,而是与可用性相关(某种程度上),例如对于银行应用程序,一个重要的非功能需求是应用程序应该24/7可用,如果可能的话没有停机时间。


32

功能需求

  1. 功能需求指一个系统或系统组件必须能够执行的功能。它可以以多种方式记录,最常见的是文档中的书面描述和用例。

  2. 用例可以是文本枚举列表或图表,描述用户操作。每个用例通过一个或多个功能需求说明行为场景。然而,通常,分析员将从已收集的一组用例开始,从中派生出必须实现的功能需求,以允许用户执行每个用例。

  3. 功能需求是系统应该完成的任务。可能包括:

    • 计算
    • 技术细节
    • 数据操作
    • 数据处理
    • 其他特定功能
  4. 一个典型的功能需求将包含唯一的名称和编号、简要摘要和原理。这些信息有助于读者了解为什么需要该需求,并在系统开发过程中跟踪需求。

非功能性需求

LBushkin 已经更详细地解释了非功能性需求,我会补充更多内容。

  1. 非功能性需求是除功能需求以外的任何要求。它们规定了用于评估系统操作的标准,而不是特定的行为。

  2. 非功能性需求采用“系统应该是...”的形式,是整个系统或特定方面的总体属性,而不是具体的功能。系统的总体属性通常决定了开发项目是成功还是失败。

  3. 非功能性需求可分为两大类:

    • 执行质量,例如安全性和易用性,这些质量在运行时可以观察到。
    • 演化质量,例如可测试性、可维护性、可扩展性和可伸缩性,这些体现在软件系统的静态结构中。
  4. 非功能性需求对正在开发的产品、开发过程进行限制,并指定产品必须满足的外部约束条件。
  5. IEEE-Std 830 - 1993 列出了软件需求文档中应包括的13个非功能性需求。
  1. 性能需求
  2. 接口需求
  3. 操作需求
  4. 资源需求
  5. 验证需求
  6. 验收需求
  7. 文档需求
  8. 安全需求
  9. 可移植性需求
  10. 质量需求
  11. 可靠性需求
  12. 可维护性需求
  13. 安全需求

一个需求是表达为功能性还是非功能性需求可能取决于:

  • 需求文档中应包含的详细程度
  • 系统客户和开发人员之间存在的信任程度。

例如,系统可能需要向用户显示数据库中的记录数量。这是一个功能需求。需要实时更新这个数字是一个非功能性需求。如果需要在记录数量变化的可接受时间内更新[显示的]记录计数,系统架构师必须确保系统能够实现此目的。

参考资料:

  1. 功能性需求
  2. 非功能性需求
  3. 需求的量化和可追溯性

1
讲解得很清晰。谢谢! - Arslan Ramay
1
很好的回答,提供了良好的参考资料。我只想补充更更新的标准,因为IEEE 830-1993已经被取代。最新的标准是ISO/IEC/IEEE 29148:2018“系统和软件工程——生命周期过程——需求工程”(https://www.iso.org/standard/72089.html)。 - logoff

9

功能需求是与系统技术功能相关的需求。

非功能性需求是指规定了可以用来评判系统在特定条件下运行情况的标准,而不是具体的行为。

例如,如果您考虑一个购物网站,将商品添加到购物车、浏览不同商品、应用优惠和交易,并成功下订单属于功能需求。

而系统在高峰期的性能、系统从数据库检索数据所需的时间、用户数据的安全性,以及系统能否处理大量用户登录等属于非功能性需求。


优秀的答案。 - Iftekhar

3

功能需求 系统必须执行的活动

  • 业务使用功能,用户执行的操作
  • 用例 例如,如果您正在开发一个薪资系统,则需要以下功能:
  • 生成电子资金转账
  • 计算佣金金额
  • 计算薪资税
  • 向国税局报告税收扣除额

2

我认为功能需求是客户对开发人员提出的关于软件向用户提供的功能方面的要求,而非功能需求则是开发人员向客户提供的要求,即客户未提出但为确保系统平稳运行而由开发人员提供的要求,例如安全性、可扩展性、可用性等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接