前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >敏捷过程中的需求分析

敏捷过程中的需求分析

作者头像
PM吃瓜
发布2023-03-02 19:41:14
6830
发布2023-03-02 19:41:14
举报
文章被收录于专栏:PM吃瓜(公众号)PM吃瓜(公众号)

瀑布和RUP 强调结构化方法与重型的管理策略,往往在内心中拒绝变更,把变更作为被管理甚至被“管制”的对象;而为了尽可能避免变更,常常要求开发之前的需求获取、分析与定义要完整无误且精确。

这是一种理论上的理想状态,尽管我们可以采取诸如CMMI的一些理念及过程改进模板对其管理,但实际上往往会出现与用户商业价值要求的脱节;而为达成此目标,使得前期的需求开发工作变得小心翼翼,最终有可能在压力与时间约束下难免简单化而草草了事,在后期又不能得到及时的修正,从而形成一个隐患。

软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求( business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。

用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用用例(use case)文档或方案脚本(s c e n a r i o)说明中予以说明。

功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。所谓特性(feature )是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。

3.1需求的参与者

敏捷需求分析过程的参与者,包括客户/用户、需求分析人员(业界一般也称之为商务分析师或业务分析师,business Analyst,本文并不讨论词汇的细致差异,下文统一简称BA)、开发人员、测试人员,其他相关的角色有项目管理者等。

在《敏捷宣言》(Manifesto for Agile Software Development)中,强调了客户一起现场工作的重要性。

而在企业实际的实施过程中,由于限制,项目经理及实施人员,以及BA——如果有的话,在虚拟团队中,他们演绎客户的角色,从而使得“客户”也更好地“纳入”到了项目团队中。但应该清楚,这种纳入并不能真正代替真实的客户参与。

对于客户无法全程现场参与的情况,BA的出现是一种弥补。BA最重要的职责就是与客户交谈,了解和分析需求,将其制作成用户故事(userstory)并将需求传递给开发人员

同时,BA也要在某种参与度较深的情况下代替客户负责功能验收测试(Acceptance test)。而对内,BA显然扮演了客户,那么除了需求提供者的职责,如果需要的话,相应地也要有评价和验收否决的权利。当然,这项工作可以分解为另外的角色来进行。

开发、测试人员进入需求团队,便于他们理解用户故事或者典型的RUP式的用例。一个完整描述的用例可以很方便地导出测例(test case)。而用例和测例是一致的,它描述在一个具体业务场景中可见的需求特征。我们可以根据这样的可见性写出功能测试,从而驱动这个用户故事的开发,这被称为 Acceptance Driven Development。

从整个过程来说,分析和实现的过程就是场景拟合和检验,以及类似于XP中结对式的及时纠偏。各种角色的积极参与在不同角度和层次下的场景拟合,表明需求不是程序员的事情,也不是寄望于抽象出一个BA的角色甚至实例化为一个职位,就可以全能地做出需求定义。

对于角色及其参与方式,我们可以比较如下:

角色及职责

传统的需求参与

敏捷的需求参与

用户/客户

需求的提供者

需求演进的参与者

用户的主要参与方式

陈述

遵循游戏规则的积极的交互参与

BA

需求的定义者

需求的组织者

BA的主要参与方式

前期的调查获取和整理成文档

参与全周期的迭代与演进

开发

需求的接受者和实现者

场景拟合者与改进者

开发的主要参与方式

被传导需求并使之功能化

完成完整的业务场景实现

测试

功能测试者

场景测试者(需求测试者)

测试的主要参与方式

找出软件的显性的bug

找出不满足需求逻辑和不能拟合场景的缺陷

3.2需求的划分

开发人员总是希望能明确地知道系统分几个模板,功能是什么,但这些信息并不是需求的本身。基于模块和功能分解,专门的需求分析人员会使之流于粗放——这种情况是最多见的,功能划分使需求单位粒度较大,不足以描述其特征;而传统由开发人员来做的分析,往往会越过业务价值层面而转入底层的设计。

敏捷需求分析中的划分,将以独立业务价值为基础,划分为一个个用户故事(可以去类比理解UP意义上的use case),它可以是很小颗粒的业务与特征集,也可能会跨越传统的子模块边界。用户故事以参与者为中心,描述了参与者“作为(系统的一个涉众),想要(做一件事),从而(达到一个业务价值)”的集合。用户故事是可见的业务价值,而不是功能描述。每个用户故事的粒度和开发工作量都相差不多,这是其与用例的区别。以此构建的测例,将指导测试与需求验证。

3.3需求分析时机

传统的需求分析时机集中在项目前期,总是遵循前期调研—分析—需求定义,转给开发后需求工作便就此结束,其思想里,便是一次性完整、清楚地做完所有层次的需求,并在整个过程中遵循计划。

敏捷需求分析对这种惯例做出调整,源于其认为:需求的逐步细化过程中,变更是不可避免的;同时,为了快速的商业响应,保证能产出可见、可执行的结果也是必要的。后续的迭代和持续集成保证了需求的演进路线,简言之,需求分析贯穿于项目的整个生命周期。

3.4 文档

传统的大量正式文档,规格严整而厚重,但在项目的中后期却往往不能保持同步(现状、文档之间以及与软件系统),难以维护和跟踪,生产和维护成本也很高。这些文档除表明需求本身外,更多地是一种管理控制的角色,比如,对于变更。

敏捷过程并不是由文档主导、支撑和控制变更。如《敏捷宣言》中所透露的“响应变化胜过遵循计划” ,对于变更,敏捷过程是一个态度的转变。变更除过软件工程组织或者PMI等定义大部分类似于由“工作缺陷”引起的以外,在现代信息化竞争时代,它往往意味着商机。当然,对于这种商机的“欢迎”,企业需要商务模式的准备,否则将极易陷入“需求黑洞”之中。

3.5 综合以上的陈述,对敏捷需求分析归纳如下表

(角色职责的变化也是一种重要的对比,请参见表1,此处不赘言)

角度

传统需求分析

敏捷需求分析

需求分析时机

更多地集中在项目早期

近乎均匀地贯穿于项目的整个生命周期

需求划分单位

基于功能分解,划分模块或子系统,一个模块或子系统的颗粒度通常较大

基于能否独立业务价值,切割成一个个用户故事,一个故事有时会跨越传统的模块或子系统边界;用户故事是小粒度的,可测试的,可见的,并且是有价值

需求细化过程

一步到位,可供开发人员设计开发

逐步细化,仅就下一个迭代需要实现的部分进行详细分析

需求文档要求

正式文档,往往有明确的格式要求。既作为设计开发人员必须严格遵守的规约,也作为向客户提交的必备产出物之一。难维护,难验证(跟踪),很多产出物最终难以被阅读。

非正式文档。仅仅是辅助开发团队与客户沟通,不作为规约,也不作为必备产出物。更多强调通过自动化功能测试用例来跟踪系统需求。(对于组织过程资产管理要求,可以在此基础上形成可阅读可理解的轻型文档)。

需求文档同步

项目中后期一般都处于不同步状态

即时的同步

需求传递过程

单向的陈述与记录,文档传导(线性的传递,误导放大,缓慢)

聚议,共同参与,业务场景与用户故事,及时的非正式沟通

应对需求变更

有严格的控制流程,视变更为风险

视变更为必然或预期中的事情

参考

http://www.uml.org.cn/SoftWareProcess/201111101.asp

https://blog.csdn.net/weixin_33894640/article/details/90503514

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PM吃瓜 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档