软件工程--软件过程学习笔记
本篇内容是对学校软件工程课堂内容的记录总结,部分也来源于网上查找的资料
软件过程基础
软件过程是指在软件开发过程中,经过一系列有序的步骤和活动,从问题定义到最终软件产品交付和维护的全过程。这个过程旨在确保软件项目能够按时、按预算、高质量地完成,同时满足用户的需求和期望
软件过程就像烹饪一道菜的步骤。想象一下,你要做一顿美味的晚餐。首先,你会选择菜谱(问题定义和需求分析),然后购买食材(规划和准备资源)。接下来,你按照步骤进行烹饪(编码和开发),调整调味品(测试和质量控制),最后上菜,让家人或朋友品尝(交付和维护)
在软件过程中,也有类似的步骤,这个过程通常是迭代的,意味着在整个过程中可能会反复进行某些步骤,特别是在发现问题或用户需求变更时。整个软件过程的目标是以可控制、可重复的方式生产高质量的软件产品,同时满足客户的期望
软件生命周期模型
软件生命周期模型是一种用来描述软件开发过程中不同阶段和活动的抽象框架或模型。它帮助团队组织和规划开发工作,确保在整个过程中的有效管理和控制。通俗地说,软件生命周期模型就像是软件开发的路线图,指导开发团队从项目的开始到结束的整个过程
瀑布模型
类似于瀑布一样,开发过程是线性的,每个阶段依次进行,一旦完成一个阶段,就进入下一个
特点:
1.强调阶段的划分顺序与依赖
2.每个阶段都要从技术和管理进行严格的审查
3.是一种线性的、顺序的、逐步细化的开发模式
适用时机:
1.必须同时淘汰全部老系统时
2.所有的系统功能一次交付时
3.具有反馈环
价值:
风险:
1.获得完整的需求规约是非常困难的
2.难以适应快速变化的需求
3.系统太大时,难以一次做完
4.无法利用某一中间产品
5.资源有限,比如现有的工作人员/资金不足不适用这种方法
增量模型
增量模型是软件开发中的一种开发方法,通俗来说,它就像是搭积木一样逐步构建软件系统。这个过程是渐进的,每一步都是对系统的一个增量,而不是一次性完成整个系统的开发
适用时机:
1.需要早期获得功能
2.中间产品可以使用
3.系统可以自然地分割成增量
4.工作人员/资金可以逐步增加
风险:
1.需求未被很好的理解
2.一次要求所有功能的系统不适用
3.需要迅速发生变化的系统不适用
4.长时期内仅有有限的资源(人员/资金)不适用
演化模型
演化模型是软件开发中的一种方法,通俗来说,它就像是植物的生长一样,通过逐步发展和改进来构建软件系统。演化模型强调系统的渐进发展,允许在系统中逐步引入变化和改进。
想象一下你在种一棵树。你首先种下种子,它代表了系统的最初版本。随着时间的推移,树会生长,分支会延伸,新的叶子和花朵会不断产生。每一次生长和变化都是系统演化的一部分
特点:
迭代的开发方法,渐进地开发各个可执行版本,逐步完善软件产品。每个版本在开发时,开发过程中的活动和任务顺序地或部分重叠平行地被采用。与增量模型的区别是:需求在开发早期不能被完全了解和确定,在一部分被定义后开发就开始了,然后在每个相继的版本中逐步完善
演化模型基本思想图
迭代化开发思想:
迭代化开发是软件开发中的一种方法,通俗来说,它就像是制作一幅画的过程,不是一次性完成整个画面,而是通过一次次的修改和完善来逐步创作。这种方法将整个开发过程分成多个小步骤,每一步都是对前一步的改进和迭代。
想象一下你在画一幅画。你不会一开始就把整个画面都完成,而是可能先画出大致的轮廓,然后逐渐添加细节,做出一些修改,直到你满意为止
特点:

优点: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
相关文章:

软件工程--软件过程学习笔记
本篇内容是对学校软件工程课堂内容的记录总结,部分也来源于网上查找的资料 软件过程基础 软件过程是指在软件开发过程中,经过一系列有序的步骤和活动,从问题定义到最终软件产品交付和维护的全过程。这个过程旨在确保软件项目能够按时、按预…...

高校教师资格证备考
高等教育制度 关于人的全面发展和个体发展的关系,说法正确的是(ABC)。 A.个体发展是在全面发展基础上的选择性发展 B.全面发展是个体发展的前提和基础 C.个体发展又是全面发展的动力 D.个体发展是全面发展的前提和基础...

Git通过rebase合并多个commit
在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。 1. 查看提交历…...

ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现
偶吼吼胜利在望,冲冲冲 老规矩新建功能包 工作空间目录下/src下开启终端输入 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何实现tf广播 引入库 c python …...

计算机算法分析与设计(23)---二分搜索算法(C++)
文章目录 1. 算法介绍2. 代码编写 1. 算法介绍 1. 二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search…...

前置语音群呼与语音机器人群呼哪个更好
最近通过观察自己接到的营销电话,通过语音机器人外呼的量应该有所下降。同时和客户交流获取到的信息,也是和这个情况类似,很多AI机器人群呼的量转向了OKCC前置语音群呼。询问原因,说是前置语音群呼转化更快,AI机器人群…...

『Element Plus の 百科大全』
Element Plus 官网 点击跳转...

P3879 [TJOI2010] 阅读理解- 字典树
题面 分析 将所有单词存入字典树,重点值怎么判断在哪一行出现过,对于字典树查询的判断字符串是否存在的数组可以开成二维,也就是在查询到某个字符串存在后,再通过循环判断每一层是否存在。 代码 #include <bits/stdc.h>…...

