软件过程
1 何为软件过程模型
1.1 软件开发的特点
1.2 软件过程
1.3 软件过程模型
1.3.1 软件过程模型产生的背景
软件工程产生之前的软件开发——作坊式的个人创作:聚焦于编写代码;依靠个体技能,缺乏合作;关注时空利用,精雕细琢;程序规模小且功能单一;无系统性方法和标准流程
1.3.2 典型的软件过程模型
1.3.2.1 瀑布模型
瀑布模型的局限性:
软件需求具有易变多变的特点,而瀑布模型需求确定,过于理想化,缺乏变通,难应对变化;软件开发处于动荡之中;需等到所有功能实现后,才能得到可运行软件
瀑布模型的适用场景:
瀑布模型的各个过程介绍:
- 需求分析
- 概要设计
- 详细设计
- 编程实现
- 集成测试
- 确认测试
改进的瀑布模型:带反馈和回溯
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.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方法的组成:
- Scrum团队角色
- Scrum制品
1)产品订单
- Scrum活动
1.2.5.3 敏捷方法的特点
1.2.6 群体化软件开发方法
1.2.6.1 软件开发是创作和生产的过程
理解:个人智慧+工程管理
基于团队软件开发方法的特点:(理解:这个应该不属于群体化开发方法,是与群体化开发方法对立的)
1.2.6.2 什么是群体化开发方法
支持群体化开发的互联网平台:Github(国际)和Gitee(国内)
互联网平台提供的群体化开发支持:提出需求创意、发现软件缺陷、提交程序代码、标注开发任务、讨论软件需求、评审代码质量等等
群体化软件开发方法的特点:
1.2.6.3 群体化软件开发方法的支撑关键技术
- 基于社区的群体化软件项目组织:包括了核心开发人员和外围开发人员
- 基于Issue的任务管理
- 分布式版本管理思想
- 基于Pull/Request(P/R)的分布式协同开发
- 基于群体的知识分享
1.3 传统重型软件开发方法的特点和不足
有哪些是轻量级的软件开发方法:敏捷开发方法