当前: 首页 - 图书专区 - 现代软件工程
现代软件工程


  在线购买
张家浩
7-111-25352-5
45.00
372
2008年10月27日

计算机 > 软件工程及软件方法学 > 软件方法/软件工程

2756
简体中文
16开

教材
国家示范性软件学院系列教材







软件学院软件工程专业的培养目标是为软件企业培养“软件生产”所需要的工程技术和专业管理人才。因此,作为软件工程专业的核心课程,应在研究一技术-工程-管理的链条上,明确以工程为核心,以技术和管理为半径,建立教学和实践体系,这是本教材的基本指导思想。

  本书的特点如下:
  全面覆盖SWEBOK2004的主要内容,突出强调11个知识领域的重要性、完整性和协同性,并以建立软件开发的软件工程过程概念为核心,让学生能够初步掌握软件工程的需求分析、构架设计和实现、软件测试等专门的工程技术方法、学习和了解项目管理、质量管理、过程控制等基本的过程管理知识。
  在与本课程同步的项目实践的配合下,学生以团队的形式完成一个项目开发过程,亲身感受作为一个开发者同时也是过程控制和管理者所必须注意的各个环节要点。
  配有电子教案,可以减轻老师的教学负担,提高教学质量。
软件工程作为一门学科,从20世纪70年代以来,始终处在发展变化和探索前进之中。随着我国国民经济的起飞,软件产业逐步成为支撑国民经济发展的重要产业部门。国家成立示范性软件学院,也正是意识到传统计算机科学与技术专业学生培养的模式并不能适应现代企业发展的需要,这就要求软件学院从教学体制、教学内容、教学方式等方面做更深入的改革。但是,实事求是地讲,虽然很多软件学院为此进行了艰苦的努力,也取得了一定的进步,但大的格局没有发生根本的改变,很多基本要素没有发生质的变化。软件学院的教学和实践内容、教学组织形式和学科体系建设,都还处在“大拼盘”阶段。而从大的方面讲,我们现在的教育体系如何与国际接轨、与社会发展需求接轨,并不是引进几个人、请一些外教就能解决的。当然,这已经超出了我们这门软件工程课程要讨论的范围。
  我在国内的IT企业待了20多年,也曾出国进修深造,过去多年的绝大部分时间是在软件公司从事开发和技术管理工作。因为一个偶然的机会,我受聘为东南大学软件学院讲授《软件项目管理》、《现代软件工程》等课程,期望利用自己的专业特长和企业背景,教书育人,使我所教授的学生在学习和掌握理论知识的同时,更多地了解现代软件企业的实践,毕业后更好地适应新的岗位,发挥出自己的潜力。