upgrade k8s (by quqi99)
作者:张华 发表于:2023-11-17 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 本文只是从网上搜索一些升级k8s的理论学习,下面的步骤未实际测…...

CronExpression
CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…...

释放机器人潜力,INDEMIND深耕底层技术
市场转暖,但攘外需要同时安内。 市场降温之后,正迎来拐点 疫情之后,经济逐渐下行,服务机器人的“好日子”也随之结束,整个行业都在动荡中经历渡劫。根据TE智库报告显示,从2022年开始,我国服务…...

【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript进阶指南 👐学习格言:成功不是终点,失败也并非末日,最重要的是继…...

流量2----2
2...

人工智能发展前景
随着人工智能的快速发展,这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能,希望通过自学获得相关技能,进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景,并为大家提供自学人工智能的途…...

编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。
编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。 选择结构是编程语言中常用的一种控制结构&…...

AcWing 4520:质数 ← BFS
【题目来源】https://www.acwing.com/problem/content/4523/【题目描述】 给定一个正整数 X,请你在 X 后面添加若干位数字(至少添加一位数字;添加的数不能有前导0),使得结果为质数,在这个前提下所得的结果应…...

00、计算机视觉入门与调优简介
写在前面 每天更新1篇文章,共更新100篇以上 相关代码会放在gitee上 中间会按进度和反馈安排视频讲解 预计2023-11-11开始推送文章,持续3个月左右 专栏简介 本专栏带你从头开始入门计算机视觉。 内容会比之前写的文章更专业更全面,并且你…...

.L0CK3D来袭:如何保护您的数据免受致命攻击
尊敬的读者: 网络犯罪的威胁日益增长,其中.L0CK3D勒索病毒是一种极具挑战性的数字威胁。为了助您应对这一风险,本文将深入探讨.L0CK3D病毒的狡猾手法、毁灭性影响,提供详实的数据恢复方法,同时为您提供极具实战性的预…...

多媒体ffmpeg学习教程
多媒体ffmpeg 目前比较流行的音视频文件为:MP4 flv m3u8 ffmpeg ffmpeg ffplay ffprobe ffserverffmpeg -i INPUT -vf "split [main][tmp]; [tmp] cropiw:ih/2:0:0, vflip [flip];[main][flip] overlay0:H/2" OUTPUTffmpeg -i 2022.mp4 -vcodec mpeg4 -b:…...

SELinux零知识学习十五、SELinux策略语言之客体类别和许可(9)
接前一篇文章:SELinux零知识学习十四、SELinux策略语言之客体类别和许可(8) 一、SELinux策略语言之客体类别和许可 4. 客体类别许可实例 (3)进程客体类别许可 与文件许可不同,许多进程许可没有直接对应到…...

OpenSign:安全可靠的电子签名解决方案 | 开源日报 No.76
microsoft/Web-Dev-For-Beginners Stars: 71.5k License: MIT 这个开源项目是一个为期 12 周的全面课程,由微软云倡导者团队提供。它旨在帮助初学者掌握 JavaScript、CSS 和 HTML 的基础知识。每一节都包括预习和复习测验、详细的书面指南、解决方案、作业等内容。…...

Linux | 进程间通信
目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 (1)原理 (2)测试代码 (3)读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 (4&a…...

Vue.js正式环境中配置多个请求的URL
在Vue.js中,你可以在正式环境中配置多个请求的URL,通常使用一些配置文件或者环境变量的方式。下面是一种常见的配置方式: 1. 创建配置文件:在项目的根目录下,创建一个配置文件,比如可以是config.js&#x…...

简单的 UDP 网络程序
文章目录: 简单的UDP网络程序服务端创建套接字服务端绑定启动服务器udp客户端本地测试INADDR_ANY 地址转换函数关于 inet_ntoa 简单的UDP网络程序 服务端创建套接字 我们将服务端封装为一个类,当定义一个服务器对象之后,需要立即进行初始化…...

人工智能-深度学习之文本预处理
文本预处理 对于序列数据处理问题, 这样的数据存在许多种形式,文本是最常见例子之一。 例如,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 本节中,我们将解析文本的常见预处理步骤。 这些步骤通常包括…...

【Java 进阶篇】插上翅膀:JQuery 插件机制详解
在前端开发中,JQuery 作为一个广泛应用的 JavaScript 库,为开发者提供了丰富的工具和方法,简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中,插件机制是 JQuery 的一项重要特性,使得开发者能够轻松地…...

手动编译GDB
手动编译GDB 起因在于使用Clang-14编译C文件并生成调试信息,使用gdb调试时报DWARF相关错误。经检查原因在于虚拟机为Ubuntu 20.04,使用apt下载时官方提供gdb版本为9.2,不支持DWARF5,而Clang-14生成的调试信息是DWARF5版本的。为解决该问题,手…...

竞赛选题 深度学习花卉识别 - python 机器视觉 opencv
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &a…...

替换SlowFast中Detectron2为Yolov8
一 需求 FaceBookReserch中SlowFast源码中检测框是用Detectron2进行目标检测,本文想实现用yolov8替换detectron2二 实施方案 首先,yolov8 支持有自定义库ultralytics(仅支持yolov8),安装对应库 pip install ultraly…...

轻量化网络--MobileNet V1
文章目录 depth-wise separable convolutions普通卷积depthwise conconvolutionspointwise convolutions网络结构进一步分析网络训练方式两个重要的超参数Width Multiplier: Thinner ModelsResolution Multiplier: Reduced Representation实验结果消融实验细粒度,高分辨率识别…...