前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】软考中级-软件设计师 035-软件工程基础(过程模型)

【愚公系列】软考中级-软件设计师 035-软件工程基础(过程模型)

原创
作者头像
愚公搬代码
发布2024-02-16 16:41:11
3930
发布2024-02-16 16:41:11
举报
文章被收录于专栏:愚公系列-考试考证

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

🚀前言

软件工程的过程模型是指开发软件的过程中所采用的一种规范化方法或框架。常见的软件工程过程模型包括瀑布模型、迭代开发模型、喷泉模型、敏捷开发模型等。

  1. 瀑布模型:软件开发按照线性顺序依次进行,包括需求分析、设计、编码、测试和部署等阶段,每个阶段的完成都依赖于上一个阶段的输入。适用于需求稳定、项目较小的情况。
  2. 迭代开发模型:将软件开发划分为多个迭代周期,每个周期都包括需求分析、设计、编码、测试和部署等阶段。每个迭代周期产生一个可交付的软件部分,迭代的次数和周期可以根据实际情况调整。适用于需求变化较快、项目较大的情况。
  3. 喷泉模型:将软件开发看作是一个持续的过程,包括需求分析、设计、编码、测试等阶段。不同于瀑布模型的是,各个阶段可以交叉进行,灵活调整开发的优先级和顺序。适用于需求变化频繁、项目较复杂的情况。
  4. 敏捷开发模型:以迭代的方式进行软件开发,强调团队合作和灵活性。将需求分解为小的用户故事,通过短暂的迭代周期快速交付部分功能,并根据实际反馈进行迭代和调整。适用于需求变化频繁、项目较灵活的情况。

软件工程的过程模型是一种规范和指导软件开发过程的框架或方法。它将软件开发过程分解为一系列阶段和活动,并定义了每个阶段的输入、输出和相应的工作内容。

🚀一、过程模型

🔎1.瀑布模型

🦋1.1 瀑布模型(S D L C)

瀑布模型(Waterfall Model)是软件开发生命周期(SDLC)中的一种经典开发模型。它是一种顺序性的开发模型,由上往下依次进行,各个阶段依赖于前一阶段的结果。

瀑布模型是一个经典的生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码、测试、运行维护几个阶段。在每个阶段完成后,才能进行下一个阶段。这种顺序性的开发模型适用于需求变化较少且具体明确的项目。

瀑布模型是以文档作为驱动、适合于软件需求很明确的软件项目的模型。

🦋1.2 瀑布模型特点

① 从上一项开发活动接收该项活动的工作对象作为输入。

② 接收输入后,实施该项活动应完成的工作内容。

③ 给出该项活动的工作成果,作为输出传给下一项开发活动。

④ 对该项活动的实施工作成果进行评审 。 若评审通过 , 则进入下一项开发活动;否则返回前一项甚至更前项的活动。

🦋1.3 瀑布模型的优缺点

瀑布模型的优点:明确的项目计划和清晰的开发流程;适用于较小规模的项目;开发过程中轻松追踪和控制进度。

瀑布模型的缺点:由于各个阶段的依赖关系,需求变更较大时,会导致整个项目的延迟;测试阶段在开发结束后才进行,可能导致问题的发现和修复较晚;客户参与程度较低,可能导致最终产品与客户需求有较大差距。

🔎2.瀑布模型变种-V模型

🦋2.1 V模型

V模型是瀑布模型的一种变种,它将瀑布模型的开发过程与质量保证过程相互关联,以确保产品的质量和符合用户需求。

