本书融入了作者10多年来构造系统的经验和教授软件工程课程的教学内容。主要讨论了在复杂而多变的系统设计中如何使用软件工程的面向对象技术。全书共有12章,每章都是先阐述实例来介绍相关问题,再简要描述与主题相关的技术,然后通过一些简单的例子来解释基本概念并用实际系统中例子来讲解主要技术,最后讲述管理中的问题,讨论典型的解决方案并给出相关习题。这种编排方式有助于读者更好地学习和理解。\r\n 本书内容详实,示例丰富,实用性强,适用于有一定编程基础的高年级本科生、研究生及相关工程技术人员和管理人员。
第1部分 开始\r\n\r\n第1章 软件工程介绍\r\n\r\n1.1 引言:软件工程故障\r\n1.2 什么是软件工程\r\n1.2.1 建模\r\n1.2.2 问题求解\r\n1.2.3 知识获取\r\n1.2.4 基本原理管理\r\n1.3 软件工程概念\r\n1.3.1 参与者和角色\r\n1.3.2 系统和模型\r\n1.3.3 工作产品\r\n1.3.4 活动、任务和资源\r\n1.3.5 目标、需求和约束\r\n1.3.6 符号、方法和方法学\r\n1.4 软件工程开发活动\r\n1.4.1 需求提出\r\n1.4.2 分析\r\n1.4.3 系统设计\r\n1.4.4 对象设计\r\n1.4.5 实现\r\n1.5 软件开发的管理\r\n1.5.1 交流\r\n1.5.2 基本原理管理\r\n1.5.3 测试\r\n1.5.4 软件配置管理\r\n1.5.5 项目管理\r\n1.5.6 软件生命周期\r\n1.6 习题\r\n参考文献\r\n\r\n第2章 用UML建模\r\n\r\n2.1 介绍\r\n2.2 UML概述\r\n2.2.1 用例图\r\n2.2.2 类图\r\n2.2.3 顺序图\r\n2.2.4 状态图\r\n2.2.5 活动图\r\n2.3 建模概念\r\n2.3.1 系统、模型和视图\r\n2.3.2 概念和现象\r\n2.3.3 数据类型、抽象数据类型和实例\r\n2.3.4 类、抽象类和对象\r\n2.3.5 事件类、事件和消息\r\n2.3.6 面向对象的建模\r\n2.3.7 证伪和原型化\r\n2.4 从更深层次看UML\r\n2.4.1 用例图\r\n2.4.2 类图\r\n2.4.3 顺序图\r\n2.4.4 状态图\r\n2.4.5 活动图\r\n2.4.6 图表组织\r\n2.4.7 图表扩展\r\n2.5 习题\r\n参考文献\r\n\r\n第3章 项目交流\r\n\r\n3.1 引言:一个火箭的例子\r\n3.2 项目交流纵览\r\n3.3 交流模式\r\n3.3.1 问题定义\r\n3.3.2 客户评审\r\n3.3.3 项目评审\r\n3.3.4 检查和预排\r\n3.3.5 状况检查\r\n3.3.6 集体讨论\r\n3.3.7 发布\r\n3.3.8 事后讨论\r\n3.3.9 需求阐明\r\n3.3.10 需求变更\r\n3.3.11 问题求解\r\n3.3.12 讨论\r\n3.4 交流机制\r\n3.4.1 hallway交谈\r\n3.4.2 调查问卷和有组织的访谈\r\n3.4.3 会议\r\n3.4.4 评审\r\n3.4.5 实时异地群件\r\n3.4.6 电子邮件\r\n3.4.7 新闻组\r\n3.4.8 万维网\r\n3.4.9 Lotus Notes\r\n3.4.10 讨论\r\n3.5 项目交流活动\r\n3.5.1 确定交流需求\r\n3.5.2 建立基础构架\r\n3.5.3 组织客户和项目评审\r\n3.5.4 每周组织小组会议\r\n3.5.5 转变问题回顾\r\n3.6 习题\r\n参考文献\r\n\r\n第2部分 处理复杂性\r\n\r\n第4章 需求提出\r\n\r\n4.1 引言:可用性实例\r\n4.2 需求提出概述\r\n4.3 需求提出的概念\r\n4.3.1 功能性需求\r\n4.3.2 非功能性需求和伪需求\r\n4.3.3 描述的层次\r\n4.3.4 正确性、完整性、一致性、清晰性和现实性\r\n4.3.5 可验证性和可追溯性\r\n4.3.6 greenfield工程、再工程、界面工程\r\n4.4 需求提出活动\r\n4.4.1 确定执行者\r\n4.4.2 确定场景\r\n4.4.3 确定用例\r\n4.4.4 改进用例\r\n4.4.5 确定执行者和用例之间的关系\r\n4.4.6 确定最初的分析对象\r\n4.4.7 确定非功能性需求\r\n4.5 管理需求提出\r\n4.5.1 从用户提出信息:任务的知识分析\r\n4.5.2 与客户协商系统说明:联合应用设计\r\n4.5.3 确定需求:可用性测试\r\n4.5.4 记录需求的提出\r\n4.6 习题\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.3.4 归纳\r\n5.4 分析活动:从用例到对象\r\n5.4.1 标识实体对象\r\n5.4.2 标识边界对象\r\n5.4.3 标识控制对象\r\n5.4.4 对对象之间的交互进行建模:顺序图\r\n5.4.5 标识关系\r\n5.4.6 标识属性\r\n5.4 对单个对象的重要行为进行建模\r\n5.4.8 对对象间的归纳关系建模\r\n5.4.9 检查分析模型\r\n5.4.10 分析总结\r\n5.5 管理分析\r\n5.5.1 记录分析\r\n5.5.2 分配责任\r\n5.5.3 对分析的交流\r\n5.5.4 分析模型的循环\r\n5.5.5 客户签字认可\r\n5.6 习题\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.3.3 耦合度与相关性\r\n6.3.4 分层和分区\r\n6.3.5 软件体系结构\r\n6.3.6 UML配置图\r\n6.4 系统设计活动:从对象到子系统\r\n6.4.1 起点:路线设计系统的分析模型\r\n6.4.2 确定设计目标\r\n6.4.3 确定子系统\r\n6.4.4 将子系统映射到处理器和组件\r\n6.4.5 定义连续数据的存储\r\n6.4.6 定义访问控制\r\n6.4.7 设计全局控制流\r\n6.4.8 确定边界条件\r\n6.4.9 预期变化\r\n6.4.10 系统设计综述\r\n6.5 系统设计的管理\r\n6.5.1 记录系统设计\r\n6.5.2 分配任务\r\n6.5.3 与系统设计相关的交流\r\n6.5.4 系统设计的不断反复\r\n6.6 习题\r\n参考文献\r\n\r\n第7章 对象设计\r\n\r\n7.1 介绍:电影示例\r\n7.2 对象设计概况\r\n7.3 对象设计概念\r\n7.3.1 应用域对象和解决域对象回顾\r\n7.3.2 类型、声明和可见性回顾\r\n7.3.3 合约:不变量、前提条件和后续条件\r\n7.3.4 UML对象约束语言\r\n7.4 对象设计活动\r\n7.4.1 确定遗漏的属性和操作\r\n7.4.2 指定类型、声明和可见性\r\n7.4.3 指定约束条件\r\n7.4.4 指定异常情况\r\n7.4.5 确定并调整类库\r\n7.4.6 确定并调整应用程序框架\r\n7.4.7 框架的例子:Web对象\r\n7.4.8 实现关系\r\n7.4.9 提高可复用性\r\n7.4.10 消除实现的依赖性\r\n7.4.11 回顾访问路径\r\n7.4.12 退化对象:将对象转变成属性\r\n7.4.13 存储高开销计算的结果\r\n7.4.14 推迟高开销计算\r\n7.5 对象设计的管理\r\n7.5.1 用文档记录对象设计\r\n7.5.2 分配职责\r\n7.6 习题\r\n参考文献\r\n\r\n\r\n第3部分 管理变化\r\n\r\n第8章 基本原理管理\r\n\r\n8.1 介绍:火腿的例子\r\n8.2 基本原理概况\r\n8.3 基本原理概念\r\n8.3.1 集中交通管制\r\n8.3.2 定义难题(Problem):问题\r\n8.3.3 研究求解空间:提议\r\n8.3.4 评估求解空间:标准和讨论\r\n8.3.5 破解求解空间:解决方案\r\n8.3.6 解决方案的实现:活动项\r\n8.3 基于问题的模型和系统的例子\r\n8.4 基本原理活动:从问题到决策\r\n8.4.1 CTC系统设计\r\n8.4.2 记录会议中的基本原理\r\n8.4.3 异步记录基本原理\r\n8.4.4 记录讨论变化时的基本原理\r\n8.4.5 重组基本原理\r\n8.5 管理基本原理\r\n8.5.1 建立基本原理文档\r\n8.5.2 分配任务\r\n8.5.3 有关基本原理交流的试探法\r\n8.5.4 问题建模和协商\r\n8.5.5 冲突解决策略\r\n8.6 习题\r\n参考文献\r\n\r\n第9章 测试\r\n\r\n9.1 介绍\r\n9.2 测试概况\r\n9.2.1 质量控制技术\r\n9.2.2 错误避免技术\r\n9.2.3 检错技术\r\n9.2.4 容错技术\r\n9.3 测试概念\r\n9.3.1 错误(fault)、误差(error)和故障(failure)\r\n9.3.2 测试实例\r\n9.3.3 测试存根和驱动程序\r\n9.3.4 改正\r\n9.4 测试活动\r\n9.4.1 检查组件\r\n9.4.2 单元测试\r\n9.4.3 集成测试\r\n9.4.4 系统测试\r\n9.5 测试的管理\r\n9.5.1 规划测试\r\n9.5.2 记录测试\r\n9.5.3 分配职责\r\n9.6 习题\r\n参考文献\r\n\r\n第10章 软件配置管理\r\n\r\n10.1 介绍:飞机的例子\r\n10.2 配置管理概述\r\n10.3 配置管理概念\r\n10.3 配置项和CM聚集\r\n10.3.2 版本和配置\r\n10.3.3 变化请求\r\n10.3.4 宣传版本和发布版本\r\n10.3.5 仓库和工作区\r\n10.3.6 版本识别方案\r\n10.3.7 变化和变化集合\r\n10.3.8 配置管理工具\r\n10.4 配置管理活动\r\n10.4.1 配置项和CM聚集确认\r\n10.4.2 宣传版本管理\r\n10.4.3 发布版本管理\r\n10.4.4 分支管理\r\n10.4.5 不同版本管理\r\n10.4.6 变化管理\r\n10.5 管理配置管理\r\n10.5.1 记录配置管理\r\n10.5.2 分配配置管理任务\r\n10.5.3 计划配置管理活动\r\n10.6 习题\r\n参考文献\r\n\r\n第11章 项目管理\r\n\r\n11.1 介绍:STS-51L发射决定\r\n11.2 项目管理概述\r\n11.3 管理的概念\r\n11.3.1 小组\r\n11.3.2 角色\r\n11.3.3 工作产品\r\n11.3.4 任务\r\n11.3.5 进度表\r\n11.4 项目管理活动\r\n11.4.1 智能办公建筑\r\n11.4.2 项目启动\r\n11.4.3 项目监督\r\n11.4.4 风险管理\r\n11.4.5 项目协议\r\n11.4.6 用户验收测试\r\n11.4.7 安装\r\n11.4.8 事后总结\r\n11.5 项目管理模型和活动的管理\r\n11.5.1 记录项目管理\r\n11.5.2 分配职责\r\n11.5.3 交流项目管理\r\n11.6 习题\r\n参考文献\r\n\r\n第4部分 尾声\r\n\r\n第12章 软件生命周期\r\n\r\n12.1 引言\r\n12.2 IEEE 1074:开发生命周期过程的标准\r\n12.2.1 过程和活动\r\n12.2.2 生命周期建模\r\n12.2.3 项目管理\r\n12.2.4 前期开发\r\n12.2.5 开发\r\n12.2.6 后期开发\r\n12.2.7 整体过程(交叉开发)\r\n12.3 评价软件生命周期模型的成熟度\r\n12.4 生命周期模型\r\n12.4.1 瀑布模型\r\n12.4.2 V模型\r\n12.4.3 Boehm的螺旋模型\r\n12.4.4 锯齿模型\r\n12.4.5 鲨齿模型\r\n12.4.6 统一软件开发过程\r\n12.4.7 基于问题的生命周期模型\r\n12.5 管理活动和产品\r\n12.5.1 例1:历时4个月在一个地点进行的项目\r\n12.5.2 例2:历时8个月在两个地点进行的项目\r\n12.6 习题\r\n参考文献\r\n\r\n第5部分 附录\r\n\r\n附录A 设计模式\r\n\r\nA.1 抽象Factory:封装平台\r\nA.2 Adapter:包装遗留代码\r\nA.3 Bridge:允许备选实现\r\nA.4 Command:封装控制\r\nA.5 Composite:表示递归的层次结构\r\nA.6 Facade:封装子系统\r\nA.7 Observer:将实体与视图分离\r\nA.8 Proxy:封装昂贵的对象\r\nA.9 Strategy:封装算法\r\n参考文献\r\n\r\n附录B 术语表\r\n\r\n附录C 参考文献