发布新日志

  • 如何做好IT项目管理的需求管理(转载)

    2008-05-13 14:07:45

    摘要:随着IT在现代生活起到越来越重要的作用,根据本人参与的项目管理、售前调研、系统开发的多年经验结合最新的项目管理知识,我们就需求管理这个领域来讨论IT项目的需求管理,特别是如何建立完善的需求说明书,以及采用那些相关的需求管理模板文件来实现需求变更控制。本论文从技术工具、模板和经验相结合的方法来讨论现代IT项目的需求管理(RM)。

      关键字:头脑风暴法、德尔菲法、要素加权法;RM:需求管理,CCB:变更控制委员会,QFD:质量功能调配,HOQ:质量屋。

      约定:本文涉及到的关键字概念和采用的技术的概念都不做详细解释,里面的概念定义请查阅相关书籍,这里只讨论这些在需求管理中的使用;同时里面的案例信息也不在这里做详细交代。

      引用案例:某市网上审批项目。

      1 概述

      我们知道现代项目管理的六要素是:时间、成本、质量、组织、范围、客户满意度,实际上,要满足这六个要素,计划一个良好的需求分析是实现这六因素的前提,如果我们在项目生命周期的某些阶段出了问题,而我们可能还不知道,这将影响整个项目周期,无论该计划如何详尽,如果需求有误和需求分析不到位,项目的控制将没有任何价值,IT软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”(Leffingwell 1997),从某种意义来讲,项目的成功基于项目的需求管理的成功。

      2 需求的定义及特点

      根据IEEE项目工程标准词汇表(1997)年中对需求的描述如下:业主解决问题或达到目的所需的条件或权能,和系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或权能。在PMBOK中,项目需求就是在“项目范围”约定的。

      需求最显著的特点是“随着项目而改变、随着项目而渐进明晰”,项目管理的特点是随着进展而渐进明细化,可以看出需求管理和项目管理一样,这就意味着需求在项目的整个生命周期都可能存在的,这样项目管理的过程,也必不可少需求的管理。

      3 如何获取需求

      获得需求的方式可以有多种多样:电话询问、现场考察、聆听用户讲解、阅读用户编制的相关文件(如招标书),其实这些方法都是GET方式,我们可以通过以下两类技术手段来达到:GET(获取)和PUSH(引导、反馈、激发)相互结合的方式来得到我们真正的需求,而这两个过程都是必须交互进行的,一般我们可以筛选一名非常有经验(包括谈判技巧、深厚的业务和技术背景、人缘很好、勤奋努力)的人士担任需求工程师,长期在客户那里工作,他的工作主要是界定项目的范围和需求变更管理,通过我们编制的各类模板文档来实现需求变更的控制;

      一般来讲IT集成需求包含三个不同的层次-业务需求、用户需求和功能需求-也包括非功能需求:业务需求提供给客户和产品开发商的新系统的最初利益,反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明;用户需求文档描述了用户使用产品必须要完成的任务,这在使用实例文档或方案脚本说明中予以说明;功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求,必须具备一定的业务背景和技术背景,能从三个不同的层次发掘客户的需求。

      根据我们在某市网上审批项目中的经验,我们采用如下方法,其中每项工作都记录文档备案:如查阅了大量资料和病历资料格式、各类应急防御措施、统计分析报表、系统规划书、旧系统业务状况、历史资料、还访谈了操作员的应用感受、多次技术交流、专题讨论等多种形式的交互式讨论和分析。这样无论是业务、功能、用户详尽的期望我们都了解的比较透彻。

    4 需求管理

      获取了需求接着要作的的工作就是对需求分析、消化和评审、基线制定、需求说明书制定,这里我们主要集中在需求分析和需求说明书两方面来。

      4.1需求分析

      1)建立需求关联图:需求关联图是用于定义系统与系统外部实体间的界限和接口的简单模型,同时它也明确了通过接口的信息流和物质流,通过关联图,对用户需求的约定和确认以及CCB的评审都是非常关键的。

      2)创建开发原型:创建用户接口原型可以在如下应用如下情况:如果开发人员或用户不能确定需求时,开发一个用户接口原型,这样使得许多概念和可能发生的事更为直观明了。用户通过评价原型将使项目参与者能更好地相互理解所要解决的问题。通过开发原形,业主和集成商都可以相互了解业务,发掘潜在的信息,避免用户需求的不必要变更。

      3)分析可行性:分析需求可行性在允许的成本、性能要求下,分析每项需求实施的可行性,明确与每项需求实现相联系的风险,包括与其它需求的冲突,对外界因素的依赖和技术障碍,这个主要用于内部评审和制定技术线路提供依据,如在什么情况下采用.NET技术,什么情况下采用J2EE技术,我们在2003年电子政务网上审批系统中充分对需求(业务、技术、用户操作人员需求、现有系统需求等)做整体提取分析来确定技术线路的选型。

      4)确定需求优先级:确定需求的优先级别应用分析方法来确定使用实例、产品特性或单项需求实现的优先级别。以优先级为基础确定产品版本将包括哪些特性或哪类需求。当允许需求变更时,在特定的版本中加入每一项变更,并在那个版本计划中作出需要的变更。

      5)为需求建立模型:为需求建立模型需求的图形分析模型是软件需求规格说明极好的补充说明。它们能提供不同的信息与关系以有助于找到不正确的、不一致的、遗漏的和冗余的需求。这样的模型包括数据流图、实体关系图、状态变换图、对话框图、对象类及交互作用图。

      6)编写数据字典:在需求阶段,很难使团队的思路一致,建立一个合适的机制是完全必要的,这就是数据字典,数据字典是对系统用到的所有数据项和结构的定义,以确保开发人员使用统一的数据定义。在需求阶段,数据字典至少应定义客户数据项以确保客户与开发小组是使用一致的定义和术语。分析和设计工具通常包括数据字典组件。

      4.2建立需求与产品质量的关系模型

      需求是项目正确实施的一个前提,如果没有抓住用户的需求,那么很可能是漏洞百出,最终产品将不是一个真正的可交付物。我们知道,质量是一个客户满意度的一个主要因素,质量在项目中又有许多影响因素,这里我们着重从需求的角度出发来讨论需求与质量的关系,那么如何来从需求的角度出发建立与质量的控制呢?

      我们来建立一个思路如下:客户所有的期望 需求产生 转换矩阵 产品开发 可交付物 客户满意。在这里转换矩阵就非常关键了,如何来实现需求与质量的关联呢,可以通过质量功能调配(QFD)来实现,通过QFD可以把需求(用户期望)、产品特性关联起来,这里要用到一个工具:质量屋(House of Quality),我现在用一个案例来说明这个工具,在做某市网上审批项目中,我们从客户哪里收集和整理了许多需求:审批项目、报表要求、认证方式、工作流要求、数据范围及格式、操作界面、医药管理规范等等;我们通过建立质量屋完成了需求与如何去实现,如下图所示:

    g

    在QFD技术中以三种形式来定性地描述工程特征之间的相关影响关系,即正相关(向相同方向变化)、不相关和负相关(向相反方向变化)。对相关程度还可以进一步地细分为强相关、一般相关和弱相关几种关系,并给以标度值来表达相关程度,这样我们可以定义一些需求的强弱程度:如不确定需求、一般确定需求、强烈确定需求等,在这个HOQ中,还要用到其他技术工具,如:要素加权法等,这样做的好处是主次分明,可以把需求分析和管理做到随时间的推进客户的变更变限于固定的框架里,符合如下曲线,而不至于走向极端。

    gh

    4.3需求说明书编写经验谈

      目前需求说明书有固定的格式和要求,可以从专门介绍需求说明书的相关书籍中获得,在本论文中,我着重阐述需求说明书的经验,编写优秀的是没有公式化的方法的,这需要大量的经验,要从你在过去的文档中发现的问题学习。

      1) 采用IT项目需求规格说明模版,要注意的是很多人拿来需求说明书模板就套用,这就有很大的风险,例如:会出现需求不全、需求范围界定不到位、需求分类不明确等因素,我们应该把需求规格说明书拿来后先罗列许多要点:约定、法律法规、需求分类、技术限制、采用的技术和工具等等全面考虑,与项目干系人特别是用户进行沟通,然后讨论,可以采用头脑风暴法和德尔菲方法来讨论,确定说明书大纲,而不能照本著书。

      2) 附加文档的管理,值得注意的是需求说明书并非一成不变的,我们可以通过附加文档来跟踪用户的新的需求和需求变更,这样必须建立一个配套的文档集合,随时跟踪需求,保证开发团体步进统一,一般这些文件是要考虑的:《需求(或功能)变更申请书》、《需求(或功能)变更规格书》、《需求清单一览表》等。这样做的好处是对需求时实监控,保证项目的安排,同时让用户知道变更是一件很严肃的事情,可以防止个别人提出无法界定的需求(因为现实IT项目中,很多问题是其他系统的遗留而又超出本项目技术线路可以弥补的问题等)。

      3) 编写需求说明书的时候,可能还会遇到一些解决不了的需求,我们也一定用专门的章节要罗列出来,防止漏项,同时也利于我们在做实施计划的时候来采取那种措施,采购其他设备、投入相关人力或其他办法。

      4) 需求必须要客户确认,许多项目,可能开发商为了保护自己的“利益”很多事情都没有得到客户的确认,其实在需求阶段,我们的需求是要跟客户确认的,比如数据字典、界面选型、技术线路、功能模块等,这样做的好处是防止需求把握不得当,缺少了用户必要的功能,另一个就是防止了开发商需求镀金,提供了不必要的功能。

      5 总结

      经过以上各个方面来讨论需求管理在整个项目生命期所起到的作用,结合自身的经验,和一个案例《某市网上审批系统》综合分析了需求管理的办法和用到的工具,根据自身经验提出编写需求说明书要注意的地方。

  • 项目管理中的需求变更控制分析(转载)

    2008-05-06 16:46:47

                   项目管理中的需求变更控制分析(转载)  

       需求变更的表现形式是多方面的,如老板临时改变想法、项目预算增加或减少、客户对功能的需求改变等。在IT项目中,变更可能来自方案服务商、客户或产品供应商等,也可能来源于项目组内部。虽然需求变更的表现形式千差万别,但究其根本不外乎以下几种原因:

    1. 需求变更的原因分析

        (1)范围没有圈定就开始细化

            细化工作是由需求分析人员完成的,一般是根据用户提出的描述性的、总结性的短短几句话去细化的,提取其中的一个个功能,并给出描述(正常执行时的描述和意外发生时的描述)。当细化到一定程度后并开始系统设计时,范围会发生变化,那细节用例的描述可能就有很多要改动。如原来是手工添人的数据,要改成根据信息系统计算出来,而原来的一个属性的描述要变成描述一个实体等。

        (2)没有指定需求的基线

            需求的基线是指是否容许需求变更的分界线。随着项目的进展,需求的基线也在变化。是否容许变更的依据是合同以及对成本的影响,比如软件整体结构已经设计出来是不容许改变需求范围的,因为整体结构会对整个项目的进度和成本有初步预算。随着项目的进展,基线将越定越高(容许的变更将越少),其过程如下:变更请求à比较基线à变更实现。

        (3)没有良好的软件结构适应变化

            组件式的软件结构就是提供了快速适应需求变化的体系结构,数据层封装了数据访间逻辑,业务层封装了业务逻辑,表示层展现用户表示逻辑。但适应变化必须遵循一些松祸合原则,各层之间还是存在一些联系的,设计要力求减少会对接口入口参数产生变化。如果业务逻辑封装好了,则表示层界面上的一些排列或减少信息的要求是很容易适应的。如果接口定义得合理,那么即使业务流程有变化,也能够快速适应变化。因此,在成本影响的容许范围内可以降低需求的基线,提高客户的满意度。


    2. 如何控制需求变更

            按照现代项目管理的概念,一个项目的生命周期分为启动、实施、收尾三个过程。需求变更的控制不应该只是项目实施过程考虑的事情,而是要分布在整个项目生命周期的全过程。为了将项目变更的影响降低到最小,就需要采用综合变更控制方法。综合变更控制主要内容有找出影响项目变更的因素、判断项目变更范围是否已经发生等。

            进行综合变更控制的主要依据是项目计划、变更请求和提供了项目执行状况信息的绩效报告。为保证项目变更的规范和有效实施,通常项目实施组织会有一

        (1)项目启动阶段的变更预防

            对于任何项目,变更都无可避免,也无从逃避,只能积极应对,这个应对应该是从项目启动的需求分析阶段就开始了。对一个需求分析做得很好的项目来说,基准文件定义的范围越详细清晰,用户跟项目经理扯皮的幌子就越少。如果需求没做好,基准文件里的范围含糊不清,被客户抓住空子,往往要付出许多无谓的牺牲。如果需求做得好,文档清晰且又有客户签字,那么后期客户提出的变更就超出了合同范围,需要另外收费。这个时候千万不能手软,这并非要刻意赚取客户的钱财,而是不能让客户养成经常变更的习惯,否则后患无穷。相对于需求来说,什么WBS、风险管理、计划进度都是次要的,只要需求做好了就会一帆风顺。

        (2)项目实施阶段的需求变更

            成功项目和失败项目的区别就在于项目的整个过程是否是可控的。项目经理应该树立一个理念——“需求变更是必然的、可控的、有益的”。项目实施阶段的变更控制需要做的是分析变更请求,评估变更可能带来的风险和修改基准文件。控制需求渐变需要注意以下几点:

            需求一定要与投入有联系,如果需求变更的成本由开发方来承担,则项目需求的变更就成为必然了。所以,在项目的开始,无论是开发方还是出资方都要明确这一条:需求变,软件开发的投人也要变。

            需求的变更要经过出资者的认可,这样才会对需求的变更有成本的概念,能够慎重地对待需求的变更。

            小的需求变更也要经过正规的需求管理流程,否则会积少成多。在实践中,人们往往不愿意为小的需求变更去执行正规的需求管理过程,认为降低了开发效率,浪费了时间。但正是由于这种观念才使需求逐渐变为不可控,最终导致项目的失败。

            精确的需求与范围定义并不会阻止需求的变更。并非对需求定义得越细,就越能避免需求的渐变,这是两个层面的问题。太细的需求定义对需求渐变没有任何效果。因为需求的变化是永恒的,并非需求写细了,它就不会变化了。

            注意沟通的技巧。实际情况是用户、开发者都认识到了上面的几点间题,但是由于需求的变更可能来自客户方,也可能来自开发方,因此,作为需求管理者,项目经理需要采用各种沟通技巧来使项目的各方各得其所。

        (3)项目收尾阶段的总结

            能力的提高往往不是从成功的经验中来,而是从失败的教训中来。许多项目经理不注重经验教训总结和积累,即使在项目运作过程中碰得头破血流,也只是抱怨运气、环境和团队配合不好,很少系统地分析总结,或者不知道如何分析总结,以至于同样的问题反复出现。

            事实上,项目总结工作应作为现有项目或将来项目持续改进工作的一项重要内容,同时也可以作为对项目合同、设计方案内容与目标的确认和验证。项目总结工作包括项目中事先识别的风险和没有预料到而发生的变更等风险的应对措施的分析和总结,也包括项目中发生的变更和项目中发生问题的分析统计的总结。

    3、需求变更的处理流程

      需求变更既然不可避免,那么就必须有一套规范的处理流程。对于需求变更的处理流程应该分以下步骤:提出变更à变更评估à实施变更。

      需求变更处理流程

      因为现实世界的软件系统可能有不同的严格程度和复杂性,所以事先预言所有的相关需求是不可能的。系统原计划的操作环境会改变,用户的需求会改变,甚至系统的角色也有可能改变。实现和测试系统的行为可能导致对正解决的问题产生新的理解和洞察,这种新的认识就有可能导致需求变更。CMM提出“分配需求的变更被复审,并加入到软件项目中来”,其关键是在需求发生变更时,没有必要马上把这些变更付诸于软件开发工作之中。实际上,坚持把需求变更付诸开发努力,企业就会形成一种混乱且不稳定的氛围,进而严重破坏项目的控制和管理。需求管理关键过程试图通过把分配需求的变更囤积到可管理的组中,等到开发工作允许的时候再引人相应的方法,避免产生这种混乱的氛围。结果,需求管理创建了一个隔绝开发工作与所有真实的、潜在无序的、来自于客户的变更。这个缓冲器允许真实的变更被注意、记录、追踪,同时开发工作又不会因此而被扰乱。开发项目应该周期性地暂停来吸收最新的需求变更积累,此时,所有的计划、设计、行为都根据刚刚吸收的需求变更的影响进行更新。

      需求变更的控制当然与项目管理范畴之外的纯技术因素息息相关,比如面向对象的分析、面向对象的设计、面向对象的编码方式等等。但所有技术的发展趋势都是一样,那就是为了使变更管理变得更容易,因此,不论在项目变更控制中采取什么方法、策略,对于项目本身的变化一定要时时洞悉,处处留意,只有这样才能从真正意义上对项目进行很好的变更控制。

Open Toolbar