思步网

查看: 104908|回复: 48
打印 上一主题 下一主题

需求管理和变更控制的经验

[复制链接]
    在学校里学计算机语言时以为,编程和架构是整个软件生命周期里最了不起的部分,但实际工作后才发现在商业产品里需求管理(包括新需求的发掘)更是一个商业软件成功与否的关键。在以下我和大家分享一点在90年代我经历的一些需求管理小故事,希望能对刚进入软件行业的精英们有点概念性的帮助。请理解在这么小的篇幅里,我们更多地只是概念性地理解需求管理的重要性而已,绝非是要提供完善的解决办法。
. R$ b; m* x+ t5 @
    软件工程里的许多问题,诸如缺陷及资源运用不当,都是源于需求的不确定。在90年代,我曾在美国一个拥有数千员工的公司里从事大型软件开发工作。该软件主要是卖给汽车修复厂用的,它可估算出修复汽车的零件及劳力两项费用,甚至还可以找到提供新零件及旧零件的厂家。软件的的复杂度相当地高,要界定什么样的界面和功能是最适合市场的着实不易。所以,需求一变再变。在聊天时有个同事戏称:“需求变更乃万恶之源!”其他的人纷纷响应。当时,所有的需求都是写在Word文档里的,那些文档不是放在一个共享的服务器里,就是交由负责编写程序的人员管理。虽然没用什么管理平台及工具,但在团队成员的配合和默契下,一切事情都有序地在进展着。. k; F' C7 l2 x2 x
% m1 e# [; K% x, o+ _# s* H; S) H
    但有一天产品经理换了个新的,一切事情似乎就全改变了。新的产品经理原是某汽车修复厂的经理,他对修汽车及车厂管理有不少的经验,但对软件的开发是很不懂的。很快地下列问题出现了:8 X$ g) R3 c; u# j1 Q4 u