我在跟朋友聊天的时候,他们都建议我把这些年的经历写出来,特别是这20多年从事软件开发和管理的体会。同时,我也看到上海林锐博士的《软工思想》以及《我的大学十年》大受学生们的欢迎,很受启发和鼓舞,所以就萌发了编著本书的想法。在机械工业出版社华章公司的促成下,几经努力,终于成书。
  本书的内容和想法如下。
  一、教学目标和指导思想
  软件学院的软件工程专业的培养目标是为软件企业培养“软件生产”所需要的工程技术和管理专业人才。因此,“软件工程”作为软件工程专业的核心课程,应在理论—技术—工程—管理的链条上,明确以工程为核心,以技术和管理为半径,建立教学和实践体系。这是本课程的基本指导思想。
  美国电气与电子工程师协会等编制的《软件工程知识体系指南》2004版(简称:SWEBOK 2004)概括了现代软件工程知识体系的11个领域,特别是后6个领域,成为软件工程的重要组成部分,是现代软件工程的核心内容。本书将明确以SWEBOK 2004为基本蓝本,学生通过学习本书,能在已经获得的软件基础知识和语言编程技能的基础上,逐步开始建立将软件开发作为一个生产过程的概念,并初步学习和掌握软件工程的需求分析、系统设计和实现、软件测试等专门的工程技术方法,学习和了解软件产品管理、项目管理、质量管理、过程控制等基本过程管理知识。在同步的项目实践的配合下,亲身完成一个项目开发过程,感受作为一个开发者同时也是过程控制和管理者所必须注意的各个环节要点。这是本课程的基本教学目标。
  因此,根据这个目标,我们应该在讲授现代软件工程相关知识点的同时,花更多的精力和时间,教会学生如何理解和把握软件开发过程。本课程内容和项目实践安排全面以IEEE SWEBOK 2004为参照,强调11个知识领域的重要性、完整性和协同性。同时,教师应根据学生的学习阶段,学生对相关管理知识的感知能力及程度,科学地安排相应领域知识点的出现顺序,使学生在课堂教学和项目实践的适当环节上,恰到好处地体会和获得相应的知识,并取得自身真实的感受和经验。
  为了达到这样的目标要求,本课程在注意相关知识的衔接,考虑学生的接受能力,适应学校的师资、教学管理和项目实践条件限制等因素的情况下,对教学内容、形式和考核方法,进行综合设计和改进。本书略去了大量理论和概念论述(这些部分已经被很多相应教材不断重复),而以案例分析代之,并重点突出软件过程的产品和项目管理。
  二、先修课程与核心课程
  在软件学院本科低年级(1、2年级)阶段,应基本完成相关的基础课程。这部分课程主要包括:计算机系统导论、数据结构与算法、数据库与网络开发技术、面向对象的程序设计(C++与Java)以及以学习系统设计基本思想方法为目的的操作系统、编译理论等课程。在基础课程中,建议教师压缩偏向具体物理层(计算机硬件结构等)、算法层(模糊数学、计算方法)的部分,也不过多地展开计算机网络原理、设计、安全等内容。相关部分可安排在项目活动中,由学生根据需要自行补充所需知识。
  从本科高年级(3年级)开始,应进行软件工程的核心课程教学,核心课程是:软件工程概论、软件需求工程与UML、软件体系结构与系统设计,软件测试技术、软件过程与管理(配置、质量、项目、过程管理)、软件职业素质和实践教育。
在研究生阶段,只讲授核心课程部分,但更多地强调软件工程管理。基础部分作为研究生入学考试的考察点,应基本具备,否则,将无法继续进行深入的学习。
  三、各章内容
  本教材分为9章,各章配有课堂作业和项目实践及点评、参考书目等。
  各章内容安排如下:
  第1章:现代软件工程导论;
  第2章:从市场和产品的角度理解软件开发;
  第3章:软件项目的规划管理;
  第4章:现代软件工程的需求工程;
  第5章:软件体系结构与系统概要设计;
  第6章:软件系统的构造与实现;
  第7章:软件质量管理;
  第8章:软件实施过程与管理;
  第9章:软件过程改进。
  四、教材使用建议
  由于软件工程是软件学院的专业方向,因此,在教学时间安排上,本科生的核心课程时间至少应安排1个学年(2个学期)共128学时、研究生的核心课程时间可安排1个学期共64学时。
  (1)两种课程组织模式
  考虑师资、实践条件等因素,第一种组织模式是:只开《现代软件工程》一门主课程,时间为1个学年,按软件开发的生命周期,完整讲授软件工程的11个知识领域内容。其中,需求工程、体系结构设计为开发过程的重点,项目管理、质量管理是支撑过程的重点,配合一个大型的项目实践。同时可根据学生的情况和课时需要,适当增加面向对象设计、需求工程与UML、软件体系结构、软件测试技术等辅助课程或相关的讲座、选修课程。讲座或选修课程在时间、内容上应与主课程的内容衔接,与实践项目过程紧密配合。这种模式的好处是课程紧凑、内容衔接连贯性好,控制比较容易;缺点是缺乏相关技术和工具的深入了解和应用,还需要利用其他时间进行弥补或学生自学进行补充。这对于有学习兴趣和积极性的学生,具有更大的挑战性,而对投入相对不足的学生,则可能成为逃避的借口。
  另一种组织模式是:分别开设软件工程概论、软件需求工程与UML、软件体系结构与系统设计、软件测试技术、软件过程与管理(配置、质量、项目、过程管理)等课程。这种模式的优点是知识面安排全面、周到;但缺点是需要在教学内容、进度和实践项目组织上,进行总体协调,否则容易搞成分散、重复甚至相互冲突的课程。在目前学校的管理模式下,要避免前面提到的问题,估计是很困难的,由此,学生的负担也会增大而产生负面效果。
  (2)如何使用本教材
  本教材是为第一种模式设计的,因为有相当一部分院校可能因为师资、项目实践等方面的原因,没有条件采用第二种模式。
