第1篇 软件、软件工程与软件工程模式 第1章 软件和软件工程 1.1 软件 1.1.1 软件的含义 1.1.2 软件的特点 1.1.3 软件的种类 1.1.4 软件危机 1.2 软件工程 1.2.1 软件工程的定义 1.2.2 软件工程的发展和问题 第2章 软件工程模式 2.1 瀑布模型 2.2 原型开发模型 2.3 螺旋模型 2.4 四代技术 2.5 混合模型 2.6 面向对象生存期模型 2.7 统一的软件开发过程 2.7.1 用例驱动 2.7.2 以体系结构为中心 2.7.3 迭代和增量开发 2.8 基于构件的软件开发 2.8.1 软件构件技术 2.8.2 软件体系结构 2.8.3 领域工程 2.8.4 再生工程 2.8.5 开放系统技术 2.8.6 软件开发过程 2.8.7 CASE技术 2.8.8 非技术因素 第2篇 软件开发方法 第3章 结构化开发方法 3.1 需求与需求分析 3.1.1 分析任务和分析员 3.1.2 问题域 3.1.3 沟通技术 3.1.4 分析原理 3.1.5 规格说明 3.1.6 规格说明评审 3.2 结构化分析 3.2.1 基本符号及其扩充 3.2.2 结构化分析方法 3.2.3 数据字典 3.3 设计原理 3.3.1 软件设计的重要性 3.3.2 设计过程 3.3.3 设计基本原理 3.3.4 模块化设计 3.3.5 数据设计 3.3.6 体系结构设计 3.3.7 过程设计 3.3.8 设计规格说明 3.4 面向数据流的设计 3.4.1 结构图 3.4.2 数据流的类型 3.4.3 从数据流图到程序结构图的转换 3.4.4 设计步骤 3.4.5 设计的后处理 3.5 面向数据结构的设计 3.5.1 Jackson 的结构图解和图解逻辑 3.5.2 WarnierOrr图 3.5.3 Jackson 开发方法 3.5.4 WarnierOrr 开发方法 3.6 原型开发 3.6.1 原型的定义 3.6.2 原型开发的应用 3.6.3 原型开发的分类 3.6.4 原型开发的活动 3.6.5 原型开发的技术 第4章 面向对象开发方法 4.1 面向对象分析与设计 4.1.1 面向对象方法的基本概念和特征 4.1.2 面向对象分析 4.1.3 面向对象设计 4.2 Booch的面向对象方法 4.2.1 方法 4.2.2 步骤 4.3 OMT对象建模技术 4.3.1 OMT方法使用三种模型 4.3.2 设计过程的三个步骤 4.4 统一的建模语言UML 4.4.1 UML的主要特点 4.4.2 UML的结构 4.4.3 UML的模型图 4.4.4 系统体系结构 4.5 Rational统一过程 4.5.1 动态结构 4.5.2 静态结构 4.5.3 以体系结构为中心的过程 4.5.4 用例驱动的过程 4.5.5 过程工作流 4.6 实例:课程登记系统 4.6.1 问题描述 4.6.2 分析 4.6.3 设计 第5章 形式化开发方法 5.1 Petri网 5.1.1 Petri网的定义 5.1.2 Petri网的基本原理 5.1.3 建模实例 5.1.4 特性分析 5.1.5 Petri网的特性分析方法 5.1.6 改进Petri网及其应用 5.1.7 时间网和随机网 5.1.8 面向对象程序设计方法 5.1.9 实例:应用Petri网实现资源共享 5.2 时态逻辑 5.2.1 线性时态逻辑 5.2.2 计算树逻辑 5.3 Z方法 5.3.1 模式的基本概念 5.3.2 模式运算 5.3.3 模式复合 5.3.4 操作模式 5.3.5 实例:图书馆数据库管理 第3篇 质量与质量保证 第6章 软件质量与质量保证 6.1 软件质量 6.1.1 软件质量定义 6.1.2 软件质量因素 6.2 软件质量保证 6.2.1 质量保证策略 6.2.2 软件质量保证活动 6.3 技术方法的选用 6.3.1 采用或不采用软件工程方法 6.3.2 开发过程的选用 6.3.3 开发方法、语言和工具的选用 6.4 正式技术评审的实施 6.4.1 软件缺陷的费用影响 6.4.2 缺陷的扩大和排除 6.4.3 正式技术评审 6.5 标准的执行 6.5.1 ISO/IEC的软件工程标准体系结构框架 6.5.2 ISO/IEC 12207和ISO/IEC TR 15504 6.5.3 ISO 9000—3 6.5.4 CMM 6.6 修改的控制 6.6.1 软件配置管理 6.6.2 基线 6.6.3 标识 6.6.4 修改控制 6.6.5 配置审计 6.6.6 状态报告 6.7 度量 6.7.1 传统软件的量度 6.7.2 面向对象软件的量度 6.8 SQA小组的活动 6.9 实例:重大失控项目的经验与教训 6.9.1 可预测的和意外的失控 6.9.2 4个项目失控案例 第7章 软件测试 7.1 结构化软件测试 7.1.1 软件测试的目标 7.1.2 软件测试的原则 7.1.3 测试用例设计 7.1.4 软件测试的过程和步骤 7.1.5 纠错技术 7.2 OO软件测试 7.2.1 评审(OOA和OOD) 7.2.2 测试 7.2.3 测试用例设计 7.3 实例:微软测试工作简介 7.3.1 微软开发团队 7.3.2 对软件测试的理解 7.3.3 关于Bug 7.3.4 软件测试方法和辅助工具 7.3.5 相关测试文档 7.3.6 如何与项目经理和开发人员沟通 第8章 软件维护 8.1 软件维护的分类 8.2 软件维护的特点 8.2.1 软件工程与软件维护的关系 8.2.2 维护费用 8.2.3 维护中的问题 8.3 软件的可维护性 8.3.1 控制因素 8.3.2 定量度量 8.3.3 评审 8.4 软件的维护任务 8.4.1 维护机构 8.4.2 编写报告 8.4.3 维护流程 8.4.4 记录保存 8.4.5 评价 8.5 软件维护的副作用 8.5.1 修改代码的副作用 8.5.2 修改数据的副作用 8.5.3 修改文档的副作用 8.6 维护“奇异码” 8.7 预防性维护 第4篇 计划与管理 第9章 软件开发计划与管理 9.1 软件的目的和工作范围 9.2 资源 9.2.1 人力资源 9.2.2 可重用软件资源 9.2.3 环境资源 9.3 成本估算 9.3.1 成本估算方法 9.3.2 经验成本估算模型 9.3.3 软件生产率数据 9.3.4 基于代码行(LOC)的成本估算方法 9.3.5 基于过程的成本估算方法 9.4 风险分析与管理 9.4.1 软件风险 9.4.2 风险识别 9.4.3 风险设计 9.4.4 风险评价 9.4.5 风险的缓解、监控和管理 9.5 进度安排与跟踪 9.5.1 交付日期的确定 9.5.2 进度安排的基本原则 9.5.3 软件工作的特殊性 9.5.4 工作量分配 9.5.5 进度安排 9.5.6 时间表和项目表 9.5.7 进度跟踪 9.6 软件项目组 9.7 项目计划 第5篇 工具与环境 第10章 软件开发工具与环境 10.1 软件开发工具 10.2 软件开发环境 10.2.1 按解决的问题分类 10.2.2 按现有软件开发环境的演化趋向分类 10.2.3 按集成化程度分类 10.3 计算机辅助软件工程 10.3.1 ICASE集成方式 10.3.2 ICASE框架结构 10.3.3 ICASE中心库 10.4 实例:Ada编程支持环境 参考文献