(一)需求描述不清楚,导致开发任务的时间估算误差可到100%,甚至200%;
(二)优先及全由产品经理决定,有时不太重要的任务先做了,重要的反倒后做;
(三)需求变更一再发生,并且当某需求变更了,它的连锁反应会冲击其他的部分,许多缺陷因此产生了。
' O; F& k- l+ T6 E; G* Q
我们几个资深人员分析整个过程,发现造成问题的原因是这样的:: O; h4 p8 K- y# {6 i& q8 W
(一)我们的现有需求文档管理太乱,通常是找不到所要的版本。就算是找到要的文档,常常也没法找到要的那段内容。
(二)可判断任务优先级的因素颇多,可以是在商业层面或技术层面,每人的视角不同,公说公有理,婆说婆有理。8 T0 B' l1 I2 s2 ?
(三)需求文档、代码、测试用例及其他的工件(artifacts)之间应是相关联的,但在系统中我们无法从其中任一个工件找到其他的工件。- o1 |9 w; D: u1 W% a4 g- `) G, B
    由于文档不全,这位新的产品经理很难在短时间内对整个系统有个概括性的了解。当他和资深人员沟通产品设计理念及历史缘由时,资深人员也没能明确地回答他的问题,这导致需求设计不完善,优先级也有误。找到原因后,我们想既然需求变更这一头凶猛野兽是杀不死的,那我们所能做的大概也就是将这兽关在笼子里,使它温驯点。 为解决这问题,我们建立了以下的体制。
5 n$ x3 y8 d& X$ O' @8 _
(一)细化需求的时间估算 – 我们将需求分解到程序员能清楚估算出完成时间的小单位,原则上每单位是可以让一个程序员及一个测试人员在二至十天内做完,而且每个单位都有个编号。
(二)使用版本控制系统管理需求文档 – 所有需求文档全保存在一中枢版本控制系统里。
(三)将需求分组并设优先级 – 所有的需求单位按照不同的版本区分开来,每个需求单位都有个优先级。
(四)建立工件之间的关联性 – 将程序及测试用例与相对应的需求单位连接上,明确地写上需求编号。
(五)建立评审团队 – 当需求产生或变更时,产品经理及干系人要一起评审,通过后才做更改。* f% |; l: @+ s( Y8 ^% l
% m, r$ X8 c7 T0 A2 p
    我们开了好些培训会,务必保证每个程序员、测试人员及产品经理都遵照制度走。在会议室的白板上画出很多间隔,贴了满满的纸条。当然,我们也使用了Excel及一些小工具帮助我们管理需求。当年我们虽不知敏捷方法为何物,但却采用了好些敏捷操作,如站立会议等。5 Y2 A" u2 F% U3 ?  x8 c2 o
/ x3 _6 Q5 S- t! b
    花了三个月把这个体制建立好后,团队气象一新。整个软件生产的过程严谨了许多,需求成为软件生命周期的核心。在任何阶段,需求及相对应的代码都有人负责。对需求的严格审核使得后期的修改及对缺陷的修复减少了许多,效率提高起来。

    整体来说,当时我们所作的改进是有成效的。但我们也发现,对这体制的维护相当不易的。举例来说,需求变更的评审是需要有个流程的。但不同类型的需求要由不同组的人评审,甚至有些是外部修车厂的人员。更糟糕的是,评审流程也随需求种类的不同而不同。我们将流程写在文档里,但流程图及相关的人员经常在变动。我们不仅需要有专人来维护,有调整时还要开会通知,费力且常发生错误。
" R& B9 |! `' Y$ p, r
    另外,在大系统里需求变更所产生的连锁反应是相当可怕的。曾经有一次,我们根据需求的变更找到了出现问题的某些代码,非常高兴地把代码改了,以为问题得到了解决。但不久,客户反馈我们在另两个地方发生错误。(实际上恐怕还不止两处呢!)我们把这两处改了后,又发现这些修改造成了更多其他多个问题。在代码的层面这可以是因软件代码的耦合。但它不仅是在代码的层面,更可能是在商业逻辑的层面。比如说,某公司在同一领域发展了三个互补性的软件产品。这三个产品可能共享一套工具模块(utility)。当工具模块里的某个程序被改了,我们需要查验它是否对其他的两个产品造成冲击了。这是在代码层面的,还相对容易些。在商业逻辑层面的就更难了。这三个软件产品在设计时必然是建立在一套完整商业逻辑上的。改了其一,必要检视是否也要对其他两个做对等的修改。要解决这问题,要依靠知识系统的全备及人员的经验。我们当时在需求、测试案例及相关工件之间建立的关联性也仅仅是在项目层面,而非组织(公司)层面。(呵呵!所以,路还遥远的很。)

    两年之后,因为项目将要完成,人员减少了60%。我是外聘人员(contractor),也在最后一批中离开了。我发现,虽然我们花了不少力气在需求管理上,虽取得一点成效,但收获颇为有限。主要的原因是人员变动太多、流程不断在修改以及太多的机械性工作。现在市面上已有许多相当不错的需求管理工具及ALM (Application Lifecycle Management)研发管理平台,它们可以帮忙作需求整理、需求量化、版本控制及需求变更控制,ALM 研发管理平台里相关的工件可以彼此连接,甚至一个需求单元在整个软件的生命周期的历史都可以完全追踪。这解放了大量的人力成本,跟当年比起来事情应该是要容易得多了。



上一篇:需求管理详解
下一篇:怎样从容应对客户的需求反复
[发帖际遇]: 玻璃房 在网吧通宵,花了 1 (金) 金币. 幸运榜 / 衰神榜
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
回复 论坛版权

使用道具 举报

这个一定得回复!
兄弟们等着围观捏~
还不错哦,如果再能多分享一些就perfect了!
很有借鉴意义,先收藏了,谢谢楼主。
学习下我只是路过,不发表意见……
支持,赞一个
确实不错,顶先
向楼主学习
顶不错 支持下
以我的经验来看,楼主的想法是可以执行的~
看起来好像不错的样子
我了个去,顶了
很有见地的探讨,先收藏着~
向楼主学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则



思步组织思步科技|思步网|火花学堂|思步文库|思步问答|思步英才|天下心
© 2007 思步网 浙ICP备10212573号-4(首次备案号:浙ICP备07035264号)|邮箱:service#step365.com(将#换成@)|服务热线:0571-28827450
在线培训课程|求职招聘|思步文库|官方微信|手机APP|思步问答|微博平台|官方QQ群|交流论坛|软件工程透析|关于我们|申请友链|
点击这里给我发消息     点击这里给我发消息
思步 step365 过程改进 CMMI中文 质量保证 质量管理 流程体系 需求跟踪矩阵 敏捷开发 Scrum 软件度量 项目评审 全员改进 流程管理 人力资源 6sigma 信息安全 ISO27001认证 IT服务管理 ISO20000认证 ISO9000认证 软件测试 SQA 配置管理 IPD 软件工程 PMP认证 PMP试题 PMBOK中文 精益研发 agile 顾问式管理培训
返回顶部