本文介绍常见的软件开发模型。
软件开发模型是指软件开发全部过程,活动和任务的结构框架。软件开发包括需求,设计,编码,测试和维护等阶段。软件开发模型能清晰,直观的表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。不同的软件开发模型适用于不同的应用场景,亦有相应的优缺点。
瀑布模型是传统的软件开发流程,这种模型要求严格按照线性方式进行软件开发的各个活动,每一项活动的工作内容都必须依据上一项活动的成果来实施完成。瀑布模型开发过程如下图。
瀑布模型的特点是:软件开发的阶段划分是明确的,一个阶段到下一个阶段有明显的界线。在每个阶段结束后,都会有固定的文档或源程序流入下一阶段。如在需求分析阶段结束后,需要有明确的描述软件需求的文档。因此也称瀑布模型是面向文档的软件开发模型。图中向上的虚线箭头表示当前阶段出现问题后需要反馈到上一阶段去修正。?
优点:
a)当软件需求明确,稳定时,可以按部就班地开发软件。
b)各个阶段的人员只专注于自己的开发任务,可以提高阶段效率。
缺点:
a)软件需求不明确或变动剧烈时,要到测试阶段才会暴露出需求的缺陷,造成后期修改代价太大,难以控制开发的风险。
b)软件开发前期造成的问题对后期影响较大。
瀑布模型适用于:
需求比较明确的软件项目。
V模型是Kevin Forsberg & Harold Mooz在1978年提出的,V模型强调测试在系统工程各个阶段中的作用,并将系统分解和系统集成的过程通过测试彼此关联。V模型从整体上看起来,就是一个V字型的结构。左边的下画线分别代表了用户需求、需求分析、概要设计、详细设计、编码和实现。右边的上画线代表了单元测试、集成测试、系统测试与验收测试。
V模型的中心思想是,研发人员和测试人员需要同时工作,在软件做需求分析的同时就会有测试用例的跟踪,这样可以尽快找出程序错误和需求偏离,从而更高效的提高程序质量,最大可能的减少成本,同时满足用户的实际软件需求。V模型的重要意义在于,非常明确的表明了测试过程中存在的不同的级别,并且非常清晰的描述了这些测试阶段和开发阶段的对应关系。V模型开发过程如下图。
a)单元测试:验证软件单元是否按照单元规格说明(详细设计说明)正确执行,即保证每个最小的单元能够正常运行。单元测试一般由开发人员来执行,首先设定最小的测试单元,然后通过设计相应的测试用例来验证各个单元功能的正确性。
b)集成测试:检查多个单元是否按照系统概要设计描述的方式协同工作。集成测试的主要关注点是系统能够成功编译,实现了主要的业务功能,系统各个模块之间数据能够正常通信等。
c)系统测试:验证整个系统是否满足需求规格说明。
d)验收测试:从用户的角度检查系统是否满足合同中定义的需求或者用户需求。
V模型的特点:
a)V模型体现的主要思想是开发和测试同等重要,左侧代表的是开发活动,而右侧代表的是测试活动。
b)V模型针对每个开发阶段,都有一个测试级别与之相对应。
c)测试依旧是开发生命周期中的阶段,与瀑布模型不同的是,有多个测试级别与开发阶段对应。
?
优点:
a)提供了明确的开发过程,使团队能够更好地掌握整个开发过程,并能够更好地管理和控制。
b)强调测试和验证的重要性,确保软件质量和可靠性。通过测试和验证,团队可以更早地发现和解决问题,从而降低风险。
c)强调可追溯性,每个开发阶段都应该与相应的测试阶段相对应,并能够追溯到需求和设计文档。
缺点:
a)需求发生变更,需要重新回到前期规划阶段,这会增加开发时间和成本。
b)需要大量的文档和工作量,包括需求文档、设计文档、测试计划和测试报告等。这些文档和工作量可能会增加开发时间和成本。
c)测试阶段非常重要,需要测试人员具备良好的技能和经验。测试人员的技能和经验不足,可能会影响测试结果和软件质量。
V模型适用于:
V模型适用于需求明确和需求变更不频繁的情形。
车企和银行软件开发用的比较多。
增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生的软件的一个可发布的“增量”,当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程的每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。采用增量模型的软件过程如下图。
例如:
对于一个软件项目,具有A,B,C,D4个功能,先开发出功能A,B,然后再开发出功能C,D,进而完成整个项目功能的开发,即AB->CD->ABCD。
优点:
a)前期开发人员可以较少。这时可开发出核心功能产品,投入市场,如果口碑不错,可以为下一个增量投入更多的人力。
b)规避技术风险。如一个系统需要用到的部件暂时未到,可以在早期增量中避免使用这个部件,后续增量再增加即可。
缺点:
a)由于需要实现的功能是一步步并入现有软件体系结构的,这要求软件体系结构有较好的柔韧性和开放性,便于功能的修改和添加。
b)软件结构可能随着需求的变更变得越来越糟。
增量模型适用于:
a)整个项目开发过程中,需求都可能发生变化,客户接受分阶段交付。
b)分析设计人员对应用领域不熟悉,难以一步到位。
c)中等或高风险项目。
迭代模型是RUP(Rational Unified Process,统一软件开发过程,统一软件过程)推荐的周期模型。在RUP中,迭代被定义为:迭代包括产生产品发布(稳定,可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。所以,在某种程度上,开发迭代是一次完成的经过所有工作流程的过程:(至少包括)需求工作流程,分析设计工作流程,实施工作流程和测试工作流程。
实质上,它类似小型瀑布式项目。RUP认为,所有的阶段(需求及其它)都可以细分为迭代。每一次的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。迭代的思想如下图所示。
例如:
对于一个软件项目,具有A,B,C,D4个功能,先同时做出A,B,C,D四个功能的原型,然后完成它们的基本功能,由粗到细,逐步求精,接着对这些功能进行优化,最终得到功能完整的软件,即ABCD基本功能->ABCD全部功能。类似于我们设计软件项目先搭个基础框架,实现其中的基本功能,后续在逐渐丰富,进而完成整软件项目功能,在完成的过程中同样伴随着需求,分析设计等这些流程的。
优点:
a)开发人员重复某个迭代,损失只是这个开发有误的迭代的花费
b)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
c)加快了开发工作的进度,因为开发人员清除问题的焦点所在,他们的工作会更有效率。
d)由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。
缺点:
a)需求在项目早期开发可能有所变化。
b)需要有一个高素质的项目管理者和一个高技术水平的开发团队。
迭代模型适用于:
a)项目开发早期需求可能有所变化。
b)分析设计人员对应用领域很熟悉。
c)高风险项目。
敏捷模型指的是一种以迭代、循序渐进的方式开发软件的方法论。它能够高效、快速地应对需求的变化,同时也注重个体和团队之间的沟通。
敏捷模型强调的是价值观和方法论的融合,开发过程非常流程化,而且要求团队进一步地与业务部门沟通,使得开发的过程能够更好地与实际业务相结合。
使用敏捷模型可以增强团队的协同能力、减少项目的风险,同时保证开发人员的工作效率和产品质量,使得团队能够迅速地响应市场需求。
优点:
a)适应性强。敏捷模型可根据需求的变化灵活调整开发流程,更好地适应市场变化和用户需求。
b)反馈及时。敏捷模型注重团队之间的协作与沟通,采用迭代开发的方式,使得项目进展得到实时的反馈。
c)高效性。敏捷模型注重人和效率的平衡,通过敏捷开发,可以更好地进行资源利用和时间管理。
d)风险低。敏捷模型采用小步骤进行软件开发,每个步骤都可得到有效的测试与交付,从而避免了集中式软件开发模式中可能出现的大量软件缺陷与风险。
缺点:
a)可控性较差。敏捷模型更注重团队的协同和适应市场变化,而忽略了项目可控性这一重要指标,容易出现项目无限期延迟或预算超出的风险。
b)文档较少。敏捷模型追求简单性,往往会缺乏完善的文档记录,这将对软件的维护和后续开发带来困难。
c)团队依赖性过高。敏捷模型强调团队之间的协同和沟通,而这种“依赖性”往往会使得团队的生产率大幅下降,在分散式团队和多地分布的情况下,这一缺点则更加明显。
敏捷模型适用于:
a)小型项目开发。在需要快速响应市场需求的大环境下,敏捷模型能够快速而高效地进行产品迭代,并且可以提前发现和解决一些薄弱环节。
b)需求变动频繁的项目。在需求变动频繁的场景下,敏捷模型可以反复实现产品迭代,保证产品紧贴市场需求。
c)项目开发周期较短的项目。敏捷模型强调使用最少的文档和管理,可以极大地缩短项目的开发周期。
总结,本文介绍了常见的软件开发模型。