笔记 | 软件工程03:软件过程和软件开发方法

软件过程

1 何为软件过程模型

1.1 软件开发的特点

image.png

1.2 软件过程

image.png

1.3 软件过程模型

image.png

1.3.1 软件过程模型产生的背景

软件工程产生之前的软件开发——作坊式的个人创作:聚焦于编写代码;依靠个体技能,缺乏合作;关注时空利用,精雕细琢;程序规模小且功能单一;无系统性方法和标准流程

1.3.2 典型的软件过程模型

image.png

1.3.2.1 瀑布模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

瀑布模型的局限性:

软件需求具有易变多变的特点,而瀑布模型需求确定,过于理想化,缺乏变通,难应对变化;软件开发处于动荡之中;需等到所有功能实现后,才能得到可运行软件

瀑布模型的适用场景:

image.png

瀑布模型的各个过程介绍:

  1. 需求分析
    image.png
  2. 概要设计
    image.png
  3. 详细设计
    image.png
  4. 编程实现
    image.png
  5. 集成测试
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  6. 确认测试
    image.png

改进的瀑布模型:带反馈和回溯

image.png

1.3.2.2 增量模型

image.png

增量模型的局限性:

image.png
image.png

增量模型应用举例:(理解:每个增量对应一个新的软件功能)

image.png

增量模型的适用范围:

image.png

1.3.2.3 迭代模型

image.png

迭代模型的特点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
迭代模型的局限性:

  • 迭代多少次不确定
  • 管理较为复杂
  • 高素质管理者和开发
1.3.2.4 原型模型(Prototyping Model)

image.png

原型模型的特点:(理解:感觉相比瀑布模型,就是事先多了一个样品可供客户参考)

image.png
原型模型的优缺点:

image.png

1.3.2.5 螺旋模型(Spiral Model)

image.png

1.3.2.6 不同软件过程模型的特点总结

image.png

螺旋模型不仅是针对需求难以确定的应用,同时也是重点关注了开发的风险

2 如何来选择软件过程模型

2.1 软件过程模型选择应该考虑的因素

image.png

image.png

2.2 软件过程模型的选择建议

image.png

具有原型特性的模型有:原型模型、迭代模型、螺旋模型

2.3 传统软件过程模型的特点和不足

传统软件过程模型指哪些:以文档为中心的重型软件开发方法,非常笨重

image.png

1 软件开发方法

1 软件开发方法概述

1.1 软件开发方法的发展

image.png

1.2 软件开发方法

1.2.1 Parnas方法出发点&策略&特点

image.png

1.2.2 结构化方法出发点&策略&特点

image.png

1.2.3 面向对象的方法出发点&策略&特点

image.png

1.2.4 基于构件的开发方法出发点&策略&特点

image.png

1.2.5 敏捷开发方法

image.png

1.2.5.1 什么是敏捷开发方法

敏捷开发方法产生的背景:

  1. 历史背景
    image.png
  2. 为适应如今互联网时代的软件开发特点:
    1. 快鱼吃慢鱼
    2. 版本发布成本很低
    3. 追求创新
    4. 需要快速响应用户的变化
    5. 需求不确定性高
    6. 关注用户行为

敏捷开发方法的特点:适应而非预测

image.png

敏捷开发方法的定义:
image.png

敏捷开发方法的基本观点:

image.png

敏捷开发方法体现的思想:

image.png

敏捷准则:
image.png
image.png

对敏捷的常见误解:

image.png

敏捷软件开发对技术提出的要求

image.png

1.2.5.2 支持敏捷软件开发的技术

image.png

1.2.5.2.1 极限编程

image.png
image.png

12条核心准则:

image.png
image.png
image.png

  • 如何理解重构?
    传统软件工程的一个基本原则是应该在设计中考虑未来的变更,因为这会减少未来变化带来的成本。极限编程(XP)摒弃这一原则,认为无法可靠地预测变化,XP主张持续的代码改进(重构)以使得变化更容易实现
  • 什么是重构?
    重构是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高其可理解性,降低其修改成本。
  • 重构技巧
    • 重新组织你的函数
    • 在对象之间搬移特性
    • 重新组织数据
    • 简化条件表达式
    • 简化函数调用
    • 处理概括关系
  • 何时重构?
    • 添加新功能时一并重构:为了增加一个新的功能,程序员需要首先读懂现有的代码。
    • 修补错误时一并重构:为了修复一个Bug, 程序员需要读懂现有的代码。
    • 代码评审时一并重构
  • 何时不该重构?
    • 代码太混乱,设计完全错误。与其重构,不如重写。
    • 明天是DeadLine:永远不要做 Last-Minute-Change
    • 重构的工作量显著影响最后期限:推迟重构,作为新任务或下次迭代中完成
