zoukankan      html  css  js  c++  java
  • 有效需求分析阅读笔记三

    1准确、有效需求分析的必要性 
       
      由于软件系统复杂性日益提高,软件规模日益庞大,上世纪六十年代末后爆发了深刻的软件危机,表现为:进度拖延,费用超支,软件不符合用户要求、可靠性差且难以维护。其最主要的原因就是缺乏准确、有效的需求分析。时至今日,软件危机问题一直没有得到很好解决。 
      有效需求分析的重要性和必要性体现在:第一,软件需求文档是软件工程项目验收的依据。不准确、不完备的需求必然会导致生产出来的软件无法满足客户要求,并造成项目进度推迟、项目费用超支。第二,在软件生命周期中,一个错误发现得越晚,修复错误的费用越高,甚至是指数式增长。国外 
      另外,软件工程项目开发过程中,很多软件错误在需求过程就已产生并潜伏,而这些错误在需求过程中是可以被检查出来的[1]。由此可见,准确、有效的需求分析,是软件项目得以正确、及时完成的前提,是人们摆脱软件危机的最有效、最重要的方法。 
      2有效需求分析的主要障碍 
      在需求分析的实践中,由于以下原因,使得需求分析往往无法有效地进行: 
      ①系统开发需要用户、领域专家、开发小组共同参与并密切沟通; 
      ②用户单位组织机构与业务关系及业务流程复杂,客户很难清晰完备地表述需求; 
      ③用户与开发人员很难进行有效交流; 
      ④用户的需求是动态变化的; 
      ⑤缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法; 
      ⑥软件开发的技术人员和管理人员缺乏软件工程化的素质和要求,对工程化的开销认识不足。 
      正是基于这样的背景,本文在认真分析研究导致人们无法进行有效需求分析的原因的基础上,提出以下进行有效需求分析的简单易行而又行之有效的方法。 
      3进行有效需求分析的方法 
      1)为项目前景制定共同目标,并为共同目标承诺 
       
      为了达到项目的成功,需要在客户和开发公司之间达成共同目标,在共同完成项目的各个单位、小组、个人间建立一种协调合作解决问题的氛围和机制。 
      在项目确定后,应尽快召开一个由客户和开发公司各方人员(包括客户和开发公司有决策权的管理人员)参加的项目合作工作会。项目合作工作会要讨论和解释项目目标、各方共同利益以及实现共同利益的障碍,并在此基础上,制定项目团队的共同目标,确定解决问题与争端的指导原则及具体程序。 
      2)建立联合需求领导小组,并维护各小组间的沟通 
      在项目合作工作会就项目前景达成共同目标,并为共同目标承诺后,需要一种机制来维护项目参加人员之间的有效沟通与协作,促进问题的及时解决,并在需求方面作出决策。联合需求领导小组就是一种有效机制。 
      由于联合领导小组代表项目组跟踪需求过程,负责完成需求定义(包括需求的变更),并在需求方面作出决策,因此,联合需求领导小组成员必须包含客户单位和开发公司。同时,为利于小组决策,小组成员应尽量精炼,成员必须精挑细选,成员必须具有丰富的客户领域知识或需求工程知识或两者兼备、出色的沟通与协作能力和良好的合作精神。 
      联合需求领导小组要定期聚会,维护项目各方之间的沟通与协作,指导与协调各小组的工作,及时解决需求工作中出现的问题,控制需求变更,最终定义真实的客户需求。 
      过多的需求变更是导致项目超支和延迟交付的主要原因。因此,联合需求领导小组工作的重点和难点之一是跟踪和控制需求变更。为此,需要使用自动化需求工具建立需求跟踪矩阵,实现对需求变更的跟踪和控制。 
      3)使用熟悉的需求过程 
      使用需求过程是指在项目开发过程中定义完成工作的步骤、过程并形成文档,当需要在另一个机构或项目上完成相同或类似工作时,就可以复用相同的过程。 
      使用需求过程方法,需要定义需求过程流程图并形成文档。需求过程文档用于描述完成项目开发工作所涉及的步骤,活动流程,每个活动的工作内容、输入条件、责任人、活动成果等内容。过程流程图要包括一个宏观流程图和多个微观流程图。宏观流程图从宏观的角度描述整个开发工作的主要目标、主要工作任务、主要组成步骤及流程等。一个微观流程图是对宏观流程图中的一个步骤的细化,用于描述该工作步骤的任务、输入信息、责任人、产生的活动成果、子活动流程等信息。如果微观流程图中存在比较复杂的子活动,还可以用另一个微观流程图来说明该子活动。 
      当需要在另一个机构或项目上完成相同或类似工作时,通过复用需求过程可以大大加快开发进度并节省资金。这是因为复用过程有以下优点: 
      ①使得每个项目参加人员都清楚整个项目的目标、任务以及自己的工作任务、流程、需要完成的成果等信息。简单的说,可以使每个参加人员更好地理解要干什么以及怎样干。 
      ②通过不断改进过程,可以获得完成相同工作或类似工作的最佳方法。 
      使用需求过程方法需要对开发人员进行培训,使之熟悉过程,更好地理解要干什么以及怎样干。对新团队或新队员进行培训时,使用以前的相同或相似项目案例进行培训(使用项目的需求过程流程图及各步骤成果文档等),可以收到很好的效果。如果软件开发公司能够经常对员工进行培训并维持稳定的开发团队,需求过程方法将会取得非常明显的效果。 
      4)使用熟悉而有效的方法和技术 
      尽管目前已经存在很多支持需求工程的技术、方法和自动化工具,但是只有其中几个技术和手段特别有用。要根据开发公司及项目实际情况慎重选择适当的技术和手段。 
      美国Software Productivity Research(SPR)公司从1984年到2000年对650多个公司和机构的约9000个项目所使用的技术、方法和手段进行了研究,并得出如表2所示的评估结果:[2] 
      表2需求工程方法有效性与开销评估表 
      JAD(即联合应用系统设计)方法要求客户代表和开发公司与专家共同工作,开发双方共同认可的联合需求规范。JAD方法有助于定义真实的客户需求,有效地减少需求变更。JAD方法已在信息系统开发方面得到广泛应用。 
      建立快速原型的方法也是非常有效的需求方法。由于客户也常常不知道自己想要什么东西,也不知道所要的东西是否能够实现,只有当客户与软件系统交互时,很多更改要求和更详细的需求才能提出、很多软件需求中的缺陷才能发现,因此,在项目开发早期建立快速原型可以有效减少需求变更。同时,可以在原型代码的基础上进行正式编码,可以减少正式编码的时间。建立原型方法与JAD方法配合使用,可以取得更好的效果。如果开发团队曾经开发过类似系统,通过复用以前系统的部件和代码,或者运用开发人员的熟练技能,可以以很低的成本快速构建出原型。 
      对需求工程技术、方法和工具的选择,应根据开发团队和项目的情况进行慎重选择。最重要的是要选择开发人员熟悉的技术、方法和工具。开发机构应该努力使用同一组在自己环境证明有效的方法和工具。 
      5)认真执行需求检查 
      业界研究发现:软件系统中的绝大部分缺陷(80%以上)是在需求阶段被引入的;需求缺陷的类型主要是“不正确的事实”、“遗漏”、“不一致”,占比达到90%以上。[3] 
      而业界研究表明,需求错误是可以被检查出来的:通过需求检查,通常可以发现65%以上的需求错误[1]。因此,在项目开发的需求阶段必须认真执行需求检查,以有效地减少软件系统的错误。 
      要执行需求检查,就必须建立完备的需求文档。可以用自动化工具建立一个需求跟踪数据库,并标明每条需求及其理由,作为需求分析的成果和需求检查的依据。 
      6)培训员工并维持稳定的队伍 
      软件系统开发是一种高度智力活动,完全依赖于开发人员的智力活动,项目的成败完全取决于开发人员的熟练技能和对技能的熟练运用。开发团队是软件开发公司最为宝贵的财富。因此,必须努力维护开发队伍的文档,并不断对员工进行培训。这可以收到如下回报: 
      ①员工有较强的归属感和较高的忠诚度,工作更尽责; 
      ②员工对项目开发流程及自己的工作任务、流程非常熟悉,这既有利于工作效率的提高,而且有助于员工发现并提出工作方法的改进; 
      ③员工对开发工作中所使用的技术、方法和工具非常熟悉并能熟练运用于系统开发。这有助于定义真实完备的客户需求,减少设计和编码的错误,大大加快开发进度,得到更好的系统产品; 
      ④开发人员间能更有效地沟通和密切合作。 
      4总结 
      软件危机的爆发,使得人们认识到解决软件危机的真正有效的办法是定义完备真实的客户需求。因此,业界产生了很多用于需求分析的技术、方法和工具。尽管如此,要得到真实完备的客户需求,仍然是一件很困难的事情。业界实践表明,要进行有效的需求分析,不仅仅依赖于所采用的技术、方法和手段,更取决于对需求实践过程的管理。本文提出的进行有效需求分析实践的方法既简单易行,又具有很好的效果,具有很强的指导作用。 

  • 相关阅读:
    java-oop集合map
    IDEA启动Tomcat报错
    1.IDEM的快捷键
    1.idea快捷键
    14.
    13.级联一对多
    12.动态SQL
    11.动态参数
    10.主键回填
    9.参数的传递
  • 原文地址:https://www.cnblogs.com/LJT666/p/4989567.html
Copyright © 2011-2022 走看看