我正在为应用程序编写用户需求文档。 我区分了两章:一章是功能需求,另一章是非功能需求。
在功能需求方面,我列举了功能规范列表。 实际上,我面临以下情况:我要谈谈:
我是否将这些部分放在非功能需求中?
答案 0 :(得分:1)
这个问题(以及我的答案)是一个相当主观的问题,因为人们可以有不同的意见,这里没有真正的公认标准,但我试着解释我的推理。
所需的(或实现的)数据格式绝对是功能要求,因为它定义了应用程序与其他人的通信方式。其他要求传统上被认为是非功能性的,但在实践中,你可以在这里获得一点点哲学,因为没有一个真正的答案。
传统上,诸如性能,安全性或应用程序外观之类的东西被认为是非功能性要求,因此被有效地降级为事后或者很有可能。
在我看来,这根本就是错误的。通过扩展,我认为这种区别是有缺陷的,不应该首先进行。根据您的应用程序,不同的东西(或特征)比其他东西更重要,但通常,传统的非功能性需求可能会影响应用程序。
例如,消息传递系统可以看起来尽可能好,如果它不安全并且泄漏消息,它就没用了。同样地,一个快速而安全但看起来不太好且不易理解的计算机游戏可能不值得(有例外)。因此,传统的非功能性需求可能是所提供功能的重要组成部分。
最好的例子是这个网站,你在问你的问题。主要的非功能性要求是性能。通常认为很好,而不是没有计划到产品中,也不被认为是核心功能。在Stack Overflow(和其他堆栈交换站点)上,性能被认为是主要功能之一,开发人员认为慢速页面无法正常运行。
另一个例子是在UI / UX领域。通常,您认为用户界面(函数)的行为与外观(非函数)分开。但如果你看一下,例如智能手机应用程序或网络应用程序,您经常会发现用户体验是由确切的行为和设计定义的,因为两者之间存在强烈的联系并且相互影响很大。
因此,对于我的结论:您应该根据您希望应用程序提供的内容来考虑您的实际需求。功能性和非功能性之间的区别是无用的,因为它不能帮助您定义什么是重要的,什么不是。相反,关注您的价值观并定义您想要提供的用户体验(包括最终用户以及开发人员,管理员......)。
答案 1 :(得分:1)
我同意@(Holger Just)特别是
传统上,诸如性能,安全性或应用程序外观之类的东西被认为是非功能性要求,因此被有效地降级为事后或者很有可能。
但是我想补充几点说明。
功能测试和非功能测试之间的区别有时很有用。性能和安全测试域与功能测试域不同。这些非功能性测试通常包含在特殊测试学科中,需要不同的技术技能,有时组织在不同的团队中。例如,性能测试需要了解性能测试工具和技术(如JMeter或/和CPU和内存分析器)。安全测试本身也是一个很大的领域,包括有关威胁建模和渗透测试的知识。
此外,我还要区分性能和安全性方面的粗糙错误,这些错误会影响产品功能和性能以及安全性测试,以便了解这些领域的产品级别。例如,每次构建时启动的性能测试都可能表明某些性能产品性能下降(即使在10毫秒内)通常在功能测试中无法测量。