在V模型中,开发过程和测试过程是相互平行的,如同字母“V”一样。下面是V模型的几个阶段:

  1. 需求分析阶段:在这个阶段,需求分析师与客户共同定义和理解项目需求,并将其转化为需求规格说明书。
  2. 系统设计阶段:在这个阶段,系统设计师根据需求规格说明书,设计系统架构和功能描述,以确保满足特定需求。
  3. 模块设计阶段:在这个阶段,软件设计师将系统设计拆解为模块,并定义每个模块的详细设计规范。
  4. 编码阶段:在这个阶段,开发人员根据模块设计规范,编写源代码。
  5. 单元测试阶段:在这个阶段,开发人员对每个编写的模块进行测试,以确保其功能正常。
  6. 集成测试阶段:在这个阶段,将已经测试通过的模块进行集成,并对整个系统进行测试,以确保模块之间的互操作性和功能一致性。
  7. 系统测试阶段:在这个阶段,将整个系统进行全面测试,以验证系统是否满足用户需求和规格。
  8. 验收测试阶段:在这个阶段,将系统交付给用户或客户,由用户执行测试,以确认系统是否符合需求。

V模型强调测试在整个开发过程中的重要性,通过将测试过程纳入开发过程中,可以及早发现和解决问题,提高产品质量。同时,V模型也能够提供一个明确的开发和测试过程的框架,提高开发团队的工作效率。

🦋2.2 V模型特点

① 单元测试主要针对编码过程中可能存在的各种错误进行验证。

② 集成测试主要针对详细设计中可能存在的各种错误进行验证。

③ 系统测试主要针对概要设计,检查系统作为一个整体是否可以有效地运行。

④ 验收测试主要是针对需求建模、需求分析,通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。

⑤ V模型用于需求明确和需求变更不频繁的情形。

⑥ V模型中的突出的是测试和开发生命周期各阶段的结合。

🔎3.演化模型-原型模型

🦋3.1 原型模型

在项目开始阶段,进行与项目干系人的有效交流,确保对需求的准确理解。然后,创建一个快速原型,以便项目干系人与未来用户之间可以通过原型进行交互,从而更好地了解需求和反馈。随后,通过与相关干系人进行充分的讨论和分析,以深入了解当前系统的需求。最后,在基于原型的基础上,进行开发过程,以确保最终交付的产品能够满足用户的期望和需求。

🦋3.2 原型模型的特点

① 实际可行。

② 具有最终系统的基本特征。

③ 构造方便、快速,造价低。

④ 它对用户需求是动态的、逐步纳入的。

🔎4.增量模型

🦋4.1 增量模型

增量模型是软件开发中的一种开发方法,也称为增量开发。它是一种迭代式的开发方法,将软件系统划分成多个增量,每个增量分别开发、测试和部署,然后按顺序进行整合。每个增量都是一个完整的软件系统的一部分,具有一定的功能和价值。

🦋4.2 增量模型的特点

  1. 增量划分:将软件系统分为多个增量,每个增量都有独立的功能和价值。
  2. 迭代开发:各个增量按照顺序进行开发、测试和部署,每个增量都是前一个增量的基础。
  3. 重复循环:每个增量都经历开发、测试和部署的循环,直到整个软件系统完成。
  4. 增量交付:每个增量都能够交付给用户使用,用户可以在每个增量的基础上进行反馈和指导。

🦋4.3 增量模型的优缺点

增量模型的优点包括:

  1. 提高反馈效率:每个增量都可以及时交付给用户使用,用户可以提供实际的反馈和指导,有助于及时纠正和改进。
  2. 降低风险:由于每个增量都是独立的,因此在开发过程中发现的问题不会对整个系统造成重大影响。
  3. 提高可维护性:每个增量都有独立的设计和文档,方便后续的维护和升级操作。

增量模型的缺点包括:

  1. 需要额外的成本和时间:由于需要迭代开发和多次测试,增量模型需要额外的成本和时间来进行。
  2. 需要用户的积极参与:增量模型需要用户的积极参与,包括对每个增量的评估和反馈,对某些项目来说,可能用户的参与程度较低。

🔎5.演化模型-螺旋模型

🦋5.1 螺旋模型

在螺旋模型中,软件开发过程被表示为一个螺旋形状的曲线,其沿着时间和成本两个维度进行演化。螺旋模型的基本思想是通过不断进行风险分析和迭代来逐步开发和改进软件系统。

