本书是20多年来一直在软件工程的教学、科研和应用中享有盛誉的经典著作—《软件工程:实践者的研究方法》(Software Engineering: A Practitioner誷 Approach)的第5版,全面介绍了软件工程学科的概念和方法。本书从软件工程的概要介绍开始,进而介绍了管理软件项目、传统软件工程方法、面向对象软件工程方法以及软件工程的高级课题,包括传统的分析、设计、测试和度量,面向对象的分析、设计、测试和度量,形式化方法、净室软件工程、基于构件的方法、客户/服务器软件工程、Web工程、再工程和CASE等。最后,还对软件工程学科的未来发展做了预测和展望。\r\n 本书是计算机及相关专业本科生和研究生的理想教材,同时也是软件工程领域技术人员的优秀参考资料。
出版者的话\r\n专家指导委员会\r\n译者序\r\n前言\r\n作者简介\r\n本书使用说明\r\n\r\n第一部分 产品和过程\r\n\r\n第1章 产品 \r\n\r\n1.1 软件角色的演化 \r\n1.2 软件 \r\n1.2.1 软件特征 \r\n1.2.2 软件应用 \r\n1.3 软件:地平线上的危机 \r\n1.4 软件神话 \r\n1.5 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第2章 过程 \r\n\r\n2.1 软件工程:一种层次化技术 \r\n2.1.1 过程、方法和工具 \r\n2.1.2 软件工程的一般视图 \r\n2.2 软件过程 \r\n2.3 软件过程模型 \r\n2.4 线性顺序模型 \r\n2.5 原型实现模型 \r\n2.6 RAD模型 \r\n2.7 演化软件过程模型 \r\n2.7.1 增量模型 \r\n2.7.2 螺旋模型 \r\n2.7.3 WINWIN螺旋模型 \r\n2.7.4 并发开发模型 \r\n2.8 基于构件的开发 \r\n2.9 形式化方法模型 \r\n2.10 第四代技术 \r\n2.11 过程技术 \r\n2.12 产品和过程 \r\n2.13 小结 \r\n参考文献\r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第二部分 管理软件项目\r\n\r\n第3章 项目管理的概念 \r\n\r\n3.1 管理的谱系 \r\n3.1.1 人员 \r\n3.1.2 产品 \r\n3.1.3 过程 \r\n3.1.4 项目 \r\n3.2 人员 \r\n3.2.1 项目参与者 \r\n3.2.2 项目组负责人 \r\n3.2.3 软件项目组 \r\n3.2.4 协调和通信问题 \r\n3.3 产品 \r\n3.3.1 软件范围 \r\n3.3.2 问题分解 \r\n3.4 过程 \r\n3.4.1 合并产品和过程 \r\n3.4.2 过程分解 \r\n3.5 项目 \r\n3.6 W5HH原则 \r\n3.7 关键实践 \r\n3.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第4章 软件过程和项目度量 \r\n\r\n4.1 测量、度量和指标 \r\n4.2 过程和项目领域中的度量 \r\n4.2.1 过程度量和软件过程改善 \r\n4.2.2 项目度量 \r\n4.3 软件测度 \r\n4.3.1 面向规模的度量 \r\n4.3.2 面向功能的度量 \r\n4.3.3 扩展的功能点度量 \r\n4.4 调和不同的度量方法 \r\n4.5 软件质量度量 \r\n4.5.1 影响质量的因素概述 \r\n4.5.2 测量质量 \r\n4.5.3 缺陷排除效率 \r\n4.6 在软件工程过程中集成度量\r\n4.6.1 支持软件度量的论点\r\n4.6.2 建立基线\r\n4.6.3 度量收集、计算和评估\r\n4.7 管理变化:统计过程控制 \r\n4.8 小型组织的度量 \r\n4.9 建立软件度量计划 \r\n4.10 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第5章 软件项目计划 \r\n\r\n5.1 对估算的观察 \r\n5.2 项目计划目标\r\n5.3 软件范围\r\n5.3.1 获取定义软件范围所需的信息\r\n5.3.2 可行性\r\n5.3.3 一个范围定义的例子\r\n5.4 资源\r\n5.4.1 人力资源\r\n5.4.2 可复用软件资源\r\n5.4.3 环境资源\r\n5.5 软件项目估算\r\n5.6 分解技术\r\n5.6.1 软件规模估算 \r\n5.6.2 基于问题的估算 \r\n5.6.3 一个基于LOC估算的例子 \r\n5.6.4 一个基于FP估算的例子\r\n5.6.5 基于过程的估算\r\n5.6.6 一个基于过程估算的例子\r\n5.7 经验估算模型\r\n5.7.1 估算模型的结构\r\n5.7.2 COCOMO模型\r\n5.7.3 软件方程式\r\n5.8 自行开发或购买的决策\r\n5.8.1 创建决策树\r\n5.8.2 外包 \r\n5.9 自动估算工具 \r\n5.10 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第6章 风险分析和管理 \r\n\r\n6.1 被动和主动的风险策略 \r\n6.2 软件风险 \r\n6.3 风险识别 \r\n6.3.1 评估整体项目风险 \r\n6.3.2 风险因素和驱动因子 \r\n6.4 风险预测 \r\n6.4.1 建立风险表 \r\n6.4.2 评估风险影响 \r\n6.4.3 风险评估 \r\n6.5 风险求精 \r\n6.6 风险缓解、监控和管理 \r\n6.7 安全性风险和危险 \r\n6.8 RMMM计划 \r\n6.9 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第7章 项目进度安排及跟踪 \r\n\r\n7.1 基本概念 \r\n7.1.1 关于“延迟”的评注 \r\n7.1.2 基本原则 \r\n7.2 人员与工作量之间的关系 \r\n7.2.1 一个例子 \r\n7.2.2 一个经验关系 \r\n7.2.3 工作量分配 \r\n7.3 为软件项目定义任务集合 \r\n7.3.1 严格度 \r\n7.3.2 定义适应准则 \r\n7.3.3 计算任务集合选择因子的值 \r\n7.3.4 解释TSS值并选择任务集合 \r\n7.4 选择软件工程任务 \r\n7.5 主要任务的求精 \r\n7.6 定义任务网络 \r\n7.7 进度安排 \r\n7.7.1 时间表 \r\n7.7.2 跟踪进度 \r\n7.8 获得值分析 \r\n7.9 错误跟踪 \r\n7.10 项目计划 \r\n7.11 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第8章 软件质量保证 \r\n\r\n8.1 质量概念 \r\n8.1.1 质量 \r\n8.1.2 质量控制 \r\n8.1.3 质量保证 \r\n8.1.4 质量成本 \r\n8.2 质量运动 \r\n8.3 软件质量保证 \r\n8.3.1 背景 \r\n8.3.2 SQA活动 \r\n8.4 软件评审 \r\n8.4.1 软件缺陷对成本的影响 \r\n8.4.2 缺陷的放大和消除 \r\n8.5 正式技术评审 \r\n8.5.1 评审会议 \r\n8.5.2 评审报告和记录保存 \r\n8.5.3 评审指导原则 \r\n8.6 SQA的形式化方法 \r\n8.7 统计软件质量保证 \r\n8.8 软件可靠性 \r\n8.8.1 可靠性和可用性的测量 \r\n8.8.2 软件安全性 \r\n8.9 软件的错误防范 \r\n8.10 ISO 9000质量标准 \r\n8.10.1 质量保证系统的ISO方法 \r\n8.10.2 ISO 9001 标准 \r\n8.11 SQA计划 \r\n8.12 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第9章 软件配置管理 \r\n\r\n9.1 软件配置管理 \r\n9.1.1 基线 \r\n9.1.2 软件配置项 \r\n9.2 SCM过程 \r\n9.3 软件配置中对象的标识 \r\n9.4 版本控制 \r\n9.5 变更控制 \r\n9.6 配置审计 \r\n9.7 状态报告 \r\n9.8 SCM标准 \r\n9.9 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第三部分 传统软件工程方法\r\n\r\n第10章 系统工程 \r\n\r\n10.1 基于计算机的系统 \r\n10.2 系统工程层次结构 \r\n10.2.1 系统建模 \r\n10.2.2 系统仿真 \r\n10.3 业务过程工程:概述 \r\n10.4 产品工程:概述 \r\n10.5 需求工程 \r\n10.5.1 需求诱导 \r\n10.5.2 需求分析和谈判 \r\n10.5.3 需求规约 \r\n10.5.4 系统建模 \r\n10.5.5 需求确认 \r\n10.5.6 需求管理 \r\n10.6 系统建模 \r\n10.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第11章 分析的概念和原则 \r\n\r\n11.1 需求分析 \r\n11.2 软件的需求诱导 \r\n11.2.1 过程的启动 \r\n11.2.2 便利的应用规约技术 \r\n11.2.3 质量功能部署 \r\n11.2.4 use-case \r\n11.3 分析原则 \r\n11.3.1 信息域 \r\n11.3.2 建模 \r\n11.3.3 划分 \r\n11.3.4 要素视图和实现视图 \r\n11.4 软件原型实现 \r\n11.4.1 选择原型实现方法 \r\n11.4.2 原型实现方法和工具 \r\n11.5 规约 \r\n11.5.1 规约原则 \r\n11.5.2 表示 \r\n11.5.3 软件需求规约 \r\n11.6 规约评审 \r\n11.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第12章 分析建模 \r\n\r\n12.1 简史 \r\n12.2 分析模型的元素 \r\n12.3 数据建模 \r\n12.3.1 数据对象、属性和关系 \r\n12.3.2 基数和形态 \r\n12.3.3 实体-关系图 \r\n12.4 功能建模和信息流 \r\n12.4.1 数据流图 \r\n12.4.2 针对实时系统的扩展 \r\n12.4.3 Ward和Mellor扩展 \r\n12.4.4 Hatley和Pirbhai扩展 \r\n12.5 行为建模 \r\n12.6 结构化分析的技巧 \r\n12.6.1 创建实体-关系图 \r\n12.6.2 创建数据流模型 \r\n12.6.3 创建控制流模型 \r\n12.6.4 控制规约 \r\n12.6.5 加工规约 \r\n12.7 数据字典 \r\n12.8 其他传统分析方法的概述 \r\n12.9 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第13章 设计的概念和原则 \r\n\r\n13.1 软件设计和软件工程 \r\n13.2 设计过程 \r\n13.2.1 设计和软件质量 \r\n13.2.2 软件设计的演化 \r\n13.3 设计原则 \r\n13.4 设计概念 \r\n13.4.1 抽象 \r\n13.4.2 求精 \r\n13.4.3 模块化 \r\n13.4.4 软件体系结构 \r\n13.4.5 控制层次 \r\n13.4.6 结构划分 \r\n13.4.7 数据结构 \r\n13.4.8 软件过程 \r\n13.4.9 信息隐蔽 \r\n13.5 有效的模块设计 \r\n13.5.1 功能独立性 \r\n13.5.2 内聚 \r\n13.5.3 耦合 \r\n13.6 针对有效模块化的设计启发 \r\n13.7 设计模型 \r\n13.8 设计文档 \r\n13.9 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第14章 体系结构设计 \r\n\r\n14.1 软件体系结构 \r\n14.1.1 什么是体系结构 \r\n14.1.2 为什么体系结构重要 \r\n14.2 数据设计 \r\n14.2.1 数据建模、数据结构、数据库和数据仓库 \r\n14.2.2 构件级的数据设计 \r\n14.3 体系结构风格 \r\n14.3.1 风格和模式的简略分类 \r\n14.3.2 组织和精化 \r\n14.4 分析可选的体系结构设计 \r\n14.4.1 一种体系结构权衡分析方法 \r\n14.4.2 体系结构设计的定量指导 \r\n14.4.3 体系结构复杂性 \r\n14.5 映射需求到软件体系结构 \r\n14.5.1 变换流 \r\n14.5.2 事务流 \r\n14.6 变换映射 \r\n14.6.1 一个例子 \r\n14.6.2 设计步骤 \r\n14.7 事务映射 \r\n14.7.1 一个例子 \r\n14.7.2 设计步骤 \r\n14.8 精化体系结构设计 \r\n14.9 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第15章 用户界面设计 \r\n\r\n15.1 黄金规则 \r\n15.1.1 置用户于控制之下 \r\n15.1.2 减少用户的记忆负担 \r\n15.1.3 保持界面一致 \r\n15.2 用户界面设计 \r\n15.2.1 界面设计模型 \r\n15.2.2 用户界面设计过程 \r\n15.3 任务分析和建模 \r\n15.4 界面设计活动 \r\n15.4.1 定义界面对象和动作 \r\n15.4.2 设计问题 \r\n15.5 实现工具 \r\n15.6 设计评估 \r\n15.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第16章 构件级设计 \r\n\r\n16.1 结构化程序设计 \r\n16.1.1 图形设计符号 \r\n16.1.2 表格设计符号 \r\n16.1.3 程序设计语言 \r\n16.1.4 一个PDL的例子 \r\n16.2 设计符号的比较 \r\n16.3 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第17章 软件测试技术 \r\n\r\n17.1 软件测试基础 \r\n17.1.1 测试目标 \r\n17.1.2 测试原则 \r\n17.1.3 可测试性 \r\n17.2 测试案例设计 \r\n17.3 白盒测试 \r\n17.4 基本路径测试 \r\n17.4.1 流图符号 \r\n17.4.2 环复杂度 \r\n17.4.3 导出测试案例 \r\n17.4.4 图矩阵 \r\n17.5 控制结构测试 \r\n17.5.1 条件测试 \r\n17.5.2 数据流测试 \r\n17.5.3 循环测试 \r\n17.6 黑盒测试 \r\n17.6.1 基于图的测试方法 \r\n17.6.2 等价划分 \r\n17.6.3 边界值分析 \r\n17.6.4 比较测试 \r\n17.6.5 正交数组测试 \r\n17.7 针对专门的环境、体系结构和应用的测试 \r\n17.7.1 测试GUI \r\n17.7.2 客户/服务器体系结构的测试 \r\n17.7.3 测试文档和帮助设施 \r\n17.7.4 实时系统测试 \r\n17.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第18章 软件测试策略 \r\n\r\n18.1 软件测试的策略途径 \r\n18.1.1 验证和确认 \r\n18.1.2 软件测试的组织 \r\n18.1.3 一种软件测试策略 \r\n18.1.4 测试完成的标准 \r\n18.2 策略问题 \r\n18.3 单元测试 \r\n18.3.1 单元测试考虑 \r\n18.3.2 单元测试规程 \r\n18.4 集成测试 \r\n18.4.1 自顶向下集成 \r\n18.4.2 自底向上集成 \r\n18.4.3 回归测试 \r\n18.4.4 烟幕测试 \r\n18.4.5 关于集成测试的讨论 \r\n18.4.6 集成测试文档 \r\n18.5 确认测试 \r\n18.5.1 确认测试的标准 \r\n18.5.2 配置评审 \r\n18.5.3 a和b测试 \r\n18.6 系统测试 \r\n18.6.1 恢复测试 \r\n18.6.2 安全测试 \r\n18.6.3 应力测试 \r\n18.6.4 性能测试 \r\n18.7 调试的艺术 \r\n18.7.1 调试过程 \r\n18.7.2 心理因素 \r\n18.7.3 调试方法 \r\n18.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第19章 软件的技术度量 \r\n\r\n19.1 软件质量 \r\n19.1.1 McCall的质量因素 \r\n19.1.2 FURPS \r\n19.1.3 ISO 9126质量因素 \r\n19.1.4 到量化视图的变迁 \r\n19.2 软件技术度量框架 \r\n19.2.1 技术度量的挑战 \r\n19.2.2 测度原则 \r\n19.2.3 有效软件度量的属性 \r\n19.3 分析模型的度量 \r\n19.3.1 基于功能的度量 \r\n19.3.2 bang度量 \r\n19.3.3 规约质量的度量 \r\n19.4 设计模型的度量 \r\n19.4.1 体系结构设计度量 \r\n19.4.2 构件级设计度量 \r\n19.4.3 界面设计度量 \r\n19.5 源代码度量 \r\n19.6 对测试的度量 \r\n19.7 对维护的度量 \r\n19.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第四部分 面向对象软件工程\r\n\r\n第20章 面向对象的概念和原理 \r\n\r\n20.1 面向对象范型 \r\n20.2 面向对象概念 \r\n20.2.1 类和对象 \r\n20.2.2 属性 \r\n20.2.3 操作、方法和服务 \r\n20.2.4 消息 \r\n20.2.5 封装、继承和多态 \r\n20.3 标识对象模型的元素 \r\n20.3.1 标识类和对象 \r\n20.3.2 刻画属性 \r\n20.3.3 定义操作 \r\n20.3.4 完成对象定义 \r\n20.4 面向对象软件项目的管理 \r\n20.4.1 OO的公共过程框架 \r\n20.4.2 面向对象项目度量和估算 \r\n20.4.3 一种OO估算和进度安排方法 \r\n20.4.4 跟踪面向对象项目的进展 \r\n20.5 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第21章 面向对象分析 \r\n\r\n21.1 面向对象分析 \r\n21.1.1 传统方法和OO方法 \r\n21.1.2 OOA概述 \r\n21.1.3 统一的OOA方法 \r\n21.2 领域分析 \r\n21.2.1 复用和领域分析 \r\n21.2.2 领域分析过程 \r\n21.3 OO分析模型的类属成分 \r\n21.4 OOA过程 \r\n21.4.1 use-case \r\n21.4.2 类-责任-协作者建模 \r\n21.4.3 定义结构和层次 \r\n21.4.4 定义主题和子系统 \r\n21.5 对象-关系模型 \r\n21.6 对象-行为模型 \r\n21.6.1 通过use-case标识事件 \r\n21.6.2 状态表示 \r\n21.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第22章 面向对象设计 \r\n\r\n22.1 面向对象系统的设计 \r\n22.1.1 传统方法和OO方法 \r\n22.1.2 设计问题 \r\n22.1.3 OOD概述 \r\n22.1.4 统一的OOD方法 \r\n22.2 系统设计过程 \r\n22.2.1 划分分析模型 \r\n22.2.2 并发性和子系统分配 \r\n22.2.3 任务管理构件 \r\n22.2.4 用户界面构件 \r\n22.2.5 数据管理构件 \r\n22.2.6 资源管理构件 \r\n22.2.7 子系统间通信 \r\n22.3 对象设计过程 \r\n22.3.1 对象描述 \r\n22.3.2 设计算法和数据结构 \r\n22.3.3 程序构件和接口 \r\n22.4 设计模式 \r\n22.4.1 描述设计模式 \r\n22.4.2 在设计中使用设计模式 \r\n22.5 面向对象程序设计 \r\n22.6 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第23章 面向对象测试 \r\n\r\n23.1 扩大测试的视角 \r\n23.2 测试OOA和OOD模型 \r\n23.2.1 OOA和OOD模型的正确性 \r\n23.2.2 OOA和OOD模型的一致性 \r\n23.3 面向对象测试策略 \r\n23.3.1 OO语境中的单元测试 \r\n23.3.2 OO语境中的集成测试 \r\n23.3.3 OO语境中的确认测试 \r\n23.4 OO软件的测试案例设计 \r\n23.4.1 OO概念的测试案例设计的含义 \r\n23.4.2 传统测试案例设计方法的可用性 \r\n23.4.3 基于故障的测试 \r\n23.4.4 OO程序设计对测试的影响 \r\n23.4.5 测试案例和类层次 \r\n23.4.6 基于场景的测试设计 \r\n23.4.7 测试表层结构和深层结构 \r\n23.5 在类级别可用的测试方法 \r\n23.5.1 对OO类的随机测试 \r\n23.5.2 在类级别的划分测试 \r\n23.6 类间测试案例设计 \r\n23.6.1 多个类测试 \r\n23.6.2 从行为模型导出的测试 \r\n23.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第24章 面向对象系统的技术度量 \r\n\r\n24.1 面向对象度量的目的 \r\n24.2 面向对象度量的识别特征 \r\n24.2.1 局部化 \r\n24.2.2 封装 \r\n24.2.3 信息隐蔽 \r\n24.2.4 继承 \r\n24.2.5 抽象 \r\n24.3 对OO设计模型的度量 \r\n24.4 面向类的度量 \r\n24.4.1 CK度量套件 \r\n24.4.2 Lorenz和Kidd建议的度量 \r\n24.4.3 MOOD度量套件 \r\n24.5 面向操作的度量 \r\n24.6 对面向对象测试的度量 \r\n24.7 对面向对象项目的度量 \r\n24.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第五部分 软件工程高级课题\r\n\r\n第25章 形式化方法 \r\n\r\n25.1 基本概念 \r\n25.1.1 欠形式化方法的不足 \r\n25.1.2 软件开发中的数学\r\n25.1.3 形式化方法概念 \r\n25.2 数学预备知识 \r\n25.2.1 集合和构造性规约 \r\n25.2.2 集合运算符 \r\n25.2.3 逻辑运算符 \r\n25.2.4 序列 \r\n25.3 应用数学符号描述形式规约 \r\n25.4 形式规约语言 \r\n25.5 用Z表示一个软件构件的例子 \r\n25.6 形式化方法的十条戒律 \r\n25.7 形式化方法—未来之路 \r\n25.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第26章 净室软件工程 \r\n\r\n26.1 净室方法 \r\n26.1.1 净室策略 \r\n26.1.2 什么使得净室独特 \r\n26.2 功能规约 \r\n26.2.1 黑盒规约 \r\n26.2.2 状态盒规约 \r\n26.2.3 清晰盒规约 \r\n26.3 净室设计 \r\n26.3.1 设计求精和验证 \r\n26.3.2 设计验证的优点 \r\n26.4 净室测试 \r\n26.4.1 统计使用测试 \r\n26.4.2 认证 \r\n26.5 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第27章 基于构件的软件工程 \r\n\r\n27.1 基于构件的系统的开发 \r\n27.2 CBSE过程 \r\n27.3 领域工程 \r\n27.3.1 领域分析过程 \r\n27.3.2 特征化函数\r\n27.3.3 结构建模和结构点 \r\n27.4 基于构件的开发 \r\n27.4.1 构件鉴定、适应性修改和组装 \r\n27.4.2 构件工程 \r\n27.4.3 为了复用的分析和设计 \r\n27.5 分类和检索构件 \r\n27.5.1 描述可复用构件 \r\n27.5.2 复用环境 \r\n27.6 CBSE经济学 \r\n27.6.1 对质量、生产率和成本的影响 \r\n27.6.2 使用结构点的成本分析 \r\n27.6.3 复用度量 \r\n27.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第28章 客户/服务器软件工程 \r\n\r\n28.1 客户/服务器系统的结构 \r\n28.1.1 C/S系统的软件构件 \r\n28.1.2 软件构件的分布 \r\n28.1.3 分布应用子系统的指导原则 \r\n28.1.4 连接C/S软件子系统 \r\n28.1.5 中间件和对象请求代理体系结构 \r\n28.2 C/S系统的软件工程 \r\n28.3 分析建模问题 \r\n28.4 C/S系统的设计 \r\n28.4.1 客户/服务器系统的体系结构设计 \r\n28.4.2 应用软件的传统设计方法 \r\n28.4.3 数据库设计 \r\n28.4.4 一种设计方法的概述 \r\n28.4.5 加工设计的迭代 \r\n28.5 测试问题 \r\n28.5.1 整体C/S测试策略 \r\n28.5.2 C/S测试策略 \r\n28.6 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第29章 Web工程 \r\n\r\n29.1 基于Web的应用的属性 \r\n29.1.1 质量属性 \r\n29.1.2 技术 \r\n29.2 WebE过程 \r\n29.3 WebE框架 \r\n29.4 表示/分析基于Web的系统 \r\n29.4.1 表示 \r\n29.4.2 分析 \r\n29.5 基于Web的应用的设计 \r\n29.5.1 体系结构设计 \r\n29.5.2 导航设计 \r\n29.5.3 界面设计 \r\n29.6 测试基于Web的应用 \r\n29.7 管理问题 \r\n29.7.1 WebE队伍 \r\n29.7.2 项目管理 \r\n29.7.3 针对WebE的SCM问题 \r\n29.8 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第30章 再工程 \r\n\r\n30.1 业务过程再工程 \r\n30.1.1 业务过程 \r\n30.1.2 业务过程再工程的原则 \r\n30.1.3 BPR模型 \r\n30.1.4 几句警告 \r\n30.2 软件再工程 \r\n30.2.1 软件维护 \r\n30.2.2 软件再工程过程模型 \r\n30.3 逆向工程 \r\n30.3.1 理解处理的逆向工程 \r\n30.3.2 理解数据的逆向工程 \r\n30.3.3 用户界面的逆向工程 \r\n30.4 重构 \r\n30.4.1 代码重构 \r\n30.4.2 数据重构 \r\n30.5 正向工程 \r\n30.5.1 客户/服务器体系结构的正向工程 \r\n30.5.2 面向对象体系结构的正向工程 \r\n30.5.3 用户界面的正向工程 \r\n30.6 再工程经济学 \r\n30.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第31章 计算机辅助软件工程 \r\n\r\n31.1 什么是CASE \r\n31.2 CASE的构造积木块 \r\n31.3 CASE工具分类 \r\n31.4 集成CASE环境 \r\n31.5 集成体系结构 \r\n31.6 CASE中心存储库 \r\n31.6.1 在I-CASE中中心存储库的作用 \r\n31.6.2 特征和内容 \r\n31.7 小结 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n\r\n第32章 未来之路 \r\n\r\n32.1 重提软件的重要性 \r\n32.2 变化的范围 \r\n32.3 人以及他们建造系统的方式 \r\n32.4 “新”的软件工程过程 \r\n32.5 表示信息的新模式 \r\n32.6 技术作为推动力 \r\n32.7 结束语 \r\n参考文献 \r\n习题与思考题 \r\n推荐读物及其他信息源 \r\n索引
当一个计算机软件成功时,即当它满足使用它的人的需求、无差错地运行超过一个较长的时间段、容易修改甚至更容易使用时,它能够并且确实使事情向更好的方面改变。当软件失败时,即当它的用户不满意、易于出错、难于修改甚至更难于使用时,糟糕的事情就会而且一定会发生。我们都希望建造向好的方面发展的软件,避免潜伏在失败工作的阴影中的糟糕事情。为了成功,当设计和建造软件时,我们需要纪律,我们需要一种工程化方法。
在本书第1版完成后的20年里,软件工程已由一个当初为相当少数的拥护者所实践的朦胧的思想演化成一个正式的工程学科。今天,它已被承认为一个值得认真地研究。细心地学习和热烈地争论的主题。在整个行业,“软件工程师”已经替代“程序员”成为更受欢迎的工作头衔。软件过程模型、软件工程方法以及软件工具已经在广泛的行业应用中成功地采用。
虽然管理者和实践者均认识到了对更严谨的软件方法的需要,但是,他们仍继续着对该技术的应用方式的争论。很多个体和公司仍在以随意的方式开发软件,即使当他们在建造系统以服务于当今的最先进技术的时候也是如此。很多专业人士和学生不了解现代方法。其结果是,我们生产的软件的质量得不到保证,糟糕的事情时有发生。此外,关于软件工程方法的真实性质的争论和论战仍在继续。然而,软件工程仍是研究的热点,人们的态度已经有所改变,进展也很明显,但是,要成为一个完全成熟的学科还需要做大量的工作。
本书的第5版试图成为正逐步走向成熟的工程学科的一个指南。和前面四版一样,第5版面对学生和实践者,保持其基本目标:作为业界专业人员的指南以及作为高年级大学生和一年级研究生的全面的软件工程导论。第5版的格式和风格有了较大的变化,使得其表示更具读者友好性,而且内容更易于阅读和理解。
第5版并不仅仅是简单的更新,本书已经被修订以适应本领域的快速发展并着重于新的重要的软件工程实践。此外,开发了一个完整的Web站点作为本书内容的补充。该Web站点被命名为SepaWeb,网址是http://www.mhhe.com/pressman。SepaWeb被设计为结合本书第5版一起使用,提供了较广泛的软件工程资源,这将有益于教师、学生和行业专业人员。
和所有Web站点一样,SepaWeb也将随时间演化,但是,下面的主要内容将总是存在的:(1) 广泛的教师资源,包括全面的在线教师指南和补充的教学资料(如增补讲稿的幻灯片。基于录像的教学辅助),(2) 多样的学生资源,包括一个广泛的在线学习中心(包含学习指南。Web资源和自我测试)、一个不断演化的“小工具”集合。案例分析以及附加的增补内容,(3) 一个详细的专业人员资源集合,包括软件工程文档和其他软件产品的大纲(和样板),一个有用的软件工程检查表(checklist)的集合、一个软件工程(CASE)工具目录、一个全面的Web资源集,以及一个提供了软件工程过程的详细任务分解的“自适应过程模型”。此外,SepaWeb将包含其他当前正在开发中的好产品。
第5版的32章被组织为5个部分。这样做的目的是划分主题,并帮助那些没有时间在一个学期内完成书中全部内容的老师。第一部分“产品和过程”,简介软件工程的相关语境,试图引入主要的内容,更重要地,引入以后章节必需的概念,第二部分“管理软件项目”,讨论那些和计划、管理和控制软件开发项目的人员相关的主题,第三部分“传统软件工程方法”,讨论那些被视为传统软件工程“学派”的分析、设计和测试方法,第四部分“面向对象软件工程”,讨论跨越整个软件工程过程的面向对象方法,包括分析、设计和测试,第五部分“软件工程高级课题”,分章专门讨论形式化方法、净室软件工程、基于构件的软件工程、客户/服务器软件工程、Web工程、再工程和CASE。
第5版五个部分的组织使教师可以根据可用的时间和学生需要来“聚集”主题。一个完整学期的课程可围绕5个部分的一或多个部分来安排。例如,“设计课程”可能只强调第三或第四部分,“方法课程”可能只需第三、第四和第五部分的部分章节,“管理课程”可能只强调第一和第二部分。按这种方式组织第5版,试图给教师提供灵活的教学选择。SepaWeb为本书的选用提供补充材料。
本书的“教师指南”(《Instructor誷 Guide for Software Engineering: A Practitioner誷 Approach》)可从SepaWeb获得,“教师指南”给出了关于讲授各类软件工程课程的建议。对与课程并行进行的一系列实验性软件项目的推荐、部分习题的解答,以及一些教学辅助。
一个全面的录像教程“Essential Software Engineering”可作为本书的补充。录像教程是为行业培训设计的,并且用模块化方式组织,使得可以根据需要或时间进行个别主题的培训。
本书第5版的写作工作已成为我生活中最长的持续的技术计划。即使当写作停止时,从各种技术文献中提炼、组织信息的工作也一直在进行。为此,我要感谢许多书籍、论文和文章的作者,以及新一代的电子媒体(新闻组、e-快讯和万维网)的投稿人,他们在过去的20年中给我提供了大量的见解、思想和评注,很多已在每章的参考文献中列出。他们在这个快速进化的领域中的贡献是值得称道的。我还要感谢第5版的审阅者们:路易斯安那州立大学的Donald H、Kraft,佛罗里达大学的Panos E、Livadas,宾夕法尼亚州立大学的Joseph Lambert,迪尔伯恩密歇根大学的Kenneth L、Modesitt,马里兰大学的James Purtilo,他们的评注和批评是无价的。我要特别感谢迪尔伯恩密歇根大学的Bruce Maxim,他辅助我开发了配合本书的Web站点。Bruce负责了大量设计工作和教学法内容。
本书第5版内容的成型有赖于许多曾经使用过本书以前版本的业界专业人员。大学教授和学生,他们花了很多时间以他们的建议、批评和意见和我交流,我要感谢他们中的每一位。此外,我要向我们的在北美和欧洲的许多业界客户表示感谢,他们教我的绝不少于我教他们的。
在本书版本演变的过程中,我的儿子Mathew和Michael从小孩成长为大人,他们在真实世界的成熟、品质和成功激发了我的灵感,我为他们骄傲。最后,将爱和感谢献给Barbara,为了她对本书又一版本始终如一的鼓励。