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

软件过程

1 何为软件过程模型

1.1 软件开发的特点

1.2 软件过程

1.3 软件过程模型

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

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

1.3.2 典型的软件过程模型
1.3.2.1 瀑布模型

瀑布模型的局限性

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

瀑布模型的适用场景

瀑布模型的各个过程介绍

  1. 需求分析
  2. 概要设计
  3. 详细设计
  4. 编程实现
  5. 集成测试
  6. 确认测试

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

1.3.2.2 增量模型

增量模型的局限性


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

增量模型的适用范围

1.3.2.3 迭代模型

迭代模型的特点


迭代模型的局限性

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

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


原型模型的优缺点

1.3.2.5 螺旋模型(Spiral Model)
1.3.2.6 不同软件过程模型的特点总结

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

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

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

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

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

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

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

1 软件开发方法

1 软件开发方法概述

1.1 软件开发方法的发展

1.2 软件开发方法

1.2.1 Parnas方法出发点&策略&特点
1.2.2 结构化方法出发点&策略&特点
1.2.3 面向对象的方法出发点&策略&特点
1.2.4 基于构件的开发方法出发点&策略&特点
1.2.5 敏捷开发方法
1.2.5.1 什么是敏捷开发方法

敏捷开发方法产生的背景

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

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

敏捷开发方法的定义

敏捷开发方法的基本观点

敏捷开发方法体现的思想

敏捷准则

对敏捷的常见误解

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

1.2.5.2 支持敏捷软件开发的技术
1.2.5.2.1 极限编程


12条核心准则:



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

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

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

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

过程

特点

1.2.5.2.3 Scrum方法

基本思想

流程

Scrum方法的组成

  1. Scrum团队角色
  2. Scrum制品

    1)产品订单
  3. Scrum活动




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

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

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

1.2.6.2 什么是群体化开发方法

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

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

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

1.2.6.3 群体化软件开发方法的支撑关键技术
  1. 基于社区的群体化软件项目组织:包括了核心开发人员和外围开发人员

  2. 基于Issue的任务管理
  3. 分布式版本管理思想
  4. 基于Pull/Request(P/R)的分布式协同开发

  5. 基于群体的知识分享

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

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

相关推荐
A_cainiao_A5 小时前
【软考】【2025年系统分析师拿证之路】【啃书】第七章 软件工程(八)
软件工程
开开心心就好9 小时前
极速、免费、体积小,一款PDF转图片软件
人工智能·智能手机·eclipse·pdf·软件工程·软件需求
夏旭泽1 天前
软件工程的基本原理
软件工程
夏旭泽1 天前
软件工程的本质特征
软件工程
風落2 天前
《告别复杂PDF编辑,PDF Eraser开启便捷办公新体验》
pdf·软件工程·软件需求
计软考研大C哥2 天前
【25考研】考清华的软件工程专业的研究生需要准备什么?
经验分享·考研·软件工程
诗和远方ya2 天前
visual studio连接sql server数据库
数据库·sqlserver·软件工程·visual studio
犬余4 天前
漫话架构师|什么是系统架构设计师(开篇)
架构·软件工程·软考·系统架构设计师
AWM巴卡6 天前
无降智o1 pro——一次特别的ChatGPT专业模式探索
软件工程
芝士架构 APP 凯恩6 天前
2024年11月系统架构设计师考试复盘
软件工程·软考·系统架构设计师