概念

管理是什么

管理的三大关键要素:目标、状态、纠偏

管理视角的软件工程——能否复制成功?

  • 软件过程是为了实现一个或者多个事先定义的目标而建立起来的一组实践的集合
  • 这组实践之间往往有一定的先后顺序,作为一个整体来实现事先定义的一个或者多个目标。

软件过程和生命周期模型

  • 生命周期模型是对软件过程的一种人为划分
  • 生命周期模型是软件开发过程的主框架,是对软件开发过程的粗粒度划分
  • 生命周期模型一般不包括技术实践

迭代式

大型软件系统的开发过程也是一个逐步学习和交流的过程,软件系统的交付不是一次完成,而是通过多个迭代周期,逐步来完成交付。

瀑布模型

  • 瀑布模型不是单一模型,是一系列模型,覆盖最简单场景(过程元素少)到最复杂场景
  • 软件项目应该根据实际情况选择包含合适过程元素的瀑布模型,基本原则是项目挑战越多,模型越复杂
  • 团队往往会低估项目挑战从而选择过于简单的瀑布模型
  1. 自顶向下,逐步求精
  2. 问题与不足(效率和质量上):
    1. 形式化在扩展性和可用性方面存在不足
    2. 重文档、慢节奏

软件过程管理

PDCA和IDEAL

元模型

PDCA(从十二点钟开始顺时针):

IDEAL:IDEAL模型解决了软件组织在各种质量改进环境下的需要。

CMM/CMMI

详细解释:

  1. CMMI 的 3 级中的标准化目的不是简单的替换
  2. CMMI 从 2 级升级到 3 级的原因:固化最佳实践,对小组而言则是能够更快地学习其他的做法
  3. CMMI 3 级的重点是已定义
  4. CMMI 4 级我们希望能够看到一个预测模型
  5. 4 级和 5 级更多是根据结果(未来)来进行管理
  6. 2 级和 3 级关注的是当前的状态

软件工程演变的历史视角

软件危机和软件工程

软件危机

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

软件工程

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。

软件工程的两大视角:

  • 管理视角——能否复制成功?

  • 技术视角——是否可以将问题解决得更好?

三大阶段

软硬件一体化:事实上是硬件开发流程,measure twice,cut once

→ 独立的产品:结构化程序设计,瀑布模型,成熟度模型

→ 网络化和服务化:迭代式开发,敏捷

敏捷宣言

注意是胜过,也就是要有后者,才能有前者

  • 个体和互动胜过流程和工具
  • 可以工作的软件胜过详尽的文档
  • 客户合作胜过合同谈判
  • 响应变化胜过遵循计划

驱动力是软件开发本质难题

复杂性、不可见性、可变性和一致性