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

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

相关推荐
人才程序员1 天前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_10221 天前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
做人求其滴2 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙2 天前
软件工程
软件工程
jokr_2 天前
【软件工程复习】
软件工程
云空2 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程
人才程序员2 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面
Aderversa2 天前
关于数据流图绘制和使用上的一些个人经验
软件工程
梁辰兴3 天前
UML 建模实验
软件工程·uml·建模
shinelord明4 天前
【再谈设计模式】外观模式~复杂系统交互的简化大师
开发语言·数据结构·设计模式·软件工程