软件项目过程模型与规划

系统分析与设计 Homework 3

Posted by Heng on April 18, 2019

简述瀑布模型、增量模型、螺旋模型(含原型方法),并分析优缺点

从项目特点、风险特征、人力资源利用角度思考

瀑布模型

瀑布模型是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段

优点:

  • 能降低软件开发的复杂程度,提高软件开发过程的透明性,提高软件开发过程的可管理性。
  • 在一个阶段完成之后,我们只需要关注后续阶段。
  • 为软件开发过程提供了一个模板,这个模板使得分析、设计、编码、测试和维护有一个共同的指导。
  • 对本阶段活动执行情况进行评审,能及时发现开发过程中存在的缺陷

缺点:

  • 强调每一个过程活动的线性顺序,不够灵活
  • 由于开发模型是线性的,用户只能等到整个开发过程的末期才能见到项目成果,风险控制能力比较弱
  • 其中的软件活动都是文档控制的,当阶段之间有过多的文档工作的时候,会极大的增加系统的工作量
  • 当开发过程中,用户需求发生变化,瀑布模型不容易去适应这样的变化
增量模型

增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。

优点:

  • 将待开发的软件模块化,可以分批次的提交软件产品,让用户及时的了解软件项目进展,这是瀑布模型所做不到的。
  • 以组件为单位开发,可以降低软件开发的风险,如果一个组件发生了错误,不会影响整体系统,风险控制能力强。
  • 开发顺序灵活,开发人员可以根据组件的优先级来灵活调整组件的开发顺序,降低系统失败的风险。

缺点:

  • 该模型的基础是待开发的软件系统可以被模块化,如果待开发的软件系统很难被模块化,将无法使用增量模型来进行开发。
  • 由于组件一个一个添加到系统中的,所以需要这个系统必须在每个组件加入之后不能破坏已有的结构。
  • 当开发过程中遇到用户需求改变的时候,虽然增量模型比瀑布模型有更好的灵活性,但是容易退化为边做边改模型,让软件开发过程失去整体性。
  • 需处理好增量包之间相互重复的地方,否则需要对系统进行全面的分析。
  • 考察开发人员的全局观,对开发人员的技能与全局意识有一定要求。
螺旋模型(含原型方法)

螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。

优点:

  • 增加了设计上的灵活,可以在开发的各个阶段进行更改。
  • 每个大的系统拆分成不同的小的分段,让开发成本比较容易计算。
  • 从螺旋模型的结构中可以看到,客户可以参与到每个阶段的开发,这样能减少需求修改的次数,保证项目的稳定性。
  • 客户和开发人员也有比较好的沟通,避免频繁的需求变更所导致的开发成本增加,提高了客户对项目的信心。

缺点:

  • 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,过分依赖风险分析经验与技术,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。若有失误的风险分析可能会带来更大的风险。
  • 过于灵活的开发过程不利于已经签署合同的客户与开发者之间的协调。
  • 由于只适用大型软件,过大的风险管理支出会影响客户的最终收益。
  • 而且过多的迭代次数会增加开发成本,延迟提交时间。

简述统一过程三大特点,与面向对象的方法有什么关系?

三大特点:

  • 用例驱动:所有的用户和用例组合在一起就是用例模型,它描述了系统的全部功能。用例是用户与系统交互的具体情景,用例图不仅能确定用户的需求,还可以驱动系统设计、实现和测试的进行,也就是说用例可以驱动开发过程。
  • 以构架为核心:综合考虑软件系统的各个方面并优先解决软件系统中的主要问题,同时创建常见问题的通用解决方案,解决软件项目的主要风险。
  • 是迭代和增量的过程:将这些项目划分为切实可行并能够产生一个增量的迭代过程,迭代过程就是用来处理一组用例的,迭代过程要解决最突出的风险问题。如果一次迭代达到了目的,就可以进入下一次迭代,如果一次迭代没有带到预期的目标,那么必须重新审核前面的方法,并尝试一种新的方法。

和面向对象的方法有什么关系?

  • 统一过程是基于构件的,它采用新的可视化建模标准,即统一建模语言(UML),它依赖三个关键概念——用例驱动、以构架为中心及迭代和增量式的开发。统一过程将软件开发过程要素和软件工件要素整合在统一的软件工程框架中,是一个面向对象的程序开发方法论,给出了有关软件开发过程组织及实施的指导。

简述统一过程四个阶段的划分准则是什么?每个阶段关键的里程碑是什么?

  • 统一过程的四个阶段的划分准则是初始阶段(Inception)精化阶段(Elaboration)构建阶段 (Construction)产品交付阶段(Transition)。 每个阶段结束于一个主要的里程碑,并在阶段结尾执行一次评估以确定这个阶段的目标是否已经满足。
  • 四个阶段的关键里程碑:
    • 初始阶段:生命周期目标(Lifecycle Objective) 里程碑,包括一些重要的文档,如原始业务案例等。需要对这些文档进行评审,以确定正确理解用例需求、项目风险评估合理、阶段计划可行等。
    • 精化阶段:生命周期体系结构(Lifecycle Architecture) 里程碑。包括风险分析文档、软件体系结构基线、项目计划、可执行的进化原型、初始版本的用户手册等。通过评审确定软件体系结构已经稳定、高风险的业务需求和技术机制已经解决、修订的项目计划可行等。
    • 构建阶段:初始运行能力(Initial Operational)里程碑。包括可以运行的软件产品、用户手册等,初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。
    • 产品交付阶段:产品发布(Product Release)里程碑。确定最终目标是否实现,是否应该开始产品下一个版本的另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的相重合。

软件企业为什么能按固定节奏生产、固定周期发布软件产品?它给企业项目管理带来哪些好处?

  • 因为软件企业采用了统一过程的开发,而统一过程为企业按固定节奏生产、固定周期发布软件产品提供了依据。统一过程的每个阶段都由一个或多个迭代组成。每个迭代都要针对不同的业务用例或系统用例进行细化和实现。每个阶段开始时都有特定的目标,结束时也有特定的里程碑。在每个阶段中存在一个或多个迭代,在每个迭代中,可以有多个工作流,企业只需要完成该阶段性的小目标即可,为固定项目的开发周期提供了可能。
  • 给企业项目管理带来的好处:规定好了每个阶段的目标和开发成果,定义了一个项目中产品和活动的标准,提供了规范的步骤组织指导;可以让企业能够及时的交付产品,减少项目的开发时间和金钱成本;明确了项目的开发周期,从而更好地调度人力和资源。