什么是非功能性需求,它们如何影响产品开发?
我们在选购新车时,会预设一些选购的标准,比如GPS导航必须能够保存目的地,或者必须要买黑色的车。我们可能下意识以为这些是功能性需求,但实际上这些特性都是与用户体验相关的非功能性需求。
一、什么是非功能性需求(NFR)?
非功能性需求是对软件系统的全局性约束,包括但不限于开发成本、运营成本、性能、可靠性、可维护性、可移植性和扩展性等。一个与功能无关,但与可靠性、效率、可用性、可维护性和可移植性等属性相关的需求。
在系统工程和需求工程中,非功能性需求是一个指定可以用来判断系统操作的标准,而不是特定行为的需求。
在描述非功能性需求时常会用到一些副词或修饰语,如“系统应能快速打印发票”,或“系统应在确保信息安全的情况下打印出发票”。
软件的非功能性需求关乎用户体验。忽视这些需求可能会导致项目延期,预算超支,用户满意度降低,也可能会导致项目目标不明确,进而导致产品偏离用户的期望。
非功能性需求弥补了开发者认为客户想要的和客户真正想要的之间的差距。
研究显示,软件开发成本中的60%到80%用于修复产品存在的问题,完善的非功能性需求可以消除约50%到80%的产品缺陷。
既然我们已经知道了非功能性需求的重要性,那么问题来了:如何有效地将非功能性需求融入到产品开发过程中呢?
二、非功能性需求关注产品的”性能”
产品的”性能”包括质量、可靠性、可制造性、可用性、可服务性、可升级性等。
非功能性需求关注用户体验,定义了系统的质量、约束条件或外部接口等方面的要求。如果我们想设计出一个具有可扩展性的系统,仅凭口头描述往往不够清楚,需要将目标具体化,比如:“构建出一个在未来24个月内能够管理至少50,000名用户的系统,以防止系统崩溃对用户造成困扰”。
另外,非功能性需求还可能涵盖以下方面:
- 法律法规或相关规定。
- 定义软件的质量属性。
- 确保关键领域的性能表现,例如可靠性、可用性和可扩展性。
- 提升用户体验,使系统更易于操作,并最大程度地减少返工。
就像购车一样,不同的人获得最佳用户体验所要求的产品特性不同。你可能需要加热座椅,而其他人则可能想要三排座椅。所以,你为项目定义的非功能性需求会根据客户期望而变化。然而,一个可能的非功能性需求类别列表可以作为你的起始点,帮助你思考在你的需求列表中应该包含哪些非功能性需求。
三、非功能性需求的不同类别?
把非功能性需求想象成一种容器,里面装载的是与用户体验密切相关的重要属性。要记住,非功能性需求并不是关于产品将要完成什么任务(那是功能性需求的范畴),而是关于这个项目将要达到的目标或理想状态。
如果你选择了正确的容器并且衡量了正确的事物,那么你就可以放心,你交付的产品会满足客户的期望——因为你已经明确地定义了这些期望。每个人都在同一认知水平上,这在你集中管理你的需求时,会进一步增强。
接下来,让我们看看一些常见的非功能性需求类别:
- 性能和可扩展性:确定所需的响应时间、性能标准和其他与性能相关的属性。系统生成结果的速度有多快?系统在高负荷下的性能如何?
- 操作限制:这部分涉及产品开发过程中必须遵守的特定软件需求、系统需求,以及运行时候的约束。
- 平台限约束:大多数软件都会有平台限制,需提前明确这些限制。
- 可修改性:需要考虑修改软件所需的工作量。提前预知修改带来的工作量,可以帮助客户更有效地规划项目时间。
- 可移植性需求和能力:思考软件在不同平台运行的难易程度,以及适用的硬件和操作系统,还需要考虑软件是否会与其他程序产生冲突。
- 可靠性:需要考虑软件发生错误的频率和后果,以及检测错误和修复错误的手段。
- 安全性:关乎系统保护和数据保护的需求,例如破解系统的难易程度以及如何降低这些风险。
- 可用性:指用户体验,例如学习和操作系统的难度,实际使用软件可能出现的问题或者困难。
- 合法性:涉及到的法律问题,例如数据隐私和知识产权。
不同项目的需求会有所不同,常见的需求类别包括: 系统的可用性(系统是否易于使用)、容量(系统能处理多少任务或用户)、可靠性(系统的稳定性或故障率)和安全性(系统防止非法访问或攻击的能力)。可先从这些基本的需求类别着手,逐渐扩展到其他需求领域,最终构建出属于自己的新产品开发项目需求模板。
四、功能性需求和非功能性需求的区别?
功能性需求和非功能性需求都是软件开发的重要组成部分,关注点不同:
- 功能性需求(Functional Requirements): 这些需求关注软件应执行的具体功能或行为。例如,一个电子商务网站的功能性需求可能包括用户能够浏览产品目录、添加商品到购物车、进行购物结算等。功能性需求通常以用户故事、用例或系统功能列表的形式进行文档化,这些需求是用户或系统需要完成的具体任务。
- 非功能性需求(Non-Functional Requirements): 这些需求关注系统的质量、性能或约束。它们描述了系统应如何工作,而不是系统应该做什么。例如,一个电子商务网站的非功能性需求可能包括系统必须能够处理高并发访问(性能需求)、必须有良好的用户界面(可用性需求),或必须遵循某些数据安全标准(安全需求)。非功能性需求有时也被称为系统属性、质量属性或系统约束。
两者都是必不可少的,功能性需求解释了系统应该执行的任务,而非功能性需求解释了完成这些任务的方式、限制和其他期望。
五、什么是非功能性需求文档?
非功能性需求文档是软件需求规格说明(SRS文档)的关键组成部分。SRS描述了软件应具备的性能、约束特性及其实现方式,定义了用户对产品的性能、可靠性、安全性等方面的需求。
一份标准的SRS通常会包含以下部分:
序言:对系统进行简要概览,提供相关的背景信息,对需要提前定义的术语进行阐释。 总体描述:阐述项目的全局目标、商业价值及项目愿景。 详细需求:这部分明确规定了系统所需的特定属性、功能要求,以及与之相关的数据库需求等。
六、追踪和管理非功能性需求的模版
在整个软件和硬件开发生命周期中,团队需要共同参与定义功能性和非功能性需求。如果使用的工具各不相同,就会影响团队协作。统一化的需求管理方式能够提高效率,增强协作能力,确保团队开发出高质量、合规的产品。
使用统一需求管理方案的好处:
- 单一的真实数据源:团队成员能够共享相同的信息和数据,整个产品开发周期内信息的透明度较高。
- 实时更新的优点:可实时了解所有开发团队的进展,随时沟通,有助于团队做出更明智的决策,增强协作能力。
- 强大的可视化能力:我们可以看到测试如何追溯到需求,这样有助于提升产品质量和规范性。
- 复用已验证的需求:可以重用已验证过的需求,在不同产品上复制验证过的功能。
统一的需求管理平台(如PingCode等)可帮助我们更有效地定义和处理非功能性需求,提高产品开发效率。所有数据、对话和决策都可被集中在同一个系统中,确保了信息的一致性和准确性,有助于减少误解和混淆。统一的需求管理平台也可以避免重复输入数据或者重复讨论同一个问题,更好地跟踪项目的进度,避免错过重要的时间节点,可极大提高客户对产品的满意度。
需求管理指南:
需求管理: 需求管理主要内容 | 需求管理的重要性 | 采用敏捷方法进行需求管理 | 如何克服需求管理的 5 大挑战 | 更多
需求编写: 功能需求的示例和模板 | 采用 EARS 方法来改进需求工程 | 如何编写一份优秀的产品需求文档(PRD) | 功能性需求与非功能性需求的区别 | 有效需求的特征 | 更多
需求收集和管理流程: 需求工程概述 | 产品团队的需求分析指南 | 敏捷产品团队的 11 种需求收集技巧 | 定义和实施需求基线 | 更多 需求的可追溯性: 什么是需求可追溯性 | 可追溯性在现代产品和系统开发中的关键作用 | 如何创建和使用需求追溯矩阵 | 更多
需求确认和验证: 产品团队的需求验证和确认 | 更多
需求管理领域文章:
做好需求分析的4大关键认知 | 盘点国内9款热门需求管理系统 | 构建产品路线图的方法与工具 | 做好需求优先级判断的7种主流模型 | 采用敏捷方法进行需求管理 | 更多
相关文章:
什么是非功能性需求,它们如何影响产品开发?
我们在选购新车时,会预设一些选购的标准,比如GPS导航必须能够保存目的地,或者必须要买黑色的车。我们可能下意识以为这些是功能性需求,但实际上这些特性都是与用户体验相关的非功能性需求。 一、什么是非功能性需求(NFR)? 非功…...
Oracle jdk8 exe->zip
一、背景 目前Oracle网站对应jdk8安装windows仅存在exe安装包,对于某些用户一台机器上对应jdk版本需动态切换,故需使用zip版本jdk,更加方便,本文介绍如何从jdk对应exe提取zip。 二、步骤 下载jdk8对应exe安装包;使用…...
Android 命令行如何运行 JAR 文件
最近有位老哥问了一个问题,说如果将java的jar文件在Android中执行?这个其实很简单的一个问题,直接写个App放里面不就可以了么?但是人家说没有App,直接使用命令行去运行。说明这个需求的时候,把我给整懵了…...
5.4 webrtc的线程
那今天呢?我们来了解一下webrtc中的threed,首先我们看一下threed的类,它里边儿都含了哪些内容?由于threed的类非常大啊,我们将它分成两部分。 那第一部分呢,是我们看threed的类中都包含了哪些数据之后呢&a…...
vscode | linux | c++ intelliense 被弃用解决方案
每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提…...
HPE服务器常见报错信息以及解决方案
General controller issues 常规控制器问题 Controllers are no longer redundant 控制器不再冗余 HPE Dynamic Smart Array B140i drives are not found when RAID mode is disabled 禁用 RAID 模式时找不到 HPE 动态智能阵列 B140i 驱动器 Data located on drives accessed i…...
尚硅谷宋红康MySQL笔记 3-9
我不会记录的特别详细 大体框架 基本的Select语句运算符排序与分页多表查询单行函数聚合函数子查询 第三章 基本的SELECT语句 SQL分类 这个分类有很多种,大致了解下即可 DDL(Data Definition Languages、数据定义语言),定义了…...
Leetcode.2337 移动片段得到字符串
题目链接 Leetcode.2337 移动片段得到字符串 rating : 1693 题目描述 给你两个字符串 start 和 target ,长度均为 n n n 。每个字符串 仅 由字符 L、R 和 _ 组成,其中: 字符 L 和 R 表示片段,其中片段 L 只有在其左侧直接存在一…...
【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单
登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…...
【G-LAB】网络工程师常用排错命令详细版
网络工程师在日常配置中难免出现各种配置错误,比如接口地址配错、掩码位数配错、接口忘记no shutdown。除去这些基础错误,在配置各种路由选择协议时也会因为网络类型、邻居类型、区域和路由器层级等各种问题使邻居无法建立、路由无法传递进而导致网络不通…...
Linux 桌面版关闭GUI桌面环境
持久打开和关闭 通过CtrlAltF1-F6快捷键进入命令行界面 执行以下命令,持久关闭Ubuntu桌面版的GUI环境: sudo systemctl set-default multi-user.target执行以下命令,持久开启Ubuntu桌面版的GUI环境 通过CtrlAltF7快捷键进入GUI界面 sudo s…...
ChatGPT能代替搜索引擎吗?ChatGPT和搜索引擎有什么区别?
ChatGPT和搜索引擎是两种在信息获取和交流中常用的工具,ChatGPT是一种基于人工智能技术的聊天机器人,而搜索引擎是一种在互联网上搜索信息的工具。尽管它们都是依托互联网与信息获取和交流有关,部分功能重合,但在很多方面存在着明…...
PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…...
游戏反外挂方案解析
近年来,游戏市场高速发展,随之而来的还有图谋利益的游戏黑产。在利益吸引下,游戏黑产扩张迅猛,已发展成具有庞大规模的产业链,市面上游戏受其侵扰的案例屡见不鲜。 据《FairGuard游戏安全2022年度报告》数据统计&…...
基于郊狼算法优化的BP神经网络(预测应用) - 附代码
基于郊狼算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于郊狼算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.郊狼优化BP神经网络2.1 BP神经网络参数设置2.2 郊狼算法应用 4.测试结果:5.Matlab代码 摘要…...
【腾讯云 TDSQL-C Serverless 产品测评】全面测评TDSQL-C Mysql Serverless
全面测评TDSQL-C Mysql Serverless 文章目录 全面测评TDSQL-C Mysql Serverless前言什么是TDSQL-C Mysql Serverless初始化 TDSQL-C Mysql Serverless新建数据库建立数据表开启外网访问 兼容性SQL文件 导入导出navicat 直接在线传输 构建测试环境准备Python测试脚本准备 Jmeter…...
Qt应用开发(基础篇)——纯文本编辑窗口 QPlainTextEdit
一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...
数据结构-->栈
💕休对故人思故国,且将新火试新茶,诗酒趁年华💕 作者:Mylvzi 文章主要内容:详解链表OJ题 前言: 前面已经学习过顺序表,链表。他们都是线性表,今天要学习的栈也是一种线…...
强训第36天
C D C 193--1100 0001 194--1100 0010 196--1100 0100 198--1100 0110 能包括全部的且最小的为 1100 0xxx xxx为主机号,站三位 B MAC地址是绑定网卡的,全球唯一 D A C D IP网段 17为网络号 所以是 40.15.1aaa aaa(7位主机号).0 因为要划分2个子网 所以…...
PyTorch bug记录
1、RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same 这个错误是因为模型的权重是在GPU上,但是输入数据在CPU上。在PyTorch中,Tensor的类型和所在的设备(CPU或GPU)需…...
js中的正则表达式(一)
目录 1.什么是正则表达式 2.正则表达式在JavaScript中的使用场景: 3.正则表达式的语法: 1.什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象通常用来查找、替换那些符…...
免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件
免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具&am…...
使用Mybatis Plus进行DAO层开发
一、特性 Mybatis应该大家现在都知道,而且在项目中都在使用,因为这块ORM框架让大家能专心业务SQL的编写,数据库的连接,连接池的使用都不用关心,极大的提高了生产效率。 今天要给大家介绍的另外一款ORM框架࿰…...
Android中如何不编译源生模块
如果想让自己的app 替换系统的app 比如使用闪电浏览器替换系统的Browser 首先把闪电浏览器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…...
安装Vue_dev_tools
Vue控制台出现Download the Vue Devtools extension for a better development experience: 下载Vue_dev_tools,这里给出网盘链接,有Vue2和Vue3的,dev_tools 以Google浏览器为例 点击设置(就是那三个点)->扩展程序->管理扩…...
【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典)
【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典) 一、前言:二叉树的顺序结构二、堆的概念及结构三、堆的实现(本篇博客以实现小堆为例)3.1 准备工作3.2 初始化3.3 堆的插入3.3.1 向上调…...
css实现三角形的几种方法
css实现三角形的方法:1、使用边框实现三角形,利用透明边框和实色边框的组合,可以创建不同方向和大小的三角形;2、使用伪元素实现三角形,通过使用伪元素来创建一个占据父元素一半大小的实心三角形;3、使用tr…...
❤ Vue工作常用的一些动态数据和方法处理
❤ Vue工作常用的一些动态数据和方法处理 (1)动态拼接相对路径结尾的svg 错误写法一 ❌ 正确写法 🙆 <img :src"require(/assets//amazon/svg/homemenu${index}.svg)" style"height: 20px;display: block;margin: 0 au…...
SQLite的命令用法
学习数据库直达网站 https://www.runoob.com/sqlite/sqlite-tutorial.html(菜鸟教程) 这里只分享,基础操作,数据库创建打开……等等 用到查菜鸟教程即可 文章目录 学习数据库直达网站创建一个数据库方式1方式2 创建一个表格插入一…...
在jupyter notebook中使用海龟绘图
首先,安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后,安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外,您需要安装nodejs,并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…...
做的好的淘宝客网站/佛山网站建设公司
时间:2012年9月27日 地点:鼎好大厦10层 考试时长:1小时 一, 选择题 1,求z的结果 [cpp] view plaincopy print?#define N 3 #define Y(n) ((N1)*n) z 2*(NY(51)); 解答࿱…...
wordpress 插件 加速/怎么做电商生意
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候。等等,,, 先回顾一下以前用C#发邮件的内容:…...
wordpress 时间线插件/推广网站排名
本文基于ARM64平台代码分析,ARM64平台的内核,在编译链接时,kernel代码段被链接的位置是:KIMAGE_VADDR TEXT_OFFSET。我们可以通过查看vmlinux.lds.S链接文件查看具体内容: . KIMAGE_VADDR TEXT_OFFSET;.head.text …...
wordpress dedecms discuz/推广公司运营模式
mv功能说明:移动或剪切文件或目录,也可以改名语法:mv [-fiu] source destinationmv [options] source1 source2 source3... directory参数:-f :force强制的意思,若目标文件已经存在,不会询问而直…...
随县网站建设/知乎关键词排名优化工具
import matplotlib.pyplot as plt #这里应该把trace plot 出来,同时,还应该把峰值给plot出来; plt.figure() plt.plot(sigAv, colorred, labeldis) plt.plot(peaks, sigAv[peaks], "x") plt.savefig(output) plt.show()...
比较好的外贸网站/aso搜索优化
描述 给定一棵二叉树的前序遍历和中序遍历的结果,求其后序遍历。 输入 输入可能有多组,以EOF结束。 每组输入包含两个字符串,分别为树的前序遍历和中序遍历。每个字符串中只包含大写字母且互不重复。 输出 对于每组输入,用一…...