螺旋模型的核心是不断循环的风险分析和迭代过程。在每个迭代中,开发团队会分析和评估当前系统的风险,然后制定相应的开发计划和策略。接下来,团队会根据计划进行开发和测试,并将结果反馈给用户。通过不断的迭代,系统逐渐完善和改进。

螺旋模型将瀑布模型和演化模型结合起来,强调了风险分析,特别适用于大型、复杂度高、风险高的系统。

🦋5.2 螺旋模型的特点

螺旋模型将开发过程分为几个螺旋周期,具有周期性重复的螺旋线状,每个螺旋周期大致和瀑布模型相符合 。 每个螺旋周期分为如下4个工作步骤:制定计划、风险分析、实施工程和客户评估。

🦋5.3 螺旋模型的优缺点

螺旋模型的优点:是可以根据项目的实际情况进行灵活调整,并且有助于及早发现和解决问题。它可以帮助开发团队在开发过程中不断学习和改进,从而提高整体的开发效率和质量。

螺旋模型的确定:首先,它需要较高的技术和管理能力,因为风险分析和迭代过程需要对项目进行全面的评估和规划。此外,螺旋模型通常用于大型和复杂的项目,对于小型项目可能过于繁琐。

🔎6.喷泉模型

🦋6.1 喷泉模型

喷泉模型是一种软件开发模型,它将用户需求作为主要动力,并以对象为驱动。它适用于面向对象的开发方法,并且具有迭代性和无间隙性。

在喷泉模型中,整个开发过程被视为一个喷泉,代表了用户需求的源泉。开发团队通过不断迭代和改进,将用户需求转化为最终的软件产品。

喷泉模型的开发过程是连续的,没有明确的阶段划分。开发团队不断进行需求分析、设计、编码和测试等活动,以不断改进软件的功能和质量。

🦋6.2 喷泉模型的特点

  • 喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。
  • 其优点是可以提高软件项目的开发效率,节省开发时间。
  • 由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员, 不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大。

🦋6.3 喷泉模型的优缺点

喷泉模型的优点:是能够及时响应用户需求的变化,保持开发过程的灵活性和敏捷性。与传统的瀑布模型相比,喷泉模型更加适合快速迭代和开发周期短的项目。

喷泉模型的缺点:由于没有明确的阶段划分,开发团队可能会在需求分析和设计阶段出现混乱,导致项目进展缓慢。此外,喷泉模型对开发团队的能力和协作要求较高,需要具备良好的沟通和协调能力。

🔎7.基于构件的开发模型

🦋7.1 基于构件的开发模型

基于构件的开发模型(Component-based Development Model)是一种软件开发方法,它将软件系统划分为独立的、可重用的构件,并通过构件之间的链接和组合来构建软件系统。

🦋7.2 基于构件的开发模型的特点

基于构件的开发模型的主要特点包括:

  1. 构件的独立性:构件是可以独立开发、测试和维护的,每个构件都具有明确定义的功能和接口。
  2. 构件的可重用性:构件可以被多个软件系统所共享和重用,从而提高软件开发的效率和质量。
  3. 构件的组合和链接:通过构件之间的链接和组合,可以灵活地构建符合需求的软件系统。
  4. 构件的管理和维护:通过构件的管理和维护,可以实现对软件系统的快速更新和扩展。

特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

🔎8.形式化方法模型

🦋8.1 形式化方法模型

形式化方法模型的核心思想是使用形式化语言来描述系统的规范和要求。形式化语言通常是符号逻辑或数学语言,如集合论、谓词逻辑、时序逻辑等。通过将系统规范和要求转化为形式化语言的形式规范,开发人员可以使用形式化方法来进行系统分析、模型检查、定理证明等。

形式化方法模型可以有不同的形式,如有限状态自动机、Petri网、时序逻辑模型等。这些模型可以用于描述系统的结构、行为和性质。开发人员可以使用形式化方法模型进行系统建模、属性验证、错误检测等,以提高系统的可靠性和正确性。

