软件工程--软件过程学习笔记

news2025/1/18 10:53:30

本篇内容是对学校软件工程课堂内容的记录总结,部分也来源于网上查找的资料

软件过程基础

软件过程是指在软件开发过程中,经过一系列有序的步骤和活动,从问题定义到最终软件产品交付和维护的全过程。这个过程旨在确保软件项目能够按时、按预算、高质量地完成,同时满足用户的需求和期望

软件过程就像烹饪一道菜的步骤。想象一下,你要做一顿美味的晚餐。首先,你会选择菜谱(问题定义和需求分析),然后购买食材(规划和准备资源)。接下来,你按照步骤进行烹饪(编码和开发),调整调味品(测试和质量控制),最后上菜,让家人或朋友品尝(交付和维护)

在软件过程中,也有类似的步骤,这个过程通常是迭代的,意味着在整个过程中可能会反复进行某些步骤,特别是在发现问题或用户需求变更时。整个软件过程的目标是以可控制、可重复的方式生产高质量的软件产品,同时满足客户的期望

软件生命周期模型

软件生命周期模型是一种用来描述软件开发过程中不同阶段和活动的抽象框架或模型。它帮助团队组织和规划开发工作,确保在整个过程中的有效管理和控制。通俗地说,软件生命周期模型就像是软件开发的路线图,指导开发团队从项目的开始到结束的整个过程

瀑布模型

类似于瀑布一样,开发过程是线性的,每个阶段依次进行,一旦完成一个阶段,就进入下一个

特点:

1.强调阶段的划分顺序与依赖

2.每个阶段都要从技术和管理进行严格的审查

3.是一种线性的、顺序的、逐步细化的开发模式

适用时机:

1.必须同时淘汰全部老系统时

2.所有的系统功能一次交付时

3.具有反馈环

价值:

结构简单 明了;历史较长、应用面广泛、为广大软件工作者所 熟悉

风险:

1.获得完整的需求规约是非常困难的

2.难以适应快速变化的需求

3.系统太大时,难以一次做完

4.无法利用某一中间产品

5.资源有限,比如现有的工作人员/资金不足不适用这种方法

增量模型

增量模型是软件开发中的一种开发方法,通俗来说,它就像是搭积木一样逐步构建软件系统。这个过程是渐进的,每一步都是对系统的一个增量,而不是一次性完成整个系统的开发

适用时机:

1.需要早期获得功能

2.中间产品可以使用

3.系统可以自然地分割成增量

4.工作人员/资金可以逐步增加

风险:

1.需求未被很好的理解

2.一次要求所有功能的系统不适用

3.需要迅速发生变化的系统不适用

4.长时期内仅有有限的资源(人员/资金)不适用

演化模型

演化模型是软件开发中的一种方法,通俗来说,它就像是植物的生长一样,通过逐步发展和改进来构建软件系统。演化模型强调系统的渐进发展,允许在系统中逐步引入变化和改进。

想象一下你在种一棵树。你首先种下种子,它代表了系统的最初版本。随着时间的推移,树会生长,分支会延伸,新的叶子和花朵会不断产生。每一次生长和变化都是系统演化的一部分

特点:

迭代的开发方法,渐进地开发各个可执行版本,逐步完善软件产品。每个版本在开发时,开发过程中的活动和任务顺序地或部分重叠平行地被采用。与增量模型的区别是:需求在开发早期不能被完全了解和确定,在一部分被定义后开发就开始了,然后在每个相继的版本中逐步完善

演化模型基本思想图

迭代化开发思想:

迭代化开发是软件开发中的一种方法,通俗来说,它就像是制作一幅画的过程,不是一次性完成整个画面,而是通过一次次的修改和完善来逐步创作。这种方法将整个开发过程分成多个小步骤,每一步都是对前一步的改进和迭代。

想象一下你在画一幅画。你不会一开始就把整个画面都完成,而是可能先画出大致的轮廓,然后逐渐添加细节,做出一些修改,直到你满意为止

