定义和实施需求基线

在传统的瀑布开发模式中,开发人员通常在初始阶段就确定需求并将之“冻结”,以便在不受需求变更影响的情况下进行开发。然而,实际经验告诉我们,这种方法在多数情况下并不适用,更为有效的方法是先建立需求基线,然后进行基线变更管理。

一、什么是需求基线?

需求基线是一个时间快照,代表的是已经讨论过、批准过并且承诺会在特定产品发布中实现的一系列需求共同认同。

这个“发布”可能是一个完全交付的产品,或者是该产品的任何中间开发阶段。当利益相关者对需求“签字确认”时,他们实际上在做的就是同意并承诺一个特定的需求基线(无论他们是否以这种方式思考)。

一旦项目团队建立了需求基线,团队应当遵循一个务实的变更控制流程,以对新增的功能需求和修改或删除现有需求进行合理的商业和技术决策。

变更控制流程并不是为了压制变化,而是为了提供信息给决策者,使他们能够及时、适当地做出决定,修改计划的功能。这个计划的功能就是基线。

通常情况下,基线会被赋予一个唯一的名称,这样所有的项目参与者都可以明确无误地引用它。良好的配置管理实践可以让团队准确地重构任何之前的基线及其所有的组件。

二、实施需求基线

范围定义是为了区分项目中包含和不包含的部分,而需求基线则明确标识出项目将实施的需求规范。基线不是一个实物,而是一份定义清楚的物品清单。一种可能的存储位置是软件需求规范(SRS)文档。

如果SRS文档只包含并且全面覆盖了特定产品发布的所有需求,那么这个SRS就构成了该发布的需求基线。然而,SRS文档可能还会包含一些额外的,优先级较低的需求,这些需求是为了之后的发布准备的。

反之,一个大项目可能需要多个软件、硬件和接口需求规范,以完全定义基线的组成部分。目标是提供清晰的信息,让项目的利益相关者了解即将发布的内容到底是什么。

也许你是在一个需求管理工具(如PingCode等)中而不是在文档中储存你的需求。在这种情况下,你可以将基线定义为计划用于特定发布的数据库中的需求的子集。

使用需求管理工具储存需求,可以维护一组聚合的当前承诺的需求和计划的未来需求。一些商业需求管理工具包括基线功能,以区分哪些需求(可能是每个需求的特定版本)属于某个特定的基线。

另一种方法,你可以在需求管理工具中定义一个需求属性,用来保存发布编号或其他基线标识符。将需求从一个基线转移到另一个基线,只需要简单地改变那个需求属性的值。

当每个需求只属于一个基线时,这种属性方法就有效。然而,如果你正在并行开发产品的多个版本,如家庭版和专业版,你可能需要将同一个需求(或不同版本的同一需求)分配到多个基线。在这种复杂的基线管理中,工具的支持是必要的。

在迭代开发生命周期中,每个迭代的基线只会代表整个系统功能的一部分。

例如,我们的团队曾经在一个小项目中采取了这种方法。这个项目每三周发布一次。对于每个周期,业务分析员都会指定在接下来的三周内需要设计、编码、集成和验证的软件需求。因此,每个需求基线都非常小。在典型的敏捷方法中,随着开发者定期向用户发布有用的版本,产品逐渐增长到完全的功能。

三、什么时候执行基线

业务分析师有时会对确定需求基线的时机感到困扰。这是一个重要的决定,因为确定基线会有以下几个影响:

正式的变更控制开始:变更请求是对已确定的基线提出的。因此,基线为每个提出的变更提供了参照点。在你确定任何项目基线之前,需要确保变更控制流程及其参与者都已准备就绪。

项目经理确定所需的人员水平和预算:软件项目需要管理五个维度:特性、质量、时间表、人员和预算。一旦在基线中确定了特性和质量目标,项目经理就会调整其余三个维度以完成项目的目标。它也可以反向操作。如果员工、预算和/或时间表是由外部力量预先设定的,基线的内容必然会受限,以适应那些限制的项目框架。

项目经理做出时间表承诺:在确定基线之前,需求仍然是不稳定和不确定的,因此估计也同样是不稳定和不确定的。一旦建立了基线,发布的内容应被足够理解,以便管理者可以做出实际可行的承诺。管理者仍然需要预见需求的增长(根据他们的需求管理计划),并在他们承诺的时间表中包含合理的应急缓冲。

过早地确定需求基线可能会推动变更过程进入过度运行状态。实际上,在定义基线后收到大量的变更请求可能是一个信号,表明你的需求收集活动是不完整甚至无效的。另一方面,等待太久才确定基线可能是分析瘫痪的一个迹象:也许业务分析师过于努力地完善需求集,然后再交给开发团队。

