产品团队的需求分析指南
需求分析是软件开发流程中需求识别与管理的关键环节,需求分析的目的在于确保所有产品需求准确地代表了利益相关者的需求和要求。选择合适的需求分析方式可以帮助我们获取准确的产品需求,从而保证我们所交付的成果与利益相关者预期相符。
一、什么是需求分析?
需求分析是一个发现、理解和整理利益相关者对于产品的需求和期望的过程。其主要目标是为了精确地捕捉、解读并展示客户、用户和其他利益相关者的需求,进而将这些需求整理成为一组详尽的产品需求。为了取得理想成效,必须检验产品需求集是否具备良好的需求特性,如必要性、明确性、完整性、一致性、正确性、可行性以及可验证性,并检验其是否真实地表达了符合利益相关者的期望。
二、如何做好需求分析?
利益相关者通过需求和要求表达他们对产品的期望。需求代表了利益相关人希望产品解决的问题或抓住的机遇,而要求是利益相关人定义的顶级产品要求,用于传递对产品期望,是为了满足他们的要求。通常,利益相关者的需求用自然语言表达,不使用“应当”,而利益相关者的要求使用“应当”来确保他们被视为产品必须满足的约束性要求。
在定义产品需求之前,首先需要定义和理解利益相关者的需求和要求,产品将按照这些需求进行设计和构建。由于有多个利益相关者,将存在多套利益相关者的需求和要求。所以项目团队需要去识别这些需求和要求,并解决冲突、不一致和其他问题。最终确定的一套需求必须能准确的代表利益相关者对产品的要求,用以指导产品的开发。
需求追踪对于需求分析过程至关重要。它被用来确保每个需求清楚地传达了其来源的意图。没有追踪,几乎无法知道软件产品是否满足了其利益相关者的需求、目标和约束。需求分析可能执行得非常完美,但如果没有追踪需求到其来源,就无法证明你拥有完整、正确的需求集。
因此,需求分析的最佳实践是确保每个需求都可以追溯到所有对应的工件。这些工件不仅包括他们的来源,还包括下游的工件,包括设计、产品验证计划和产品确认计划。
另一个同样重要的需求分析最佳实践是执行预定的流程。仔细执行每个步骤可能是产品成功满足利益相关者需求或失败的区别。
三、需求分析流程
需求分析过程通常包括以下七个步骤:
1.确定利益相关者
第一步是准确地确定项目的关键利益相关者。这包括内部和外部的客户,用户,监管机构,以及参与产品开发的所有利益相关者。利益相关者是产品必须满足的需求和要求的来源。
2.收集利益相关者的需求和要求
在这个需求分析过程的步骤中,也被称为需求和要求收集,团队与利益相关者合作,确定他们的需求和要求。
3.需求和要求建模
团队可以通过创建需求和要求的视觉表示或图表,作为他们的分析一部分,来引导产品需求的定义,使用案例和用户故事的制定。这些视觉表示和图表用于向利益相关者征求反馈,并在定义和确定产品需求前解决问题,冲突和不一致。
4.回顾
项目团队会回顾在需求收集、图表制作和建模过程中收集的数据和信息。特别关注理解驱动因素和约束,以更好地理解开发产品的可行性和风险,评估是否有遗漏的内容,以及设定预算和时间表。
5.定义一套需求集
项目团队需要确认一套完整的利益相关者需求和要求集合,以反映他们对产品的期望、目标、驱动因素和约束。
6.定义产品需求
在此阶段,团队整合针对产品设计和构建的需求。好的需求的标志是具有良好的结构性特征。团队成员都应了解如何编写优质需求。
7.批准和设定基线
需求分析过程的最后一步是获得所有主要利益相关者(或利益相关者团体的代表)对整合的要求集和衍生的产品需求集的审批。这份正式的协议确保了每个人都清楚按照什么标准去验收和测试产品,以及预期的成本和时间表,有助于避免后续开发过程中出现需求理解不一致和项目范围扩大等问题。
四、需求分析中的挑战
由于在需求分析过程中变更经常发生,所以我们可能要不断重复上述步骤。每当新功能被引入时,就要重复这些步骤,从而生出额外的需求和要求。解决这个问题的方法就是要遵循既定的步骤,并在项目开始时对整体产品和每个功能进行审批确认,这样就可以降低需求变更的风险。
需求变更的一个原因可能是未能覆盖所有利益相关者。
仅关注客户或用户就可能忽视其他利益相关者的需求和要求。因为利益相关者的很多,需求表述可能会不一致、或者相互冲突。如果这些问题在开发早期未能解决,就会导致需求变更。在为要求和产品需求集设定基线之前,充分利用各种可视化工具、图表和模型可以确保需求完整、准确且一致,否则可能会导致需求变更发生以及高成本且耗时的返工。
另外,在看到产品如何运行之前,有些利益相关者可能无法准确地知道自己的需求。
项目约束也可能导致解决方案的调整。敏捷团队会持续地进行迭代和更新,也就是说评估需求和要求的过程一直在持续进行。上述图表和建模是与利益相关者互动、更好理解他们的需求的有效方式。我们的目标是在第一次流程后尽可能地全面捕捉需求,以尽可能减少返工。
五、各种类图表和建模技术的优缺点
在需求获取、图表制作和建模过程中,有各种各样的技术可供选择。其中一些比其他的更有益。在这里,我们将回顾一些流行的技术,并指出每种技术的优点和缺点。
1.流程图
流程图是用来展示相关活动的顺序流程和控制逻辑的图表,可用于表示数据流、系统内部和外部的交互,以及其他相关信息。
优点:
- 提供多种格式选择:线性、跨职能、自上而下
- 易于团队成员创建和理解
- 突出关键过程
缺点:
- 变更管理耗时,需要重新绘制流程图以适应变更。
- 复杂的过程会导致流程图密集,难以理解。
2.数据流图
数据流图展示了信息通过系统的流动。数据流图的组成部分包括过程、流、存储和终止节点。
优点:
- 可以在分析过程的需求获取步骤中创建,以定义项目的范围。
- 技术人员和非技术人员都能理解。
缺点:
- 创建它们可能会耗费大量时间,特别是对于复杂的软件应用。
- 物理考虑因素并不会包含在数据流图中。
3.角色活动图:
角色活动图将业务和软件开发过程描述为角色执行的一系列操作。这些活动与特定的角色关联起来,并按职责进行分组,用于描述用例、工作流、业务流程或软件协议。
优点:
- 解释活动中各个步骤及其执行顺序
- 支持跨角色的沟通
缺点:
- 每个工作流都需要一个新的图,否则它们会变得过于复杂。这使得很难全面了解系统
- 这些图表无法提供关于对象如何行为或协作的详细信息
4.统一建模语言 (UML)
统一建模语言(UML)是一种在软件工程中用于建模、可视化、开发和记录软件系统的标准化语言,使用一套图形表示法来描述系统的设计。在需求分析过程中,UML图表可对规范进行建模。简单来说,就是用图形的方式来描述系统的需求和功能。UML图可以分为两种类型的模型:行为模型,提供关于软件应用将做什么的信息;结构模型,提供关于构成系统部分的洞见。
优点:
- 多种UML图类型可供选择,如用例图、序列图、交互图、类图等
- 可直接与需求工具集成
缺点:
- UML图需要与软件代码保持同步,增加了额外的工作量,必须持续维护
- 流程复杂可能导致图表过于复杂,不好理解
5.业务流程建模和符号 (BPMN)
业务流程建模和符号 (BPMN) 建立在流程图技术基础之上,如UML的活动图。使用特定的符号标准来创建图形,包括流对象、连接对象、泳道和工件,有助于简化对业务流程的理解,回答谁执行活动和执行所需的数据元素等问题。
优点:
- 目标是被所有业务利益相关者理解,但同时也能表示复杂的流程语义
- 大多数建模工具都支持BPMN
缺点:
- 仅适用于业务流程的建模概念,不适用于非流程的概念。
6.甘特图
在需求分析中,甘特图有助于协调、规划和跟踪项目任务。需要执行的任务沿着垂直轴列出。水平轴列出了给定任务的分配时间以及执行这些功能的人员或团队。甘特图为项目的时间表和所需资源提供了一个视觉表示。
优点:
- 一个图表可以跟踪多个活动,即使这些活动是并行的
- 可视化展示了项目实际所需时间和所需资源
缺点:
- 无法提供所有任务的单一视图
- 分配给任务的时间并不代表任务所涉及的工作量
- 对于复杂的软件项目,创建甘特图非常耗时,而且很难及时、同步更新信息
7.功能建模 (IDEF) 图
IDEF是一套建模语言,广泛应用于功能建模、数据建模、模拟、面向对象分析/设计和知识获取等领域。其目标是通过探索流程功能关系与子/父系统之间的功能关系来理解整个系统或组织的运作方式。
优点:
- IDEF几乎适用于任何环境、行业和技术领域。
- 图表易于技术和非技术团队成员理解。
缺点:
- 难于整合不同的IDEF技术
- 只是业务分析工具,不是一套完善的软件应用程序开发方法论
8.差距分析
差距分析,也称为需求分析、需求评估或需求差距分析,这种技术有助于分析软件应用的性能差距,以验证是否成功满足了业务需求。差距分析表达的是当前状态和目标状态之间的差异,识别项目所处的位置以及还需要做什么。
优点:
- 确保满足了业务需求或数据需求
- 帮助发现哪些领域需要关注或额外的资源
缺点:
- 成功取决于执行分析的人的技能,而虽然差距可能被揭示,但其真正的原因可能仍然未被发现
六、不同需求图表和建模技术的不同优势
在选择需求图表和建模技术时,我们应考虑其各自的优势:一些需求图表和建模技术更适合分析业务需求,而其他的则更适合发现用户需求。
BPMN最适合发掘和明确业务需求;而差距分析作为一种独特的分析方法,则适合揭示当前状态与期望状态之间的差异,从而引出一系列用户需求以填补差距。其结果可能会补充一系列用户需求,以帮助业务填补这个差距。
上文虽然未提及“客户旅程图”,但它也是获取业务需求非常有效的工具。客户旅程地图能以故事的形式描绘出客户与企业之间随时间变化的关系,能帮助我们识别出客户所遇到的问题,进而指引出以改善这些问题为目标的用户需求。然而,如果我们只对一种类型的利益相关者进行分析,就可能会忽视其他客户需求。最好用”利益相关者的声音”(Voice of Stakeholder, VOX),来揭示所有相关利益相关者与企业之间的关系变化,帮助我们识别所有利益相关者(而不仅仅是客户)所遇到的问题,从而引导我们明确产品需求,以解决这些问题。
数据流程图等技术可有效的帮助我们寻找和理解用户需求。如上文所述,数据流程图在项目早期阶段创建,可为我们提供关于特定流程中数据流动的高级视图。用例和用户故事则是从用户角度收集软件需求的优秀工具,但是只关注用户的需求,而不需要展示满足这些需求所需要的产品功能和特性。
七、简化需求分析过程
在需求分析过程中,图表、模型、需求集和产品需求集是有效地定义和管理需求的关键成果。产品需求集具体描述了正在开发的软件需要满足哪些特性和预期行为才能满足利益相关者的需求。确定产品需求集基线有助于我们精确了解项目细节,从而减少不必要的时间消耗和返工。
越来越多的企业摒弃传统文档形式,选择需求管理软件工具来处理需求。这是因为基于文档的方法缺乏灵活性和可扩展性,无法应对复杂的敏捷项目,尤其是那些需要证明合规性的高监管行业。文档无法及时更新信息以确保信息一致,会出现人为失误,无法保证数据完整,无法进行版本控制以及建立和维护追溯性。总而言之,文档无法确定一个需求是否得到了满足。
开发复杂产品的敏捷团队,特别是受到高度监管的行业,更适合采用需求管理软件应用来简化需求定义和管理过程。需求定义和管理解决方案,如 PingCode,能够自动定义、管理需求,建立可追溯性和验证复杂产品需求,从而简化整个需求定义和管理的流程。
通过实时需求和数字线程,PingCode 能帮助团队实现实时协作,解决基于文档进行需求分析所带来的问题,即使在受到严格监管行业,也能自动实现需求可追溯性,以验证所完成的工作。
需求管理
需求管理指南:
需求管理: 需求管理主要内容 | 需求管理的重要性 | 采用敏捷方法进行需求管理 | 如何克服需求管理的 5 大挑战 | 更多
需求编写: 功能需求的示例和模板 | 采用 EARS 方法来改进需求工程 | 如何编写一份优秀的产品需求文档(PRD) | 功能性需求与非功能性需求的区别 | 有效需求的特征 | 更多
需求收集和管理流程: 需求工程概述 | 产品团队的需求分析指南 | 敏捷产品团队的 11 种需求收集技巧 | 定义和实施需求基线 | 更多 需求的可追溯性: 什么是需求可追溯性 | 可追溯性在现代产品和系统开发中的关键作用 | 如何创建和使用需求追溯矩阵 | 更多
需求确认和验证: 产品团队的需求验证和确认 | 更多
需求管理领域文章:
做好需求分析的4大关键认知 | 盘点国内9款热门需求管理系统 | 构建产品路线图的方法与工具 | 做好需求优先级判断的7种主流模型 | 采用敏捷方法进行需求管理 | 更多
相关文章:
产品团队的需求分析指南
需求分析是软件开发流程中需求识别与管理的关键环节,需求分析的目的在于确保所有产品需求准确地代表了利益相关者的需求和要求。选择合适的需求分析方式可以帮助我们获取准确的产品需求,从而保证我们所交付的成果与利益相关者预期相符。 一、什么是需求…...
Python算法——排序算法(冒泡、选择、插入、快速、堆排序、并归排序、希尔、计数、桶排序、基数排序)
本文章只展示代码实现 ,原理大家可以参考: https://zhuanlan.zhihu.com/p/42586566 一、冒泡排序 def bubble_sort(lst):for i in range(len(lst) - 1): # 表示第i趟exchange False # 每一趟做标记for j in range(len(lst)-i-1): # 表示箭头if ls…...

