我想知道功能或非功能需求。我发现这些术语有许多不同的定义,我无法将某些要求分配给适当的类别。
我想知道与某些操作无关或具有一些其他条件的需求,例如:
- 在所选设备的列表上,可以重复该设备。
- 数据库必须包含至少100个项目
- 某些值的货币必须为美元。
- 设备的名称和功耗值必须以瓦为单位。
这些需求是功能性的还是非功能性的?
我想知道功能或非功能需求。我发现这些术语有许多不同的定义,我无法将某些要求分配给适当的类别。
我想知道与某些操作无关或具有一些其他条件的需求,例如:
这些需求是功能性的还是非功能性的?
Answers:
功能要求限定什么系统或应用程序将尽-特别在外部相互作用(与用户或与另一个系统)的环境中。
下新订单时,系统应显示总费用并要求用户确认。这是功能要求;它描述了系统的功能。
有关更多详细信息,请参阅Wikipedia:功能要求。
非功能需求是指任何不描述系统输入/输出行为的需求。请注意,我们仍在谈论需求,而不是实现细节,仅因为我们使用的是“非功能性”一词,并不意味着在该部分中有什么是公平的游戏。
您将看到的最常见的非功能性需求类型涉及系统操作(可用性,连续性,DR),性能(吞吐量,延迟,存储容量)和安全性(身份验证,授权,审核,隐私)。
这些都是跨领域的问题,它们会影响每个“功能”,但它们本身并不是真正的功能。它们更像功能元数据,不仅可以帮助描述系统是否按照预期运行,还可以描述运行情况。不过,不要把这个类比推得太远-只是一个类比。
非功能性需求不是主观的或随波逐流的,这与这里的某些人似乎暗示的相反。实际上,它们实际上应该附加一个硬指标(即响应时间不超过100毫秒)。NF需求也不是实现细节或诸如“升级ORM框架”之类的任务-并不暗示有人会想到这个想法。
Wikipedia上的更多详细信息:非功能需求。
要具体解决问题中的示例:
在所选设备的列表上,可以重复该设备。
数据库必须包含至少100个项目
某些值的货币必须为美元。
设备的名称和功耗值必须以瓦为单位。
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。
一个功能需求描述与系统交互的结果(系统做什么在给定的情况下),同时非功能性需求通常是指性能,容量,响应时间等细节,这样的东西并不代表功能性,系统中的过程或交互的结果。
话虽如此,您所描述的非功能性需求实际上是具有技术规范的功能性需求(实际上会使它成为不好的需求)。您的案例的非功能性需求示例如下:
-骰子动画运行时,不得锁定UI。
用户需求通常是特定的UI需求,取决于上下文是功能性的还是不起作用的,而系统需求(例如,并发用户容量)通常在大多数情况下是不起作用的。
只是为了增加一些现有的良好答案,有时将非功能性需求称为“不可靠”(ilities),即系统除了其普通功能之外还需要具备的质量。“污秽”包括可用性,可用性,安全性,灵活性,甚至更具主观的美感。
其中有些是非常难以确定和评估。但是,它们很重要。如果您是按合同签约的,那么您将要避免使用那些毫无意义的手动版本,例如“系统必须安全”。试图确定此类要求的问题在于,人们倾向于倾向于容易衡量的事物,而不是重要的事物(并且这些要求很可能是由不具备相关专业知识的人撰写的)。最终结果是,您通常最终会获得既不安全,不可用,也不灵活的系统(虽然可用性和可用性仍然令人头痛,但对其进行指定和衡量并不难)。
在处理合同和正式资料的人们之间,以及在进行更一般的分析,建筑,研究等方面的人们之间,在文化上存在差异。就后者而言,模糊的手工波浪要求仍然是一项要求,因为它表达了对客户来说很重要的事情,即使他们完全同意合同制定者的意见,即在详细研究并彻底确定合同要求之后,这不是一个有用的合同要求。
最后一点-如果您还不能(但)提出客观的“灵活性”度量标准,那并不意味着客户不需要它。模糊!=不必要。但是,这可能意味着我们需要开发更好的方法来度量此类事物,逐步地引发和细化非功能性需求,或者以某种方式(敏捷等)收缩,而这些方式可以在没有针对所有事物的前期客观措施的情况下工作。
这些评论都非常好,但是它们太熟了,没有提供清晰的模板来使用。将其指定为不是很清楚:
我认为,功能要求是用户使用应用程序时的体验。当开发人员尝试从头实现,进行增强或修改时,需要满足这一要求。例如:用户应该登录。假设您还通过命令提示符添加了一种新的方式来运行应用程序,则用户仍然必须登录。
阀盖下发生非功能性需求。用户不知道它,但是无论如何它都必须存在。例如:应使用C#开发应用程序。如果以其他任何语言开发,则用户不会注意到。但这可能是一个要求,因为它基于现有代码。另一个示例是必须将其安装在某些服务器上。用户不会注意到正在移动的服务器。
功能需求通常是系统可以或将要做的事情。它可以表示为操作的结果(否定结果)。客户/最终用户不关心非功能性要求,并且不影响结果-例如
-Windows将具有带粉红色圆点的蓝色边框。-该程序将用Java编写
-与编码标准,方法和过程有关。
请注意,客户可以将非功能性需求转换为功能性需求。示例可能是-该程序将以Erlang编写,因为客户阅读了其中的杂志文章,并希望以Erlang编写。-该程序必须使用DB 2,因为客户将要在其现有的DB 2系统上运行该程序,它具有多年的经验,并且拥有一个熟悉该平台的IT团队。
-源代码必须通过所有MISRA建议。
总而言之-如果客户关心它,那是功能要求,否则就是非功能要求,甚至可能不是要求。
我确实认为功能需求是描述系统及其行为的必要内容,但是非功能需求对于系统来说不是必需的,并且在设计系统的协商过程中没有收集到的只是诸如速度覆盖质量之类的系统结果,安全性,可维护性等。