🦋8.2 形式化方法模型的优缺点

形式化方法模型具有形式化和精确性的优点,可以帮助开发人员在设计和开发过程中发现和解决潜在的问题。它还可以提供系统的形式证明,以确保系统的正确性和安全性。但是,形式化方法模型通常需要较高的技术水平和时间成本,因此在实际应用中可能有一定的限制。

🔎9.统一过程模型

🦋9.1 统一过程模型

统一过程(UP)模型是一种软件开发过程,以用例和风险为驱动,以架构为中心,采用迭代和增量的方法。UP模型通过将整个软件开发项目划分为多个小型项目,每个项目都包含计划、分析和设计、构造、集成和测试、内部和外部发布等阶段。

UP模型使用UML(统一建模语言)方法和工具来支持开发过程。UML是一种用于描述、构造、可视化和文档化软件系统的标准语言。它提供了一种统一的可视化表示方法,用于描述系统的需求、结构、行为和交互。

UP模型的核心理念是迭代和增量开发。迭代意味着将整个开发过程划分为多个迭代周期,每个周期都包含完整的开发阶段。每个迭代周期都会产生一个可执行的软件部分,可以进行测试和评审。增量指的是每个迭代周期都会向软件系统中添加新的功能,逐步增加系统的功能和性能。

UP模型的另一个重要特点是以用例和风险为驱动。用例是对系统功能和用户需求的描述,它们被用作需求分析和设计的基础。风险是可能对项目成功产生负面影响的因素,UP模型将风险识别和风险管理作为开发过程的重要组成部分。

🦋9.2 统一过程模型的特点

统一过程模型包括4个阶段:初始阶段、精化阶段、构建阶段、移交阶段。

① 初始阶段:生命周期目标。

② 精化阶段:生命周期架构。

③ 构建阶段:初始运作功能。

④ 移交阶段:产品发布。

每次迭代产生包括最终系统的部分完成的版本和任何相关的项目文档的基线,通过逐步迭代基线之间相互构建,直到完成最终系统。在每个迭代中有5个核心工作流:捕获系统应该做什么的需求工作流,精化和结构化需求的分析工作流,在系统构架内实现需求的设计工作流, 构造软件的实现工作流,验证实现是否如期望那样工作的测试工作流。

🦋9.3 RUP

RUP(Rational Unified Process)是一种软件开发过程框架,被认为是统一过程(UP)的商业扩展。它在UP的基础上进行了完善和详细化,为软件开发团队提供了一套全面的方法论和工具,以管理和实施软件项目的全生命周期。

RUP的特点包括:

  1. 迭代开发:RUP将软件开发过程划分为多个迭代周期,每个周期包含一系列可交付成果,增量地构建系统。
  2. 体系结构驱动:RUP强调对软件系统的体系结构进行设计和评审,确保系统的稳定性、可扩展性和可维护性。
  3. 风险管理:RUP强调风险管理的重要性,通过早期风险评估和风险驱动的开发来最大限度地降低项目失败的风险。
  4. 适应性:RUP可以根据不同的项目需求和特点进行定制,灵活适应各种规模和复杂度的软件开发项目。

RUP通过提供一系列指导文档、模板、工具和最佳实践,帮助开发团队规范和管理软件开发过程。它强调团队合作、迭代开发和持续集成,旨在提高开发效率、降低风险并交付高质量的软件产品。

🔎10.敏捷方法

🦋10.1 敏捷方法

敏捷方法(Agile methods)是一种项目管理和开发方法论,旨在通过迭代、协作和快速响应变化来提高团队的效率和灵活性。敏捷方法的核心原则包括:

  1. 个体和互动胜过流程和工具:强调团队成员之间的沟通和合作,以及快速解决问题。
  2. 可工作的软件胜过详尽的文档:重视开发出可用的软件,而不是花费过多时间编写详细的文档。
  3. 客户合作胜过合同谈判:鼓励与客户保持密切合作和沟通,以便快速了解需求变化,并提供满足客户需求的解决方案。
  4. 响应变化胜过遵循计划:接受需求变化,并灵活地调整开发计划和优先级,以应对市场变化和客户需求的变化。

