本书在软件工程知识域的组织方面充分参考了IEEE和ACM提出的“软件工程知识体系(SWEBOK)”基本框架,结合高校软件工程教与学的特点,跟随现代软件发展趋势,沿着结构化和面向对象两条行文线索,比较全面、系统地反映了软件工程的基础和发展,从理论与实践的视角介绍了软件工程的基本原理、概念和技术方法。全书共13章,在内容结构上可分为四篇:软件工程基础、软件定义、软件开发与维护和软件项目管理基础。本书内容新颖,通俗易懂,深入浅出,循序渐进,同时,在每章后面都有与之对应的习题,供读者复习巩固。 本书可作为高等院校“软件工程”课程的教材或教学参考书,也可供有一定实际经验的软件工作人员和需要开发应用软件的计算机用户阅读参考。
样章试读
目录
- 第1篇 软件工程学概述
第1章 概述
1.1 基本概念
1.1.1 软件
1.1.2 软件危机
1.1.3 软件工程
1.1.4 软件生命周期
1.1.5 软件过程模型
1.1.6 软件工程面临的挑战
1.2 软件工程从业人员的职业和道德素养
习题1
第2章 计算机系统工程
2.1 系统与系统工程
2.1.1 系统总体特性
2.1.2 硬件和硬件工程
2.1.3 软件和软件工程
2.1.4 人机交互工程
2.1.5 数据库工程
2.2 系统模型与建模活动
2.2.1 系统模型
2.2.2 系统建模及模拟
2.3 系统规格及评审说明
2.3.1 系统规格
2.3.2 评审说明
习题2
第2篇 软件定义
第3章 可行性研究
3.1 可行性研究的任务
3.2 可行性研究过程
3.3 系统流程元素及模型表达
3.3.1 元素符号
3.3.2 举例
3.4 成本/效益分析
3.4.1 成本估计
3.4.2 成本/效益分析方法
3.5 技术分析
3.6 方案的分配与权衡
习题3
第4章 结构化需求分析
4.1 需求分析基础
4.1.1 需求分析的任务与原则
4.1.2 需求初步获取技术
4.1.3 需求建模
4.1.4 问题抽象、问题分解与多视点分析
4.1.5 支持需求分析的快速原型技术
4.1.6 需求规格说明与评审
4.2 面向数据流的结构化需求分析方法
4.2.1 实体-联系图
4.2.2 状态转换图
4.2.3 数据流图
4.3 其他图形工具
4.3.1 层次方框图
4.3.2 Warnier图
4.3.3 IPO图
习题4
第5章 面向对象的需求分析过程
5.1 面向对象的概念与思想
5.2 UML
5.2.1 UML的语言机制
5.2.2 基于UML的软件开发过程
5.3 基于UML的需求分析
5.3.1 开发场景
5.3.2 生成用例
5.3.3 活动图细化用例
5.3.4 生成用例图
5.3.5 建立顶层架构
5.3.6 建立领域概念模型
习题5
第3篇 软件开发与维护
第6章 体系结构设计
6.1 系统构成
6.1.1 容器模型
6.1.2 客户机/服务器模型
6.1.3 分层模型
6.2 控制模型
6.2.1 集中式控制
6.2.2 事件驱动系统
6.3 模块化分解
6.3.1 对象模型
6.3.2 数据流模型
6.4 领域相关的体系结构
6.4.1 类模型
6.4.2 参考体系结构
习题6
第7章 结构化总体设计
7.1 软件设计的基本概念和原理
7.1.1 抽象
7.1.2 信息隐蔽
7.1.3 模块化设计
7.1.4 模块独立
7.1.5 耦合
7.1.6 内聚
7.2 软件结构的描绘工具
7.2.1 层次图和HIPO图
7.2.2 结构图
7.3 面向数据流的设计过程
7.3.1 基本概念和设计过程
7.3.2 变换分析
7.3.3 事务分析
7.4 启发式设计
7.5 设计优化原则
习题7
第8章 结构化详细设计
8.1 结构化程序设计基础
8.2 人机界面设计
8.2.1 设计问题
8.2.2 设计过程
8.2.3 人机界面设计指南
8.3 过程设计的工具
8.3.1 程序流程图
8.3.2 盒图(N-S图)
8.3.3 PAD图
8.3.4 判定表
8.3.5 判定树
8.3.6 过程设计语言
8.4 面向数据结构的设计方法
8.4.1 Jackson图
8.4.2 改进的Jackson图
8.4.3 Jackson方法
8.5 程序复杂程度的定量度量
8.5.1 McCabe方法
8.5.2 Halstead方法
习题8
第9章 面向对象的软件设计方法
9.1 设计用例实现方案
9.1.1 顺序图
9.1.2 协作图
9.1.3 提取边界类、实体类和控制类
9.1.4 构造交互图
9.1.5 精化类图
9.2 设计技术支撑方案
9.2.1 数据持久存储服务
9.2.2 并发与同步控制服务
9.2.3 技术支撑方案与用例实现方案的融合
9.3 用户界面设计
9.4 精化设计模型
9.4.1 状态图
9.4.2 精化体系结构
9.4.3 精化类之间的关系
9.4.4 精化类的属性和操作
9.4.5 状态图设计
9.4.6 活动图设计
习题9
第10章 面向过程的软件实现
10.1 编码
10.1.1 程序设计语言的特性
10.1.2 程序设计语言的基本机制
10.1.3 程序设计语言的演变和分类
10.1.4 程序设计语言的选择
10.1.5 编程标准
10.1.6 编程风格
10.2 测试
10.2.1 测试目标
10.2.2 测试准则
10.2.3 测试方法
10.2.4 测试步骤
10.2.5 测试阶段的信息流
10.3 单元测试
10.3.1 测试重点
10.3.2 代码审查
10.3.3 计算机测试
10.4 集成测试
10.4.1 自顶向下集成
10.4.2 自底向上集成
10.4.3 不同集成测试策略的比较
10.4.4 回归测试
10.5 确认测试
10.5.1 确认测试的范围
10.5.2 软件配置复查
10.5.3 Alpha和Beta测试
10.6 白盒测试技术
10.6.1 逻辑覆盖
10.6.2 控制结构测试
10.7 黑盒测试技术
10.7.1 等价划分
10.7.2 边界值分析
10.7.3 错误推测
10.8 调试
10.8.1 调试过程
10.8.2 调试途径
10.9 软件可靠性
习题10
第11章 面向对象的软件实现
11.1 程序设计语言
11.1.1 面向对象语言的优点
11.1.2 面向对象语言的技术特点
11.1.3 选择面向对象语言
11.2 程序设计风格
11.2.1 提高可重用性
11.2.2 提高可扩充性
11.2.3 提高健壮性
11.3 测试策略
11.3.1 面向对象的单元测试
11.3.2 面向对象的集成测试
11.3.3 面向对象的确认测试
11.4 设计测试用例
11.4.1 测试类的方法
11.4.2 集成测试方法
习题11
第12章 软件维护
12.1 软件维护的分类
12.2 维护过程
12.2.1 结构化维护与非结构化维护
12.2.2 维护成本
12.2.3 可能存在的问题
12.3 可维护性
12.3.1 影响可维护性的因素
12.3.2 若干量化的测度
12.3.3 保证可维护性的复审
12.4 维护活动
12.4.1 维护组织
12.4.2 维护的报告与评估
12.4.3 维护活动的事件流
12.4.4 保存维护记录
12.4.5 评价维护活动
12.5 维护的副作用
12.6 逆向工程与重构工程
12.6.1 恢复信息的级别
12.6.2 恢复信息的方法
习题12
第4篇 软件项目管理
第13章 软件项目管理
13.1 估算软件规模
13.1.1 代码行技术
13.1.2 功能点技术
13.2 工作量估算
13.2.1 静态单变量模型
13.2.2 动态多变量模型
13.2.3 COCOMO2模型
13.3 进度计划
13.3.1 估算开发时间
13.3.2 Gantt图
13.3.3 工程网络
13.3.4 估算工程进度
13.3.5 关键路径
13.3.6 机动时间
13.4 人员组织
13.4.1 民主制程序员组
13.4.2 主程序员组
13.4.3 现代程序员组
13.5 质量保证
13.5.1 软件质量
13.5.2 软件质量保证措施
13.6 软件配置管理
13.6.1 软件配置
13.6.2 软件配置管理过程
13.7 能力成熟度模型
习题13
参考文献