笔记 | 软件工程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,一经查实,立即删除!

相关文章

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…

前端框架中的虚拟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风口,或者是想用这些工具提升自己的朋友去学…

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的定义有很多种,通俗一点说,它企图了解智能的实质,并生产出一种新的,能以…

Transformer学习(2)

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

拿捏红黑树(C++)

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

zdppy_amauth 实现给角色批量绑定权限

新增接口 api.resp.post("/auth/role_auth", amauth.role.add_auths)如何测试 如何测试能不能给指定的角色批量的添加权限呢? 1、需要新建一个角色2、需要拿到这个角色的ID3、需要新增三个权限4、需要拿到新增的三个权限的ID5、拿着角色ID和权限ID列表…

SSL代码签名最佳实践

代码签名就是软件发布者使用全球可信的证书颁发机构CA颁发的代码签名证书对软件代码进行签名,由此来验证软件开发者的真实身份,确保软件代码的完整性和可信任性。然而,攻击者一直试图渗透代码签名,意将恶意软件嵌入可信代码中。由…

【二叉树】Leetcode 637. 二叉树的层平均值【简单】

二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释&#xff1a…

必应bing国内广告怎样开户投放呢?

企业都在寻找高效、精准的营销渠道以扩大品牌影响力,提升市场占有率,作为全球第二大搜索引擎,微软旗下的必应Bing凭借其卓越的搜索技术和庞大的用户基础,成为了众多企业拓展市场的首选广告平台。在中国,必应Bing广告以…

vuInhub靶场实战系列-DC-6实战

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置二、信息收集2.1 主机发现2.1.1 nmap扫描存活主机2.1.2 arp-scan扫描存活主机 2.2 端口扫描2.3 指纹识别2.3.1 尝试指纹识别2.3.…