特点:

尽可能降低风险,适用处理不确定的复杂系统
原则:
1.每次迭代要产生一个可执行的版本2.有计划地迭代

优点:1.灵活性强(允许根据用户反馈和需求的变化进行灵活调整,更容易适应变化的环境)2.快速交付(每一轮迭代都产生一个可用的软件版本,可以更快地交付给用户,使用户更早地体验到软件)3.降低风险(由于每一轮迭代只关注部分功能或需求,问题和风险可以更早地被发现和解决,降低整个项目的风险)4.用户参与(用户在每一轮迭代中都有机会提供反馈,增加了用户对项目的参与感,有助于确保最终的软件符合用户的期望)

演化模型下有一些子类,下面介绍其中的两个子类“快速原型模型”和“螺旋模型”

快速原型模型

快速原型模型是软件开发中的一种方法,通俗来说,它就像是制作一个初步模型,以便更好地理解和验证用户需求。这个过程类似于制作一个玩具模型,使得开发团队和用户能够更早地看到和感受到软件的基本外观和功能。

想象一下你要设计一款新的汽车。在制造实际汽车之前,你可能会先制作一个小模型,包括汽车的大致形状、车轮的位置等。这个小模型可以让你更好地了解汽车的外观,检查设计是否符合预期,然后进行必要的修改

优点包括:更早的用户参与、提高沟通效果、减少误解、加速开发等

劣势包括:

过度侧重外观: 快速原型通常注重展示软件的外观和交互,但在实现功能上可能并不深入。这可能导致在后续开发阶段需要花费额外的时间来完善和优化功能,增加了开发成本和时间

可能导致误解: 用户可能会将原型视为最终产品,而忽略了原型仅是一个演示和验证概念的阶段。这可能导致用户期望与最终产品不一致,需要进行额外的沟通和期望管理。

需求变更的挑战: 如果在原型阶段出现较大的需求变更,可能需要对整个原型进行重构,增加了开发工作量和复杂性

螺旋模型

螺旋模型是软件开发中的一种迭代和逐步演进的开发方法,通俗来说,它就像是一条螺旋形的路径,开发团队通过不断的迭代和演进来逐渐完善和改进软件系统。

想象一下你在攀登一座山。螺旋模型就像是你沿着山脉蜿蜒上升,每次绕一圈都是软件开发的一个迭代周期。在每一圈,你都有机会提高你对整个系统的理解,并进行一些改进,就像攀登山峰时可以找到更好的路径一样

优势:更好的风险管理、更强的灵活性、更好的用户参与

劣势:复杂度高、管理难度大、时间和成本大、需求变更导致项目进度不稳定

统一软件过程

统一软件过程(Rational Unified Process,简称RUP)是一种软件开发方法论,由IBM公司(Rational Software,后被IBM收购)开发并推广。RUP提供了一套灵活的、可定制的过程指南,用于指导和管理软件项目的开发

RUP的组成:一整套成功开发软件的原理和最佳实践、过程模型和相关内容的模板库、过程定义工具

RUP并不是一个严格的步骤指南,而是一个灵活的框架,允许团队根据项目的特点和需求进行定制。它提供了一套方法论和最佳实践,以帮助软件开发团队在质量、进度和成本方面取得成功。通过强调迭代开发、需求驱动、架构关注和灵活性,RUP成为了许多软件开发团队在项目管理和开发过程中的重要参考

RUP的整体框架

RUP把软件开发周期分为初始、精化、构建、移交四个阶段,每个阶段的结束标志就是一个业务决策里程碑

初始阶段的目的是在所有项目干系人之间就项目目标达成共识

精化阶段的目的是建立软件架构的基线,解决技术风险,以便为软件的详细设计和实现提供一个稳定的基础

构建阶段的目的是基于已建立的架构完成系统的开发

移交阶段的目的是确保最终用户可以使用软件

RUP把软件开发生命周期分成了6个核心规范和3个支持规范

核心规范:

业务建模、需求、设计、实现、测试、部署

