笔记 | 软件工程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 传统重型软件开发方法的特点和不足

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

相关推荐
赛卡7 小时前
IPOF(Input-Process-Output-Feedback)方法学简介
人工智能·机器学习·流程图·硬件工程·软件工程·系统工程
ICT_SOLIDWORKS1 天前
智诚科技苏州SOLIDWORKS授权代理商的卓越之选
大数据·人工智能·科技·软件工程
PLUS_WAVE1 天前
【Tools】chezmoi 跨多台不同的机器管理 dotfiles 的工具
linux·服务器·软件工程·工具·chezmoi
PLUS_WAVE1 天前
【SSH 端口转发】通过SSH端口转发实现访问远程服务器的 tensorboard
linux·服务器·ssh·软件工程·端口转发·tensorboard
菠萝崽.1 天前
安装docker,在docker上安装mysql,docker上安装nginx
java·mysql·nginx·docker·软件工程·springboot·开发
瓯雅爱分享2 天前
任务管理系统,Java+Vue,含源码与文档,科学规划任务节点,全程督办保障项目落地提效
java·mysql·vue·软件工程·源代码管理
光头颜2 天前
UML之序列图事件时刻与轨迹
软件工程·uml
Nita.2 天前
UML 类图基础和类关系辨析
软件工程·uml类图
未定义.2213 天前
电子削铅笔刀顺序图详解:从UML设计到PlantUML实现
java·软件工程·uml
aiden:)3 天前
UML 活动图深度解析:以在线购物系统为例
软件工程·软件构建·uml