功能或非功能需求?


34

我想知道功能或非功能需求。我发现这些术语有许多不同的定义,我无法将某些要求分配给适当的类别。

我想知道与某些操作无关或具有一些其他条件的需求,例如:

  1. 在所选设备的列表上,可以重复该设备。
  2. 数据库必须包含至少100个项目
  3. 某些值的货币必须为美元。
  4. 设备的名称和功耗值必须以瓦为单位。

这些需求是功能性的还是非功能性的?


4
我认为“功能性”和“非功能性”之间的区别具有误导性,并且往往使软件的可操作性较差。我发现,考虑“最终用户功能”和“操作功能”会带来更好的软件:blog.softwareoperability.com/2013/04/08/…(我的帖子)
Matthew Skelton,

@MatthewSkelton我无法确定(2.)是用户功能还是操作功能。似乎是“测试功能”。
马丁·托马

@moose-数据库必须在某些参数内/在给定100个项目的情况下进行操作,这更多是一项操作要求,尽管如果性能下降,这可能会影响最终用户的体验。最终,我们可能需要在OP中的需求上有更多的上下文,以便能够分为F和NF,尽管-正如我所暗示的-无论如何,我认为这有点虚假的区分:)
Matthew Skelton

Answers:


41

功能要求限定什么系统或应用程序将尽-特别在外部相互作用(与用户或与另一个系统)的环境中。

下新订单时,系统应显示总费用并要求用户确认。这是功能要求;它描述了系统的功能

有关更多详细信息,请参阅Wikipedia:功能要求

非功能需求是指任何描述系统输入/输出行为的需求。请注意,我们仍在谈论需求,而不是实现细节,仅因为我们使用的是“非功能性”一词,并不意味着在该部分中有什么是公平的游戏。

您将看到的最常见的非功能性需求类型涉及系统操作(可用性,连续性,DR),性能(吞吐量,延迟,存储容量)和安全性(身份验证,授权,审核,隐私)。

这些都是跨领域的问题,它们会影响每个“功能”,但它们本身并不是真正的功能。它们更像功能元数据,不仅可以帮助描述系统是否按照预期运行,还可以描述运行情况。不过,不要把这个类比推得太远-只是一个类比。

非功能性需求不是主观的或随波逐流的,这与这里的某些人似乎暗示的相反。实际上,它们实际上应该附加一个硬指标(即响应时间不超过100毫秒)。NF需求也不是实现细节或诸如“升级ORM框架”之类的任务-并不暗示有人会想到这个想法。

Wikipedia上的更多详细信息:非功能需求


要具体解决问题中的示例:

  1. 在所选设备的列表上,可以重复该设备。

    • 显然是功能要求。描述系统的输出。
  2. 数据库必须包含至少100个项目

    • 听起来像是业务规则,功能上也是如此。但是,它似乎不完整。这条规则是什么原因?如果数据库包含少于100个项目,将会发生/应该发生什么?
  3. 某些值的货币必须为美元。

    • 功能上的要求,但实际上并不是一项正确规定的要求。一个更有用的措词是:系统应支持一种货币(USD)。 显然,如果需要支持一种以上的货币,将对此进行修改,然后该要求将必须包含有关货币转换等的信息。
  4. 设备的名称和功耗值必须以瓦为单位。

    • 并不是真正的任何要求,这更像是技术规范。由于功率额定值假设为瓦特,因此将说明功能要求如果有一个以上的UOM,则与货币一样,功能需求应包含有关单位转换,配置单位/方式等的部分(如果适用)。

真好!我要补充的是,功能需求不必仅处理与外部环境的交互(相关概念是与其他系统的“接口需求”)。一个反例是“系统必须每60分钟对用户数据库进行索引”。这显然是内部的。
Aram Kocharyan 2013年

2
@AramKocharyan:这不是功能要求。显然,那里有一个客户SLA,就是功能要求。“必须在60分钟内处理联系人更新,以支持及时的客户服务/营销” –这是一项内部功能要求。完全不需要“为用户的数据库编制索引”,它是一个实现;例如,满足上述SLA要求的另一种方法可能是使用实时后台索引,或者通过使用服务代理或总线并以近实时方式处理更新来完全消除对索引的需求。
亚罗诺(Aaronaught)2013年

+1!关于非功能性需求的主体,它可能是足以指出,这些都是在核心非常坚实的 RESTful架构en.wikipedia.org/wiki/...
fr_andres SupportsMonicaCellio

18

Aaronaught已经有一个很好的答案,但是由于还有其他答案(现在已删除),这些答案对于什么是非功能性需求是完全错误的,我认为添加一些解释以避免对什么是错误的错误将是有用的。非功能性要求是。


