本书作者针对软件工程的学科特点,注重结合实例讲解软件工程的理论与方法,避免抽象和枯燥的论述,在兼顾传统的结构化方法的同时,注重当前广为采用的面向对象和敏捷开发方法,新版加入了新型的软件开发方法,例如开源软件、智能化软件、微服务。强调软件质量、软件安全和软件从业人员的职业道德和专业素质。
当今,软件业是社会经济发展的先导性和战略性产业,它已成为信息产业和国民经济新的增长点和重要支柱。软件工程在软件开发中起着重要的作用,对软件产业的形成及发展起着决定性的推动作用。采用先进的工程化方法进行软件开发和生产是实现软件产业化的关键技术手段。与其他产业相比,软件产业具有自己的特殊性。软件产业的发展更加依赖于人力资源,因此软件产业的竞争越来越集中到对人才的竞争。然而,刚毕业的大学生往往要经过半年到一年的培训才能适应软件企业的工作。长期以来,我国软件人才的现状远远不能满足软件产业发展的要求。因此,软件工程人员队伍的成长,特别是高层软件工程人员队伍的成长显得更为紧迫。
自从软件工程概念诞生以来,学术界和工业界做了大量的研究与实践工作,也取得了许多重要成果。尤其是20世纪90年代以后,随着网络技术及面向对象技术的广泛应用,软件工程取得了突飞猛进的发展。软件工程已从计算机科学与技术中脱离出来,逐渐形成了一门独立的学科。软件工程教育所处的地位也越来越重要,软件工程课程已成为软件工程、计算机科学与技术等专业的必修课程。
软件工程课程实践性比较强,如果学生没有实践经验,则很难理解相关的理论知识。因此,教师普遍感到软件工程课程难教,而学生则普遍感到难学。近年来,软件工程学科的发展非常迅速,新的理论、方法和工具层出不穷,其中很多已经应用到企业的实际工作中。软件工程的教学面临越来越大的压力。我们认为,除了需要在教学内容、教学方法方面进行改革之外,实践能力的培养对建设一支企业需要的合格软件工程人才队伍尤为关键。
本书在编写中力图遵循以下原则:
(1)既要强调和突出基本概念、基本方法,又要尽可能使材料内容的组织符合读者的认识规律,在讲解概念、方法的过程中尽量结合实例,并且注重软件工程方法、技术和工具的综合应用,避免只是抽象和枯燥地讲解。
(2)在介绍传统的结构化方法和面向对象方法的同时,兼顾当前广为采用的流行方法,如面向服务的方法和面向数据的方法,以突出教材的实用性以及学科当前的发展。
(3)既要充分重视技术性内容,使初学者掌握必要的工程知识和方法,同时也应兼顾软件工程实践中必不可少的管理知识,例如项目管理、质量管理、人员管理等内容。
本书在第2版的基础上进一步对内容做了调整和充实,所做改动概述如下:
(1)更新了第1章,在13节“软件工程的目标”中提供了国际标准的软件质量特性及其子特性作为软件产品的质量目标。在15节“软件工程方法概述”中增加了面向服务的方法和面向数据的方法。在164节“常用软件工具介绍”中对代表性的软件工具进行了修订。
(2)第10章“软件测试方法”中增加了107节“自动化测试”,原107节“调试”后移为108节。
(3)第11章“软件维护”中增加了113节“逆向工程”和114节“重构”,原113~115节依次后移为115~117节。
(4)第13章“软件项目管理”中增加了137节“质量管理”。
(5)本书最后增加了第15章“软件人员的职业道德和社会责任”。
(6)新增加了一个附录,其中列举了近年国内外软件引起的系统重大事故,目的是让读者从实际案例中吸取教训,提高对软件质量的重视。
总之,本书力争做到结构合理、内容丰富,讲解由浅入深,既体现知识点的连贯性、完整性,又体现其在实际中的应用。
前言
教学建议
第一部分软件工程概述
第1章软件与软件工程的概念
11软件的概念、特性和分类
111软件的概念及特性
112软件的分类
12软件危机与软件工程
121软件危机
122软件工程
13软件工程的目标
14软件生存期
15软件工程方法概述
151传统方法
152面向对象方法
153面向服务方法
154面向数据方法
155形式化方法
16软件工具概述
161软件工具的概念
162软件工具的发展
163软件工具的分类
164常用软件工具介绍
17软件工程知识体系及知识域
习题
第2章软件生存期模型
21瀑布模型
22快速原型模型
23增量模型
24螺旋模型
25喷泉模型
26统一过程
27基于构件的开发模型
28敏捷过程
习题
第二部分结构化分析与设计方法
第3章软件需求获取与结构化分析方法
31需求获取与需求分析阶段的任务
311需求获取的任务和原则
312需求获取的过程
313软件需求分析阶段的任务
32结构化分析方法
321功能建模
322数据建模
323行为建模
324数据字典
325加工规格说明
33系统需求规格说明
331软件需求规格说明模板
332SRS和DRD的质量要求
34需求评审
341正式的需求评审
342需求评审中的常见风险
35需求管理
351需求跟踪
352需求变更管理
习题
第4章结构化设计方法
41软件设计的概念及原则
411软件设计的概念
412软件设计的原则
42结构化设计
421结构化软件设计的任务
422结构化设计与结构化分析的关系
423模块结构及表示
424数据结构及表示
43体系结构设计
431基于数据流方法的设计过程
432典型的数据流类型和系统结构
433变换型映射方法
434事务型映射方法
435模块间的耦合与内聚
436软件模块结构的改进方法
44接口设计
441接口设计概述
442人机交互界面
45数据设计
451文件设计
452数据库设计
46过程设计
461结构化程序设计
462程序流程图
463NS图
464PAD图
465伪代码
466自顶向下、逐步细化的设计过程
47软件设计规格说明
48软件设计评审
481概要设计评审的检查内容
482详细设计评审的检查内容
习题
第三部分面向对象分析与设计方法
第5章面向对象方法与UML
51面向对象的概念与开发方法
511对象
512类与封装
513继承
514多态
515消息通信
516面向对象的软件开发方法
52UML简介
521UML的产生和发展
522UML的特点
523UML的基本模型
53UML的事物
531结构事物
532行为事物
533分组事物
534注释事物
54UML的关系
541依赖关系
542关联关系
543泛化关系
544实现关系
55UML的图
551用例图
552类图
553顺序图与通信图
554状态图
555活动图
556构件图与部署图
习题
第6章面向对象分析
61面向对象分析概述
611确定系统边界
612面向对象分析的3种模型
62建立用例模型
621确定业务参与者
622确定业务需求用例
623创建用例图
63建立对象模型
631对象模型的5个层次
632划分主题
633确定类与对象
634确定结构
635确定属性
636确定服务
637建立类图
64建立动态模型
641顺序图
642通信图
643状态图
习题
第7章软件体系结构与设计模式
71软件体系结构的基本概念
711什么是体系结构
712体系结构模式、风格和框架的概念
713体系结构的重要作用
72典型的体系结构风格
721数据流风格
722调用∕返回风格
723仓库风格
73特定领域的软件体系结构
731类属模型
732参考模型
74分布式系统结构
741多处理器体系结构
742客户机∕服务器体系结构
743分布式对象体系结构
744代理
75体系结构框架
751模型视图控制器
752J2EE体系结构框架
753PCMEF与PCBMER框架
76设计模式
761抽象工厂
762单件
763外观
764适配器
765职责链
766中介者
767观察者
习题
第8章面向对象设计
81面向对象设计过程与准则
811面向对象设计过程
812面向对象设计准则
82体系结构模块及依赖性
821类及其依赖性
822接口及其依赖性
823包及其依赖性
824构件及其依赖性
83系统分解
831子系统和类
832服务和子系统接口
833子系统分层和划分
834Coad & Yourdon的面向对象设计模型
835子系统之间的两种交互方式
836组织系统的两种方案
84问题域部分的设计
85人机交互部分的设计
851用户界面设计步骤
852Web应用系统的界面设计
86任务管理部分的设计
87数据管理部分的设计
88对象设计
881使用模式设计对象
882接口规格说明设计
883重构对象设计模型
89优化对象设计模型
习题
第四部分软件实现与测试
第9章软件实现
91程序设计语言
911程序设计语言的性能
912程序设计语言的分类
913程序设计语言的选择
92程序设计风格
921源程序文档化
922数据说明标准化
923语句结构简单化
924输入/输出规范化
93编码规范
94程序效率与性能分析
941算法对效率的影响
942影响存储器效率的因素
943影响输入/输出的因素
习题
第10章软件测试方法
101软件测试的基本概念
1011什么是软件测试
1012软件测试的目的和原则
1013软件测试的对象
1014测试信息流
1015测试与软件开发各阶段的关系
1016白盒测试与黑盒测试
102白盒测试的测试用例设计
1021逻辑覆盖
1022语句覆盖
1023判定覆盖
1024条件覆盖
1025判定条件覆盖
1026条件组合覆盖
1027路径覆盖
103基本路径覆盖
104黑盒测试的测试用例设计
1041等价类划分
1042边界值分析
105软件测试的策略
1051单元测试
1052组装测试
1053确认测试
1054系统测试
1055测试的类型
106人工测试
1061静态分析
1062人工测试方法
107自动化测试
1071自动化测试与手工测试
1072脚本技术
1073自动化测试框架及测试流程
108调试
习题
第五部分软件维护与软件管理
第11章软件维护
111软件维护的概念
1111软件维护的定义
1112影响维护工作量的因素
1113软件维护的策略
112软件维护活动
1121软件维护申请报告
1122软件维护工作流程
1123维护档案记录
1124维护评价
113逆向工程
114重构
115程序修改的步骤和修改的副作用
1151分析和理解程序
1152修改程序
1153修改程序的副作用及其控制
1154重新验证程序
116软件的维护性
1161软件维护性定义
1162软件维护性度量
117提高软件维护性的方法
1171使用提高软件维护性的开发技术和工具
1172实施开发阶段产品的维护性审查
1173改进文档
习题
第12章软件过程与软件过程改进
121软件过程概述
122软件生存期过程国际标准
123软件过程成熟度
1231什么是软件过程成熟度
1232过程制度化
124软件能力成熟度模型
1241CMM与SEI
1242CMM的演化
1243CMM族和CMMI
1244CMMI 13简介
1245CMMI评估
125软件过程改进
1251软件过程改进的IDEAL模型
1252软件过程改进框架
1253有效的软件过程
习题
第13章软件项目管理
131软件项目管理概述
1311软件项目管理的目标
1312软件项目管理涉及的几个方面
132项目估算
1321项目策划与项目估算
1322软件规模估算的功能点方法
1323软件开发成本估算
133风险管理
1331什么是软件风险
1332风险管理的任务
1333风险评估
1334风险控制
1335做好风险管理的建议
134进度管理
1341进度控制问题
1342甘特图
1343时标网状图
1344PERT图
135需求管理
1351系统需求与软件需求
1352需求工程
1353需求变更
1354需求变更控制
1355可追溯性管理
136配置管理
1361什么是软件配置管理
1362软件配置标识
1363变更管理
1364版本控制
1365系统建立
1366配置审核
1367配置状态报告
137质量管理
习题
第14章软件工程标准及软件文档
141软件工程标准
1411标准的概念
1412软件标准化的意义
1413标准的分类与分级
1414软件工程标准的制定与实施
1415软件组织内的标准化工作
142软件文档
1421软件文档的作用和分类
1422软件基本文档的内容要求
1423对文档编制的质量要求
1424文档的管理和维护
习题
第15章软件人员的职业道德和社会责任
151当前软件产品和软件产业的社会地位
152软件人员不良行为表现的实例
153软件工程人员的职业道德修养
1531职业道德和社会责任
1532软件工程人员职业道德修养的若干方面
154在软件业中组织职业道德规范的贯彻实施
附录近年国内外软件引起的系统重大事故
参考文献