笔记 | 软件工程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

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

相关推荐

  1. 软件工程 复习笔记

    2024-06-06 12:50:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 12:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 12:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 12:50:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 12:50:01       20 阅读

热门阅读

  1. elasticsearch (dsl)

    2024-06-06 12:50:01       9 阅读
  2. python练习5

    2024-06-06 12:50:01       9 阅读
  3. 从内存到sql的upsert

    2024-06-06 12:50:01       8 阅读
  4. pytest识别测试用例的机制以及和unittest的区别

    2024-06-06 12:50:01       7 阅读
  5. 数据库漫谈-国产数据库

    2024-06-06 12:50:01       7 阅读
  6. 【设计模式】适配器模式(结构型)⭐⭐⭐

    2024-06-06 12:50:01       9 阅读
  7. 【机器学习】朴素贝叶斯分类器

    2024-06-06 12:50:01       5 阅读
  8. 第十三届蓝桥杯B组c++国赛

    2024-06-06 12:50:01       7 阅读