非功能性要求是“产品必须具有的质量或特性” ¹。詹姆斯·泰勒(James Taylor)告诉我们,非功能性需求“ [尽管如此]仍然是一项需求,对客户而言很重要,有时甚至比功能性需求更为重要”。然后,他给出了两个示例:产品徽标以及设备的准确性和可靠性。这两个例子都很好地表明:

  • 非功能性需求不是像这样的营销技巧:“当今互联网非常重要,我们想拥有一个网站”。
  • 非功能性需求关系到客户,因为它们会严重影响他们的生产率和使用产品的能力。
  • 非功能性需求是完全客观的。

最后一点很重要。如果需求是主观的,则与需求列表无关。用主观的东西建立验证测试是不可能的。需求列表的唯一目的是枚举客户的明确期望。要求“我希望这个正方形是红色的”。“我希望这个正方形具有漂亮的颜色”是一个需要解释的愿望。

请记住,需求清单就像一个合同(在大多数情况下是合同的一部分)。它由客户和开发公司签署,如果发生诉讼,它将合法地用于确定您是否正确完成了工作。如果我订购了一个软件产品,指定“该产品必须很棒”,并且在产品完成后拒绝付款,该怎么办?因为对我来说,您实际上所做的并不是一件产品?

因此,让我们来看一些示例。

  1.该软件产品对最终用户有响应。

这不是必需的。没有功能。不是非功能性的。这不是必须的。完全没有 它的值为零。在验证测试期间,您无法检查软件系统是否满足此要求。您-质量检查部门或客户都没有。

  2.用户统计信息的重新加载在100毫秒以下的时间内执行90%的时间。在具有附录G第2部分中指定的性能的计算机上进行测试,并且CPU的负载低于10%,内存的负载低于50%,并且没有活动的R / W磁盘操作。

这是必需的。如果附录G第2部分足够精确,我可以使用具有类似硬件的机器,并在质量检查部门中执行验证测试,并且我将始终获得二进制结果:通过或失败。

是功能要求吗?不,它没有指定什么系统必须做的。之前可能有功能要求,指定软件应用程序必须能够重新加载用户统计信息。

这是非功能性要求吗?它是。它指定给定百分比阈值的产品必须具有的属性,即最大/平均响应时间。

  3.应用程序用C#编写。

这是一个要求吗?没有上下文我们真的不知道。首席开发人员可能希望通过插入此要求来避免以后与他的同事讨论使用的语言。它也可能是基于硬件/软件,传统或兼容性元素的要求。我们不知道

  4.产品的C#代码库遵循Microsoft最低推荐规则和Microsoft全球化规则。