敏捷方法通常采用迭代开发的方式,将项目划分为一系列短期的开发周期,每个周期称为一个迭代(Iteration),通常持续2-4周。每个迭代结束时,团队会交付一部分可用的软件功能,然后根据客户反馈和需求变化进行调整和优化。

敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言):极限编程(XP)、水晶法(C r y s t a l)、并列争求法(Sc rum)、自适应软件开发(AS D)、敏捷统一过程(AUP)

🦋10.2 敏捷方法的特点

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,相对于传统软件开发方法的“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。

敏捷软件开发宣言:

  • 个体和交互胜过过程和工具
  • 可以工作的软件胜过面面俱到的文档
  • 客户合作胜过合同谈判
  • 响应变化胜过遵循计划

🔎11.敏捷方法-极限编程

XP是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式。它由价值观、原则、实践和行为四个部分组成,彼此相互依赖、关联,并通过行为贯穿于整个生命周期。

4大价值观:沟通、简单性、反馈和勇气。

5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。

12个最佳实践:

  1. 计划游戏:快速制定计划、随着细节的不断变化而完善。
  2. 小型发布:系统的设计要能够尽可能早地交付。
  3. 隐喻:找到合适的比喻传达信息。
  4. 简单设计:只处理当前的需求,使设计保持简单。
  5. 测试先行:先写测试代码,然后再编写程序。
  6. 重构:重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求。
  7. 结对编程。
  8. 集体代码所有制。
  9. 持续集成:可以按日甚至按小时为客户提供可运行的版本。
  10. 每周工作40个小时。
  11. 现场客户。
  12. 编码标准。

🔎12.敏捷方法-其他方法

实践

描述

结对编程

一个程序员开发,另一个程序员在一旁观察审查代码,提高代码质量

自适应开发

强调开发方法的适应性,为软件的重要性提供基础,适应组织和管理层次

水晶方法

不同项目需要不同的策略、约定和方法论

SCRUM

迭代的增量化工程方法,按需求的优先级别实现产品

🚀总结


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、过程模型
    • 🔎1.瀑布模型
      • 🦋1.1 瀑布模型(S D L C)
      • 🦋1.2 瀑布模型特点
      • 🦋1.3 瀑布模型的优缺点
    • 🔎2.瀑布模型变种-V模型
      • 🦋2.1 V模型
      • 🦋2.2 V模型特点
    • 🔎3.演化模型-原型模型
      • 🦋3.1 原型模型
      • 🦋3.2 原型模型的特点
    • 🔎4.增量模型
      • 🦋4.1 增量模型
      • 🦋4.2 增量模型的特点
      • 🦋4.3 增量模型的优缺点
    • 🔎5.演化模型-螺旋模型
      • 🦋5.1 螺旋模型
      • 🦋5.2 螺旋模型的特点
      • 🦋5.3 螺旋模型的优缺点
    • 🔎6.喷泉模型
      • 🦋6.1 喷泉模型
      • 🦋6.2 喷泉模型的特点
      • 🦋6.3 喷泉模型的优缺点
    • 🔎7.基于构件的开发模型
      • 🦋7.1 基于构件的开发模型
      • 🦋7.2 基于构件的开发模型的特点
    • 🔎8.形式化方法模型
      • 🦋8.1 形式化方法模型
      • 🦋8.2 形式化方法模型的优缺点
    • 🔎9.统一过程模型
      • 🦋9.1 统一过程模型
      • 🦋9.2 统一过程模型的特点
      • 🦋9.3 RUP
    • 🔎10.敏捷方法
      • 🦋10.1 敏捷方法
      • 🦋10.2 敏捷方法的特点
    • 🔎11.敏捷方法-极限编程
      • 🔎12.敏捷方法-其他方法
      • 🚀总结
      相关产品与服务
      项目管理
      CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档