【发布时间】:2015-03-13 11:05:47
【问题描述】:
我正在为一个应用程序编写用户需求文档。 我区分了两章:一章针对功能需求,另一章针对非功能需求。
在功能需求方面,我列举了一个功能规范列表。 实际上,我面临以下情况:我不得不谈谈:
- 用户界面
- 性能
- 安全
- 数据格式
我是否将这些部分放在非功能性需求中?
【问题讨论】:
-
我投票结束这个问题,因为它与编程无关
标签: specifications requirements
我正在为一个应用程序编写用户需求文档。 我区分了两章:一章针对功能需求,另一章针对非功能需求。
在功能需求方面,我列举了一个功能规范列表。 实际上,我面临以下情况:我不得不谈谈:
我是否将这些部分放在非功能性需求中?
【问题讨论】:
标签: specifications requirements
这个问题(和我的回答)是一个相当主观的问题,因为人们可以有不同的意见,这里没有真正公认的标准,但我还是试图解释我的推理。
所需(或已实现)的数据格式绝对是一种功能要求,因为它定义了您的应用程序如何与其他人通信。其他要求传统上被认为是非功能性的,但在实践中,你可以在这里获得一点哲学,因为没有一个真正的答案。
传统上,性能、安全性或应用程序的外观等东西被认为是非功能性需求,因此实际上被降级为事后考虑或锦上添花。
在我看来,这是根本错误的。通过扩展,我认为这种区分是有缺陷的,不应该首先做出。根据您的应用程序,不同的事物(或功能)比其他事物更重要,但通常,传统上的非功能性需求可能会成就或破坏应用程序。
例如,消息传递系统可以看起来尽可能好,但如果它不安全并且泄漏消息,那么它是无用的。类似地,一款速度快、安全但看起来不好看且不易理解的电脑游戏可能不值多少钱(也有例外)。因此,传统上的非功能性需求很可能是所提供功能的重要组成部分。
最好的例子就是您提出问题的这个网站。主要的非功能性需求是性能。通常认为拥有它很好,没有计划到产品中,也没有被认为是核心功能。在 Stack Overflow(和其他堆栈交换网站)上,性能被认为是主要功能之一,开发人员认为慢速页面无法正常工作。
另一个例子是在 UI/UX 领域。通常,您将用户界面(功能)的行为与外观(非功能)分开。但是,如果您查看例如智能手机应用程序或网络应用程序,您经常会发现用户体验是由确切的行为和设计定义的,两者密不可分,并且相互影响很大。
因此,我的结论是:您应该根据您希望您的应用程序提供什么来考虑您的实际需求。功能性和非功能性之间的区别相当无用,因为它不能帮助您定义什么是重要的,什么不是。相反,专注于您的价值观并定义您想要提供的用户体验(对最终用户以及开发人员、管理员......)
【讨论】:
我同意@(Holger Just),尤其是
传统上,性能、安全性或应用程序的外观等东西被认为是非功能性需求,因此实际上被降级为事后考虑或锦上添花。
不过,我想补充几点。
功能测试和非功能测试之间的区别有时很有用。性能和安全测试域不同于功能测试域。这些非功能性测试通常包含在特殊的测试学科中,需要不同的技术技能,有时组织在不同的团队中。例如,性能测试需要了解性能测试工具和技术(如 JMeter 或/和 CPU 和内存分析器)。安全测试本身也是一个大领域,包括有关威胁建模和渗透测试的知识。
另外,我会区分影响产品功能和性能的性能和安全性粗鲁错误以及允许了解这些领域的产品级别的安全测试。例如,每次构建启动的性能测试可能表明产品的性能下降(甚至在 10 毫秒内),这在功能测试中通常无法测量。
【讨论】: