我是否将以下部分放在 "non functional needs" 中?

Do I put the following parts in "non functional needs"?

我正在为应用程序编写用户需求文档。 我区分了两章:一章针对功能性需求,另一章针对非功能性需求

在功能需求中,我列举了一个功能spec列表。 实际上,我遇到了以下情况:我不得不谈谈:

我是否将这些部分放在 非功能性需求 中?

这个问题(和我的回答)是一个相当主观的问题,因为人们可能有不同的意见,这里没有真正公认的标准,但我还是尝试解释我的推理。

所需(或已实现)的数据格式绝对是一项功能要求,因为它定义了您的应用程序如何与其他应用程序通信。其他要求传统上被认为是非功能性的,但在实践中,你可以在这里得到一些哲学,因为没有一个正确的答案。

传统上,诸如性能、安全性或应用程序外观之类的东西被认为是非功能性需求,因此实际上被降级为事后才想到的或可有可无的东西。

在我看来,这是根本错误的。推而广之,我认为这种区分是有缺陷的,一开始就不应该做出区分。根据您的应用程序,不同的事物(或功能)比其他事物更重要,但通常,传统的非功能性需求可以成就或破坏应用程序。

比如,一个消息系统,可以看起来再漂亮,如果不安全,泄露消息,那也是没用的。同样,一款速度快、安全但外观不佳且不易理解的电脑游戏可能价值不高(也有例外)。因此,传统上非功能性需求可以很好地成为所提供功能的重要组成部分。

最好的例子就是您提出问题的这个网站。主要的非功能性需求是性能。它通常被认为很好,没有计划到产品中,也不被认为是核心功能。在 Stack Overflow(和其他堆栈交换站点)上,性能被认为是主要功能之一,开发人员认为速度慢的页面无法正常运行。

另一个例子在UI/UX space。通常,您将用户界面的行为(功能)与外观(非功能)分开考虑。但是如果你看例如智能手机应用程序或 Web 应用程序,您经常会发现用户体验是由确切的行为和设计定义的,它们不能分开,因为两者密切相关并相互影响。

因此,对于我的结论:您应该根据您希望应用程序提供的内容来考虑您的实际需求。功能性和非功能性之间的区别是没有用的,因为它不能帮助您定义什么是重要的,什么不是。相反,专注于您的价值观并定义您想要提供的用户体验(包括最终用户以及开发人员、管理员...)

我同意@(Holger Just) 尤其是

Traditionally, things like performance, security or the look of an application were considered non-functional requirements and were thus effectively demoted to the afterthoughts or nice-to-haves.

不过我想补充几点。

功能测试和非功能测试之间的区别有时很有用。性能和安全测试域不同于功能测试域。这些非功能测试通常包含在特殊的测试规程中,需要不同的技术技能,有时会组织在不同的团队中。例如,性能测试需要了解性能测试工具和技术(如 JMeter or/and CPU 和内存分析器)。安全测试本身也是一个大领域,包括有关威胁建模和渗透测试的知识。

此外,我还会区分影响产品功能和性能的性能和安全性错误,以及允许了解这些领域的产品级别的安全性测试。例如,每次构建启动的性能测试可能表明某些性能产品退化(即使在 10 毫秒内),这在功能测试中通常无法测量。