软件工程：从理论到实践
《高等教育出版社》是由毛新军、董威编著，高等教育出版社于2022年出版的教材。本书遵循课程规范,具有知识体系新颖、内容组织科学、知识诠释深入、教学资源丰富等特点，可作为高校计算机或信息大类专业的本科生教材，也可作为研究生教材和软件开发工程师的参考用书。
内容简介
本书将软件工程理论与软件开发实践相结合，在作者多年从事软件工程教学、科研和开发所取得的经验和成果基础上，引入以开源软件技术为代表的软件产业界成功实践和软件资源，通过具体和完整的软件开发案例，深入诠释程序、软件和软件工程的概念、思想和内涵，系统介绍软件工程的过程、方法学和工具，强化软件工程课程的综合实践。
全书分为6部分，共16章。第一部分是基础篇，包含第1~3章，从程序和软件入手，介绍软件工程的基本概念和思想、常见的软件过程及主流的软件开发方法。第二部分是需求篇，包含第4~6章，介绍获取、分析、建模和文档化软件需求的过程和策略、语言和工具、软件制品和质量保证。第三部分是设计篇，包含第7~10章，介绍软件体系结构设计、用户界面设计、软件详细设计的过程和策略、语言和工具、软件制品和质量保证。第四部分是实现篇，包含第11~13章，介绍程序编码和软件测试的过程和策略、技术和工具、软件制品和质量保证。第五部分是运维篇，包含第14~15章，介绍软件部署、运行、维护和演化的策略和方法。第六部分是管理篇，包含第16章，介绍软件项目管理的相关内容。
图书目录
前辅文
第1章 从程序到软件
1.1 何为程序
1.2 程序质量
1.3 程序质量保证方法
1.3.1 程序编码风格
1.3.2 程序设计方法
1.3.3 程序代码重用
1.3.4 结对编程
1.4 程序质量分析方法
1.4.1 人工代码审查
1.4.2 自动化分析
1.4.3 程序测试技术
1.5 编写程序需解决的问题
1.6 何为软件
1.6.1 软件的概念
1.6.2 软件生存周期
1.6.3 软件的特点
1.6.4 软件的分类
1.7 开源软件
1.7.1 何为开源软件
1.7.2 开源软件实践
1.7.3 开源托管平台和社区
1.7.4 开源软件的优势
1.7.5 开源许可证
1.7.6 开源软件的利用
1.8 软件质量
1.9 软件特征的变化
1.9.1 软件的地位和作用
1.9.2 软件的基本形态
1.9.3 软件系统的规模
1.10 软件建设的挑战和使命
1.11 本书软件案例
1.11.1 “小米便签”MiNotes
1.11.2 “12306”软件
1.11.3 “空巢老人看护”软件ElderCarer
本章小结
推荐阅读
基础习题
综合实践
第2章 软件工程概述
2.1 软件工程的产生背景
2.1.1 从编写程序到软件开发
2.1.2 软件危机
2.2 软件工程的概念和思想
2.2.1 何为软件工程
2.2.2 软件工程的三要素
2.2.3 软件工程的目标
2.2.4 软件工程的原则
2.3 计算机辅助软件工程
2.3.1 何为计算机辅助软件工程
2.3.2 CASE工具和环境
2.4 软件工程视角下的软件开发
2.4.1 软件创作与软件生产
2.4.2 软件创作与软件生产的软件工程方法
2.5 软件工程的发展
2.5.1 软件工程的发展历程
2.5.2 软件工程发展的特点
2.5.3 我国软件工程的发展
2.6 软件工程教育
2.6.1 软件工程从业人员
2.6.2 软件工程教育发展
2.6.3 软件工程教育国际规范
2.6.4 软件工程教育挑战
2.6.5 “软件工程”课程教学
本章小结
推荐阅读
基础习题
综合实践
第3章 软件过程模型和开发方法
3.1 软件过程模型
3.1.1 何为软件过程
3.1.2 代表性的软件过程模型
3.1.3 软件过程模型的重型化特点
3.1.4 软件过程模型的选择
3.2 敏捷方法
3.2.1 何为敏捷方法
3.2.2 极限编程
3.2.3 Scrum
3.2.4 测试驱动的开发
3.3 群体化开发方法
3.3.1 何为群体化开发方法
3.3.2 基于群体的软件开发技术
3.3.3 开源软件开发实践
3.3.4 基于群智的知识分享
本章小结
推荐阅读
基础习题
综合实践
第4章 软件需求工程基础
4.1 软件需求
4.1.1 何为软件需求
4.1.2 软件需求的类别
4.1.3 软件需求的特点
4.1.4 软件需求的质量要求
4.1.5 软件需求的重要性
4.2 需求工程
4.2.1 何为需求工程
4.2.2 需求工程的一般性过程
4.2.3 需求工程的方法学
4.2.4 需求工程师
4.3 结构化需求分析方法学
4.3.1 基本概念和思想
4.3.2 数据流图及软件需求模型
4.3.3 面向数据流的需求分析的步骤和策略
4.4 面向对象的需求分析方法学
4.4.1 基本概念和思想
4.4.2 面向对象建模语言UML
4.4.3 面向对象的需求分析步骤和策略
4.5 需求工程的CASE工具
4.6 需求工程的输出和评审
4.6.1 软件需求制品
4.6.2 软件需求缺陷
4.6.3 软件需求评审
4.7 软件需求变更管理
本章小结
推荐阅读
基础习题
综合实践
第5章 获取软件需求
5.1 获取软件需求概述
5.1.1 软件需求从何而来
5.1.2 获取软件需求的方式
5.1.3 获取软件需求的困难
5.1.4 获取软件需求的方法
5.2 获取软件需求的过程
5.3 明确问题和基于软件的解决方案
5.3.1 明确软件要解决的问题
5.3.2 明确基于软件的解决方案
5.4 导出和构思初步软件需求
5.4.1 识别软件的利益相关者
5.4.2 导出和构思软件的功能需求
5.4.3 导出和构思软件的非功能需求
5.4.4 持续获取软件需求
5.5 描述初步软件需求
5.5.1 自然语言描述
5.5.2 软件原型描述
5.5.3 UML用例图
5.5.4 UML用例图描述
5.5.5 撰写软件文档
5.6 评审初步软件需求
5.6.1 输出的软件制品
5.6.2 评审初步软件需求
5.6.3 软件需求可行性分析
本章小结
推荐阅读
基础习题
综合实践
第6章 分析软件需求
6.1 分析软件需求概述
6.1.1 为何要分析软件需求
6.1.2 分析软件需求的任务
6.2 软件需求模型及UML表示方法
6.2.1 软件需求模型
6.2.2 交互图
6.2.3 类图
6.2.4 状态图
6.3 分析软件需求的过程
6.4 分析和确定软件需求优先级
6.4.1 分析软件需求的重要性
6.4.2 分析软件需求的优先级
6.4.3 确定用例分析和实现的次序
6.5 分析和建立软件需求模型
6.5.1 分析和建立用例的交互模型
6.5.2 分析和建立软件需求的分析类模型
6.5.3 分析和建立对象的状态模型
6.6 文档化软件需求
6.6.1 撰写软件需求规格说明书
6.6.2 输出的软件制品
6.7 确认和验证软件需求
6.7.1 评审软件需求
6.7.2 解决软件需求问题
本章小结
推荐阅读
基础习题
综合实践
第7章 软件设计基础
7.1 软件设计
7.1.1 何为软件设计
7.1.2 软件设计模型及设计元素
7.1.3 软件设计的质量要求
7.2 软件设计的过程和原则
7.2.1 软件设计的一般性过程
7.2.2 软件设计的约束和原则
7.2.3 软件设计工程师
7.3 结构化软件设计方法学
7.3.1 基本概念和模型
7.3.2 变换型数据流图的转换方法
7.3.3 事务型数据流图的转换方法
7.4 面向对象的软件设计方法学
7.4.1 基本思想
7.4.2 面向对象的软件设计原则
7.4.3 面向对象的软件设计优势
7.5 软件设计的CASE工具
7.6 软件设计的输出和评审
7.6.1 软件设计制品
7.6.2 软件设计缺陷
7.6.3 软件设计验证与评审
7.7 软件设计管理
本章小结
推荐阅读
基础习题
综合实践
第8章 软件体系结构设计
8.1 软件体系结构设计概述
8.1.1 何为软件体系结构
8.1.2 软件体系结构表示的抽象层次和表示视图
8.1.3 软件体系结构设计的任务
8.1.4 软件体系结构风格
8.1.5 软件体系结构设计的重要性
8.2 软件体系结构模型的表示方法
8.2.1 包图
8.2.2 部署图
8.2.3 构件图
8.3 软件体系结构设计过程
8.4 设计初步的软件体系结构
8.5 重用可用的已有软件资源
8.6 精化软件体系结构设计
8.6.1 确定公共基础设施及服务
8.6.2 确定设计元素
8.7 设计软件部署模型
8.8 文档化软件体系结构设计
8.9 评审软件体系结构设计
本章小结
推荐阅读
基础习题
综合实践
第9章 用户界面设计
9.1 用户界面设计概述
9.1.1 人机交互方式
9.1.2 用户界面设计的任务及其重要性
9.2 用户界面组成及表示方法
9.2.1 图形化用户界面的组成
9.2.2 用户界面设计模型的UML表示
9.3 用户界面设计的过程和原则
9.3.1 用户界面设计的过程
9.3.2 用户界面设计的原则
9.4 用户界面的初步设计
9.5 建立用户界面间的跳转关系
9.6 精化用户界面设计
9.7 用户界面设计的输出
9.8 评审用户界面设计
本章小结
推荐阅读
基础习题
综合实践
第10章 软件详细设计
10.1 软件详细设计概述
10.1.1 何为软件详细设计
10.1.2 软件详细设计的任务和过程
10.1.3 软件详细设计的原则
10.2 软件详细设计模型及表示方法
10.3 面向对象的软件设计模式
10.3.1 何为设计模式
10.3.2 面向对象的软件设计模式
10.4 用例设计
10.4.1 用例设计的过程和原则
10.4.2 设计用例实现方案
10.4.3 构造设计类图
10.4.4 评审用例设计方案
10.4.5 输出的软件制品
10.5 类设计
10.5.1 类设计的过程和原则
10.5.2 确定类的可见范围
10.5.3 精化类间的关系
10.5.4 精化类的属性
10.5.5 精化类的方法
10.5.6 构造类对象的状态图
10.5.7 评审类设计
10.5.8 输出的软件制品
10.6 数据设计
10.6.1 数据设计的过程和原则
10.6.2 确定需要永久保存的数据
10.6.3 确定数据存储和组织的方式
10.6.4 设计数据操作
10.6.5 评审数据设计
10.6.6 输出的软件制品
10.7 子系统和构件设计
10.8 文档化和评审软件详细设计
本章小结
推荐阅读
基础习题
综合实践
第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.4 支持软件实现的CASE工具
11.5 软件实现的输出
本章小结
推荐阅读
基础习题
综合实践
第12章 编写代码
12.1 编写代码的任务
12.2 基于软件设计编写代码
12.2.1 编写类代码
12.2.2 编写用户界面代码
12.2.3 编写数据设计代码
12.3 代码片段重用
12.4 软件缺陷
12.4.1 软件缺陷、错误和失效的概念
12.4.2 软件缺陷的描述
12.4.3 软件缺陷的应对方法
12.4.4 软件缺陷的状态
12.5 程序调试
12.6 基于群智知识解决编程和调试问题
12.7 编写代码的输出
本章小结
推荐阅读
基础习题
综合实践
第13章 软件测试
13.1 软件测试概述
13.1.1 何为软件测试
13.1.2 软件测试的思想和原理
13.1.3 测试用例的设计
13.1.4 测试用例的运行
13.1.5 软件测试面临的挑战
13.1.6 软件测试工程师
13.2 软件测试的过程和策略
13.2.1 软件测试过程
13.2.2 单元测试
13.2.3 集成测试
13.2.4 确认测试
13.2.5 系统测试
13.3 软件测试技术
13.3.1 白盒测试技术
13.3.2 黑盒测试技术
13.3.3 非功能测试技术
13.4 面向对象的软件测试技术
13.4.1 面向对象的软件测试的特殊性
13.4.2 交互测试
13.4.3 继承测试
13.5 软件测试计划的制订与实施
13.5.1 软件测试组织
13.5.2 制订和实施软件测试计划
13.6 软件测试的输出
本章小结
推荐阅读
基础习题
综合实践
第14章 软件部署
14.1 软件及其环境
14.1.1 软件的运行环境
14.1.2 软件运行环境的变化
14.2 软件部署的概念和原则
14.3 软件部署方式
14.3.1 单机部署
14.3.2 分布式部署
14.4 软件部署方法
14.4.1 基于操作系统的部署
14.4.2 基于软件开发框架和中间件的部署
14.4.3 基于容器的部署
14.5 支撑软件部署的CASE工具
14.5.1 Fat Jar
14.5.2 Installer Project
14.5.3 Jenkins
本章小结
推荐阅读
基础习题
综合实践
第15章 软件维护和演化
15.1 软件维护
15.1.1 何为软件维护
15.1.2 软件维护的特点和挑战
15.1.3 软件维护工程师
15.2 软件演化
15.2.1 何为软件演化
15.2.2 软件演化法则
15.3 软件逻辑老化问题
15.3.1 何为软件逻辑老化
15.3.2 软件逻辑老化的原因和表现
15.3.3 解决软件逻辑老化的方法
15.4 软件维护技术
15.5 软件维护过程
15.5.1 不同情况下的软件维护过程
15.5.2 软件维护需要解决的问题
15.6 软件的可维护性
15.7 软件维护的输出
本章小结
推荐阅读
基础习题
综合实践
第16章 软件项目管理
16.1 软件项目管理概述
16.1.1 何为软件项目
16.1.2 软件项目管理的对象
16.1.3 软件项目管理的内容
16.2 软件度量、测量和估算
16.2.1 基本概念
16.2.2 软件项目估算
16.2.3 应用软件度量、测量和估算
16.3 软件项目计划
16.3.1 何为软件项目计划
16.3.2 软件项目计划的表示
16.3.3 软件项目计划要考虑的因素
16.3.4 制订软件项目计划的步骤
16.3.5 实施软件项目计划
16.4 软件项目跟踪
16.4.1 软件项目跟踪的对象
16.4.2 软件项目跟踪的方法
16.4.3 软件项目跟踪的步骤
16.5 软件配置管理
16.5.1 基本概念
16.5.2 软件配置管理过程
16.5.3 软件配置管理计划
16.6 软件风险管理
16.6.1 何为软件风险
16.6.2 软件风险的类别
16.6.3 软件风险管理模式
16.6.4 软件风险管理方法
16.7 软件质量保证
16.7.1 基本概念
16.7.2 软件质量保证方法
16.7.3 软件质量保证计划
本章小结
推荐阅读
基础习题
综合实践
参考文献