每日三百行代码 第二十九天

1、 什么是软件生命周期?并简述软件生命周期每个阶段的任务。

**
软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,也有将以上阶段的活动组合在内的迭代阶段,即迭代作为生命周期的阶段。

问题的定义及规划
此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”,同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

软件设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。

程序编码
此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。

软件测试
在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。

运行维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。

2、 比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,并说明每种模型的适用范围。

项目适用:

  • 瀑布模型:用户的需求非常清楚全面,且在开发过程中没有或很少变化,对软件的应用领域很熟悉;用户的使用环境非常稳定;开发工作对用户参与的要求很低。
  • 快速原型模型:对所开发的领域比较熟悉而且有快速的原型开发工具;项目招投标时,可以以原型模型作为软件的开发模型;进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。
  • 增量模型:进行已有产品升级或新版本开发,增量模型是非常适合的,完成期限严格要求的产品,可以使用增量模型.对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。
  • 螺旋模型:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。

瀑布模型:瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。
优点:

  1. 为项目提供了按阶段划分的检查点。
  2. 前一阶段完成后,您只需要去关注后续阶段。
  3. 可在迭代模型中应用瀑布模型。
  4. 增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运 行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
  5. 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

缺点:

  1. 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
  2. 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  3. 通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  4. 瀑布模型的突出缺点是不适应用户需求的变化。

快速原型模型:快速原型模型需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。 快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。

优点:

  1. 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。
  2. 这种模型适合预先不能确切定义需求的软件系统的开发。

缺点:

  1. 所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
  2. 使用这个模型的前提是要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。

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

优点:

  1. 整个项目的资金不会被提前消耗,因为首先开发和交付了主要功能和高风险功能。
  2. 每个增量交付一个可操作的产品。
  3. 每次增量交付过程中获取的经验,有利于后面的改进,客户也有机会对建立好的模型做出反应。
  4. 采用连续增量的方式,可把用户经验融入到细化的产品,这比完全重新开发要便宜得多。
  5. “分而治之”的策略,使问题分解成可管理的小部分,避免开发团队由于长时间的需求任务而感到泪丧。
  6. 通过同一个团队的工作来交付每个增量,保持所有团队处于工作状态,减少了员工的工作量,工作分布曲线通过项目中的时间阶段被拉平。

缺点:

  1. 由于一些模块必须在另一个模块之前完成,所以必须定义良好的接口。
  2. 与完整的系统相比,增量方式正式的回顾和评审更难于实现,所以必须定义可行的过程。
  3. 要避免把难题往后推,首先完成的应该是高风险和重要的部分。
  4. 客户必须认识到总体成本不会更低。
  5. 分析阶段采用总体目标而不是完整的需求定义,可能不适应管理。
  6. 需要更加良好的计划和设计,管理必须注意动态分配工作,技术人员必须注意相关因素的变化。

螺旋模型:螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。1988年,巴利·玻姆(Barry Boehm)正式发表了软件系统开发的“螺旋模型”,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。

优点:

  1. 设计上的灵活性,可以在项目的各个阶段进行变更。
  2. 以小的分段来构建大型系统,使成本计算变得简单容易。
  3. 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
  4. 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效的交互。
  5. 客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。

缺点:

  1. 很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。