我们要注意:需求的收集试图定义一套足够好的需求,以让团队可以在可接受的风险水平下继续开发。可以使用表1中的清单来判断你何时准备好定义需求基线,作为继续开发工作的坚实基础。

业务规则是否确定了影响系统的业务规则,以及是否指定了执行或遵守这些规则的功能。
变更管理请确认已建立了能有效处理需求变更的变更控制流程,同时,要确认所要使用的变更控制工具已经配置完成,并对用户进行了相应的培训。
客户意见与关键的客户代表进行确认,了解是否在上次沟通后需求有所改变。是否有新的业务规则生效?现有规则是否有所调整?需求的优先级是否发生变动?是否有新的客户,他们的需求与旧的客户是否不同?
接口检查系统是否有足够的功能去管理和操作用户、其他软件系统、硬件组件和通信服务封外部连接和交互。
模型确认和用户代表一起审核所有的分析模型,并通过测试用例检查系统是否能允许用户执行他们需要的活动。
原型如果制作了原型,务必确保有合适的客户进行评估。需求规范说明是否已经根据这些反馈进行了调整?
一致性最后,检查所定义的需求集能否实现项目的业务目标,确保业务需求、用户需求和功能需求之间的一致性。
审查确保所有下游的“需求消费者”进行了需求审查,这些“消费者”包括设计师、开发人员、测试人员、文档编写人员、辅助编写人员、人因工程师以及其他依据需求进行工作的人员。
范围确认所有考虑加入基线的需求都在当前确定的项目范围之内。因为项目范围在项目初期确认,可能已经发生了变化。
TBDs(待定部分)需要检查文档中是否有标记为”TBD”的部分,”TBD”通常表示某些细节或需求尚未确定或尚未完全定义。
模板确保完成了软件需求规范(SRS)文档模板的每一部分,并检查是否有内容并不适用于本项目。常见的遗漏包括质量需求、约束和假设。
用户类别核查所有用户类别的代表是否都给出了反馈。
可验证性 需要有明确的方式来验证每个需求是否得到了准确的实现,用户接受标准(User Acceptance Criteria)是非常有用的工具。

表 1. 定义需求基线前需要考量的因素

需求永远不可能百分之百完美。业务分析师和项目经理需要评估在已知的约束下,是否能够实现所定义的客户需求,而设定基线有助于确保所有利益相关者对项目的预期成果达成一致意见。

需求管理

 需求管理指南: 

需求管理: 需求管理主要内容  |  需求管理的重要性  |  采用敏捷方法进行需求管理  |  如何克服需求管理的 5 大挑战  |  更多 

需求编写: 功能需求的示例和模板  |  采用 EARS 方法来改进需求工程  |  如何编写一份优秀的产品需求文档(PRD) |  功能性需求与非功能性需求的区别  |  有效需求的特征  |  更多 

需求收集和管理流程: 需求工程概述  |  产品团队的需求分析指南  |  敏捷产品团队的 11 种需求收集技巧  |  定义和实施需求基线  |  更多  需求的可追溯性: 什么是需求可追溯性  |  可追溯性在现代产品和系统开发中的关键作用  |  如何创建和使用需求追溯矩阵  |  更多 

需求确认和验证: 产品团队的需求验证和确认  |  更多 

需求管理领域文章:

 做好需求分析的4大关键认知  |  盘点国内9款热门需求管理系统  |  构建产品路线图的方法与工具  |  做好需求优先级判断的7种主流模型  |  采用敏捷方法进行需求管理  | 更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC 学习总结

学习目标 了解 Spring MVC 是什么,为什么要使用它或者说它能解决什么问题,其与 Spring 是什么关系。理解为什么配置 Spring MVC 的前端控制器的映射路径为 “/” 会导致静态资源访问不了,掌握怎么处理这个问题。掌握基于注解方式使用 Spring…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题,确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具: 调试工具: 浏览器开发者工具: 现代浏览器(如Chrome、Firefox、Safari等&#…

深度学习2.神经网络、机器学习、人工智能

目录 深度学习、神经网络、机器学习、人工智能的关系 大白话解释深度学习 传统机器学习 VS 深度学习 深度学习的优缺点 4种典型的深度学习算法 卷积神经网络 – CNN 循环神经网络 – RNN 生成对抗网络 – GANs 深度强化学习 – RL 总结 深度学习 深度学习、神经网络…

Hbase-技术文档-java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)

问题描述: 在使用spring-boot操作habse的时候,在对habse进行操作的时候出现这个问题。。 报错信息如下: 第一段报错: 第二段报错: java.net.UnknownHostException: e64682f1b276 问题定位解读: 错误 ja…

Android 13 - Media框架(7)- NuPlayer::Source

Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,我们这一节将会了解 NuPlayer 中的通用 Source(GenericSource)关注本地…

