软件的开发模式

  软件开发模式是软件工程师研究的重要领域。软件测试与软件开发的开发模式息息相关。

测试人员应该充分了解开发模式,以便找准自己的位置和角色定位,便于充分发挥测试人员的价值。

 常见的软件开发模型主要有以下3类:

  • 线性模型
  • 渐进式模型
  • 变换模型

1.线性模型

  一般在软件需求完全确定的情况下,会采用线性模型,最具代表性的是“瀑布模型”,如图1

      

  瀑布模型是所有模型的基础框架!瀑布模式每一阶段都只执行一次,因此事是线性顺序进行的软件开发模式。

  特点:简单,分阶段,阶段间存在因果关系,各个阶段完成后都有评审,允许反馈,不支持用户参与,要求预先确定需求。

  优点:1)为项目提供了按阶段划分的检查点。2)当前一阶段完成后,您只需要去关注后续阶段。3)可在迭代模型中应用瀑布模型。

  缺点:1)各个阶段的划分完全固定,极少有反馈。2)只有在项目生命周期的后期才能看到结果,从而增加了开发的风险。3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段,早期的错误可能要等到开发后期的测试阶段才能发现。

  适用范围:需求易于完善定义且不易变更的软件系统

2.快速原型模型

  定义:快速原型模型需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。

 

   特点:快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。

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

   

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

3.螺旋模型

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

        

  

  特点: 瀑布模型(系统化)+快速原型(迭代过程)+风险分析。

      一个螺旋式周期:

      确定目标,选择方案,选定完成目标的策略

      风险角度分析该策略

      启动一个开发阶段

      评价前一步的结果,计划下一轮的工作

  优点: 1)设计上的灵活性,可以在项目的各个阶段进行变更。

      2)以小的分段来构建大型系统,使成本计算变得简单容易。
      3)客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
      4)随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
      5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
  缺点: 螺旋模型的主要优势在于,它是风险驱动的。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
      
  螺旋模型的项目适用:
            适合规模庞大、复杂度高、风险大的项目。

4.增量模型 

    增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品的开发。

    

    

   特点:增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。
  优点:

    1)由于能够在较短的时间内向用户提交一些有用的工作产品,因此能够解决用户的一些急用功能。

    2)由于每次只提交用户部分功能,用户有较充分的时间学习和适应新的产品。

    3)对系统的可维护性是一个极大的提高,因为整个系统是由一个个构件集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。

  缺点:
    

    1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。

    2)在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。

    3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。

 

 5.渐增模型

  

  该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。第一个增量往往是核心产品,交付用户评价后,再进行下一产品的开发。

 
       

    

  优点:软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。

  缺点:要求首先开发出来的部分有开放的体系结构来容纳后续部分。而且开发过程由于需求的变化容易变成边做边改模型,失去其整体性。

 6.面向对象模型

  

  多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。其中如图中所示,食草动物、食肉动物、兔子、羊、狮子、豹都可以称为子类,动物类称为父类、超类(superclass)或者基类。

  特点:

      • 在开发过程中,各个阶段之间呈现一种过程交替、工作循环和信息反馈的复杂关系。
      • 软件系统的表达形式在整个开发模型中都是相同的,即面向对象方法中把类及其结构作为系统的表达单元。
      • 无论哪一阶段都以渐增的方式不断地细化这些表达式。
      • 鉴于面向对象方法的特点(封装,隐藏技术),其开发模型支持软件的重用。

7.敏捷开发模型

  敏捷开发是递增式的、迭代的、不断调整的开发模式。

  我们逐渐地建立起软件系统,能看到 系统在成长,能展示进度。通过多次发布或项目的阶段检查点,每一次都比上一次靠近目标。 迭代包括需求的开发和测试,典型的迭代周期是 2 周。目标随着从上一次的迭代中学到的东 西、反馈以及商业机会而调整。

  

   敏捷开发模式是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。

  

     

  Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。在这个框架中,整个开发过程由若干个短的迭代周期组成。

  一个短的迭代周期称为一个Sprint,每个Sprint的周期建议2~4周(互联网产品研发可以使用一周的Sprint)。在Scrum中,使用产品Backlog来管理产品的需求。

  在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表,成为Sprint Backlog。

  在每个迭代结束时,Scrum团队将递交潜在的可交付产品增量。

  Scrum起源于软件开发项目,但它适用于任何复杂的或是创新性的项目。

边做边改模型

  许多产品都是使用"边做边改"模型来开发的。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。

  在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。

     

  这是一种类似作坊的开发方式,对编写几百行的小程序来说还不错,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:   

    (1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;

    (2)忽略需求环节,给软件开发带来很大的风险;

    (3)没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。

变换模型

  变换模型是基于模型设计语言的开发模式。是目前软件工程学者们在努力的研究方向。如图4.12

    

  变换模型的思想是省略编码和测试阶段,代之以自动化的程序变换过程,而主要精力放在前期的需求分析和建模上。

  这一模式似乎把测试人员排除在外,但实际是把测试人员提前到原型验证阶段,无疑对测试人员能力提出了新的需求。

软件开发的发展

      

  • 以软件需求完全明确为前提的第一代软件过程模型。如“瀑布”
  • 在初始阶段需求不明朗的情况下采用渐进式。如“螺旋、原型”
  • 以体系结构为基础的基于构件组装的开发模式,例如基于构件的开发模式和基于体系结构的开发模式。

     

    

摘自:《软件测试技术大全》

原文地址:https://www.cnblogs.com/eric88/p/10527398.html