[Linux]文件描述符(万字详解)
[Linux]文件描述符 文章目录 [Linux]文件描述符文件系统接口open函数close函数write函数read函数系统接口与编程语言库函数的关系 文件描述符文件描述符的概念文件数据交换的原理理解“一切皆文件”进程默认文件描述符文件描述符和编程语言的关系 重定向输出重定向输入重定向追…...

RenderTarget导出成图片,CineCamera相机
一、获取Cinecamera相机图像 1.1、启用UE自带插件 1.2、在UE编辑器窗口栏找到Composure合成,打开窗口 1. 3、右键空白处,新建合成,默认名称为 0010_comp;再右键新建的 0010_comp,新建图层元素 CGLayer层,默…...

深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制
目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空…...

3D 碰撞检测
推荐:使用 NSDT场景编辑器快速搭建3D应用场景 轴对齐边界框 与 2D 碰撞检测一样,轴对齐边界框 (AABB) 是确定两个游戏实体是否重叠的最快算法。这包括将游戏实体包装在一个非旋转(因此轴对齐)的框中&#…...

Unity Canvas动画不显示的问题
问题描述: 我通过角色创建了一个walk的动画,当我把这个动画给到Canvas里面的一个image上,这个动画就不能正常播放了,经过一系列的查看我才发现,canvas里面动画播放和非canvas得动画播放,他们的动画参数是不一样的。一个…...

