精华内容
下载资源
问答
  • 软件过程模型
    万次阅读
    2020-12-28 23:26:40

    1.瀑布模型

    也叫做鲑鱼模型(Salmon model):向前一阶段回溯

    上一个阶段结束,下一个阶段才能开始
    每个阶段均有里程碑和提交物
    上一阶段的输出是下一阶段的输入
    每个阶段均需要进行V&V
    侧重于文档与产出物

    在这里插入图片描述
    优点——追求效率
    简单、易懂、易用、快速
    为项目提供了按阶段划分的检查点,项目管理比较容易
    每个阶段必须提供文档,而且要求每个阶段的所有产品必须进行正式、严格的技术审查
    缺点——过于理想化
    在开发早期,用户难以清楚地确定所有需求,需求的错误很难在开发后期纠正,因此难以快速响应用户需求变更
    开发人员与用户之间缺乏有效的沟通,开发人员的工作几乎完全依赖规格说明文档,容易导致不能满足客户需求
    客户必须在项目接近尾声的时候才能得到可执行的程序,对系统中存在的重大缺陷,如果在评审之前没有被发现,将可能会造成重大损失

    瀑布模型太理想化,太单纯,已不再适合现代的软件开发模式,在大型系统开发中已经很少使用
    适用场合:
    软件项目较小,各模块间接口定义非常清晰
    需求在项目开始之前已经被全面的了解,产品的定义非常稳定
    需求在开发中不太可能发生重大改变
    使用的技术非常成熟,团队成员都很熟悉这些技术
    负责各个步骤的子团队分属不同的机构或不同的地理位置,不可能做到频繁的交流
    外部环境的不可控因素很少

    2.增量过程模型

    在很多情况下,由于初始需求的不明确,开发过程不宜采用瀑布模型
    因此,无须等到所有需求都出来才进行开发,只要某个需求的核心部分出来,即可进行开发
    另外,可能迫切需要为用户迅速提供一套功能有限的软件产品,然后在后续版本中再细化和扩展功能
    在这种情况下,需要选用增量方式的软件过程模型
    在这里插入图片描述
    软件被作为一系列的增量来设计、实现、集成和测试,每一个增量是由多个相互作用的模块所形成的特定功能的代码片段构成
    本质:以迭代的方式运用瀑布模型
    第一个增量往往是核心产品:满足了基本的需求,但是缺少附加的特性
    客户使用上一个增量的提交物并进行自我评价,制定下一个增量计划,说明需要增加的特性和功能
    重复上述过程,直到最终产品产生为止

    举例1:开发一个类似于Word的字处理软件

    • 增量1:提供基本的文件管理、编辑和文档生成功能
    • 增量2:提供高级的文档编辑功能
    • 增量3:实现拼写和语法检查功能
    • 增量4:完成高级的页面排版功能

    举例2:开发一个教务管理系统

    • 增量1:提供基本的学籍管理和成绩管理功能
    • 增量2:提供选课功能
    • 增量3:提供查询教室使用情况的功能
    • 增量4:提供课表生成、上课名单生成、成绩录入等功能

    优点:

    • 在时间要求较高的情况下交付产品:在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品,对客户起到“镇静剂”的作用
    • 人员分配灵活:如果找不到足够的开发人员,可采用增量模型:早期的增量由少量人员实现,如果客户反响较好,则在下一个增量中投入更多的人力
    • 逐步增加产品功能可以使用户有较充裕的时间来学习和适应新产品,避免全新软件可能带来的冲击
    • 因为具有较高优先权的模块被首先交付,而后面的增量也不断被集成进来,这使得最重要的功能肯定接受了最多的测试,从而使得项目总体性失败的风险比较低

    困难:

    • 每个附加的增量并入现有软件时,必须不破坏原来已构造好的部分
    • 同时,加入新增量时应简单、方便 ——该类软件的体系结构应当是开放的
    • 仍然无法处理需求发生变更的情况
    • 管理人员必须有足够的技术能力来协调好各增量之间的关系

    RAD模型

    快速应用开发RAD (Rapid Application Development)

    侧重于短开发周期(一般为60~90天)的增量过程模型,是瀑布模型的高速变体,通过基于构件的构建方法实现快速开发
    多个团队并行进行开发,但启动时间有先后,先启动团队的提交物将作为后启动团队的输入
    缺点:

    • 需要大量的人力资源来创建多个相对独立的RAD团队
    • 如果没有在短时间内为急速完成整个系统做好准备,RAD项目将会失败
    • 如果系统不能被合理的模块化,RAD将会带来很多问题
    • 技术风险很高的情况下(采用很多新技术、软件需与其他已有软件建立集成等等),不宜采用RAD

    3.演化过程模型

    软件开发过程面临的客观情况

    • 软件系统会随着时间的推移而发生变化,在开发过程中,需求经常发生变化,直接导致产品难以实现
    • 严格的交付时间使得开发团队不可能圆满完成软件产品,但是必须交付功能有限的版本以应对竞争或压力
    • 很好的理解核心产品与系统需求,但对其他扩展的细节问题却没有定义

    在上述情况下,需要一种专门应对不断演变的软件过程模型,即“演化过程模型”
    本质:循环、反复、不断调整当前系统以适应需求变化

    主要包括两种形态:快速原型法,螺旋模型

    3.1快速原型法
    在这里插入图片描述
    快速原型法的步骤

    Step 1:双方通过沟通,明确已知的需求,并大致勾画出以后再进一步 定义的东西
    Step 2:迅速策划一个原型开发迭代并进行建模,主要集中于那些最终 用户所能够看到的内容,如人机接口布局或者输出显示格式等
    Step 3:快速设计产生原型,对原型进行部署,由客户和用户进行评价
    Step 4:根据反馈,进一步细化需求并调整原型
    Step 5:原型系统不断调整以逼近用户需求

    “原型”的类型

    • Throwaway prototyping(抛弃式原型)
      最初的原型在完成并得到用户认可之后,将不会作为交付给用户的最终系统的一部分,而是被抛弃,其目的只是为了收集与验证需求
      该类原型可能是不可执行的(例如,只包含用户界面)
    • Evolutionary prototyping(演化式原型)
      最初构造的原型将具备较高的质量,包含了系统的核心功能,然后通过收集需求对其进行不断的改善和精化
      该类原型是可执行的,将成为最终系统的一部分

    快速原型法的优缺点

    优点:
    提高和改善客户/用户的参与程度,最大程度的响应用户需求的变化

    缺点:

    • 为了尽快完成原型,开发者没有考虑整体软件的质量和长期的可维护性,系统结构通常较差
    • 可能混淆原型系统与最终系统,原型系统在完全满足用户需求之后可能会被直接交付给客户使用
    • 额外的开发费用

    3.2螺旋式过程模型
    在这里插入图片描述
    与增量、RAD等的最大区别在于重视风险评估

    螺旋模型沿着螺线旋转,在四个象限内表达四个方面的活动:

    • 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制
    • 风险分析:分析所选方案,考虑如何识别和消除风险
    • 实施工程:实施软件开发
    • 客户评估:评价开发工作,提出修正建议

    举例:

    • 第1圈:开发出产品的规格说明
    • 第2圈:开发产品的原型系统
    • 第3~n圈:不断的迭代,开发不同的软件版本
    • 根据每圈交付后用户的反馈来调整预算、进度、需要迭代的次数

    出发点:开发过程中及时识别和分析风险,并采取适当措施以消除或减少风险带来的危害

    优点:结合了原型的迭代性质与瀑布模型的系统性和可控性,是一种风险驱动型的过程模型:

    • 采用循环的方式逐步加深系统定义和实现的深度,同时更好的理解、应对和降低风险
    • 确定一系列里程碑,确保各方都得到可行的系统解决方案
    • 始终保持可操作性,直到软件生命周期的结束
    • 由风险驱动,支持现有软件的复用

    缺陷:
    适用于大规模软件项目,特别是内部项目,周期长、成本高
    软件开发人员应该擅长寻找可能的风险,准确的分析风险,否则将会带来更大的风险

    总结:演化过程模型的缺点
    演化过程模型的目的:
    需求的变更频繁,要求在非常短的期限内实现,以充分满足客户/用户要求、及时投入市场

    存在的问题:
    由于构建产品所需的周期数据不确定,给项目管理带来困难
    演化速度太快,项目陷入混乱;演化速度太慢,影响生产率
    为追求软件的高质量而牺牲了开发速度、灵活性和可扩展性

    更多相关内容
  • 【软件工程】常见的几种软件过程模型的比较

    千次阅读 多人点赞 2020-03-22 11:40:49
    几种常见软件过程模型的比较 一、瀑布模型(Waterfall Model)# 瀑布模型(经典生命模型)提出了软件开发的系统化的、顺序的方法。其流程从用户需求规格说明开始,通过策划、建模、构建和部署过程,最终提供一个...

    几种常见软件过程模型的比较

    一、瀑布模型(Waterfall Model)#

    瀑布模型(经典生命模型)提出了软件开发的系统化的、顺序的方法。其流程从用户需求规格说明开始,通过策划、建模、构建和部署过程,最终提供一个完整的软件并提供持续的技术支持。

     

    模型特点

    • 必须等前一阶段的工作完成之后,才能开始后一段的工作;
    • 每一阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
    • 前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能得到正确的结果。
    • 每个阶段结束前都要对所完成的文档进行评审,以便及早发现问题,改正错误。事实上越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量,降低软件成本的重要措施。

    模型优点

    • 强调了开发的阶段性,各阶段具有顺序性和依赖性
    • 强调早期调研和需求分析,推迟编码实现的观点
    • 提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

    模型局限

    • 瀑布模型是一种线性模型,要求项目严格按规程推进,必须等到所有开发工作全部完成以后才能获得可以交付的软件产品。不能对软件系统进行快速创建,对于一些急于交付的软件系统的开发很不方便。
    • 瀑布模型适合于需求明确,且无大的需求变更的软件开发(编译系统、操作系统等)。而对于分析初期需求模糊的项目,瀑布模型也并不适合。

    适用场景

    适用于需求确定,无大的需求变更,工作能够采用线性的方式完成的软件。

    二、增量模型(Incremental Model)#

    增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它对软件过程的考虑是:在整体上按照瀑布模型的流程实施项目开发,以方便对项目的管理;但在软件的实际开发中,则将软件系统按功能分解为许多增减构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完成,并都被集成到系统之中交付用户使用。

     

    模型特点

    • 当使用增量模型时,第一个增量往往是核心的产品;
    • 客户对每个增量的使用和评估都作为下一个增量发布的新特性和功能;
    • 该模型采用随着日程时间的进展而交错的线性雪猎,每一个线性序列产生软件的一个可发布的“增量”。

    模型优点

    • 第一个可交付版本所需要的成本和时间很少;
    • 开发由增量表示的小系统所承担的风险不大;
    • 由于很快发布了第一个版本,因此可以减少用户需求的变更;
    • 运行增量投资,即在项目开始时,可以仅对一个或两个增量投资;

    模型局限

    • 管理发生的成本、进度和配置的复杂性可能会超出组织的能力;
    • 如果没有对用户的变更要求进行规划,那么产生的出事增量可能会造成后来增量的不稳定;
    • 如果需求不想早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布。

    适用场景

    项目在既定的商业要求期限之前不可能找到足够的开发人员的情况。

    三、演化模型(Evolutionary Model)#

    快速原型(Rapid Prototype)模型#

    软件开发过程中,开发初期很难得到一个完整的、准确的需求规格说明,开发者往往对要解决的应用问题模糊不清,以至于形成的需求规格说明常常是不完整的、不准确的,有时甚至是有歧义的。此外,在整个开发过程中,用户可能会产生新的要求,导致需求的变更。为了适应这种需求的不确定性和变化,于是出现了快速原型(Rapid Prototype)开发方法。

     

    模型特点

    • 快速原型是用来获取用户需求的,或是用来试探设计是否有效的。一旦需求或设计确定下来了,原型就将被抛弃。因此,快速原型要求快速构件、容易修改,以节约原型创建的成本、加快开发速度;
    • 快速原型是暂时适用使用的,因此并不要求完整。它往往针对某个局部问题建立专门原型,如界面原型、工作流原型等;
    • 快速原型不能贯穿软件的整个生命周期,它需要和其他的过程模型相结合才能产生作用。例如,在瀑布模型中应用快速原型,以解决瀑布模型在需求分析时期存在的不足。

    模型优点

    • 能渐进地启发客户提出新的要求或任务,促使开发人员和用户达成共识;
    • 减少了开发风险,避免了因为需求不确定而在开发过程中浪费了大量的资源。

    模型局限

    • 没有考虑到软件的整体和长期的可维护性;
    • 可能由于达不到质量要求而导致产品被抛弃,从而采用新的模型重新设计;

    适用场景

    原型方法比较适用于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。

    螺旋模型(Spiral Model)#

    对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。

     

    四个步骤

    • 制定计划:确定软件的目标,选定实施方案,明确项目开发的限制条件;
    • 风险评估:分析所选的方案,识别风险,消除风险;
    • 实施工程:实施软件开发,验证阶段性产品;
    • 用户评估:评价开发工作,提出修正建议,建立下一个周期的开发计划。

    模型特点

    • 与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便;
    • 使用螺旋模型进行软件开发,需要开发人员具有相当丰富的风险评估经验和专门知识。

    模型优点

    • 关注软件的重用;
    • 关注早期错误的消除;
    • 将质量目标放在首位;
    • 将开发阶段与维护阶段结合在一起。

    模型局限

    • 开发人员需要有较强的风险评估的经验;
    • 契约开发通常需要事先指定过程模型和发布产品。

    适用场景

    螺旋模型强调风险分析,使得开发人员和用户对美俄演化层出现的风险有所了解,从而做出应有的反应。因此,该模型适合用于庞大、复杂并且具有高风险的系统。

    四、喷泉模型(Water Fountain Model)#

    喷泉模型是专门针对面向对象软件开发方法而提出的。“喷泉”一词用于形象地表达面向对象软件开发过程中的迭代和无缝过渡。

    在面向对象方法中,对象既是对现实问题中实体的抽象,也是构造软件系统的基本元素。 因此,建立对象模型在面向对象方法中,既可以用于分析,也可以用于设计,而且分析阶段所获得的对象框架模型可以无缝过渡到设计阶段,以作为软件实现的依据。

    喷泉模型的过程方法所考虑的是,基于面向对象方法所带来的便利,对软件的分析、设计 和实现按照迭代的方式交替进行,并通过进化的方式,使软件分阶段逐渐完整、逐步求精。

     

    模型特点

    • 喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法;
    • 喷泉模型使开发过程具有迭代性和无间隙性,迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统,无间隙是指在开发活动(如分析、设计、编码)之间不存在明显的边界。

    模型优点

    • 喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。其优点是可以提高如阿健项目的开发效率。节省开发时间。

    模型局限

    • 由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理;
    • 喷泉模型要求严格管理文档,使得审核的难度加大。

    五、基于构件的开发模型(Component-baseed Development Model)#

    基于构件的开发方法是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品构件。基于构件的开发模型具有许多螺旋模型的特点,它本质上是演化模型,需要以迭代方式构件软件。其不同之处在于,基于构件的开发模型采用预先打包的软件构件开发应用领域。

    六、形式化方法模型(Formal Methods Model)#

    形式化方法是建立在严格数字基础上的一种软件开发方法,其主要活动是生成计算机软件形式化的数学规格说明

    七、统一过程(UP)模型#

    统一过程模型是一种“用例和风险驱动,以架构为中心、迭代并且增量”的开发过程,由 UML 方法和工具支持。迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部的发布。

    八、敏捷开发(Agile Development)#

    敏捷开发的总体目标是通过“尽可能地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。

    敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。

    极限编程(XP)#

    XP 是敏捷开发的典型方法之一,是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成。

    • 四大价值观:沟通、简单性、反馈和勇气。
    • 五大原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
    • 12 个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40个小时、现场客户和编码标准。

    水晶法(Crystal)#

    水晶方法体系与 XP 一样,都有一人为中心的理念,但在实际上有所不同。水晶方法体系考虑到人们一般很难严格遵循一个纪律约束很强的过程,认为每一个项目都需要一套不同的策略、约定和方法论。因此,与 XP 的高度纪律性不同,水晶方法体系探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。

    并列争求法(Scrum)#

    用迭代的方法,其中把每 30 天一次的迭代称为一个“冲刺”,并按需求的优先级来实现产品。多个自组织和自治小组并行地递增实现产品。协调是通过简短的日常会议来进行的。

    自适应软件开发(ASD)#

    ASD 的核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。

    作者: 周二

    出处:https://www.cnblogs.com/jojop/p/11801241.html

    展开全文
  • 文章目录瀑布模型瀑布模型特点:优点:缺点:快速原型模型优点:缺点:增量模型优点:缺点:风险更大增量模型:螺旋模型优点:缺点:喷泉模型优点:缺点:Rational 统一过程优点:微软公司软件开发过程规划阶段设计...

    瀑布模型

    使用最早,应用最广
    在这里插入图片描述

    瀑布模型特点:

    1. 阶段具有顺序性和依赖性
      前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
    2. 推迟实现观点
      瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。
    3. 质量保证观点
      瀑布模型每阶段坚持两个重要做法:
      一是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。
      二是每阶段结束前对文档评审。

    传统瀑布模型过于理想化,但人在工作过程中不可能不犯错误,所以实际瀑布模型带反馈环.在这里插入图片描述

    优点:

    提高软件质量,降低维护成本,缓解软件危机。

    缺点:

    模型缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。

    快速原型模型

    快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。
    在这里插入图片描述

    优点:

    1. 确定需求上优于瀑布模型(通过原型与用户交互);
    2. 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用;
    3. 有的软件原型可以成为最终产品的一部分。

    缺点:

    快速建立的系统结构加连续修改可能导致产品质量低下;
    原型系统的内部结构可能不好。


    快速原型模型适用于需求不确定的情况

    增量模型

    又称渐增模型,开发软件时将软件产品作一系列增量构件设计、编码、集成和测试。

    区别于瀑布和快速原型模型:

    • 瀑布和快速原型模型是一次把满足所有需求产品提交给用户。
    • 增量模型是分批向用户提交产品。
      在这里插入图片描述

    优点:

    1. 较短时间向用户提交可完成部分工作的产品;
    2. 用户有充裕时间学习适应产品;
    3. 软件结构必须开放,方便向现有产品加入新构件。

    缺点:

    做到第三个优点比较困难。


    前述增量模型在实现构件前完成总体的需求分析、规格说明和概要设计,相对来说风险较小。

    风险更大增量模型:

    确定用户需求后,各构件集并行构建。
    在这里插入图片描述

    螺旋模型

    1988年B.Boehem提出,加入风险分析,常指导大型软件项目。

    软件风险:超期、超预算、行业竞争等

    笛卡尔坐标四象限表达四方面活动:

    1. 制定计划:确定目标、选定方案、设定约束条件。
    2. 风险分析:评估方案,识别和消除风险。
    3. 实施工程:软件开发
    4. 客户评估:评价开发工作,计划下一阶段工作。

    沿螺线自内向外每旋转一圈开发出更完善新版本。
    在这里插入图片描述

    优点:

    大型软件开发项目有较好的风险控制;

    缺点:

    1. 需要风险评估的经验;
    2. 契约开发通常需要事先指定过程模型和发布产品,
    3. 普及度不如其他模型

    喷泉模型

    面向对象生命周期模型,体现迭代和无缝特性。

    • 迭代
      求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
    • 无缝
      分析、设计、编码各阶段间不存在明显边界。
      在这里插入图片描述

    优点:

    无缝,可同步开发,提高开发效率,节省开发时间, 适应面向对象软件

    缺点:

    可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。

    Rational 统一过程

    由Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增方式开发软件。

    Rational统一过程是一个二维生命周期模型。
    在这里插入图片描述

    • RUP有9个核心工作流,包括6个核心过程工作流和3个核心支持工作流。
    • RUP有4个连续阶段,每个阶段有明确目标,通过一次或多次迭代完成。

    优点:

    1. 不断的版本发布成为一种团队日常工作的真正驱动力;
    2. 将发现问题、制定方案和解决过程集成到下一次迭代;
    3. 迭代开发,降低风险;
    4. 更好地安排产品开发的辅助过程。

    微软公司软件开发过程

    在这里插入图片描述

    规划阶段

    开展市场调查研究,结合公司战略形成产品的远景目标。

    设计阶段

    根据产品远景目标,完成软件功能规格说明和总体设计,
    确定产品开发的主要进度。

    开发阶段

    完成产品中所有构件的开发工作。

    稳定阶段

    实行全面的内部和外部测试,最终形成可发布的RTM版本

    发布阶段

    确认产品质量符合发布标准后,发布产品及相关消息


    递进式的开发策略:

    解决问题的及时性、不确定和变更因素可控性、缩短产品上市周期
    在这里插入图片描述

    展开全文
  • 软件工程 软件过程模型概述

    千次阅读 2019-05-06 22:09:50
    文章目录概述瀑布模型(Waterfall Model)增量模型(Incremental Model)演化模型(Evolutionary Model)原型模型(Prototype Model)螺旋模型(Spiral Model)喷泉模型(Water Fountain Model)基于构件的开发模型(Component-...

    概述

    软件过程模型实际上就是软件开发模型,这是软件开发全过程、活动、任务的结构框架。

    下面将简单介绍一下各种常用的软件过程模型。

    瀑布模型(Waterfall Model)

    瀑布模型即将 软件生存周期 中的各个活动规定为依线性顺序连接的若干阶段模型。它规定了由前至后、相互连接的固定次序,如同瀑布逐级下落:

    Waterfall Model

    瀑布模型假定,一个待开发的系统需求是完整的、简明的、一致的,而且可以先于设计和实现完成之前产品。

    这种模型的优点在于易于理解、管理成本低,强调阶段性早期计划及需求调查和产品测试。不足之处是,客户必须能够完整、正确、清晰地表达他们的需要。并且往往只有当项目接近结束的时候才能发现需求或设计中的错误,项目风控能力较弱。

    事实上这种模型是过于理想化了,人在工作过程不可能不犯错,因此实际瀑布模型一般存在发现错误后回退修正错误的流程。

    增量模型(Incremental Model)

    增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设将需求分段为一系列的增量产品,每一增量都可以分别开发。该模型采用随日程的进展而交错的线性序列。每个线性序列产生软件一个可发布的增量。

    在增量模型中,第一个增量往往是核心产品,客户对每个增量的使用和评估都将作为下一个增量发布时的新特征和功能,这个过程在每一个增量发布后不断重复。直至产生完善的产品。如下图:

    Incremental Model

    作为瀑布模型的变体,同样具有瀑布模型所有优点,另外还有瀑布模型不具有的优点:第一个可交付版本所需成本较少、开发由增量来表示,小系统承担的风险不大、版本交付快,减少用户需求变更、可以仅对少量增量先行投入资金。但它同样也有缺点,若第一版增量不好,则会给后面增量带来风险,另外若需求不稳定,则增量可能要重新开发。

    使用增量模型的困难在于,把新的构件集成到现有的系统中的时候,必须不破坏已有的产品,也就是说必须把软件的体系结构设计的便于加入新的组成部分。从某种意义来讲,增量模型本身就是自我矛盾的,它一方面要把软件当做整体,另一方面又要把软件当做构件序列。

    演化模型(Evolutionary Model)

    软件类似其他复杂系统,会随着时间推移而演化,实际应用里,并非所有需求都被能预先定义,大量的案例证明在开发初期是难以得到一个完整的、准确的需求规格说明的。这主要是由于客户往往不能准确表达对未来系统的全面要求,开发者对要解决的应用问题模糊不清。此外在整个开发过程中用户可能产生新的需求,导致需求变更。

    在上述情况下,软件开发人员需要一种专门应对不断演变的过程模型。因此出现了演化模型,这是一种迭代的过程模型,使软件逐步演化出更完整的软件版本,这种模型尤其适合用于对软件需求缺乏准确认知的情况。

    原型模型(Prototype Model)

    基于上述的原因,产生了 快速原型(Rapid Prototype) 开发方法,原型是预期系统的一个可执行版本,反映出系统性质选定的子集,一个原型不必满足目标软件的所有要求,它目的是快速、低成本地构建出原型。迅速构建出一个让用户看得见、摸得着的系统框架,这样用户就可以根据这个框架提出自己的需求。如下图:

    Prototype Model

    这个模型始于沟通,目的是定义软件的总体目标,标注需求,然后快速指定原型的开发计划,确定原型的目标和范围,迅速构建原型并交付,随后收集用户意见,然后进入下一轮原型的迭代开发。

    螺旋模型(Spiral Model)

    对于复杂的大型软件,一个原型往往难以达到要求,螺旋模型就是将瀑布模型和演化模型结合,加入两种模型都没有做到的风险分析。

    这种模型将开发过程分为几个螺旋周期,每个螺旋周期与瀑布模型大致相似,如下图:

    Spiral Model

    每个螺旋周期大致分为4步:

    1. 制定计划——确定软件目标,选定方案,明确项目限制条件
    2. 风险分析——分析方案并识别风险,消除风险
    3. 实施工程——实施软件开发,验证阶段性成果
    4. 用户评估——评价阶段性成果,提出修改建议,确定下一周期开发计划

    螺旋模型强调的是风险分析,让开发人员和用户对每个演化层级的风险有了解,从而做出预案,因而这种模型适用于庞大、复杂、高风险的系统开发。与瀑布模型相比,螺旋模型支持用户需求的动态变化,为项目管理人员及时调整管理决策提供便利,从而降低开发风险。

    使用这种模型时,需要开发人员具有一定程度的风险评估能力和专业知识。不过,过多的迭代次数会增加开发成本。

    喷泉模型(Water Fountain Model)

    喷泉模型是一种以用户需求为动力,以对象为驱动的模型,适合面向对象的开发方法,它克服了瀑布模型不支持软件重用和多项开发活动集成的局限。

    喷泉模型使得开发过程中具有可迭代性和无间隙性。其中前者指模型中的开发活动常常需要重复多次,而后者指开发活动之间没有明显的边界,不像瀑布模型那样必须一项一项进行,无间隙性的基础是基于面向对象的。如下图:

    Water Fountain Model

    这种模型的优点是各阶段没有界线,开发人员得以同步进行,提高开发效率。但这种方法由于同步进行往往需要更多的人员,这样不利于项目的管理。因此这种模型严格要求管理文档,但同时也使审核难度大幅提升。

    基于构件的开发模型(Component-based Development Model)

    这是一种利用预先包装的构件来构造应用的方法,构件可以来自于组织内部开发的,也可以是 商业化成品(COTS, Commercial Off-The Shelf) 软件构件。基于构件开发有很多螺旋模型的特点,这种方式本质上也是演化模型,需要迭代的方式来开发。但不同之处在于,这种模型采用预先打包的构件。

    Component Development Model

    领域工程的目的是构建领域模型、体系结构、可复用构件库。主要的目的就是分析领域中各种系统中公共部分或者相似部分。对候选的构件进行可变性分析,已适用于多个系统,然后经过严格测试和包装后存入可复用构件库。

    而应用系统工程则是真正的使用可复用构件库来组装应用系统,如果其中的构件需要特化则修改,没有可用的构件仍然需要开发。在此过程中还会对构件的复用情况进行评价,以改进可复用构件。

    形式化方法模型(Formal Methods Model)

    这是一种建立在严格数学基础上的开发方法,采用严格的数学语言和语义描述功能规约和设计规约,通过数学的分析与推导很容易就发现需求的歧义性、不完整性及不一致性。而且也可以用于验证分析模型、设计模型与程序。

    通过数学的演算,使形式化功能规约转化为形式化设计规约,再转换为程序代码。

    统一过程模型(Unified Process Model)

    统一过程是一种用例与风险驱动,以架构为中心,迭代且增量的开发过程,由UML方法和工具支持。

    与增量模型类似,这种方法将迭代视为袖珍项目,它们都包含正常软件项目的所有元素:计划、分析设计、构造、集成与测试、发布。

    统一过程定义了4个技术阶段及对应的制品:

    1. 起始阶段(Inception Phase)

      专注于项目的初创活动,主要产生的制品有:构想文档(Vision Document)、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划(阶段及迭代)、业务模型、一个或多个原型(需要时)。

    2. 精化阶段(Elaboration Phase)

      在理解了最初的领域范围后进行需求分析和架构演进,主要产生的制品有:用例模型、补充需求(含非功能修改)、分析模型、软件体系结构描述、可执行的软件体系结构原型、初步设计模型、修订风险列表、项目计划(含迭代计划、工作流、里程碑、技术工作产品)、初始用户手册。

    3. 构建阶段(Construction Phase)

      关注系统的构件,产生现实模型,主要产生的制品有:设计模型、软件构件、集成的软件增量、测试计划及步骤、测试用例及支持文档(用户手册、安装手册、增量描述)。

    4. 移交阶段(Transition Phase)

      关注软件提交,产生软件增量,主要产生的制品有:提交的软件增量、β测试报告、综合用户反馈。

    每次迭代产生包括最终系统的部分完成版本及项目文档,通过逐步迭代,直至完成最终系统。在每个迭代中有5个核心工作流:需求工作流、分析工作流、设计工作流、实现工作流、测试工作流。

    这种模型的典型代表是 RUP(Rational Unified Process) ,它是UP的商业扩展,完全兼容UP,但更完整详细。

    敏捷方法(Agile Development)

    敏捷开发是现在较为流行的方式,它总体目标是通过尽可能早并持续地交付有价值的软件使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。

    这种过程的典型方法有很多种,每种方法都基于一套原则,这些原则实现了敏捷方法的总体目标。下面主要简单介绍几种:

    1. 极限编程(XP, Extreme Programming)

      这可能是敏捷方法中最有成效的方法,它是一种轻量级、高效、低风险、柔性、可预测、科学的软件开发方式。由价值观、原则、实践与行为4个部分组成,彼此相互依赖、关联。并贯穿于整个软件生存周期。

      • 4大价值观:沟通、简单性、反馈、勇气
      • 5个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作
      • 12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准
    2. 并列争球法(Scrum)

      用迭代方法,每30天一次的迭代称为冲刺,并按需求优先级别实现产品。多个自治的小组并行递增地实现产品,通过简短的日常会议来协调。就像橄榄球中的并列争球。

    3. 自适应软件开发(ASD, Adaptive Software Development)

      这种方法采用6个基本原则:

      • 有一个使命做指导
      • 特征被视为客户价值的关键点
      • 过程中等待很重要,重做与做一样关键
      • 变化不视为变更,而是视为对开发中实际情况的调整
      • 确定的交付时间,迫使考虑每个版本的关键需求
      • 风险
    4. 敏捷统一过程(AUP, Agile Unified Process)

      采用在大规模上连续、小规模上迭代的原理来构建系统。采用经典的UP阶段性活动,使团队为软件项目构想出一个全面的过程流。在每个活动中的迭代使用敏捷,并将有意义的软件增量尽可能的快速交付给用户。每个AUP执行下列活动:

      • 建模
      • 实现
      • 测试
      • 部署
      • 配置及项目管理
      • 环境管理

    文中部分图片来自《软件工程》第4版 张海藩、吕云翔著 人民邮电出版社 2013年

    展开全文
  • 几种常见软件过程模型的比较

    万次阅读 2018-09-08 17:32:22
    其流 程从用户需求规格说明开始,通过策划、建模、构建和部署的过程,最终提供一 个完整的软件并提供持续的技术支持。 优点: 1. 强调开发的阶段性,各阶段具有顺序性和依赖性 2. 强调早期调研和需求分析,推迟...
  • 软件工程之软件过程模型

    万次阅读 2017-09-05 16:48:06
    软件过程模型 软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。 瀑布模型: 瀑布模型是将软件生存周期中的各个活动规定为依线性连接的若干阶段的模型,包括需求分析、设计、...
  • 原以为关于开发过程模型是有百分百把握的,直到做出了题,决定回来在看一下这一块。 于是。... 统一软件过程RUP模型 1. 瀑布模型     A. 瀑布模型特征  从上一项活
  • 软件工程:软件过程模型实例

    千次阅读 2017-12-16 22:12:53
    针对下列软件项目场景,探讨它们最合适采用哪种过程模型
  • 过程模型总分为五大类: ...5.专用过程模型: 包括 基于构件的开发模型、形式化方法模型、面向方面的软件开发模型 (参考文献:软件工程-实践者的研究方法 (美)Poger S.Pressman ) 下面,详细的阐述
  • 软件过程模型也称做软件生命周期模型 从一个特定角度提出的对软件过程的简化描述 (模型不代表具体实现,对过程的简化描述) 对软件开发实际过程的抽象 (模型即抽象) 它包括构成软件过程的各种活动、软件工件...
  • 1、软件的实质:程序+数据+文档。 2、软件工程的三维空间观:过程+方法+工具。...4、面向对象方法与软件过程模型  1)基本模型 线性顺序模型:瀑布模型迭代模型:原型法模型基于构件的开发模型  2
  • 一、瀑布模型优点:简单易用,将复杂的软件开发过程明确分解为几个顺序的步骤,降低开发软件的复杂性。严格,第一是每个步骤的严格,每个步骤都有明确的标准和技术审查,尽量减少每个步骤的错误,同时减少对下个阶段...
  • 各类软件过程模型及其特点

    千次阅读 2016-10-19 18:35:00
    模型名称 技术特点 适用范围 瀑布模型 简单,分阶段,阶段间存在因果关系,各个阶段完成后都有评审,允许反馈,不支持,用户参与,要求预先确定需求 需求易于完善定义且不易变更的软件系统 快速原型模型 型 不...
  • 【软考之旅】七大软件过程模型

    千次阅读 多人点赞 2017-10-25 11:42:48
    典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型、基于构件的开发模型、形式化方法模型等。 七大软件过程模型   瀑布模型 增量模式 原型模型 螺旋模型 ...
  • “项目经理”都会的软件开发七大过程模型

    千次阅读 多人点赞 2021-04-05 15:11:16
    今天来和大家分享一下在进行系统的软件开发的过程中常用的七大软件过程模型,熟悉软件开发常用的几种模型方法。助力每一个程序员小伙伴都可以尽早成为项目经理哟! 一.瀑布模型 瀑布模型严格遵循软件生命周期各...
  • 常用的软件过程模型

    万次阅读 2014-05-02 15:56:17
     软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此...
  • 6种典型的软件过程模型

    千次阅读 2020-09-04 12:03:40
  • 软件开发过程模型——喷泉模型

    千次阅读 2021-10-16 23:19:26
    软件开发活动的多样性决定了软件开发过程模型的多样性,开发技术和工具的发展页推动着软件开发过程中模型的更行和发展。选择一个合适的软件开发过程模型,对于软件开发的质量和效率有着重要的意义。 一、喷泉模型的...
  • 软件过程各类模型详细介绍(重要)瀑布模型 瀑布模型 瀑布模型也称为软件生命周期模型,根据软件生命周期各个阶段的任务,瀑布模型从可行性研究,逐步进行阶段性变化,直到最后通过确认测试并得到用户认可的软件...
  • 各种软件过程模型的特点

    千次阅读 2013-05-20 17:06:06
    不同的软件过程模型对软件开发过程有不同的理解和认识,支持不同的软件项目和开发组织。下表对比和分析了各个软件过程模型的特点及其适用的软件项目类型。  各种软件过程模型的特点 模型名称 技术...
  • 典型的软件过程几种模型

    千次阅读 2020-03-28 15:43:55
    一、典型的软件过程 1、定义:瀑布过程模型(Wiston Royce):又称经典的生命周期模型,是一个系统的,顺序的 软件开发方法,以用户需求分析开始,通过策划,建模,构建和部署的过程,最终提 供完整的软件支持 2、...
  • 软件工程的十大模型

    千次阅读 2021-06-11 12:40:05
    1.软件生命周期模型 软件生命周期由软件定义、软件开发与运维(也称软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。 问题定义:“要解决的问题是什么?”通过对客户的访问调查,系统分析员扼要地写出...
  • 软件工程(二)——过程模型

    千次阅读 2018-09-25 23:23:52
    1.通用过程模型 软件工程的通用过程框架定义了五种框架活动:沟通、策划、建模、构建和部署。软件过程中的过程流描述了在执行顺序和执行时间上,如何组织框架中的活动、动作和任务。 1.1 定义框架活动 1.2 明确任务...
  • 题目:思考以下系统适合采用什么样的软件过程模型?  1.大学教务管理系统,准备替换现有的系统  2.位于火车站的交互式火车车次查询系统  3.汽车防抱死刹车控制系统  4.支持软件维护的软件工程工具 ...
  • 软件生存周期过程及其模型

    千次阅读 2020-02-29 18:10:01
      记录软件工程基础的学习过程,第二篇:软件生存周期过程及其模型软件生存周期过程 软件生存周期    软件生存周期(software life circle)又称软件生命期,生存期。它是指从形成软件开发概念开始,到软件投入...
  • 软件过程及各个模型的总结

    万次阅读 2018-03-13 20:50:38
    1.瀑布模型 瀑布模型的做法很形象,软件开发过程像瀑布一样,一层接着一层,完成上层步骤之后,接着开展下一项。前一阶段会形成一个文档,后一阶段根据这个文档进行操作。 具体的步骤为:(表格只是描述各个模型...
  • 瀑布模型、V模型、快速原型模型、增量模型、螺旋模型、喷泉模型、渐进式开发模型、敏捷开发模型
  • 瀑布模型--按阶段严格完成(1)瀑布模型把整个项目过程分成了六个主要阶段:(2)举个例子来理解瀑布模型(3)优缺点(4)解决的重要问题3.快速原型模型--低成本快速的确认需求(1)类比介绍(2)抛弃策略(3)附加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 484,235
精华内容 193,694
关键字:

软件过程模型