这是一件奇怪的事。就我个人而言,我不想将其称为要求,而是将其放入指定标准和最佳实践的单独文档中。

  5.应用程序的主窗口具有10px的蓝色(#00f)边框和粉红色(#fcc)的填充圆,这些圆位于边框的内边缘,直径为3px,彼此间隔20px。

这是一项要求,并且是不起作用的。它规定的东西,我们可以验证测试期间测试,它指明了产品,而不是一个属性是什么产品是为了做。

  6.车辆跟踪系统以±0.016 mph的精度测量速度。

也是非功能性要求。它给出了系统精度的可测量阈值。它不会告诉系统必须执行的操作,而是告诉系统执行工作的精确程度。可是等等?它表明车辆跟踪系统可以测量速度,不是吗?所以这也是功能要求吗?好吧,不,因为我们强调测量的精确度,而不是完成测量的事实。

  7.车辆跟踪系统测量车辆的速度。

现在这是功能要求。它并不能说明系统如何工作,而可以告诉系统正在做什么。通过功能需求,我们可以了解到车辆跟踪系统可以测量速度,电池电量,压力,我不知道什么以及灯是否亮着。

  8.网站页面耗时850毫秒。加载。

这不是必需的。试图成为一个,但完全无效。您将如何利用这一点?什么页面?所有?通过四核客户端计算机上的本地1Gbps网络和八核服务器(使用2%的SSD)进行测试,或者通过旧的笔记本电脑的调制解调器进行测试,而网站由99%的小型服务器托管?“加载”是什么意思?这是否意味着下载页面?下载并显示吗?发送带有一些大数据的POST请求,然后加载响应并显示它?

总之,非功能性需求始终是必需的,这意味着它描述了一些东西,是完全客观的,可以通过自动或手动验证测试来检查,但不是讲什么系统正在做什么,它解释了系统如何正在做某事系统本身的状态


¹管理信息技术项目:将项目管理策略应用于软件,硬件和集成计划,James Taylor,ISBN:0814408117。


+1了解详情。我在(1)中不同意您的意见,您说“这不是必要条件”。我认为这是一项要求,但是业务分析师必须在团队致力于此之前将其设为“可衡量的”要求。我也喜欢您使用“ wish”一词以及您区分“ wishes”和“ requirements”
NoChance 2011年

@Emmad Kareem:你是对的。我将自己局限于纯粹的技术要求,即开发人员和质量检查人员将使用的要求。对于业务分析人员而言,情况略有不同,并且我认为不是必需条件的某些元素实际上是完全有效的元素。
2011年

我认为“应用程序是用C#编写的”。是一个约束,而不是功能要求,因为它没有描述系统的行为,但给解决方案空间带来了限制。
Aram Kocharyan 2013年

@AramKocharyan:这就是为什么我说我们完全不知道该声明是否必要的原因。
Arseni Mourzenko 2013年

3

一个功能需求描述与系统交互的结果(系统做什么在给定的情况下),同时非功能性需求通常是指性能,容量,响应时间等细节,这样的东西并不代表功能性,系统中的过程或交互的结果。

话虽如此,您所描述的非功能性需求实际上是具有技术规范的功能性需求(实际上会使它成为不好的需求)。您的案例的非功能性需求示例如下:

-骰子动画运行时,不得锁定UI。

用户需求通常是特定的UI需求,取决于上下文是功能性的还是不起作用的,而系统需求(例如,并发用户容量)通常在大多数情况下是不起作用的。


2

只是为了增加一些现有的良好答案,有时将非功能性需求称为“不可靠”(ilities),即系统除了其普通功能之外还需要具备的质量。“污秽”包括可用性,可用性,安全性,灵活性,甚至更具主观的美感。

其中有些是非常难以确定和评估。但是,它们很重要。如果您是按合同签约的,那么您将要避免使用那些毫无意义的手动版本,例如“系统必须安全”。试图确定此类要求的问题在于,人们倾向于倾向于容易衡量的事物,而不是重要的事物(并且这些要求很可能是由不具备相关专业知识的人撰写的)。最终结果是,您通常最终会获得既不安全,不可用,也不灵活的系统(虽然可用性和可用性仍然令人头痛,但对其进行指定和衡量并不难)。

在处理合同和正式资料的人们之间,以及在进行更一般的分析,建筑,研究等方面的人们之间,在文化上存在差异。就后者而言,模糊的手工波浪要求仍然是一项要求,因为它表达了对客户来说很重要的事情,即使他们完全同意合同制定者的意见,即在详细研究并彻底确定合同要求之后,这不是一个有用的合同要求

最后一点-如果您还不能(但)提出客观的“灵活性”度量标准,那并不意味着客户不需要它。模糊!=不必要。但是,这可能意味着我们需要开发更好的方法来度量此类事物,逐步地引发和细化非功能性需求,或者以某种方式(敏捷等)收缩,而这些方式可以在没有针对所有事物的前期客观措施的情况下工作。


0

这些评论都非常好,但是它们太熟了,没有提供清晰的模板来使用。将其指定为不是很清楚:

我认为,功能要求是用户使用应用程序时的体验。当开发人员尝试从头实现,进行增强或修改时,需要满足这一要求。例如:用户应该登录。假设您还通过命令提示符添加了一种新的方式来运行应用程序,则用户仍然必须登录。

阀盖下发生非功能性需求。用户不知道它,但是无论如何它都必须存在。例如:应使用C#开发应用程序。如果以其他任何语言开发,则用户不会注意到。但这可能是一个要求,因为它基于现有代码。另一个示例是必须将其安装在某些服务器上。用户不会注意到正在移动的服务器。


-1

功能还是非功能?我不会说。在我看来,大多数(如果不是全部)列出的示例看起来像是业务规则(指定系统过程必须遵循的与过程相关的约束和决策规则)。

它们是很多工程师忘记或不知道的东西,因为业务规则通常是作为业务分析的一部分收集的(并且通常嵌入功能需求规范中,而不是外部引用)。


为什么列出的示例对您来说看起来像业务规则?
蚊蚋

-4

功能需求通常是系统可以或将要做的事情。它可以表示为操作的结果(否定结果)。客户/最终用户不关心非功能性要求,并且不影响结果-例如
-Windows将具有带粉红色圆点的蓝色边框。-该程序将用Java编写
-与编码标准,方法和过程有关。

请注意,客户可以将非功能性需求转换为功能性需求。示例可能是-该程序将以Erlang编写,因为客户阅读了其中的杂志文章,并希望以Erlang编写。-该程序必须使用DB 2,因为客户将要在其现有的DB 2系统上运行该程序,它具有多年的经验,并且拥有一个熟悉该平台的IT团队。
-源代码必须通过所有MISRA建议。

总而言之-如果客户关心它,那是功能要求,否则就是非功能要求,甚至可能不是要求。


1
-1。客户和最终用户关心非功能性需求,因为它们直接影响其生产力。同样,非功能性需求不能被客户转变为功能性需求:由需求决定功能性还是非功能性取决于客户。
阿森尼·穆尔琴科

同样,非功能性可以分为“开发”(开发人员关心,例如可维护性)和“运营”(用户关心例如可用性)的质量
Aram Kocharyan 2013年

-4

我确实认为功能需求是描述系统及其行为的必要内容,但是非功能需求对于系统来说不是必需的,并且在设计系统的协商过程中没有收集到的只是诸如速度覆盖质量之类的系统结果,安全性,可维护性等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.