精华内容
下载资源
问答
  • 拨开需求分析的迷雾

    2018-04-14 16:25:27
    在项目开发中,所有项目风险承担者都对需求分析阶段备感兴趣。这里所指风险承担者包括客户方面项目负责人和用户,开发方面需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀软件产品,同时也...
    在项目开发中,所有的项目风险承担者都对需求分析阶段备感兴趣。这里所指的风险承担者包括客户方面的项目负责人和用户,开发方面的需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀的软件产品,同时也会令客户满意。若处理不好,则会导致误解、挫折、障碍以及潜在的质量和业务价值上的威胁。因此可见——需求分析奠定了软件工程和项目管理的基础。

    拨开需求分析的迷雾
      像这样的对话经常出现在软件开发的过程中。客户项目经理的需求对分析人员来讲,像“雾里看花”般模糊并令开发者感到困惑。那么,我们就拨开雾影,分析一下需求的具体内容:

      ·业务需求——反映了组织机构或客户对系统、产品高层次的目标要求,通常在项目定义与范围文档中予以说明。

      ·用户需求——描述了用户使用产品必须要完成的任务,这在使用实例或方案脚本中予以说明。

      ·功能需求——定义了开发人员必须实现的软件功能,使用户利用系统能够完成他们的任务,从而满足了业务需求。

      ·非功能性的需求——描述了系统展现给用户的行为和执行的操作等,它包括产品必须遵从的标准、规范和约束,操作界面的具体细节和构造上的限制。

      ·需求分析报告——报告所说明的功能需求充分描述了软件系统所应具有的外部行为。“需求分析报告”在开发、测试、质量保证、项目管理以及相关项目功能中起着重要作用。

      前面提到的客户项目经理通常阐明产品的高层次概念和主要业务内容,为后继工作建立了一个指导性的框架。其他任何说明都应遵循“业务需求”的规定,然而“业务需求”并不能为开发人员提供开发所需的许多细节说明。

      下一层次需求——用户需求,必须从使用产品的用户处收集。因此,这些用户构成了另一种软件客户,他们清楚要使用该产品完成什么任务和一些非功能性的特性需求。例如:程序的易用性、健壮性和可靠性,而这些特性将会使用户很好地接受具有该特点的软件产品。

      经理层有时试图代替实际用户说话,但通常他们无法准确说明“用户需求”。用户需求来自产品的真正使用者,必须让实际用户参与到收集需求的过程中。如果不这样做,产品很可能会因缺乏足够的信息而遗留不少隐患。

      在实际需求分析过程中,以上两种客户可能都觉得没有时间与需求分析人员讨论,有时客户还希望分析人员无须讨论和编写需求说明就能说出用户的需求。除非遇到的需求极为简单;否则不能这样做。如果您的组织希望软件成功,那么必须要花上数天时间来消除需求中模糊不清的地方和一些使开发者感到困惑的方面。

      优秀的软件产品建立在优秀的需求基础之上,而优秀的需求源于客户与开发人员之间有效的交流和合作。只有双方参与者都明白自己需要什么、成功的合作需要什么时,才能建立起一种良好的合作关系。

      由于项目的压力与日俱增,所有项目风险承担者有着一个共同目标,那就是大家都想开发出一个既能实现商业价值又能满足用户要求,还能使开发者感到满足的优秀软件产品。

    客户的需求观

    客户与开发人员交流需要好的方法。
    下面建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够满足要求)。

    1、 分析人员要使用符合客户语言习惯的表达
      需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。

    2、分析人员要了解客户的业务及目标
      只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎样工作的,其流程情况以及可供改进之处。s

    3、 分析人员必须编写软件需求报告
      分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求分析报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析报告”有助于开发人员开发出真正需要的产品。

    4、 要求得到需求工作结果的解释说明
      分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结果,以及怎样检查图表有无错误及不一致等。

    5、 开发人员要尊重客户的意见
      如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项目成功这一共同目标所做出的努力表示尊重。

    6、 开发人员要对需求及产品实施提出建议和解决方案
      通常客户所说的“需求”已经是一种实际可行的实施方案,分析人员应尽力从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加一些用户没有发现的很有价值的系统特性。

    7、 描述产品使用特性
      客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来讲,太主观了并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。

    8、 允许重用已有的软件组件
      需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合您所需的特性,这时一定程度上的需求灵活性就显得极为重要了。

    9、 要求对变更的代价提供真实可靠的评估
      有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时,对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以,客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。

    10、 获得满足客户功能和质量要求的系统
      每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品很可能无法让您满意。

    11、 给分析人员讲解您的业务
      分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。

    12、 抽出时间清楚地说明并完善需求
      客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。

    13、 准确而详细地说明需求
      编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。

      在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户要尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人员一起反复修改,不断完善需求定义。

    14、 及时作出决定
      分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。

    15、 尊重开发人员的需求可行性及成本评估
      所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面的评价,客户应该尊重他们的意见。

    16、 划分需求的优先级
      绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级;开发人员将为您确定优先级提供有关每个需求的花费和风险的信息。

      在时间和资源限制下,关于所需特性能否完成或完成多少应尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。

    17、 评审需求文档和原型
      客户评审需求文档,是给分析人员带来反馈信息的一个机会。如果客户认为编写的“需求分析报告”不够准确,就有必要尽早告知分析人员并为改进提供建议。

      更好的办法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解您的需求;原型并非是一个实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。

    18、 需求变更要立即联系
      不断的需求变更,会给在预定计划内完成的质量产品带来严重的不利影响。变更是不可避免的,但在开发周期中,变更越在晚期出现,其影响越大;变更不仅会导致代价极高的返工,而且工期将被延误,特别是在大体结构已完成后又需要增加新特性时。所以,一旦客户发现需要变更需求时,请立即通知分析人员。

    19、 遵照开发小组处理需求变更的过程
      为将变更带来的负面影响减少到最低限度,所有参与者必须遵照项目变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后做出合适的决策,以确定应将哪些变更引入项目中。

    20、 尊重开发人员采用的需求分析过程
      软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信花在需求开发上的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。
    展开全文
  • 在项目开发中,所有项目风险承担者都对需求分析阶段备感兴趣。这里所指风险承担者包括客户方面项目负责人和用户,开发方面需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀软件产品,同时...
    在项目开发中,所有的项目风险承担者都对需求分析阶段备感兴趣。这里所指的风险承担者包括客户方面的项目负责人和用户,开发方面的需求分析人员和项目管理者。这部分工作做得到位,能开发出很优秀的软件产品,同时也会令客户满意。若处理不好,则会导致误解、挫折、障碍以及潜在的质量和业务价值上的威胁。因此可见——需求分析奠定了软件工程和项目管理的基础。  

    拨开需求分析的迷雾

      像这样的对话经常出现在软件开发的过程中。客户项目经理的需求对分析人员来讲,像“雾里看花”般模糊并令开发者感到困惑。那么,我们就拨开雾影,分析一下需求的具体内容:

      ·业务需求——反映了组织机构或客户对系统、产品高层次的目标要求,通常在项目定义与范围文档中予以说明。

      ·用户需求——描述了用户使用产品必须要完成的任务,这在使用实例或方案脚本中予以说明。

      ·功能需求——定义了开发人员必须实现的软件功能,使用户利用系统能够完成他们的任务,从而满足了业务需求。

      ·非功能性的需求——描述了系统展现给用户的行为和执行的操作等,它包括产品必须遵从的标准、规范和约束,操作界面的具体细节和构造上的限制。

      ·需求分析报告——报告所说明的功能需求充分描述了软件系统所应具有的外部行为。“需求分析报告”在开发、测试、质量保证、项目管理以及相关项目功能中起着重要作用。

      前面提到的客户项目经理通常阐明产品的高层次概念和主要业务内容,为后继工作建立了一个指导性的框架。其他任何说明都应遵循“业务需求”的规定,然而“业务需求”并不能为开发人员提供开发所需的许多细节说明。

      下一层次需求——用户需求,必须从使用产品的用户处收集。因此,这些用户构成了另一种软件客户,他们清楚要使用该产品完成什么任务和一些非功能性的特性需求。例如:程序的易用性、健壮性和可靠性,而这些特性将会使用户很好地接受具有该特点的软件产品。

      经理层有时试图代替实际用户说话,但通常他们无法准确说明“用户需求”。用户需求来自产品的真正使用者,必须让实际用户参与到收集需求的过程中。如果不这样做,产品很可能会因缺乏足够的信息而遗留不少隐患。

      在实际需求分析过程中,以上两种客户可能都觉得没有时间与需求分析人员讨论,有时客户还希望分析人员无须讨论和编写需求说明就能说出用户的需求。除非遇到的需求极为简单;否则不能这样做。如果您的组织希望软件成功,那么必须要花上数天时间来消除需求中模糊不清的地方和一些使开发者感到困惑的方面。

      优秀的软件产品建立在优秀的需求基础之上,而优秀的需求源于客户与开发人员之间有效的交流和合作。只有双方参与者都明白自己需要什么、成功的合作需要什么时,才能建立起一种良好的合作关系。

      由于项目的压力与日俱增,所有项目风险承担者有着一个共同目标,那就是大家都想开发出一个既能实现商业价值又能满足用户要求,还能使开发者感到满足的优秀软件产品。

    客户的需求观

      客户与开发人员交流需要好的方法。下面建议20条法则,客户和开发人员可以通过评审以下内容并达成共识。如果遇到分歧,将通过协商达成对各自义务的相互理解,以便减少以后的磨擦(如一方要求而另一方不愿意或不能够满足要求)。

    1、 分析人员要使用符合客户语言习惯的表达

      需求讨论集中于业务需求和任务,因此要使用术语。客户应将有关术语(例如:采价、印花商品等采购术语)教给分析人员,而客户不一定要懂得计算机行业的术语。
    2、分析人员要了解客户的业务及目标

      只有分析人员更好地了解客户的业务,才能使产品更好地满足需要。这将有助于开发人员设计出真正满足客户需要并达到期望的优秀软件。为帮助开发和分析人员,客户可以考虑邀请他们观察自己的工作流程。如果是切换新系统,那么开发和分析人员应使用一下目前的旧系统,有利于他们明白目前系统是怎样工作的,其流程情况以及可供改进之处。s

    3、 分析人员必须编写软件需求报告

      分析人员应将从客户那里获得的所有信息进行整理,以区分业务需求及规范、功能需求、质量目标、解决方法和其他信息。通过这些分析,客户就能得到一份“需求分析报告”,此份报告使开发人员和客户之间针对要开发的产品内容达成协议。报告应以一种客户认为易于翻阅和理解的方式组织编写。客户要评审此报告,以确保报告内容准确完整地表达其需求。一份高质量的“需求分析报告”有助于开发人员开发出真正需要的产品。

    4、 要求得到需求工作结果的解释说明

      分析人员可能采用了多种图表作为文字性“需求分析报告”的补充说明,因为工作图表能很清晰地描述出系统行为的某些方面,所以报告中各种图表有着极高的价值;虽然它们不太难于理解,但是客户可能对此并不熟悉,因此客户可以要求分析人员解释说明每个图表的作用、符号的意义和需求开发工作的结果,以及怎样检查图表有无错误及不一致等。

    5、 开发人员要尊重客户的意见

      如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍。共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间,同样,客户也应对开发人员为项目成功这一共同目标所做出的努力表示尊重。

    6、 开发人员要对需求及产品实施提出建议和解决方案

      通常客户所说的“需求”已经是一种实际可行的实施方案,分析人员应尽力从这些解决方法中了解真正的业务需求,同时还应找出已有系统与当前业务不符之处,以确保产品不会无效或低效;在彻底弄清业务领域内的事情后,分析人员就能提出相当好的改进方法,有经验且有创造力的分析人员还能提出增加一些用户没有发现的很有价值的系统特性。

    7、 描述产品使用特性

      客户可以要求分析人员在实现功能需求的同时还注意软件的易用性,因为这些易用特性或质量属性能使客户更准确、高效地完成任务。例如:客户有时要求产品要“界面友好”或“健壮”或“高效率”,但对于开发人员来讲,太主观了并无实用价值。正确的做法是,分析人员通过询问和调查了解客户所要的“友好、健壮、高效所包含的具体特性,具体分析哪些特性对哪些特性有负面影响,在性能代价和所提出解决方案的预期利益之间做出权衡,以确保做出合理的取舍。

    8、 允许重用已有的软件组件

      需求通常有一定灵活性,分析人员可能发现已有的某个软件组件与客户描述的需求很相符,在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够降低新系统的开发成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合您所需的特性,这时一定程度上的需求灵活性就显得极为重要了。

    9、 要求对变更的代价提供真实可靠的评估

      有时,人们面临更好、也更昂贵的方案时,会做出不同的选择。而这时,对需求变更的影响进行评估从而对业务决策提供帮助,是十分必要的。所以,客户有权利要求开发人员通过分析给出一个真实可信的评估,包括影响、成本和得失等。开发人员不能由于不想实施变更而随意夸大评估成本。

    10、 获得满足客户功能和质量要求的系统
    每个人都希望项目成功,但这不仅要求客户要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制,一定要明确说明您的假设和潜在的期望,否则,开发人员开发出的产品很可能无法让您满意。

    11、 给分析人员讲解您的业务

      分析人员要依靠客户讲解业务概念及术语,但客户不能指望分析人员会成为该领域的专家,而只能让他们明白您的问题和目标;不要期望分析人员能把握客户业务的细微潜在之处,他们可能不知道那些对于客户来说理所当然的“常识”。

    12、 抽出时间清楚地说明并完善需求

      客户很忙,但无论如何客户有必要抽出时间参与“头脑高峰会议”的讨论,接受采访或其他获取需求的活动。有些分析人员可能先明白了您的观点,而过后发现还需要您的讲解,这时请耐心对待一些需求和需求的精化工作过程中的反复,因为它是人们交流中很自然的现象,何况这对软件产品的成功极为重要。

    13、 准确而详细地说明需求

      编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且耗时,因此很容易留下模糊不清的需求。但是在开发过程中,必须解决这种模糊性和不准确性,而客户恰恰是为解决这些问题作出决定的最佳人选,否则,就只好靠开发人员去正确猜测了。

      在需求分析中暂时加上“待定”标志是个方法。用该标志可指明哪些是需要进一步讨论、分析或增加信息的地方,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而标注上“待定”。客户要尽量将每项需求的内容都阐述清楚,以便分析人员能准确地将它们写进“软件需求报告”中去。如果客户一时不能准确表达,通常就要求用原型技术,通过原型开发,客户可以同开发人员一起反复修改,不断完善需求定义。

    14、 及时作出决定

      分析人员会要求客户作出一些选择和决定,这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权作出决定的客户必须积极地对待这一切,尽快做处理,做决定,因为开发人员通常只有等客户做出决定才能行动,而这种等待会延误项目的进展。

    15、 尊重开发人员的需求可行性及成本评估

      所有的软件功能都有其成本。客户所希望的某些产品特性可能在技术上行不通,或者实现它要付出极高的代价,而某些需求试图达到在操作环境中不可能达到的性能,或试图得到一些根本得不到的数据。开发人员会对此作出负面的评价,客户应该尊重他们的意见。

    16、 划分需求的优先级

      绝大多数项目没有足够的时间或资源实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,是需求开发的主要部分,这只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级;开发人员将为您确定优先级提供有关每个需求的花费和风险的信息。

      在时间和资源限制下,关于所需特性能否完成或完成多少应尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。

    17、 评审需求文档和原型

      客户评审需求文档,是给分析人员带来反馈信息的一个机会。如果客户认为编写的“需求分析报告”不够准确,就有必要尽早告知分析人员并为改进提供建议。

      更好的办法是先为产品开发一个原型。这样客户就能提供更有价值的反馈信息给开发人员,使他们更好地理解您的需求;原型并非是一个实际应用产品,但开发人员能将其转化、扩充成功能齐全的系统。

    18、 需求变更要立即联系
    不断的需求变更,会给在预定计划内完成的质量产品带来严重的不利影响。变更是不可避免的,但在开发周期中,变更越在晚期出现,其影响越大;变更不仅会导致代价极高的返工,而且工期将被延误,特别是在大体结构已完成后又需要增加新特性时。所以,一旦客户发现需要变更需求时,请立即通知分析人员。

    19、 遵照开发小组处理需求变更的过程

      为将变更带来的负面影响减少到最低限度,所有参与者必须遵照项目变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后做出合适的决策,以确定应将哪些变更引入项目中。

    20、 尊重开发人员采用的需求分析过程

      软件开发中最具挑战性的莫过于收集需求并确定其正确性,分析人员采用的方法有其合理性。也许客户认为收集需求的过程不太划算,但请相信花在需求开发上的时间是非常有价值的;如果您理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。

    “需求确认”意味着什么

      在“需求分析报告”上签字确认,通常被认为是客户同意需求分析的标志行为,然而实际操作中,客户往往把“签字”看作是毫无意义的事情。“他们要我在需求文档的最后一行下面签名,于是我就签了,否则这些开发人员不开始编码。”

      这种态度将带来麻烦,譬如客户想更改需求或对产品不满时就会说:“不错,我是在需求分析报告上签了字,但我并没有时间去读完所有的内容,我是相信你们的,是你们非让我签字的。”

      同样问题也会发生在仅把“签字确认”看作是完成任务的分析人员身上,一旦有需求变更出现,他便指着“需求分析报告”说:“您已经在需求上签字了,所以这些就是我们所开发的,如果您想要别的什么,您应早些告诉我们。”

      这两种态度都是不对的。因为不可能在项目的早期就了解所有的需求,而且毫无疑问地需求将会出现变更,在“需求分析报告”上签字确认是终止需求分析过程的正确方法,所以我们必须明白签字意味着什么。

      对“需求分析报告”的签名是建立在一个需求协议的基线上,因此我们对签名应该这样理解:“我同意这份需求文档表述了我们对项目软件需求的了解,进一步的变更可在此基线上通过项目定义的变更过程来进行。我知道变更可能会使我们重新协商成本、资源和项目阶段任务等事宜。”对需求分析达成一定的共识会使双方易于忍受将来的摩擦,这些摩擦来源于项目的改进和需求的误差或市场和业务的新要求等。

      需求确认将迷雾拨散,显现需求的真面目,给初步的需求开发工作画上了双方都明确的句号,并有助于形成一个持续良好的客户与开发人员的关系,为项目的成功奠定了坚实的基础。
    展开全文
  • 软件工程

    2017-09-24 22:38:02
    一、软件开发流程: 1. 可行性分析: 可行性分析是系统在正式立项前必须进行...具体说,在可行性分析阶段,要确定软件系统开发目标与总要求。所以在做可行性分析时候,一般要考虑技术、经济效益、用户操作

    一、软件开发流程:

    1.       可行性分析:

    可行性分析是系统在正式立项前必须进行的一项工作,它的目的不是为了分析软件开发过程中的问题,也不是为了解决软件开发过程中可能存在的文图,而是确定软件系统是否有价值做、是否能够以尽可能小的代价在尽可能短的时间内解决问题;

    具体的说,在可行性分析阶段,要确定软件系统的开发目标与总的要求。所以在做可行性分析的时候,一般要考虑技术、经济效益、用户操作、法律与社会等的可行性。阶段成果《可行性分析报告》

    2.       需求分析

    需求分析是软件项目成功的关键,它回答客户做什么的问题,是一个用户的需求进行正确的加工、正确的理解,软后把它用软件工程开发语言表达出来的过程。首先需要弄清楚该项目的目的是为了解决什么问题,其次,测试案例中应输入什么数据,最后就是弄清楚那些人需要使用本系统等

    本阶段的基本任务是和用户一起确定要解决的问题,然后建立软件的逻辑结构,编写需求规格说明书并最终得到用户的任何。需求分析的主要方法有结构化分析方法、数据流程法和数据字典等方法。阶段化成果为形成软件需求说明书,数据要求说明书以及初步的用户手册

    3.       概要设计

    软件设计的主要任务就是讲软件分解成模块化,即实现某个功能的数据和程序说明、可执行程序的程序单元、这个模块可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据,算法和数据结构,也就是可组合、可分解以及可更换的功能单元。

    概要设计是结构化设计,其主要目的就是给出软件的功能结构。

    4.       详细设计

    在详细设计中,首先就是要设计出模块的系统流程、算法和数据结构,其次就是设计出数据库、常用的方法还是结构化程序设计方法

    该阶段的文档成果有《概要设计说明书》《业务用例文档》《详细设计说明书》《技术用例文档》等

    5.       编码与实现

    编码是指把软件设计转化成计算机可以接受的程序,即写出某一个程序设计语言表示的“源程序清单”,程序设计语言可以是c,c++、c#或java等。当前软件开发中出了在专用场合,已经很少使用20世纪80年代的高级语言了,取而代之的是面向对象程序设计语言,而且面向对象的开发语言合开发环境大都合为一体,大大提高了开发的速度。由于面向对象的开发语言开发的项目,系统可维护性和可扩展性都大大增强了

    6.       测试

    软件测试贯穿于软件开发的整个过程,它的目的是以较小的代价发现尽可能多的搓足。要实现这个目标关键在于软件开发各阶段的规格说明和程序的内部结构精心设计一套出色的测试用例(测试数据和测预期输出组成了测试用例),利用这些测试用例进行测试,从而发现程序中存在的错误和bug。不同的测试方法有不同的测试用例设计方法。常规的测试方法有白盒测试与黑盒测试

    白盒测试是一种测试单元内部如何工作的方法,目的是通过检查软件内部的逻辑结构,对软件中逻辑路径进行覆盖的测试,而黑盒测试不用考虑程序内部的结构和特性,只是在程序功能和程序的外部特性设计测试用例。这两种测试方法都依据软件的功能或者对软件的行为描述,发现软件的接口、功能和结果错误。该阶段的文档成果有《单元测试报告》、《集成测试报告》《系统测试报告》等

    7.       运行维护

    虽然系统交付为用户,安装运行了,但是任何一个系统都不是一开始 就完全满足实际应用需求,一般在交付使用后,还需要不断进行再开发。而维护是指在已经完成对软件进行研制(分析、编码、测试)工作交付使用后,对软件运行情况,对软件进行适当修改和维护。如完善性维护,适用性维护,以适用新的要求,以及纠正运行中存在的错误,编写软件问题报告、软件修改报告、一个系统的质量的高低和系统的分析、设计有很大的关系,和系统的维护也有很大的关系

    二、软件开发过程中的模型

    软件开发过程模型理论基础是软件生命周期理论和相关的软件工程原则,常用的软件开发过程模型有瀑布模型,螺旋模型,增量模型、原型模型与RUP模型

    1.       瀑布模型

    瀑布模型将软件在生命周期划分为可行性分析、需求分析、代码实现、测试、安装维护等6个基本活动、并且规定了它们自上而下的固定次序,形如瀑布流水、逐层下落。

    在瀑布模型中,软件开发的各项活动都严格按照现行方法进行,当前活动接收上一项活动的工作结果,实施完成所需的工作内容,当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改

    2.       原型模型

    原型是指模拟某种产品的原始模型,软件系统的原型是软件系统的一个早期可以运行的版本,原型模型是增量开发模型的一种形式,在开发真是系统前,需要构建一个简单的原型系统,实现客户或者未来客户与系统的交互,客户或者用户在对原型进行使用的过程中,不断的发现问题,从而达到进一步细化系统需求的目的。开发人员在已有原型的基础上,通过逐步调整原型模型来满足用户或者客户的需求,确定客户的真正需求,进而开发出客户或者用户满意的系统。

    3.       螺旋模型

    螺旋模型是一种采用周期性的方法进行软件系统开发的模型,它结合了瀑布模型与原型模型的特点,强调了其他模型所忽略的风险分析,常用于大型复杂系统的开发。

    螺旋模型的优点在于它的灵活性,可以再项目的各个阶段进行变更,以小的分段来构建大系统可以使成本计算简单明了,强调风险性分析,需要用户参与阶段性评价,对用户来说比较困难,过多的迭代次数会增加开发成本,推迟软件交付的时间

    4.       增量模型

    增量模型是在项目的开发过程中以一系列的增量方式开发系统。在增量模型中,软件被作为一系列的构件来设计、实现、集成与测试。,每一个构建都是由多种相互作用的模块所形成的,提供特定功能的代码片段构成。,每次交付的不是一个完整的产品,而是一个交付系统部分可运行子系统,用户可以看到分批不间断的看到运行良好的子系统,降低开发风险

    5.       统一软件过程模型(RUP)

    RUP是Rational公司提供的一套软件开发过程模型,它将用户需求转化为软件系统所需活动的集合,描述了一系列相关的软件工程流程,他们具有相同的结构,即相同的流程框架

    RUP中的软件生命周期在时间上被分解为4给 阶段,即初始阶段(Inception)、细化阶段(Elaboration)、构建阶段(Construction)以及交付阶段(Transition)。每个阶段结束语一个主要的里程碑。

    初始阶段:初始阶段的目标是为系统建立商业案例并确定项目的边界,在这个阶段定义了最终产品视图、商业模型并确定系统范围。它以需求为主,建立系统整体框架。初始阶段结束时的第一个重要的里程碑是生命周期目标里程碑,它用于评价项目的生存能力

    细化阶段:设计及确定系统认定体系结构,制定工作计划及资源要求。针对第一阶段需求分析结果,进行设计,代码实现,测试,然后在反馈到需求分析。该阶段结束第二个重要的里程碑是生命周期结构里程碑,它为系统的结构建立了管理基准并使项目能够在构建阶段进行衡量

    构建阶段:构建产品并继续演进需求,体系结构,计划直到产品提交。对初始化阶段的需求进行设计、代码实现、测试、反馈。重复需求、设计、编程、测试的过程。构建阶段的里程碑是初始功能里程碑,它决定了产品是否可以再测试环境中进行部署

    交付阶段:把产品交付给用户使用,综合测试,交付可运行产品。该阶段结束时的里程碑是产品发布里程碑

    三、UML(统一建模语言)

    UML提供了8中图,他们分别是类图、对象图、用例图、交互图(顺序图和协作图)、状态图、活动图、构建图和部署图。其中类图和对象图属于静态图,状态图和活动图属于行为图,顺序图和协助图属于交互图,构件图和部署图属于实现图

    1.       类图:类图展现了一组对象、接口、协作以及他们之间的关系,类图用于对系统的静态设计视图建模,包括了对系统的词汇建模,对简单的协作建模、对逻辑关系数据库模式建模。

    2.       对象图:对象图展示了一组对象及他们之间的关系。当对系统的静态设计视图或者静态进程视图建模时,主要是使用对象结构进行建模

    3.       用例图:用例图展现了一组用例、参与者以及他们之间的关系,用例图用于对系统的静态用例视图进行建模

    4.       交互图:此种图包括了顺序图和协助图,它们对系统的动态交互方面进行建模

    5.       状态图:状态图展现了一个状态机,它由状态、转换、事件和活动组成,状态图关注系统的动态视图,他对于接口、类和协作的行为建模尤为重要,他强调对象时间顺序

    6.       活动图:活动图是一种特殊的的状态图,它展现了在系统内部从一个活动到另一个活动流程。活动图专注于系统的动态视图

    7.       构件图:构件图展现了一组构建之间的组织和依赖。构建图专注于系统的静态时间视图

    、它和类图相关,通常把构建图映射为一个或者多个类、接口或者协助

    8.       部署图:部署图展现了运行处理结点以及其中的构建的配置。部署图给出了体系结构的静态实施视图

     

    展开全文
  • 由于国内大数据工作还处在一个有待开发的阶段,因此能从其中挖掘出多少价值完全取决于工程师个人能力。已经身处这个行业专家给出了一些人才需求大体框架,包括要有计算机编码能力、数学及统计学相关背景;...

    原标题:大数据工程师需要掌握哪些技能?

    由于国内的大数据工作还处在一个有待开发的阶段,因此能从其中挖掘出多少价值完全取决于工程师的个人能力。

    已经身处这个行业的专家给出了一些人才需求的大体框架,包括要有计算机编码能力、数学及统计学相关背景;学历并不是最主要的因素,能有大规模处理数据的经验并且有喜欢在数据海洋中寻宝的好奇心会更适合这个工作。此之,一个优秀的大数据工程师要具备一定的逻辑分析能力,并能迅速定位某个商业问题的关键属性和决定因素。

    学习能力能帮助大数据工程师快速适应不同的项目,并在短时间内成为这个领域的数据专家;沟通能力则能让他们的工作开展地更顺利,因为大数据工程师的工作主要分为两种方式:由市场部驱动和由数据分析部门驱动,前者需要常常向产品经理了解开发需求,后者则需要找运营部了解数据模型实际转化的情况。

    大数据应用开发工程师是大数据领域一个比较热门的岗位,有大量的传统应用需要进行大数据改造,因此大数据应用开发岗位有较多的人才需求。这个岗位需要掌握的知识结构包括大数据平台体系结构,比如目前常见的Hadoop、Spark平台,以及众多组件的功能和应用,另外还需要掌握至少一门编程语言,比如Java、Python、Scala等。

    大数据分析工程师是大数据领域非常重要的岗位,因为大数据的核心之一是数据价值化,而数据价值化的核心则在于数据的分析和应用。大数据分析工程师需要掌握的知识结构包括算法设计、编程语言以及呈现工具,算法设计是大数据分析师需要掌握的重点内容,而编程语言的作用则是完成算法的实现。另外,大数据分析师还需要掌握一些常见的分析工具。

    大数据运维工程师的主要工作内容是搭建大数据平台、部署大数据功能组件、配置网络环境和硬件环境、维护大数据平台,大数据运维工程师需要具备的知识结构包括计算机网络、大数据平台体系结构、编程语言(编写运维脚本)等,通常情况下,大数据运维工程师也需要对数据库有深入的了解。

    由于目前大数据人才匮乏,对于公司来说,很难招聘到合适的人才:既要有高学历,同时最好还有大规模数据处理经验。因此很多企业会通过内部挖掘。职业发展路径上,大多数公司的数据部门一般都是扁平化的层级模式,大致分为数据分析师、资深研究员、部门总监3个级别。大公司可能按照应用领域的维度来划分不同团队,而在小公司则需要身兼数职。

    完成大数据培训的相关课程,可以在加米谷大数据申请考取[大数据专业人才技能证书]。加米谷大数据,个人培训 丨 企业内训。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 一个建筑工程,从设计到建造、到交付,要经历不同的阶段,由不同人来操作,依靠自然合同,容易因为人为摩擦、扯皮等因素掣肘,降低工作效率。一旦建筑出现问题,如何精准追责,也成为现实中问题,而区块链技术将...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    应用计算机科学、数学及管理科学等原理,以工程原则和方法来解决软件问题,指导计算机软件开发和维护一门工程学科。  软件工程的原则 任务2 软件生命周期与软件开发模型 软件生命周期 软件开发模型 ...
  • 软件工程知识点

    2012-12-02 21:34:25
    需求规格说明书是需求分析阶段需要交付基本文档,将成为开发者进行软件设计和用户进行软件验证基本依据,涉及引言、术语定义、用户需求、系统体系结构、系统需求等有关软件需求及其规格诸多描述与定义。...
  • 工程硕士开题报告范文 论文题目 基于商业智能企业业务活动监控平台bam构建 选题意义和应用价值: 当前,制造业、金融业、医药业等行业市场快速变化,企业不仅仅需要对历史数据进行查看分析,更加希望了解...
  • 软件工程可行性研究

    2017-09-14 21:07:00
    (1)可行性分析可行性分析是系统在正式...具体而言,在可行性分析阶段,要确定软件开发目标与总要求,所以在做可行性分析时候,一般需要考虑技术是否可行、经济效益是否可行、用户操作是否可行、法律与社会是...
  • 本文在进行大量实践和深入研究基础上基于国际领先理论框架结合商业...工程方法一面向业务流业务流程需求分析方法提出一套可操作性强业务流程需求分析规范论述了需求分析这样一个必经阶段所应采取模型化分析...
  • 在第二阶段中要求每一位党员认真对照党章规定党员义务和党员领导干部基本条件,按照"两个务必"和"八个坚持、八个反对"要求,全面总结自己近三年来思想、工作和作风等方面情况,重点检查存在问题,从世界...
  • 我们在前面文章中给大家讲述了很多关于大数据思维...就目前而言,国内大数据工作还处在一个有待开发的阶段,因此能从其中挖掘出多少价值完全取决于工程师个人能力。已经身处这个行业专家给出了一些人才...
  • 信号完整性分析

    热门讨论 2013-12-11 17:28:53
    件工程师的工作,要在课外学习的东西太多太多了,而信号完整性分析恰恰是需要学习的比较重要的一部 分。 好书,经典!发表于 2008-10-07 08:32个人评分: 过瘾 受益匪浅 相当经典的书,翻译的也还可以
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:00:47
    记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,做过一个钩子(hook)程序,用于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词是在2001年的《机械工程...
  • 在工作流程中,完整地记录了各阶段工作记录,正确反映了各阶段的工作内容。工程项目管理在本企业新产品开发项目、新工艺路线开发、设备改造以及新产品开发经营决策中起到关键作用。进一步的完善了工程项目管理中的...
  • 该系统是从项目中标后目标成本的预测、施工阶段的成本核算与控制到竣工阶段的成本考核的全过程进行管理。 目标成本预测 目标成本有两个,一个是公司给项目下达的目标成本,也叫责任成本,公司用此成本来考核项目...
  • 小学一年级德育工作总结 小学一年级新生处于启蒙教育阶段,也是人生观价值观形成重要阶段,今天小编为大家精心挑选了关于小学一年级德育工作总结*,希望能够很好帮助到大家。小学一年级德育工作总结篇一 在...
  • 译者序回到顶部↑ 记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,做过一个钩子(hook)程序,用于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词是在...
  • 15.l 分析阶段的总结 15.2 设计阶段的开始 第16章 描述真实用况 16.l 导言 16.2 活动及其相互之间的依赖关系 16.3 真实用况 16.4 举例--购买商品一版本1 16.5 样例模型 第17章 协作图 17. 1 导言 ...
  •  多年来,受地方财力制约,州财政对我院经费预算严重不足,难以保障我院各项工作的正常运转,20XX年我院搬迁工程进入实施阶段,基建投入很大,大宗装备建设任务繁重,加上维持正常运转需要,使得我院长期存在...
  • 应该坚持社会主义核心价值指导,全面贯彻落实科教兴粤战略,引导、鼓励和支持我校毕业生到基层就业以及开展阶段性服务,为农村建设提供支持和保障,服务基层奉献社会。我校应该鼓励毕业生到农村去、到基层群众中...
  • 驱动系统有关人员对所要建立系统功能需求进行交流,驱动系统分析、设计、实现和测试等活动,包括制定计划、分配任务、监控执行和进行测试等,并将它们有机地组织在一起,使各个阶段中都可以回溯到用户实际需求。...
  • 马上要读研究生了,才发现要找到一份硬件工程师的工作,要在课外学习的东西太多太多了,而信号完整性分析恰恰是需要学习的比较重要的一部分。 好书,经典!发表于 2008-10-07 08:32个人评分: 过瘾 受益匪浅 ...
  • 大数据开发是大数据职业发展方向之一,另外一个方向是大数据分析。从工作内容上来说,大数据...知道了大数据开发是什么,那么如果想要从事大数据开发的工作,需要学什么了。 下面我们以大数据开发课程 阶段一:Jav...
  • 7.2 提交阶段的原则和实践 138 7.2.1 提供快速有用的反馈 138 7.2.2 何时令提交阶段失败 139 7.2.3 精心对待提交阶段 140 7.2.4 让开发人员也拥有所有 权 140 7.2.5 在超大项目团队中指定 一个构建负责...
  • 总之,对企业ERP实施的能力成熟度进行评级可以对项目的进程进行有效的计划、组织、领导和控制,可以对ERP应用企业、ERP软件公司、ERP咨询公司的工作进行考核,从而促进我国大批中小企业提高实施ERP的成功率。...
  • 旅行商问题 是经典组合优化问题,具有很强的工程背景和广泛应用价值. TSP 问题可以形式化描述为:已知N 个城市C = { C1 , C2 , ⋯, CN} , 以及任意两城市之间距离d , 求一条经过C 中所有城市一次且仅一次闭合...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

价值工程分析阶段的工作