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

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

软件过程基础

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

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

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

软件生命周期模型

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

瀑布模型

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

特点:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWS EC2、阿里云ECS、腾讯云CVM初步对比

作为国内外的头部云厂商,AWS、阿里云、腾讯云都有着相似功能的云产品,而作为云上最基础的资源就是云服务器——一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建…

QtCreator开发环境的安装和配置

QtCreator开发环境的安装和配置 介绍下载与安装环境介绍示例新建工程示例程序 帮助模式Qt Designer(设计师)Qt Linguist(预言家)结论 介绍 Qt Creator是一个跨平台、完整的集成开发环境(IDE),专门用于Qt开发。它包含了完整的编辑器、调试器和…

电子电器架构 —— 车载网关边缘节点总线转换

电子电器架构 —— 车载网关边缘节点路由转发策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数3000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无…

【C/C++笔试练习】继承和派生的概念、虚函数的概念、派生类的析构函数、纯虚函数的概念、动态编译、多态的实现、参数解析、跳石板

文章目录 C/C笔试练习选择部分(1)继承和派生的概念(2)程序分析(3)虚函数的概念(4)派生类的析构函数(5)纯虚函数的概念(6)动态编译&…

docker 安装mongodb 实现 数据,日志,配置文件外挂

docker 安装mongodb 实现数据,日志,配置文件外挂 1 背景 最近开发了一个评论系统之前用mysql来存储数据,但是考虑到后期业务增大访问量也会增大,为了兼容这种高并发的场景,因此经过多方面的考虑,我们最终…

python中的NumPy和Pandas往往都是同时使用,NumPy和Pandas的在数据分析中的联合使用

文章目录 前言一、numpy的介绍与用法二、pandas的介绍与用法三、numpy与pandas的联合使用说明四、numpy与pandas的联合使用程序代码4.1 读取CSV文件并进行数据清洗,如去除NaN值4.2 矩阵操作和特征工程,如标准化处理4.3 使用Pandas进行数据筛选和分组聚合…

Vue3-shallowRef 和 shallowReactive函数(浅层次的响应式)

Vue3-shallowRef 和 shallowReactive函数(浅层次的响应式) shallowRef函数 功能:只给基本数据类型添加响应式。如果是对象,则不会支持响应式,层成也不会创建Proxy对象。ref和shallowRef在基本数据类型上是没有区别的…

Typora——优雅的排版也是一种品味

电脑中用于编辑文本的软件,一直以来可谓是层出不穷,大家脑海中一定会浮现出很多名字:word,OneNote,记事本,wps,LaTeX,还有各种小众的office工具,等等等等。今天学长将介绍…

人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率

原文:人充当LLM Agent的工具(Human-In-The-Loop ),提升复杂问题解决成功率 在Agent开发过程中,LLM充当Agent的大脑,对问题进行规划、分解、推理,在执行过程中合理选择利用工具(Tool&…

一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner

前言 我们在使用Windows系统的时候经常会遇到一些程序不会释放已分配的内存,从而导致电脑变得缓慢。今天给大家推荐一款.NET开源的小巧、智能、免费的Windows内存清理工具:WinMemoryCleaner。 使用Windows内存清理工具来优化内存,这样不必浪…

图像分类(二) 全面解读复现ZFNet

网络详解 前言:ZF网络是2013年提出的,网上有很多关于它的介绍和讲解,但是很多内容讲的不太好(个人感觉),于是花时间收集了一些资料,整理了一些比较好的文章,从头到尾把ZFNet说了一遍…

Spring Cloud Alibaba微服务组件-Nacos-配置中心

Nacos做注册中心是以serviceName做基本管理单元,而作为配置中心则是以dataId为基本管理单元,dataId也就是配置文件名 使用 配置中心架构图 多个配置的优先级 配置动态更新 客户端 ConfigService 输出: 通过调用Nacos服务端的“获取配置”接口…

ubuntu20.04.1网络图标突然消失,无法上网

故障:打开虚拟机进入Ubuntu系统后,打开火狐浏览器,发现无法连接网络。 解决办法:因为刚接触Linux系统,就在网上找各种资料,试了各种办法无果,最后发现有可能网络配置文件被更改。 打开控制台输…

Qt6版使用Qt5中的类遇到的问题解决方案

如果有需要请关注下面微信公众号,会有更多收获! 1.QLinkedList 是 Qt 中的一个双向链表类。它提供了高效的插入和删除操作,尤其是在中间插入和删除元素时,比 QVector 更加优秀。下面是使用 QLinkedList 的一些基本方法&#xff1a…

腾讯云服务器新用户优惠有哪些?腾讯云服务器新人优惠整理汇总

你们是否曾经幻想过拥有一台属于自己的服务器,却因为价格而望而却步呢?今天,我要告诉你一个好消息——腾讯云服务器现在针对新用户推出了一系列的优惠政策,让你可以用超低的价格购买到性能强大的服务器! 首先&#xf…

【数字人】7、GeneFace++ | 使用声音驱动的面部运动系数作为 condition 来指导 NeRF 重建说话头

文章目录 一、背景二、相关工作2.1 唇形同步的 audio-to-motion2.2 真实人像渲染 三、方法3.1 对 GeneFace 的继承3.2 GeneFace 的结构3.2.1 Pitch-Aware Audio-to-Motion Transform3.2.2 Landmark Locally Linear Embedding3.2.3 Instant Motion-to-Video Rendering 四、效果 …

《循环双向链表》(带哨兵位的头节点)

目录 ​编辑 前言: 关于双向循环带头链表: 模拟实现双向循环带头链表: 1.typedef数据类型 2.打印链表 3.初始化链表: 4.创建节点 5.尾插 6.头插 7.尾删 8.头删 9.寻找节点 10.在节点前插入 11.删除指定节点 单链表和双链表的区别…

【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。 原创文章,转载请注明出处: 【实用技巧】解放系统盘,更改ArduinoIDE默认库文件位置,将Arduino15中的库文件移动到其他磁盘-CSDN博客文…

2D槽道流

之前看槽道流时,一直无法在二维槽道流里计算出湍流状态,后来了解到二维槽道流需要额外添加随机扰动,但是这个体积力的植入方式一直不知道。而且看稳定性分析中的OS方程的推导,也是基于2d的NS方程,至今还是很疑惑这个问…

保姆级 | Nginx编译安装

0x00 前言 Nginx 是一个 HTTP 和反向代理服务器, 邮件代理服务器, 和通用 TCP/UDP 代理服务器, 最初由伊戈尔西索耶夫(Igor Sysoev)撰写。采用编译安装可以根据自身需要自定义配置,让服务器有更高的安全性和…