1. 定义
    1. 软件工程方法学是研究软件设计方法及工程开发技术的一门学科
    2. 包括
      1. 系统模型
      2. 设计建议
      3. 过程指引
      4. 其他
        1. 术语
        2. 规则
  2. 三要素
    1. 方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题
    2. 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境
    3. 过程:所需要完成的一系列任务的框架,完成各项任务的工作步骤
  3. vs 软件工程
    1. 软件工程是“行为”
    2. 软件工程方法学是“指导规则”
  4. 为什么要学习
    1. 应用的需要
      1. 方法学的发展
      2. 不同方法学的优缺点
    2. 用更宏观、更高的层次看待软件开发
      1. 软件开发理论研究
    3. 发展更新的\更完善的软件工程方法学的需要
  5. 相关知识体系
    1. 结构化方法
      1. 基本的结构化方法
      2. 复杂的结构化方法
        1. IDEF体系
        2. Jackson方法
    2. 面向对象方法
      1. 基本的面向对象方法
      2. EUP
    3. 极限编程方法(XP)
    4. 快速原型软件开发方法
    5. 测试驱动的软件开发方法
    6. 形式化方法
      1. 基于规范的开发方法/函数式编程开发方法
      2. 净室(Clean Room)/零缺陷软件开发方法
    7. 面向方面编程的软件开发(AOP)
    8. 产生式编程、开发(GP)
    9. SOA:面向服务的体系结构
    10. MDA/MDSD:模型驱动体系结构/软件开发
  6. 发展史
    1. 最初:无软件工程方法
    2. 结构化方法
      1. 70年代初软件危机:结构化方法(第一个软件工程方法)
      2. 结构化方法继续发展,诞生更多基于分解的分支方法
        1. PAD方法
        2. Jackson方法
        3. 信息建模分析方法
        4. IDEF体系
    3. 面向对象方法
      1. 60年代Simula语言
      2. 70年代末Smalltalk
      3. 面向对象的思想
      4. 面向对象的高级语言
      5. 90年代初:Booch、OOSE、OMT
      6. 97年 Rational公司:UML
      7. Rational:RUP(Rational Unified Process , Rational 统一过程 )
    4. 新的软件工程方法
      1. 快速、高效、轻量级的软件开发
        1. 敏捷方法
          1. 极限编程
          2. 测试驱动开发
          3. 快速原型开发
      2. 可重用 \ 基于构件的开发方法
        1. 面向方面的开发
        2. SOA
        3. MDA / MDSD