支持规范:

配置与变更管理、项目管理、环境

敏捷过程

敏捷过程是一种高效、快速响应变化的开发过程,旨在让团队更加灵活、快速地开发软件,以适应不断变化的需求和环境。可以把敏捷过程比喻成团队参加马拉松比赛:他们以短距离的小步快跑方式前进,不断调整步伐以适应地形和环境,而不是一开始就全速冲刺

动机:快速的市场进入时间、快速变化的需求、快速发展的技术

四条敏捷价值观

敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,实现企业效益的最大化。敏捷过程在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品

适应敏捷过程的情况:

需求不确定、易挥发,有责任感和积极向上的开发人员,用户容易沟通并能参与,小于10个人的项目团队

极限编程

是敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需求模糊的场合

特点:测试成为开发的核心,纪律性和灵活性巧妙结合

RUP和XP的共性:

基础都是面向对象的方法,都重视代码、文档的最小化和设计的简化,采用动态适应变化的演进式迭代周期,需求和测试驱动,鼓励用户积极参与

RUP和XP区别:

XP以代码为中心,编码和设计活动融为一体,弱化了架构的概念

RUP过程通常以架构为中心,细化阶段的主要目的就是构造出一个可运行的架构原型,作为将来添加需求功能的稳固基础

XP不包含业务建模、部署、过程管理等概念

RUP适合各种规模的项目,XP只适用于小团队

微软过程MSF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm 内存模型概述

一、类加载子系统 1、类加载的过程:装载、链接、初始化,其中,链接又分为验证、准备和解析 装载:加载class文件 验证:确保字节流中包含信息符合当前虚拟机要求 准备:分配内存,设置初始值 解析&a…

cesium雷达扫描(雷达扫描线)

cesium雷达扫描(雷达扫描线) 下面富有源码 实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写glsl来实现当前效果 示例代码 index.html <!DOCTYPE html> <html lang="en"><head>

2.2 调用星火大模型的API

调用星火大模型的API 1 申请API调用权限&#xff1a;2 调用原生星火 API3 统一API调用方式 项目仓库地址&#xff1a;https://github.com/datawhalechina/llm-universe 讯飞星火认知大模型&#xff0c;由科大讯飞于2023年5月推出的中文大模型&#xff0c;也是国内大模型的代表…

Golang环境搭建Win10(简洁版)

Golang环境搭建Win10 Golang环境搭建(Win10)一、前言二、Golang下载三、配置环境变量3.1、配置GOROOT3.2、配置GOPATH3.3、配置GOPROXY代理 Golang环境搭建(Win10) 一、前言 Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken…

Spring Framework 6.1 正式 GA

Spring Framework 6.1在运行时方面针对 JDK 21 和 Jakarta EE 10 上提供了一级支持&#xff0c;同时保留了 JDK 17 和 Jakarta EE 9 基线。Spring 还通过精细的元数据推理跟踪 GraalVM for JDK 21 的演变&#xff0c;同时暂时保持与 GraalVM 22.3 的兼容性。 主要变化 支持 JD…

运行ps软件提示由于找不到vcruntime140.dll无法继续执行代码怎么修复

今天我在打开ps时候突然电脑出现找不到vcruntime140.dll无法继续执行代码&#xff0c;我很困扰不知道什么原因&#xff0c;于是我花了一天时间在网上找了5个可以解决这个问题的方案分享给大家&#xff0c;同时我自己也解决了问题。分享给大家就是为了大家以后遇到这个问题不用像…

基于Java+SpringBoot+Vue3+Uniapp+TypeScript(有视频教程)前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Vite - 配置 - 文件路径别名的配置

为什么要配置别名 别名的配置&#xff0c;主要作用是为了缩短代码中的导入路径。例如有如下的项目目录&#xff1a; project-name| -- src| -- a| --b| --c| --d| --e| -- abc.png| -- index.html| -- main.js如果想在 main.js 文件中使用 abc.png ,则使用的路径是 &#xff1…