1.2.5.2.2 测试驱动开发

测试是XP的核心,XP 测试的特性:

  • 测试驱动的开发
  • 基于场景的增量测试开发
  • 用户参与测试开发和确认
  • 使用自动化测试框架

基本思想:先编写测试,再进行开发

image.png

过程:

image.png|500

特点:

image.png

1.2.5.2.3 Scrum方法

基本思想:

image.png

流程:

image.png

image.png

Scrum方法的组成:

image.png

  1. Scrum团队角色
    image.png
  2. Scrum制品
    image.png
    1)产品订单
    image.png
  3. Scrum活动
    image.png
    image.png
    image.png
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    image.png
1.2.5.3 敏捷方法的特点

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2.6 群体化软件开发方法
1.2.6.1 软件开发是创作和生产的过程

理解:个人智慧+工程管理

image.png

基于团队软件开发方法的特点:(理解:这个应该不属于群体化开发方法,是与群体化开发方法对立的)

image.png

1.2.6.2 什么是群体化开发方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

支持群体化开发的互联网平台:Github(国际)和Gitee(国内)

互联网平台提供的群体化开发支持:提出需求创意、发现软件缺陷、提交程序代码、标注开发任务、讨论软件需求、评审代码质量等等

群体化软件开发方法的特点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2.6.3 群体化软件开发方法的支撑关键技术

image.png

  1. 基于社区的群体化软件项目组织:包括了核心开发人员和外围开发人员
    image.png
    image.png
  2. 基于Issue的任务管理
    image.png
  3. 分布式版本管理思想
    image.png
  4. 基于Pull/Request(P/R)的分布式协同开发
    image.png
    image.png
  5. 基于群体的知识分享
    image.png

1.3 传统重型软件开发方法的特点和不足

image.png

有哪些是轻量级的软件开发方法:敏捷开发方法

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

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

相关文章

SWIG源码安装

SWIG源码安装 https://github.com/swig 下载源码首先需要先生成.configure,在执行make & make install ./autogen.sh test -d Tools/configaclocal -I Tools/config ./autogen.sh: 11: aclocal: not found报错了 解决方案,安装automake sudo ap…

Threejs加载DOM+CSS到场景中,实现3D场景展示2D平面的效果

1. 前言 本篇文章主要实现了将DOM元素转换为Threejs可以使用的数据结构,使用CSS2DRenderer渲染器渲染这些DOMCSS的平面,使其可以作为一个物体添加到Threejs场景里 如下效果图: 2. 实现步骤 首先创建一个ThreejsVueVite的项目,作为本次的demo项目下载Threejs第三方库 yarn…

C++候捷stl-视频笔记4

一个万用的hash function 哈希函数的形式,一种是一般函数(右边),一种是成员函数(左边),类的对象将成为函数对象 具体做法例子。直接把属性的所有hash值加起来,会在hashtable中会产生很多的碰撞,放在同一个bucket中的元…

游戏UI设计秘诀:专家总结与实际案例解析!

随着游戏产业的不断发展,游戏UI界面设计变得越来越重要。一个好的游戏UI界面设计可以让玩家更容易理解游戏规则,提高游戏的可玩性,增加游戏的吸引力。在本文中,我们将讨论游戏UI界面设计的重要性和一些常见的设计原则。 1. 游戏U…

为什么要选择AWS?AWS的优势有哪些?

在当今时代,云计算已经成为各行各业的必备技术。作为全球领先的云计算平台,AWS(Amazon Web Services)凭借其卓越的性能、可靠性和创新能力,吸引了无数企业和个人开发者选择使用其服务。但是,为什么要选择AWS呢?AWS又有哪些独特的优势呢?让我们结合九河云的分析一起探讨一下。…

前端框架中的虚拟DOM和实际DOM之间的关系

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的虚拟DOM和实际DOM之间的关系1. 实际DOM(Real DOM)1.1 定义1.2 特点 2. 虚拟DOM(Virtual DOM)2.1 定义2.2 特点 3. 虚拟DOM的工作流程3.1 创建虚拟DOM3.2 比较虚拟DOM&…

Django redirect()函数实现页面重定向

1,通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…

PVE安装虚拟主机