在第一种模式下,本书作为主要教材。
  在第二种模式下,本书可作为软件工程概论(开启)和软件过程管理(总结)两门课程的主要教材。
  下图中加框的部分是本教材的重点,可根据实际情况需要采用并进行裁减。
五、教学形式和考核方式
  在教学形式上,本课程力争实现以项目实践为中心的校内和企业实践教学,实际项目实践与知识传授相结合,课程与项目同步;逐步减少单纯以课堂、书本教学为主,以抽象概念的死记硬背为主的教学模式。
  在教学成果考核方式上,可针对具体目标和成果考察要求来进行。软件工程专业的本科生教育围绕大型软件开发过程中的工程方法、关键技术和相关工具展开,重点在学习软件开发技术的实际应用和理解、体会软件开发过程上。考察的方法可以一个大型项目实践过程(阶段)和项目成果的评审、答辩为依据。作为研究生教育,则重点应放在学习和掌握软件工程的工程方法和控制、支撑和辅助技术上,学习具体软件开发工程的管理。考察的方法是针对项目(可以是已有的项目,也可以是正在进行中的项目)开发过程的过程控制来进行各环节评审、控制和管理工作程序并控制成果。
  六、各章建议课时安排
  依据本教材,建议授课及项目实践的课时安排如下:
  课程要求总学时数为128学时,包括项目实践与阶段评审、老师点评指导。
第一学期安排讲授前4章,其中课堂讲授时间为48学时,学生项目报告与评审/点评时间为12学时,机动4学时,总学时数为64学时,3个学分。学期成绩主要以学生项目实践活动—完成需求分析和评审为主,结合平时成绩,作为学期期末成绩。
第二学期安排讲授后5章,其中课堂讲授时间为42学时,学生项目实践与评审/点评时间为18学时,最后课程总结4学时,总学时数为64学时,3个学分。学期成绩主要以学生项目实践活动—完成项目成果(测试结果)和项目评审为主,结合平时成绩,作为学期期末成绩。
  各章的核心内容、教学要求、教学形式、课时安排和结果检查,将在各章开始时给出。下表内容为各章内容安排、课时数及配套实践活动内容及考核形式,仅作参考。
课程内容 实践内容 考核形式 备注
 1  现代软件工程导论 6 6  企业参观考察
 2  从市场和产品的角度 12 9 3  市场与产品分析  分析报告与老师
理解软件开发 点评
 3  软件项目的规划管理 12 9 3  项目选题与可行性分析、  课题论证报告与
项目计划报告 老师点评
 4  现代软件工程的需求 30 24 6  项目需求分析报告  需求评审与老师
过程 点评
60 48 12  给出学期总成绩 机动4
学时
 5  软件体系结构与系统 30 24 6  系统设计报告  系统设计评审与
概要设计 老师点评
 6  软件系统的构造与实现 6 3 3  基本完成系统编码
 7  软件质量管理 9 6 3  完成单元测试、集成测试
和开发文档
 8  软件实施过程与管理 6 3 3  完成系统测试和最后文档
 9  软件过程改进 9 6 3  完成项目总结和成果提交
