内容简介
书籍 计算机书籍
高校本科软件工程导论教材,适合一学期讲授,提供系统的工程方法来讲述软件工程的原籍和方法学。全书内容全面而且具体简洁。
作译者
弗兰克;徐(Frank Tsui)在软件和IT产业有30多年的从业经验,曾担任多家跨国软件企业的研发主管或VP。他目前是南方州立理工大学计算机和软件工程学院的全职教授,还是佐治亚理工学院和堪萨斯州立大学的兼职教授。
奥兰多;卡拉姆(Orlando Karam)目前是堪萨斯州立大学教员。他在敏捷开发和开源软件社区非常活跃,还积极参与软件复杂性的研究。
芭芭拉;博纳尔(Barbara Bernal)目前是堪萨斯州立大学软件工程教授,她的专长是用户界面和以用户为中心的设计领域。她还积极参与美国工程教育协会和软件工程师教育学会的工作。
目录
出版者的话
译者序
前言
第1章 创建一个程序1
1.1 一个简单的问题1
1.1.1 决策1
1.1.2 功能需求2
1.1.3 非功能需求3
1.1.4 设计约束3
1.1.5 设计决策4
1.2 测试4
1.3 估算工作量5
1.4 实现6
1.4.1 关于实现的几个要点6
1.4.2 基本设计7
1.4.3 使用JUnit进行单元测试8
1.4.4 StringSorter的实现8
1.4.5 用户界面12
1.5 总结14
1.6 复习题14
1.7 练习题15
1.8 参考文献和建议阅读15
第2章 构建一个系统16
2.1 构建一个系统的特征16
2.1.1 规模和复杂度16
2.1.2 开发和支持的技术考虑17
2.1.3 开发和支持的非技术考虑19
2.2 系统构建示例20
2.2.1 薪资管理系统需求21
2.2.2 设计薪资管理系统22
2.2.3 薪资管理系统编码和单元测试23
2.2.4 薪资管理系统的集成和功能测试24
2.2.5 发布薪资管理系统24
2.2.6 支持和维护25
2.3 协调工作25
2.3.1 过程25
2.3.2 产品26
2.3.3 人员26
2.4 总结26
2.5 复习题27
2.6 练习题27
2.7 参考文献和建议阅读27
第3章 工程化软件28
3.1 软件失败的示例和特点28
3.1.1 项目失败28
3.1.2 软件产品失效29
3.1.3 协调和其他关注点30
3.2 软件工程30
3.2.1 什么是软件工程30
3.2.2 软件工程的定义31
3.2.3 软件工程与软件的相关性31
3.3 软件工程职业与道德规范32
3.3.1 软件工程道德准则32
3.3.2 职业行为33
3.4 软件工程的原则34
3.4.1 早期由Davis提出的软件工程原则34
3.4.2 更现代的Royce原则35
3.4.3 Wasserman提出的软件工程基础概念36
3.5 总结37
3.6 复习题37
3.7 练习题37
3.8 参考文献和建议阅读38
第4章 软件过程模型39
4.1 软件过程39
4.1.1 软件过程模型的目标39
4.1.2 “最简单”的过程模型40
4.2 传统过程模型40
4.2.1 瀑布模型40
4.2.2 主程序员制团队方法41
4.2.3 增量模型41
4.2.4 螺旋模型43
4.3 一个更加现代的过程44
4.3.1 Rational统一过程框架的一般基础44
4.3.2 RUP的阶段44
4.4 进入和退出标准46
4.4.1 进入标准47
4.4.2 退出标准47
4.5 过程评估模型48
4.5.1 SEI的能力成熟度模型48
4.5.2 SEI的能力成熟度集成模型50
4.6 过程定义和通信55
4.7 总结55
4.8 复习题56
4.9 练习题56
4.10 参考文献和建议阅读56
第5章 新兴过程方法58
5.1 什么是敏捷过程58
5.2 为什么使用敏捷过程59
5.3 一些过程方法59
5.3.1 极限编程60
5.3.2 水晶系列方法63
5.3.3 敏捷统一过程65
5.3.4 Scrum66
5.3.5 看板方法:一个新增的敏捷方法67
5.3.6 开源软件开发68
5.3.7 过程总结69
5.4 过程的选择70
5.4.1 每一种过程更适用的项目和环境70
5.4.2 敏捷过程的主要风险和缺点71
5.4.3 敏捷过程的主要优点71
5.5 总结71
5.6 复习题71
5.7 练习题72
5.8 参考文献和建议阅读72
第6章 需求工程73
6.1 需求处理73
6.1.1 需求处理的准备73
6.1.2 需求工程过程74
6.2 需求获取与收集75
6.2.1 获取高层次的需求76
6.2.2 获取详细的需求77
6.3 需求分析79
6.3.1 通过业务流进行需求分析和聚类79
6.3.2 通过面向对象用例进行需求分析和聚类80
6.3.3 通过面向视点的需求定义进行需求分析和聚类82
6.3.4 需求分析与排序82
6.3.5 需求可追踪性84
6.4 需求定义、原型化和审查84
6.5 需求规约与需求协商87
6.6 总结88
6.7 复习题88
6.8 练习题89
6.9 参考文献和建议阅读89
第7章 设计:架构与方法论91
7.1 设计简介91
7.2 架构设计92
7.2.1 什么是软件架构92
7.2.2 视图与视角92
7.2.3 元架构知识:风格、模式、策略和参考架构93
7.2.4 基于网络的Web参考架构—REST97
7.3 详细设计98
7.3.1 功能分解98
7.3.2 关系型数据库设计100
7.3.3 大数据设计103
7.3.4 面向对象设计和UML104
7.3.5 用户界面设计108
7.3.6 进一步的设计问题112
7.4 HTML-Script-SQL设计示例112
7.5 总结114
7.6 复习题115
7.7 练习题115
7.8 参考文献和建议阅读115
第8章 设计的特征与度量117
8.1 设计描述117
8.2 设计属性的传统特征117
8.2.1 Halstead复杂度度量118
8.2.2 McCabe圈复杂度118
8.2.3 Henry-Kafura信息流119
8.2.4 高层次复杂度度量120
8.3 “好”的设计属性120
8.3.1 内聚121
8.3.2 耦合123
8.4 面向对象设计度量125
8.4.1 面向方面的编程127
8.4.2 Demeter法则127
8.5 用户界面设计127
8.5.1 好的UI的特征127
8.5.2 易用性的评估与测试128
8.6 总结129
8.7 复习题129
8.8 练习题130
8.9 参考文献和建议阅读130
第9章 实现133
9.1 实现简介133
9.2 好的实现的特征133
9.2.1 编程风格和代码规范134
9.2.2 注释136
9.3 实现的实践137
9.3.1 调试137
9.3.2 断言和防御性编程138
9.3.3 性能优化138
9.3.4 重构139
9.3.5 代码重用140
9.4 云开发140
9.4.1 基础设施即服务141
9.4.2 平台即服务142
9.4.3 云应用服务142
9.4.4 面向开
......
前言
本书源自我们软件工程导论的教学经验。尽管市面上已有不少同类图书,但很少有仅介绍核心内容,适用于一门为期一学期(授课16周,每周大约3学时)的课程的教材。随着小规模网络应用的激增,许多信息技术新人尚未完全理解软件工程必备知识就进入软件工程领域。本书适用于经验有限的新生和打算在软件工程领域开始新职业的经验丰富的信息技术专业人员。本书覆盖软件系统完整的生命周期,范围从初始阶段到发布阶段直至支持阶段。
媒体评论
本书是一本概要介绍软件工程核心内容的导论性教材。全书共14章,完整覆盖了从初始阶段到发布、支持阶段的软件系统生命周期,讨论了贯穿软件生命周期的过程、质量保障及项目管理等问题。
软件工程是一门实践性很强的学科,本书的三位作者Frank Tsui、Orlando Karam和Barbara Bernal,除积累了软件工程课程教学的丰富经验外,还拥有多年在IBM、微软和亚马逊等公司从事软件研发和管理的工作经历。本书中也融入了他们的丰富工程经验和职业背景,并用生动的示例贯穿全书,使读者更易理解相关概念。
本书包含对编程思想、系统分析和设计、软件工程原理、开发和支持过程、方法、软件测试和质量以及产品管理的全面概述,内容精练,案例丰富。新版增加了大数据设计和在“云”中进行开发等新内容,使之更加符合当今软件技术发展和高校软件工程课程的需求。
主要特点
覆盖了软件工程领域的广阔范围,适用于入门课程。
明确区分并解释了软件工程及软件过程、软件开发和软件管理等子主题。
可在一个学期(16周)内简要地讲授相关主题。
新版增加了关于大数据设计、“云”开发的两章,并更新了敏捷开发过程(如看板方法)和大数据技术(如Hadoop)的内容。