本文记录PVE安装其他虚拟主机的步骤,以安装win-server为例。裸机安装PVE则不是本文主题。 准备文件 获取Windows系统镜像 win server镜像可以从官网获取普通Windows镜像可从MSDN获取此外,安装Windows系统还需要从PVE下载特殊驱动 获取Windows必要驱动 …

康谋技术 | 自动驾驶:揭秘高精度时间同步技术(二)

在自动驾驶中,对车辆外界环境进行感知需要用到很多传感器的数据(Lidar,Camera,GPS/IMU),如果计算中心接收到的各传感器消息时间不统一,则会造成例如障碍物识别不准等问题。 为了对各类传感器进…

提高工作效率的神器有哪些?

在这个人工智能技术蓬勃发展的时代,很多AI工具极大地提升我们的工作效率,比如很多人在用的ChatGPT、Kimi,它们几乎无所不能,小编在日常工作也用它们,建议想抓住AI风口,或者是想用这些工具提升自己的朋友去学…

2024年BCSP-X小学高年级组初赛真题解析

一、单项选择题(共15题,每题2分,共计30分) 计算机在工作过程中突然停电,() 中的信息不会丢失。 A. 缓存 B. 寄存器 C. RAM D. ROM正确答案是 D. ROM。 首先,我们来看看计算机中几种不同的存储器: 1 . 缓存(Cache):位于CPU内部或非常靠近CPU,用于存储CPU即将使用的数据和指令。…

windows10 安装子linux系统(WSL安装方式)

在 windows 10 平台采用了WSL安装方式安装linux子系统 1 查找自己想要安装的linux子系统 wsl --list --online 2 在线安装 个人用Debian比较多,这里选择Debian,如下图: wsl --install -d Debian 安装完成,如下: 相关…

【JS重点知识03】定时器—间歇函数

一:间歇函数的应用场景 网页倒计时是需要每个一段时间需自动执行一段代码,而不需要手动去触发;间歇函数刚好满足了这一要求; 二:间歇函数的使用 1 开启定时器 语法规范: 1 setInterval(匿名函数,时间)…

Java版电商平台B2B2C:多商家直播商城系统特性解析

B2B2C平台,立足于传统电商领域,同时引入了创新的商业模式。该平台不仅支持商家入驻和平台自营,还积极构建了一个全新的市场环境,旨在为各行各业及互联网创业者提供更多收益机会。 该平台以消费者需求为中心,帮助企业构…

PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统

本期教程投稿一篇实用性的基于邮箱登陆注册找回于一体的系统,在日常的开发和软件应用中非常常见,并且也使用了逻辑与界面分离的写法,那这个文章将详细的为大家介绍整个流程,但是细节的话还需要大家自己去完善,也欢迎大…

人工智能的兴起和发展

人工智能的兴起 人工智能,artificial intelligence,缩写为AI。 它是随着计算机技术的发展才逐步产生并发展起来的一门学科。关于AI的定义有很多种,通俗一点说,它企图了解智能的实质,并生产出一种新的,能以…

ekho 编译安装

ekho 编译安装 ekho 编译安装ekho 介绍源码下载源码编译编译依赖编译 测试 参考文献 ekho 编译安装 ekho 介绍 Ekho(余音)是一个免费、开源的中文语音合成软件。它是eGuideDog project.项目的一部分。 它目前支持粤语、普通话(国语&#xf…

【无人机协同】基于改进灰狼算法实现多峰环境下的多无人机协同路径规划附matlab代码

% 初始化算法参数 num_drones 5; % 无人机数量 num_iterations 100; % 迭代次数 num_wolves 20; % 灰狼数量 alpha 0.5; % 狼群更新参数 beta 0.8; % 狼个体更新参数 delta 0.5; % 灰狼群体更新参数 lb [0 0]; % 路径范围下限 ub [100 100]; % 路径范围上限 % 初始化无…

Transformer学习(2)

这是Transformer的第二篇文章,上篇文章中我们了解了分词算法BPE,本文我们继续了解Transformer中的位置编码和核心模块——多头注意力。下篇文章就可以实现完整的Transformer架构。 位置编码 我们首先根据BPE算法得到文本切分后的子词标记,然…

拿捏红黑树(C++)

文章目录 前言一、红黑树介绍二、插入操作三、验证红黑树四、红黑树与AVL性能比较与应用五、总体代码总结 前言 我们之前介绍了一种AVL的高阶数据结构,在本篇文章中,我们将会介绍一种与AVL旗鼓相当的数据结构–红黑树。 我们并且会对它的部分接口进行模…