NSSCTF2nd与羊城杯部分记录
文章目录 前言[NSSCTF 2nd]php签到[NSSCTF 2nd]MyBox[NSSCTF 2nd]MyHurricane[NSSCTF 2nd]MyJs[NSSCTF 2nd]MyAPK羊城杯[2023] D0nt pl4y g4m3!!!羊城杯[2023]ezyaml羊城杯[2023]Serpent羊城杯[2023]EZ_web羊城杯[2023]Ez_misc总结 前言 今天周日,有点无聊没事干&a…...

数据库(一) 基础知识
概述 数据库是按照数据结构来组织,存储和管理数据的仓库 数据模型 数据库系统的核心和基础是数据模型,数据模型是严格定义的一组概念的集合。因此数据模型一般由数据结构、数据操作和完整性约束三部分组成。数据模型主要分为三种:层次模型,网状模型和关…...

vue从零开始学习
npm install慢解决方法:删掉nodel_modules。 5.0.3:表示安装指定的5.0.3版本 ~5.0.3:表示安装5.0X中最新的版本 ^5.0.3: 表示安装5.x.x中最新的版本。 yarn的优点: 1.速度快,可以并行安装 2.安装版本统一 项目搭建: 安装nodejs查看node版本:node -v安装vue clie : np…...