八股文-TCP的四次挥手

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时&#xff0c;使用四次挥手来保证数据的完整传输和连接的正常终止。 漫画TCP的四次挥手 第一次挥手&#…

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法&#xff0c;它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本&#xff0c;因此搜索引擎会匹配与查询最相似的矢量&#xff0c;而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…

pdf如何让多张图片在一页

pdf保存为一页六张图片的方法是&#xff1a; 1、打开pdf查看器,打开文档。 2、点击【打印】图标进入打印程序&#xff0c;选择打印范围。 3、在【打印处理】选项,选择【每张张上放置多页】。 4、自定义每页放置的图片张数为六张&#xff0c;并对打印排版预览设置。 5、设置打印…

大师学SwiftUI第16章 - UIKit框架集成

其它相关内容请见​​虚拟现实(VR)/增强现实(AR)&visionOS开发学习笔记​​ SwiftUI是一套新框架&#xff0c;因此并没有包含我们构建专业应用所需的所有工具。这意味着我们会需要求助于UIKit&#xff08;移动设备&#xff09;和AppKit&#xff08;Mac电脑&#xff09;等原…

管理类联考——逻辑——知识+记忆篇——综合推理——考点+记忆

文章目录 整体目录大纲法汇总分类法记忆宫殿法绘图记忆法 考点记忆/考点汇总——按大纲 局部数字编码法归类记忆法重点记忆法歌决记忆法谐音记忆法理解记忆法比较记忆法 本篇思路&#xff1a;根据各方的资料&#xff0c;比如名师的资料&#xff0c;按大纲或者其他方式&#xff…

SQL注入1

对sql进行一个小结 还有其他的注入 其他注入:堆叠注入&#xff0c;宽字节注入&#xff0c;二次注入 首先是数值和字符 id1 and 11和id1 and 12 如果这两个语句返回的页面不一样就说明是数字型 id1 and 11#和id1 and 12# 如果这两个语句返回的页面不一样就说明是字符型 常…

微服务下整合knife4j接口文档

前言:本文旨在解决微服务下通过网关访问所用服务的knife4j文档&#xff0c;无需再通过其他服务单独访问 功能模块配置&#xff1a; 1.配置类&#xff1a; 在这个文件中注意下basePackage的扫描路径&#xff0c;修改为对应controller下的路径。 Configuration EnableSwagger…

土地利用强度(LUI)综合指数

土地利用强度的概念可以解释为某一时间特定区域内人类活动对土地利用强度的干扰程度[1]&#xff0c;其不仅反映不同土地利用类型本身的自然属性&#xff0c;也体现了人类利用土地的深度和广度&#xff0c;进而揭示在人类社会系统干扰下土地资源自然综合体自然平衡的保持状态[2]…

jbase打印导出实现

上一篇实现了虚拟M层&#xff0c;这篇基于虚拟M实现打印导出。 首先对接打印层 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml;namesp…

【原创】java+swing+mysql鲜花购物商城设计与实现

前言&#xff1a; 本文主要介绍了鲜花购物商城的设计与实现。首先&#xff0c;通过市场需求&#xff0c;我们确定了鲜花商场的功能&#xff0c;通常的商城一般都是B/S架构&#xff0c;然而我们今天要用javaswing去开发一个C/S架构的鲜花商城&#xff0c;利用开发技术和工具&am…

Swagger(4):Swagger配置

在上一张的项目中创建SwaggerConfig&#xff0c;进行配置文档内容。 1 配置基本信息 Docket&#xff1a;摘要对象&#xff0c;通过对象配置描述文件的信息。 apiInfo:设置描述文件中info。参数类型ApiInfo select():返回ApiSelectorBuilder对象&#xff0c;通过对象调用buil…

Android Studio 写一个Java调用c++ 的demo

前提条件&#xff1a; 本地已经配置好了ndk环境,如果没有配置好&#xff0c;建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI&#xff0c;包名是com.example.hellojni 然后在src目录下&#xff0c;右键选择Add C …