60 42 18
10  课程总结 4  项目总结报告和讲评  给出学年总成绩
总课时:128 学分:6
七、致谢
真诚感谢东南大学软件学院的方宁生副院长及学院的各位老师,给我机会将自己20多年软件工程开发和软件项目管理积累的知识及心得体会,传授给新一代软件事业的后来人(包括我自己的儿子,他也是我的学生,并修完了我的这门课程,提出了很多非常不留情面的意见和建议)。
特别感谢机械工业出版社华章分社的各位编辑,由于他们的不断督促和鞭策,使我能按时完成这部书稿。
最后,我也要感谢我的家人对我的支持和帮助。
希望本书能对软件后来人,有所裨益。希望能对我的同行,有所帮助。

张家浩
2008年改于南京百合果园
前言
第1章 现代软件工程导论 1
1.1 软件、软件过程与现代软件工程 2
1.1.1 软件工程:对软件的再认识 2
1.1.2 软件危机:留给软件人长久的困惑 3
1.1.3 生命周期:30年前的初衷与设想 5
1.1.4 四大过程:走出危机的希望与前景 7
1.2 软件工程与软件工程知识体系 9
1.2.1 软件工程生命周期模型的特点 9
1.2.2 过程模型的典范:统一软件过程RUP 12
1.2.3 现代软件工程发展的主要技术特点 13
1.2.4 现代软件工程知识体系SWEBOK 17
1.3 软件企业的现代软件工程实践 18
1.3.1 软件生产过程的流程与工艺特性 18
1.3.2 软件生产过程的支撑与支持特性 20
1.3.3 软件生产过程的综合与协同特性 21
1.3.4 现代软件工程的最佳实践 22
1.4 市场需求与软件工程教学 22
1.4.1 IT职场素质需求 22
1.4.2 市场需求对软件人培养的要求 23
1.5 课堂作业与项目实践点评 23
1.5.1 课堂作业 23
1.5.2 项目实践 24
1.5.3 项目实践点评 24
1.6 本章参考文献 24
第2章 从市场和产品的角度理解软件开发 25
2.1 企业战略与市场分析 25
2.1.1 企业战略决定市场战略 25
2.1.2 市场环境的生物链与5种竞争
因素分析 26
2.1.3 案例分析:某标案的竞争对手
分析与策略选择 29
2.2 行业软件产品的市场营销特点 30
2.2.1 市场营销为产品研发和项目
实施提供导向 30
2.2.2 方案销售是软件市场与产品
营销的典型特点 31
2.2.3 案例分析:行业软件销售的
过程、目标与责任 33
2.3 现代软件工程下的产品开发与管理 35
2.3.1 软件产品管理与产品经理的作用 35
2.3.2 产品经理面向市场的软件产品管理 37
2.3.3 产品经理面向开发的软件产品管理 40
2.3.4 现代软件工程概念下的软件研发
管理 42
2.3.5 案例分析:采用产品线模式开发的
案例 47
2.4 课堂作业与项目实践及点评 48
2.4.1 课堂作业 48
2.4.2 项目实践1:市场分析报告 48
2.4.3 市场分析报告点评 51
2.4.4 项目实践2:商业计划书 53
2.4.5 商业计划书点评 53
2.5 本章参考文献 55
第3章 软件项目的规划管理 56
3.1 项目与项目管理的基本概念 56
3.1.1 项目的概念与属性 56
3.1.2 项目的范畴要素 57
3.1.3 项目管理的概念 59
3.1.4 项目的生命周期与任务 60
3.1.5 项目的组织结构与项目经理 62
3.1.6 项目管理知识体系PMBOK 65
3.1.7 案例分析:项目管理成熟度
水平的判断 67
3.2 软件项目的时间管理 70
3.2.1 项目的工作分解结构WBS 70
3.2.2 PMBOK的时间管理概念 73
3.2.3 PMBOK的时间管理过程 74
3.2.4 软件生命周期模型与时间管理 80
3.2.5 软件项目的规模、工作量和
进度估算 82
3.2.6 案例分析:软件项目规划
管理的关键与难点 91
3.3 软件项目的成本管理 91
3.3.1 PMEBOK的成本管理概念 92
3.3.2 PMEBOK的成本管理过程 93
3.3.3 案例分析:软件项目成本
管理的实例操作 94
3.4 课堂作业与项目实践及点评 101
3.4.1 课堂作业 101
3.4.2 项目实践 102
3.4.3 项目实践点评 102
3.5 本章参考文献 103
第4章 现代软件工程的需求工程 104
4.1 从传统需求分析到现代需求过程 104
4.1.1 需求与需求管理的概念 104
4.1.2 传统需求分析的局限 105
4.1.3 需求管理的问题与现代需求过程 107
4.1.4 CMM的需求管理要求 110
4.1.5 PMBOK的范围管理过程 110
4.2 项目范围与软件需求管理 111
4.2.1 需求开发过程的四个阶段 111
4.2.2 需求获取与软件项目的范围定义 112
4.2.3 传统问题定义过程的方法 114
4.2.4 案例分析:确定系统的目标与
假定约束 117
4.3 需求获取过程与软件需求管理 120
4.3.1 需求获取阶段的目标与要求 120
4.3.2 需求获取与UML的业务模型 120
4.3.3 需求获取阶段的成果与需求
管理重点 124
4.3.4 需求用户确认与需求评审的误区 125
4.3.5 案例分析:分析执行者与用例,
确定系统范围 126
4.4 需求分析过程与软件需求管理 130
4.4.1 需求分析阶段的目标与要求 130
4.4.2 需求分析与UML的静态模型 132
4.4.3 需求分析与UML的动态模型 136
4.4.4 需求分析与UML的体系结构模型 140
4.4.5 需求分析阶段的成果与需求管理
重点 141
4.4.6 案例分析:平衡与细化需求定义 141
4.5 需求处理和验证过程与软件需求管理 145
4.5.1 需求处理过程与需求管理重点 145
4.5.2 需求验证过程与需求管理重点 149
4.5.3 案例分析:需求规格说明书的
实例参考 150
4.6 需求实现过程与软件需求管理 152
4.6.1 需求的实现过程与管理 153
4.6.2 需求的变更控制与管理 157
4.6.3 案例分析:使用RequisitePro
需求管理工具 161
4.7 课堂作业与项目实践及点评 163
4.7.1 课堂作业 163
4.7.2 项目实践1:目标和范围定义 163
4.7.3 目标和范围定义点评 164
4.7.4 项目实践2:需求分析报告 166
4.7.5 需求分析报告点评 167
4.7.6 期末考试方法建议 168
4.8 本章参考文献 169
第5章 软件体系结构与系统概要设计 170
5.1 体系结构的基本问题 170
5.1.1 体系结构的基本概念 170
5.1.2 传统体系结构的思路方法 174
5.1.3 案例分析:RUP基于体系
结构的迭代 175
5.2 软件系统的框架与体系结构 176
5.2.1 现代体系结构模型的基本概念 176
5.2.2 两种典型的体系结构模型分析 179
5.2.3 应用系统体系结构的构成要素 183
5.2.4 案例分析:《电信综合营业
管理系统》的设计思路 184
5.3 面向对象的设计模式 189
5.3.1 从体系结构到设计模式 189
5.3.2 创建型设计模式 190
5.3.3 其他设计模式 195
5.3.4 案例分析:创建游戏迷宫的
设计模式应用 196
5.4 MVC设计模式应用 201
5.4.1 界面设计的可变需求 201
5.4.2 MVC的结构 202
5.4.3 MVC的实现 204
5.4.4 MVC的更进一步发展 205
5.4.5 MVC的变化与评价 206
5.4.6 案例分析:Struts应用 207
5.5 基于构件的现代软件工程 215
5.5.1 构件概念与构件的特性 215
5.5.2 三种主要构件模型与应用特点 216
5.5.3 基于构件的框架与体系结构设计 219
5.5.4 案例分析:软件无线电系统的
体系结构 222
5.6 从需求分析到系统概要设计过程 227
5.6.1 系统概要设计的任务与要求 227
5.6.2 面向结构的系统设计方法 228
5.6.3 案例分析:产生“菜单”
结构的系统结构分析 230
5.6.4 面向对象的系统设计方法 233
5.6.5 案例分析:电梯控制系统的
设计过程 236
5.7 课堂作业与项目实践及点评 238
5.7.1 课堂作业 238
5.7.2 项目实践 239
5.7.3 项目实践点评 239
5.8 本章参考文献 240
第6章 软件系统的构造与实现 241
6.1 系统详细设计的目标与实现的任务 241
6.1.1 概要设计与详细设计目标的区别 241
6.1.2 面向对象的详细设计任务和原则 242
6.1.3 面向对象的详细设计与实现 244
6.1.4 案例分析:Java程序编写格式的
内部参考规范 247
6.2 课堂作业与项目实践及点评 251
6.2.1 课堂作业 251
6.2.2 项目实践 251
6.2.3 项目实践点评 251
6.3 本章参考文献 251
第7章 软件质量管理 252
7.1 软件质量的要素与度量 252
7.1.1 软件质量的概念 252
7.1.2 软件质量的度量要素 255
7.1.3 软件质量要素的度量 258
7.1.4 软件质量度量的实施 261
7.1.5 案例分析:软件测试活动的
绩效度量 262
7.2 软件测试活动的组织与管理 263
7.2.1 软件测试的概述 263
7.2.2 软件测试的计划、组织与管理 267
7.2.3 案例分析:测试错误分类及
测试报告 271
7.3 软件审查活动的组织与管理 273
7.3.1 审查准备与审查过程 274
7.3.2 审查内容与审查的关键点 276
7.3.3 案例分析:测试评审与分析报告 279
7.4 软件配置管理的方法与实践 280
7.4.1 软件配置及其管理的概念 280
7.4.2 主要配置管理活动和流程 283
7.4.3 配置管理下的版本管理 286
7.4.4 配置管理下的变更管理 293
7.4.5 配置状态监测、报告与评审 297
7.4.6 基于配置管理的软件项目管理 298
7.4.7 案例分析:配置管理的实施 302
7.5 课堂作业与项目实践及点评 307
7.5.1 课堂作业 307
7.5.2 项目实践 308
7.5.3 项目实践点评 308
7.6 本章参考文献 308
第8章 软件实施过程与管理 309
8.1 软件的实施过程与控制 309
8.1.1 软件实施过程的概念 309
8.1.2 软件系统的现场实施过程 310
8.1.3 案例分析:一个现场项目的
实施过程介绍 311
8.2 软件的维护过程与控制 315
8.2.1 软件维护的概念 315
8.2.2 软件维护的过程 318
8.2.3 软件的可维护性管理 319
8.3 软件项目的实施阶段管理 324
8.3.1 项目团队管理与激励 324
8.3.2 项目沟通与协调 332
8.3.3 软件项目风险管理 337
8.4 课堂作业与项目实践及点评 350
8.4.1 课堂作业 350
8.4.2 项目实践 350
8.4.3 项目实践点评 350
8.5 本章参考文献 350
第9章 软件过程改进 351
9.1 软件过程概念与过程改进的基本问题 351
9.1.1 过程与软件过程的概念 351
9.1.2 实施软件过程改进 353
9.2 个人软件过程PSP 355
9.2.1 PSP的产生 356
9.2.2 PSP与CMM 356
9.2.3 PSP的成熟度过程 357
9.2.4 PSP的主要内容 358
9.2.5 PSP与TSP过程 359
9.2.6 PSP、TSP的应用及效果 359
9.3 其他软件过程探讨 360
9.3.1 极限编程(XP)与敏捷软件过程 360
9.3.2 开源软件(OSS)的得与失 367
9.4 课堂作业与项目实践及点评 370
9.4.1 课堂作业 370
9.4.2 项目实践 371
9.4.3 项目实践点评 371
9.4.4 期末考试 371
9.5 本章参考文献 372
读者书评
发表评论



高级搜索
死亡之旅(原书第2版)
面向对象开发方法
精益软件开发管理之道


版权所有© 2008 北京华章图文信息有限公司 京ICP备08102525号 京公网安备110102004606号
通信地址:北京市百万庄南街1号 邮编:100037
电话:(010)68318309, 88378998 传真:(010)68311602, 68995260