软件工程是一门工程性学科,它总结了软件开发过程中的种种经验教训和指导性原则,形成了一套相对完整的软件开发思想体系。在构建软件的过程中,综合运用了许多计算机科学中的基础学科知识,是理论与实践相结合的综合载体。总体来讲,软件工程这门学科一方面关注软件开发过程中使用的技术方法和工具,另一方面强调了软件工程在实践过程中应当遵循的基本原理和指导性原则。
为了更好地帮助读者理解所讲述的内容,本教材采用一个真实案例贯穿始终,指导读者在实际项目中如何灵活应用所讲述的知识。在每个项目实施的阶段,都设定一个案例分析环节,剖析项目在实施过程中是如何一步步得到推进,贯彻分析设计技术的,让读者体会如何将理论与实践相结合,如何解决实际问题。最后通过每章课后设置的多项练习,巩固读者对问题的理解,强化读者解决实际问题的能力。
教材的内容结构安排首先从整体上介绍软件工程的整个知识体系及经典的软件开发过程模型,然后以面向对象知识体系为主线,按照软件生命周期的顺序讲解软件从需求确定、系统分析、系统设计、编码实现、软件测试及软件维护等环节的基础理论。
在本教材中,软件工程知识体系的相关内容共分为11章。第1章是对软件工程领域的整体概述,着重介绍了软件开发过程模型;第2章是对软件项目管理核心内容的介绍;第3章~第10章采用面向对象技术,依托一个案例讲解软件生命周期各过程中的基本原理和建模方法。第11章则给出两个完整案例的建模过程供读者参考。
目录第1章软件工程概述1
1.1项目引入1
1.2需要解决的问题1
1.3软件工程的历史2
1.4我国软件工程的发展4
1.5软件工程的基本概念4
1.6软件工程的基本原理5
1.7软件生命周期6
1.8软件开发过程模型8
1.8.1瀑布模型9
1.8.2原型模型10
1.8.3螺旋模型12
1.8.4迭代开发与RUP13
1.8.5敏捷软件开发17
1.9项目实施25
1.10本章小结27
1.11习题27
第2章软件项目管理29
2.1项目引入 29
2.2项目分析29
2.3软件项目管理概述30
2.4项目人力资源管理31
2.4.1项目人力资源管理定义31
2.4.2项目人力资源构成描述33
2.5项目范围管理33
2.5.1项目范围计划33
2.5.2项目范围定义34
2.5.3项目范围确认34
2.5.4项目范围控制35
2.6项目进度管理35
2.6.1创建工作分解结构36
2.6.2活动定义37
2.6.3活动排序37
2.6.4活动资源估算37
2.6.5活动历时估算38
2.6.6制订进度计划38
2.6.7进度控制40
2.7项目风险管理41
2.7.1风险的分类41
2.7.2风险的识别42
2.7.3风险的评估42
2.7.4风险的驾驭和监控43
2.8项目配置管理44
2.8.1配置管理相关概念44
2.8.2配置管理计划45
2.8.3变更管理46
2.8.4版本管理47
2.9项目质量管理48
2.9.1质量规划48
2.9.2执行质量保证51
2.9.3执行质量控制51
2.10项目实施52
2.10.1角色的映射52
2.10.2开发案例中的制品53
2.10.3为初始阶段制订计划54
2.11本章小结54
2.12习题55
第3章需求概述57
3.1项目引入57
3.2项目分析57
3.3基本概念58
3.3.1什么是需求58
3.3.2需求的分类58
3.4需求阶段的任务和目标61
3.5需求获取方法62
3.5.1建立联合分析小组62
3.5.2客户访谈62
3.5.3问卷调查62
3.5.4快速原型法62
3.5.5问题分析与确认64
3.6需求调查的主要内容64
3.7功能建模的方法介绍65
3.7.1数据流图法65
3.7.2功能列表法65
3.7.3原型法65
3.7.4用例模型65
3.7.5用户故事66
3.8需求确认66
3.9迭代中需求的特点67
3.10项目实施68
3.10.1项目背景说明68
3.10.2涉众68
3.10.3用户需求69
3.10.4非功能性需求70
3.11本章小结70
3.12习题71
第4章需求建模72
4.1项目引入72
4.2项目分析72
4.3业务流程描述73
4.3.1什么是业务流程73
4.3.2业务流程的图形化表示73
4.4用例模型76
4.4.1用例的描述形式78
4.4.2用例图80
4.5用例产生的过程82
4.5.1事件列表83
4.5.2从事件列表转换成用例85
4.5.3用例的描述87
4.5.4用例的优先级确定增量89
4.6补充性规格说明90
4.7项目实施90
4.7.1业务流程说明90
4.7.2用例模型92
4.8本章小结97
4.9习题97
第5章系统分析101
5.1项目引入101
5.2项目分析101
5.3领域模型102
5.3.1什么是领域模型102
5.3.2如何构建领域模型104
5.3.3何时构建领域模型108
5.4动态模型——状态的标识108
5.5健壮性分析110
5.5.1健壮图的表示法110
5.5.2健壮图的使用规则111
5.6动态模型——顺序图的转换115
5.6.1将健壮性分析与顺序图对应115
5.6.2为静态类图增加方法116
5.7项目实施118
5.7.1构建领域模型118
5.7.2捕捉状态变迁120
5.7.3健壮性分析121
5.7.4构建顺序图122
5.7.5整理分析类图122
5.8本章小结123
5.9习题124
第6章系统设计127
6.1项目引入127
6.2项目分析127
6.3什么是软件体系结构128
6.4软件设计的通用原则129
6.5应用程序的分割131
6.5.1按照业务划分132
6.5.2按照层次划分 133
6.6体系结构模型135
6.6.1客户机/服务器模型136
6.6.2分层体系结构137
6.6.3数据仓库模型137
6.6.4管道/过滤器模型138
6.7体系结构的表示139
6.7.1逻辑结构139
6.7.2物理结构141
6.8体系结构设计过程142
6.8.1制定核心业务架构142
6.8.2制定物理体系结构143
6.8.3确定分层策略144
6.8.4确定执行体系结构(选择框架)144
6.9用户界面设计145
6.10持久化设计148
6.10.1设计目标149
6.10.2数据库设计步骤149
6.11项目实施152
6.11.1体系架构设计152
6.11.2数据库的设计154
6.11.3界面设计157
6.12本章小结158
6.13习题158
第7章对象设计161
7.1项目引入161
7.2项目分析161
7.3类的设计原则162
7.3.1单一职责原则163
7.3.2开闭原则164
7.3.3依赖倒转原则166
7.3.4里氏替换原则 168
7.3.5接口隔离原则169
7.3.6合成复用原则171
7.3.7最少知识原则172
7.4设计模式的应用173
7.4.1策略模式173
7.4.2单例模式175
7.4.3适配器模式178
7.4.4工厂方法模式179
7.5设计模式应用的注意事项181
7.6完善软件设计类181
7.7项目实施182
7.8本章小结185
7.9习题185
第8章软件实现188
8.1项目引入188
8.2项目分析188
8.3模型向代码的转换189
8.3.1类图与代码的关系189
8.3.2类之间的关系190
8.3.3顺序图与代码的对应192
8.4编码规范195
8.4.1源程序文档化196
8.4.2数据说明199
8.4.3语句结构199
8.4.4输入/输出200
8.4.5Java Web编码规范201
8.5版本控制203
8.5.1版本控制分类203
8.5.2Git的安装与使用205
8.5.3SVN的安装与使用207
8.6DevOps208
8.7项目实施209
8.8本章小结210
8.9习题210
第9章软件测试212
9.1项目引入212
9.2需要解决的问题213
9.3软件测试的目的和原则213
9.4软件测试与软件开发各阶段的关系214
9.5经典测试方法215
9.6黑盒测试216
9.6.1等价类划分216
9.6.2边界值分析法219
9.6.3错误推测法220
9.6.4因果图法220
9.6.5场景测试法223
9.7白盒测试226
9.7.1逻辑覆盖226
9.7.2基本路径覆盖229
9.8测试过程234
9.8.1单元测试235
9.8.2集成测试236
9.8.3确认测试238
9.8.4系统测试238
9.8.5验收测试238
9.9单元测试工具Junit238
9.10项目实施243
9.11本章小结246
9.12习题247
第10章软件维护249
10.1项目引入249
10.2项目分析249
10.3软件维护的种类250
10.4软件维护的过程251
10.5软件维护的成本253
10.6项目实施254
10.7本章小结255
10.8习题255
第11章综合练习参考答案257
11.1第4章 需求建模参考257
11.2第5章 系统分析参考261
11.3第6章 系统设计参考264
11.4第7章 对象设计参考269
11.5第8章 软件实现参考270
11.6第9章 软件测试参考271
附录A面向对象技术概述273
A.1面向对象的基本概念273
A.1.1对象(Object)273
A.1.2类(Class)274
A.1.3实例(Instance)275
A.1.4消息(Message)275
A.1.5方法(Method)275
A.1.6属性(Attribute)275
A.1.7封装(Encapsulation)275
A.1.8继承(Inheritance)276
A.1.9多态性(Polymorphism)276
A.1.10重载(Overloading)276
A.2面向对象方法的总结277
A.3面向对象建模278
附录B学习知识要点及能力要点281
参考文献284
2016年6月,中国成为国际本科工程学位互认协议《华盛顿协议》的正式会员,这是中国工程教育国际化进程的重要里程碑。“回归工程”、培养学生的“大工程观”是当今国际工程教育的主流理念。《华盛顿协议》对毕业生提出的12条素质要求中,不仅要求工程知识、工程能力,还强调通用能力和品德伦理;在实践上,以学生为中心,以产出为导向,注重对目标达成的支撑及持续改进,与CDIO工程教育实质等效。
CDIO工程教育是近年来国际工程教育改革的最新成果,以“预期学习结果”集合来驱动课程内容、教学方法、教育文化的设计,重视营造工程教育文化,其注重工程能力培养和基于工程项目全生命周期的一体化设计思想,对于国内工程类和相关专业的建设具有重要的实施价值。
作为承载了教学改革思想的载体,融入CDIO工程教育理念的高品质教材,东软CDIO工程教育教材在注重理实结合的同时,也注重对学生八大能力的培养,即:技术知识与推理能力,开放式思维与创新,个人职业能力,沟通表达与团队合作,态度与习惯,责任,价值观,实践构思、设计、实现和运行对社会的贡献。
CDIO工程教育教材是 CDIO教育教学改革在教学实施过程中的集中体现,它不仅承载着课程和项目的教学内容,而且贯穿和体现了CDIO工程教育的理念、思想与方法,是在系统化理论的指导下,将知识、能力、素质培养进行一体化设计,有机融合在教材体系中。教材的编写以能力培养为主线,以案例教学为引导,以项目为载体,充分体现“做中学”和“学中做”的思想,具有以下优势:
(1)以能力培养为主线,培养学生专业知识学习能力和工程实践能力。
(2)以案例为驱动,在做案例的过程中学习新知识,充分体现了“做中学”。
(3)以项目为载体,基于工程化教育方法,按照分析、设计、实施、运行展开项目及知识点的讲解。
(4)围绕专业知识结构和能力体系设计教材,实现同一专业下不同教材紧密的关联性。
(5)内容编排循序渐进,符合人的认知规律。
(6)适应柔性化教学变革,构建一体化、立体化教学资源。
CDIO工程教育教材可供以应用型人才为培养目标的高等院校以及职业培训机构作为教材使用。
目前,CDIO工程教育教材的建设还处于探索阶段,是一项创造性的工作,尚需要通过改革的实践不断加以深化和持续改进,任重而道远。