当前位置: 首页 > news >正文

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

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

软件过程基础

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

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

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

软件生命周期模型

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

瀑布模型

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

特点:

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

相关文章:

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

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

高校教师资格证备考

高等教育制度 关于人的全面发展和个体发展的关系,说法正确的是(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&#xf…...

前置语音群呼与语音机器人群呼哪个更好

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

『Element Plus の 百科大全』

Element Plus 官网 点击跳转...

P3879 [TJOI2010] 阅读理解- 字典树

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

upgrade k8s (by quqi99)

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

CronExpression

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

释放机器人潜力,INDEMIND深耕底层技术

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

【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript进阶指南 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继…...

流量2----2

2...

人工智能发展前景

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

编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。

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

AcWing 4520:质数 ← BFS

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

00、计算机视觉入门与调优简介

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

.L0CK3D来袭:如何保护您的数据免受致命攻击

尊敬的读者&#xff1a; 网络犯罪的威胁日益增长&#xff0c;其中.L0CK3D勒索病毒是一种极具挑战性的数字威胁。为了助您应对这一风险&#xff0c;本文将深入探讨.L0CK3D病毒的狡猾手法、毁灭性影响&#xff0c;提供详实的数据恢复方法&#xff0c;同时为您提供极具实战性的预…...

多媒体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)

接前一篇文章&#xff1a;SELinux零知识学习十四、SELinux策略语言之客体类别和许可&#xff08;8&#xff09; 一、SELinux策略语言之客体类别和许可 4. 客体类别许可实例 &#xff08;3&#xff09;进程客体类别许可 与文件许可不同&#xff0c;许多进程许可没有直接对应到…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...