笔记 | 软件工程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.mzph.cn/bicheng/23152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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旗鼓相当的数据结构–红黑树。 我们并且会对它的部分接口进行模…