Nginx配置文件详解

Nginx配置文件详解 1、Nginx配置文件1.1主配置文件详解1.2子配置文件 2、全局配置部分2.1修改启动的工作进程数(worker process) 优化2.2cpu与worker process绑定2.3 PID 路径修改2.4 修改工作进程的优先级2.5调试工作进程打开的文件的个数2.6关闭master-worker工作…

postman接口自动化测试框架实战!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用…

git冲突处理(已commit但忘pull的情况)

一般来说,你只要记得先拉再传就不会有问题,但如果pull后没有立刻push,这段时间刚好有人push了,就会导致冲突,那么你可以使用以下方法进行版本回退之后合并代码 步骤: git log查看所有的commit&#xff0c…

为什么Spark UI上显示的Executor数量和Cores与请求值完全不符?

作为《为什么 Spark UI 上显示的 Executor Cores 与 Yarn 上的 vCore 数量不符?》的姊妹篇,我们再来看另外一种更“离奇”的情况,这种情况下,Spark UI上显示的Executor数量和每个Executor占用的核数与请求值完全对应不上。如果再仔细观察一下可以发现如下规律:实际分配的E…

SpringBoot+Vue项目添加腾讯云人脸识别

一、引言 人脸识别是一种基于人脸特征进行身份认证和识别的技术。它使用计算机视觉和模式识别的方法,通过分析图像或视频中的人脸特征,例如脸部轮廓、眼睛、鼻子、嘴巴等,来验证一个人的身份或识别出他们是谁。 人脸识别可以应用在多个领域…

《Kubernetes故障篇:Container runtime network not ready》

一、环境信息 操作系统K8S版本containerd版本Centos7.6v1.24.17v1.6.12 二、背景信息 1、通过以下命令检查网络插件的状态,发现网络插件coredns处于pending状态 2、通过以下命令检查kubelet服务状态,发现Container runtime network not ready等报错 三…

05.sqlite3学习——DML(数据管理:插入、更新、删除)

目录 DML(数据管理:插入、更新、删除) 插入 更新 删除整个表 语法 实例 DML(数据管理:插入、更新、删除) 数据操纵(DML):用于增、删、改数据 作用:负…

wxpython:wx.html2 是好用的 WebView 组件

wxpython : wx.html2 是好用的 WebView 组件。 wx.html2 是wxPython扩展模块中封装得干净漂亮的模块之一,它被设计为允许为每个端口创建多个后端,尽管目前只有一个可用。它与wx.html.HtmlWindow 的不同之处在于,每个后端实际上都是一个完整的…

C++中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

C中<iostream> 的cin >> str 和<string>的getline(cin, str) 用来读取用户输入的两种不同方式的不同点 &#xff1c;string&#xff1e;的getline()函数语法如下【https://cplusplus.com/reference/string/string/getline/】&#xff1a; istream& getl…

抖音seo短视频矩阵系统源码开发源代码分享--开源-可二开

适用于抖音短视频seo矩阵系统&#xff0c;抖音矩阵系统源码&#xff0c;短视频seo矩阵系统源码&#xff0c;短视频矩阵源码开发&#xff0c;支持二次开发&#xff0c;开源定制&#xff0c;招商加盟SaaS研发等。 功能开发设计 1. AI视频批量剪辑&#xff08;文字转语音&#x…

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets

本文主要面向UMG以及Common UI的初学者 文章目录 效果展示概要Activate和Deactivate可见性绑定UI动画设置Common Activatable Widget的默认焦点 效果展示 概要 这个例子非常简单&#xff0c;定义了13个Common Activatable Widget CommonUI_ActivatableWidgets相当于一个容器包…

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型&#xff08;LLM&#xff09;&#xff08;如ChatGPT和GPT-4&#xff09;的兴起&#xff0c;现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人&#xff0c;并且可以浏览堆积如山的文档&#xff0c;为您的输入提供准确的响应。 在本系列中&#xf…

在c++ 20下使用微软的proxy库替代传统的virtual动态多态

传统的virtual动态多态&#xff0c;经常会有下面这样的使用需求&#xff1a; #include <iostream> #include <vector>// 声明一个包含virtual虚函数的基类 struct shape {virtual ~shape() {}virtual void draw() 0; };// 派生&#xff0c;实现virtual虚函数 str…

《Linux从练气到飞升》No.18 进程终止

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

sql:SQL优化知识点记录(三)

&#xff08;1&#xff09;explain之select_type和table介绍 简单的查询类型是&#xff1a;simple 外层 primary&#xff0c;括号里subquery 用到了临时表&#xff1a;derived &#xff08;2&#xff09;explain之select_type介绍 trpe反映的结果与我们sql是否优化过&#xff…