dji uav建图导航系列(三)模拟建图、导航
前面博文【dji uav建图导航系列()建图】、【dji uav建图导航系列()导航】 使用真实无人机和挂载的激光雷达完成建图、导航的任务。 当需要验证某一个slam算法时,我们通常使用模拟环境进行测试,这里使用stageros进行模拟测试,实际就是通过模拟器,虚拟一个带有传感器(如…...

PixelSNAIL论文代码学习(1)——总体框架和平移实现因果卷积
文章目录 引言正文目录解析README.md阅读Setup配置Training the model训练模型Pretrained Model Check Point预训练的模型训练方法 train.py文件的阅读model.py文件阅读h12_noup_smallkey_spec模型定义_base_noup_smallkey_spec模型实现一、定义因果卷积过程通过平移实现因果卷…...

Python大数据处理利器之Pyspark详解
摘要: 在现代信息时代,数据是最宝贵的财富之一,如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架,为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…...

S905L3A(M401A)拆解, 运行EmuELEC和Armbian
关于S905L3A / S905L3AB S905Lx系列没有公开资料, 猜测是Amlogic用于2B的芯片型号, 最早的 S905LB 是 S905X 的马甲, 而这个 S905L3A/S905L3AB 则是 S905X2 的马甲, 因为在性能评测里这两个U的得分几乎一样. S905L3A/S905L3AB 和 S905X2, S905X3 一样 GPU 是 G31, 相比前一代的…...

stack和queue容器
1 stack 基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈中进入数据称为 — 入栈 push 栈中弹出数据称为 — 出栈 pop 2 stack 常用…...

面向对象基础
文章目录 面向对象基础一.面向对象介绍二.设计对象并使用三.封装四.This关键字五.构造方法六.标准的Javabean类七.对象内存图八.基本数据类型和引用数据类型九.成员和局部 面向对象基础 一.面向对象介绍 面向:拿,找 对象:能干活的东西 面向对象编程:找东西来做对应的事情 …...

spring集成mybatis
1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列:mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…...

抽象轻松c语言
目 c语言 c程序 c语言的核心在于语言,语言的作用是进行沟通,人与人之间的信息交换 人与人之间的信息交换是会有信息空白(A表达信息,B接受信息,B对信息的处理会与A所以表达的信息具有差距,这段差距称为信…...

Redis布隆过滤器原理
其实布隆过滤器本质上要解决的问题,就是防止很多没有意义的、恶意的请求穿透Redis(因为Redis中没有数据)直接打入到DB。它是Redis中的一个modules,其实可以理解为一个插件,用来拓展实现额外的功能。 可以简单理解布隆…...
写代码时候的命名规则、命名规范、命名常用词汇
版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的,因为本人在学习的过程中也经常出现类似的问题,并且觉得Up主的视频讲解很好,做此笔记反复学习,若有侵权请联系删除,此推荐视频地址:【改善丑陋的…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...