这东西不总结没法学 QAQ

第零章 绪论

  • 软件工程的目的: TQCS
    • T: Time 高效
    • Q: Quality 高质量
    • C: Cost 低成本
    • S: Service 用户满意

第一章 软件与软件工程

软件

什么是软件

  • 计算机系统中的软件: 软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。
  • 程序员眼中的软件:
    • 软件 = 程序 + 数据 + 文档
    • 程序 = 算法 + 数据结构

      软件危机的表现:

  • 开发阶段:
    • 软件开发效率低
    • 软件质量得不到保证
    • 软件开发成本过高
  • 维护阶段:
    • 维护困难, 用户满意度不高

软件工程

软件工程三要素

软件工程采用层次化(分解)的方法, 每个层次都包括过程,方法,工具三要素.

  • 过程:
    贯穿软件开发的各个环节
  • 过程和方法:
    管理者在软件工程过程中通过适当的方法对软件开发的质量、进度、成本进行评估、管理和控制
  • 方法及工具: 技术人员采用相应的方法和工具生成软件工程产品(模型、文档、数据、报告、表格等

软件工程的方法

传统方法, 面向对象方法, 面向服务的方法.

  • 传统软件工程:
    • 结构化程序设计为基础
    • 结构化分析 ->(SA)结构化设计(总体设计、详细设计)->面向过程的编码测试
  • 面向对象软件工程
    • 面向对象程序设计为基础
    • 软件分析与对象抽取->对象详细设计->面向对象的编码->测试
  • 面向服务软件工程
    • 请求响应事件驱动接口方式为基础
    • 分析服务需求->接口设计和封装->服务方法或组件设计开发

粒度越来越大, 效率越来越高, 开发的软件规模越来越大.

软件工程的目标和原则

  • 目标: TQCS
  • 原则: 抽象, 模块化, 信息隐藏, 局部化, 一致性, 完全性, 可验证性.

软件生存周期

三个时期, 七个阶段

  • 软件定义:
    • 问题定义: 确定系统的总体目标
    • 可行性分析: 研究经济, 技术, 操作等的可行性
    • 需求分析: 收集需求, 寻求建模
  • 软件开发:
    • 系统设计: 软件结构设计
    • 编码: 产生源程序清单
    • 测试: 产生软件测试计划和软件测试报告
  • 软件运行:
    • 维护: 修改, 完善, 扩展软件

软件定义: 可行性研究

  • 任务:
    了解用户要求和现实环境,从技术、经济、市场等方面研究并论证开发该软件系统的可行性
  • 最主要内容:
    • 技术可行性:
      当前的软件开发方法和工具能否支持需求的实现;
    • 操作可行性:
      用户能否在特定的环境下使用这个软件
    • 经济可行性:
      开发和使用, 维护这个软件的成本能否被用户所接受

软件定义: 需求分析

  • 任务:
    确定用户对软件系统的需求
  • 主要内容:
    • 功能需求:
      软件必须要完成的功能
    • 性能需求:
      软件的安全性, 可靠性, 可维护性, 精度, 错误处理, 适应性, 用户培训
    • 运行环境约束:
      待开发的软件产品必须满足的环境要求
  • 需求分析过程:
    • 方法:
      • 面向数据流的分析方法
      • 面向数据的分析方法
      • 面向对象的分析方法
      • 抽象, 问题分解, 快速原型, 多视点
    • 工具:
      • 表示工具: 数据流图, 数据字典, UML图等
      • 软件工具: Rational Rose, WitClass, VisualModel等
    • 阶段性产品:
      • 软件需求规格说明书 SRS– 给设计人员
      • 用户手册概要 – 给用户

软件开发: 概要设计

  • 任务:
    根据SRS建立目标软件系统的总体结构, 设计全局数据库和数据结构, 固定设计约束, 指定组装测试计划等等
  • 方法:
    • 自顶向下, 逐步求精, 抽象, 模块化, 局部化, 信息隐藏
    • 坚持功能模块内部紧耦合, 功能模块之间松耦合的原则
    • 坚持与 SRS 的一致性
  • 工具:
    • 面向数据流
    • 面向数据
    • 面向对象
  • 阶段性产品:
    • 概要设计规格说明书
    • 数据库或数据结构设计说明书
    • 集成测试计划

软件开发: 详细设计

  • 任务:
    细化概要设计所生成的各个模块, 并详细描述程序模块的内部细节(算法,数据结构等),形成可编程的程序模块,制订单元测试计划
  • 阶段性产品:
    • 详细设计规格说明书
    • 单元测试计划

软件开发: 实现

  • 任务:
    根据详细设计规格说明书编写源程序,并对程序进行调试、单元测试、系统集成,验证程序与详细设计文档的 一致性
  • 方法:
    • 以详细设计规格说明书为依据, 基于某种程序设计语言进行编码
    • 结构化程序设计
    • 面向对象程序设计
  • 阶段产品:
    源程序代码

软件开发: 组装测试

  • 任务:
    组装测试应满足概要设计的要求
  • 途径:
    • 测试模块连接的正确性
    • 测试系统或子系统的I/O
    • 测试系统的功能和性能
  • 产品:
    • 满足概要设计要求的程序
    • 组装测试报告

软件开发: 确认测试

  • 任务:
    根据软件需求规格说明书,测试软件系统是否满足用户的需求
  • 方法:
    用户参与, 依据 SRS 进行确认测试
  • 工具:
    专用测试工具
  • 阶段性产品
    可供用户使用的软件产品(文档, 源程序)

软件运行: 维护

  • 目的:
    使软件不断进化以满足客户的需求变化
  • 工作内容:
    • 正确性维护
    • 扩充性维护
    • 适应性维护
  • 阶段性产品
    • 软件产品的新版本

软件开发过程与测试的关系

V图:

1
2
3
4
5
6
7
8
9
可行性研究 <------------------------->  运行
\ /
需求分析 <-------------------> 确认测试
\ /
概要设计 <--------------> 组装测试
\ /
详细设计 <-------> 单元测试
\ /
编码与调试

第二章 软件过程

软件过程模型

  • 软件过程模型是软件开发全过程, 软件开发活动以及它们之间关系的结构框架
  • 软件项目的管理提供里程碑进度表
  • 为软件开发提供原则方法

五类软件开发过程模型:

  1. 瀑布模型: 以软件需求完全确定为前提
  2. 原型模型, 螺旋模型, 增量模型, 并发开发模型: 在软件开发初期只能提供基本需求所采用的渐进式开发模型
  3. 变换模型: 以形式化开发方法为基础
  4. 基于构件的开发过程
  5. 敏捷开发过程
  6. 统一开发过程 RUP

瀑布模型

  • 软件开发过程与软件生命周期是一致的
  • 相邻二阶段之间存在因果关系
  • 需对阶段性产品进行评审

  • 优点:
    • 使软件开发过程可以在分析、设计、编码、测试和维护的框架下进行
    • 系统性、可控性,克服了软件开发的随意性
  • 缺点:
    • 项目开始阶段很难精确的提出产品需求, 修改需求十分普遍
    • 项目开发晚期才能得到程序的运行版本, 这时修改软件需求和开发中的错误代价很大
    • 经常发生开发小组人员堵塞状态, 特别是项目的开始和结束.

快速原型模型

强调快速, 采用基于构件的软件开发方法, 进量缩短软件开发周期, 不易采用过多的新技术.

  • 优点:
    • 帮助用户和开发人员理解需求
    • 产生的正式需求文档, 是软件开发的基础
    • 如果开发的原型是可运行的, 它的若干高质量的程序片段和开发工具可用于工作程序的开发.
    • 原型的开发和评审是系统分析员和用户/客户共同参与的迭代过程, 每个迭代循环都是线性过程.

快速应用开发模型(RAD)的开发过程

  • 缺点:
    • 需要足够的人力资源以建立足够的原型组
    • RAD模型要求开发者和客户在一段时间内共同完成原型系统的开发, 任何一方没有实现承诺都会导致原型开发的失败.
    • 如果系统难以模块化, RAD模型所需构件就有问题; 难以实现高性能
    • 不适合采用很多新技术

螺旋模型

螺旋模型 == 瀑布模型(系统化) + 原型(迭代)
适用于计算机软件整个生命周期

  • 优点:
    • 符合人们认识现实世界和软件开发的客观规律
    • 支持整个生命周期
    • 保持瀑布模型的的系统系, 阶段性
    • 利用原型评估降低开发风险
    • 开发者和用户共同参于, 尽早发现软件中的错误
    • 不断推出和完善软件版本, 有助于需求变化, 获取用户需求, 加强对需求的理解

增量模型

  • 特点:
    • 适合小而可用的软件
    • 在前面增量的基础上开发后面的增量
    • 每个增量的开发可用瀑布或快速原型模型
    • 迭代的思路

并发开发模型

所有活动并发存在, 但处于不同的状态.

形式化开发

类似瀑布模型的软件开发方法, 用形式化数学转换将系统描述换成一个可执行程序.

需求定义(Requirements definition) -> 形式化描述(Formal specification) -> 形式变换(Formal transformation) -> 集成和系统测试(Integration and system testing)

  • 与瀑布模型的本质区别
    • 软件需求被描述成一个用数学符号表达的详细的形式化描述
    • 设计, 实现和单元测试有转换过程替代. 在转换的过程中, 每个步骤增加细节, 直到形式化描述被转换成一个可执行程序

构建集成模型

  • 特点:
    • 融合了螺旋模型的特征
    • 基于构件库
    • 支持软件开发的迭代方法
    • 软件重用
    • 可缩短约70%的开发周期, 降低84%的项目成本
    • 代表: 统一软件开发过程(RUP)

第四代技术

  • 四代语言: 基于大型数据库管理系统开发的程序设计语言,称为四代语言4GL
  • 四代技术: 以四代语言4GL为核心的软件开发技术称为四代技术4GT

软件能力成熟度模型 CMM

CMM的能力成熟度共分五级,L1初始级、L2可重复级、L3己定义级、L4己管理级、L5优化级

成熟度等级 关键过程域
L2可重复级 需求管理 软件项目计划 项目跟踪和监督 分包合同管理 软件质量保证 软件配置管理
L3已管理级 组织的过程焦点 组织的过程定义 培训大纲 集成化软件管理 软件产品工程 组间协调 同行评审
L4已管理级 定量的过程管理 软件质量管理
L5优化级 缺陷的预防 技术更新管理 过程变更管理

阶段式模型

成熟度等级 24个过程域
L2可重复级 需求管理 项目计划 配置管理 项目监督和控制 供应商合同管理 度量和分析 过程和产品质量保证
L3己定义级 需求开发 技术解决方案 产品集成、验证、确认 组织级过程焦点 组织级过程定义 组织级培训 集成化项目管理 风险管理 集成化的团队 决策分析和解决方案 组织级集成环境
L4己管理级 组织级过程性能 项目定量管理
L5 优化级 组织级改革和实施 因果分析和解决方案

连续式模型

连续式分组 24个过程域
过程管理 组织级过程焦点 组织级过程定义 组织级培训 组织级过程性能 组织级改革和实施
项目管理 项目计划 项目监督和控制 供应商合同管理 集成化项目管理 风险管理 集成化的团队 项目定量管理
工程 需求管理 需求开发 技术解决方案 产品集成 验证 确认
支持 配置管理 度量和分析 过程和产品质量保证 决策分析和解决方案 组织级集成环境 因果分析和解决方案

第四章 需求分析过程

需求分析基础

  • 任务: 形成需求规格说明(是软件设计, 实现, 测试, 维护的基础), 描述系统信息, 功能和行为.
  • 技术和方法: 初步需求获取技术, 需求建模技术, 快速原型技术, 问题抽象, 问题分解与多视点分析.

用户需求, 系统需求和软件设计描述:

  • 用户需求: 用自然语言和图标描述, 说明系统必须提供哪些服务, 系统运行要受哪些约束.
  • 系统需求: 详细说明系统将要提供的服务以及系统受到的约束, 精确的描述软件的功能, 系统买房和软件开发者鉴定合同的重要内容.
  • 软件设计描述: 在系统需求的基础上, 加入更详细的内容, 构成软件设计活动的概要描述, 是软件设计和实现的基础.

需求分析三阶段

  • 问题分析
  • 需求描述
  • 需求评审

初步需求获取技术

  1. 访谈与会议.
  2. 考察用户软件或其子系统业务流程.
  3. 联合小组

需求建模

建立软件模型是分析活动的关键.

分析问题的方法

  • 抽象: 关注一般问题的解决途径, 以此指导特殊问题.
  • 分解: 自顶向下, 子问题内部紧耦合, 子问题之间松耦合.
  • 视点分解法: 各个角度理解分析问题, 再综合
  • 需求分析视点: 系统, 用户, 信息, 功能, 行为等

需求分析建模

需求分析方法

结构化分析方法

  • 核心: 数据字典
    描述软件工程项目的所有数据对象
  • 中间层:
    • 实体-关系图: 描述数据对象之间的关系
    • 数据流图(功能建模的基础): 系统或子系统对数据实施的变换, 变换的功能, 提供信息分析的信息
    • 状态-变迁图(行为建模的基础): 系统的状态以及状态变迁的方式
  • 最外层:
    • 数据对象: 表示实体-关系图(E/R图)中每个数据对象的属性
    • 加工规格说明 (PSPEC): 描述数据流图的每个功能
    • 控制规格说明 (CSPEC): 描述软件控制的附加信息

面向对象的分析方法

需求分析模型

数据建模

实体-关系图(E/R图)是数据模型的基础, 它描述数据对象, 属性, 及其关系.

数据对象, 属性和关系
  • 数据对象: 封装如事件、行为、角色、组织、地点、结构等外部实体的数据部分.
  • 数据属性: 用标识符、符号串和值标识,描述数据对象的性质.
  • 数据关系: 数据对象按照某种关系相互连接
实体-关系图(E/R图)

功能建模

数据流图与数据字典
  • 数据流图: 描述数据流, 加工, 数据源以及外部实体.
  • 数据字典: 由数据条目组成, 描述, 组织和管理数据流图的数据流、加工、数据源及外部实体.
数据流图的实时系统扩充
  • 实时系统: 系统与现实世界实体交互具有时间特性.

传统数据流方法不能胜任实时系统的需求分析任务。为开发实时嵌入式系统,必须对传统方法进行扩充

  • 系统扩充:
    • Ward & Mellor: 引入实时图形记号.
    • Hatley & Pirbhai: 引进状态加工图描述系统的外部行为.

行为建模

状态-变迁图通过描述状态以及导致系统改变状态的事件来表示系统的行为, 每个状态代表系统的一种行为模式.

第五章 软件设计过程

软件设计基础