首页>参考读物>计算机科学与技术>综合

基于项目的软件工程:面向对象研究方法
作者 : (美)Evelyn Stiller,Cathie LeBlanc
译者 : 贲可荣 张秀山
出版日期 : 2002-06-01
ISBN : 7-111-10101-4
定价 : 30.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 260
开本 : 16开
原书名 : Project-Based Software Engineering: An Object-Oriented Approach
原出版社:
属性分类: 店面
包含CD :
绝版 : 已绝版
图书简介

本书是集软件工程实用性与实践性于一体的第一本教科书,阐述了软件工程生命周期的各个阶段,并通过对两个现行案例的分析来认识开发过程中的概念化、分析、设计和实现阶段。这两个案例可以由一个小型软件开发组来实践,同时给出各阶段的成品。书中还包括一个完整的软件开发项目,学生可将对各阶段的理解和经验应用于其中。
本书集中讨论面向对象软件开发,并按此范型组织内容。本书不依赖于具体的程序设计语言(必要的代码示例用Java给出),并采用统一建模语言(UML)的子集来为软件建模,解释学生工作中需要用到的符号。
本书为学生而写,可作为计算机专业本科生、非计算机专业研究生的软件工程教材,亦可作为软件开发者、组织者和管理者的参考书。

图书特色

贲可荣   男,1963年8月生,江苏省海安县人。现任海军工程大学教授。 1983年在苏州大学数学系获理学学士学位,1986年在南京大学数学系获理学硕士学位。1986年8月至1990年3月在海军工程大学计算机系任教。1994年6月在国防科技大学获工学博士学位。攻读博士学位期间,由国防科技大学计算机学院陈火旺院士指导,主修计算机软件。1994年12月任海军工程大学计算机系副教授。1995年起担任计算机应用技术专业硕士生导师、海军工程大学学位评定委员会委员。2000年3月至2001年3月在武汉大学软件工程国家重点实验室作访问学者。2000年被教育部确定为海军首批十名骨干教师之一。2000年12月晋升为教授。 译著有《净室软件工程—技术与过程》(2001年由电子工业出版社出版)和《能力成熟度模型(CMM):软件过程改进指南》(2001年由电子工业出版社出版),参与编写了《海军高科技知识教材》(1997年由海军司令部出版)、《计算机科学技术百科全书》(1998年由清华大学出版社出版)。先后承担两项国家自然科学基金项目、一项国家863项目。在《中国科学》、《软件学报》、《数学年刊》等刊物和学术会议发表论文50余篇。成果获军队科技进步奖。主要研究方向包括:软件可靠性、软件质量保证技术、形式化方法等。兼任中国计算机学会计算机理论专业委员会委员、中国造船工程学会电子技术学术委员会委员、海军工程大学职称评审委员会委员,《海军工程大学学报》、《舰船电子工程》等刊物编委。

图书前言

软件工程的教学实践表明,如果没有亲身体验,学生很难相信软件工程技术的好处。让学生相信软件工程对其软件开发生涯至关重要的最有效的方法是让他们完成为时一个学期的软件项目的开发。普利茅斯新罕布什尔州立学院开设的软件工程课是一门以面向对象的软件开发为重点、集实用性与实践性于一体的课程。然而,多年来我们却苦于找不到合适的教材。市面上软件工程方面的教材大多重理论轻实践,那些基于项目的教材并没有把重点放在面向对象的范型中来。我们编写此书的目的就是要填补这一空白。
本书重点介绍了软件工程的实际应用,理论性的概念和术语只有在为确保软件成功开发所必需时才予以介绍。软件开发的方法虽有不少,但我们还是把本书的重点放在应用于班级项目的面向对象的软件开发方法之上。
让学生参与一学期的集体项目,可让学生体验到专业合作的重要性,对此他们似乎很乐意。教授一门基于项目的软件工程课程最重要、也最困难的一点是如何选择合适的项目。因为所选项目必须足够复杂,以便让学生以3~5人为单位组成一个开发小组,同时又必须能在15周内完成。比达到目标更具挑战性的是所选的项目必须引起学生的兴趣,能激发学生的积极性。为此,我们在书中提供了一个班级项目。普利茅斯新罕布什尔州立学院学生已经试验了这个项目,由具有不同编程技巧和分析能力的学生组成的4人开发小组以极大的热情成功地完成了这个项目。
本书主要面向缺乏或没有计算机科学理论基础的计算机科学专业的本科生。本书在编写时还做到尽量不依赖于某一具体编程语言,当需要语言细节时,选用Java语言。本书不用作软件工程技术及编程的参考手册,而是提供一种可在15周内完成一个大型软件项目的专门开发方法。
由于假定学生在一学期的时间内完成项目,因此在第2章中介绍了学期计划。在此计划中,项目在学期开始后不久即展开。因为我们想让学生尽可能多地实践软件开发的方法,所以有些主题作了一些简化。尤其是,要从与非专业用户的讨论中提取功能需求是一项困难的任务,需要丰富的实践经验才能顺利完成。因而,我们假定在学期开始前需求已差不多由授课教师提取完成。
为增强本书的实用性,我们还提供了两个现行的案例分析,用作为时一学期的项目开发的样板。案例分析中内含有成品的样本,举例说明学生在其项目的生命周期中所要交付的资料的类型。
本书另一重要特点是它用一种几乎是独一无二的方式重点讲述了面向对象的软件开发范型。尽管我们将面向对象的方法看作是业界先前采用的范型的逻辑延伸,但是本书还是将面向对象项目按概念形成、分析、设计及实现的结构予以介绍,并对软件工程技术作了历史综述,向学生介绍了面向对象范型的前身。
虽然本书并没有把长期的软件危机作为使用软件工程技术的独特动机,但是书中还是介绍了一系列软件开发的灾难故事,以便学生了解如果忽略软件工程诸方面会造成什么样的后果。这些故事不属于入门材料,将它们放在书中的后半部分,以免推迟启动软件工程项目所需的章节。
在介绍组成面向对象范型的技术时,使用了统一建模语言(UML)为软件建模。由于UML大得有些吓人,因此本书按照“当需要时”的原则介绍了该语言的一个子集。本书不用作UML方面的综合参考书,这方面的参考书已经很多。在本书中,UML只是一种工具,正如它在“现实世界”软件开发中被用作工具一样。
适于教学的特点
每章开头部分都列出了该章所包含的重要概念。
由我们的学生测试过的班级项目贯穿始终。项目大到由3~5名学生在一学期内完成。每一章中都有完成此项目所必须进行的一系列活动,以及随之而来的项目每部分的成品规格说明。
虽然书中包含了一个班级项目,但在讲授此书时,可以简单地抛开它。如果教师不用此项目,也可用其他项目(或一组项目)代替。
每一章的最后都是复习题,可让学生进一步实践书中涉及的内容,题目的复杂性和难度各异。
贯穿每一章的习题通常用作实验。大多数习题可由教师安排在课堂上完成,也可在课下完成。
UML只在必需时才出现。当在开发方法的特殊步骤需特殊的建模技术时,对该技术才进行介绍并给出示例。用此方法介绍了UML的一个子集。
案例分析贯穿始终。第一案例分析出现在书中开始部分,随着对各个步骤的介绍而不断深入。第二个案例分析出现在第6章,作为开发方法的设计及分析阶段的复习,第二个案例分析一直延续到书中后面的章节。
要点栏用来快速回顾软件开发方法。
章节安排上以能让学生在一学期内完成班级项目为原则。例如,在最后4周,学生正在进行项目的编码和测试工作,实现和测试的内容已作了介绍,此时书中开始讲述项目管理、风险管理、设计模式和软件开发的灾难故事这样的内容。
书中包含已在课堂上进行了测试的项目和进度。
最后一章的主角转向学生,要求学生回想其班级项目的实践。一些项目开发组很可能没有其他组那么成功,讨论让学生总结他们小组的活动并提出改进措施。最后一章引导学生针对其项目向教师和其他同学进行正式而专业的展示。
教师用补充材料
对以本书为教材的教师,以下材料可供使用:
书中每幅图的PowerPoint幻灯片。
每章内容的PowerPoint 幻灯片。
复习题部分的答案。
每一章习题的样板答案或引发讨论的线索。
嵌入式班级项目的成品样板集。
两份可选的班级项目的材料。
Game2D案例分析的源代码。
请在www.aw.com/cssupport上核实本书的在线资料并获得这些补充材料的更多信息。
除了这些资源之外,我们还预计每两年出版一本包含与两个不同班级项目有关的材料及习题的学生用书。
班级项目
我们鼓励授课教师用自己的项目,或用补充材料中提供的项目代替书中的项目。班级项目开发的每一章中均有说明班级项目的目标及目的的内容。这些部分具有一般性,既适合书中的项目也适合补充材料中的项目。
书中有些章节专门介绍了所含的班级项目。之所以这样做是因为样本项目可作为极好的例子来讲述书中涉及的一些设计目标。要理解这些章节,学生并不需要对所含项目的细节很熟悉,而只需要理解在因特网上进行多人游戏的思想。示例则说明了启动这一多人游戏或对奕走子所包括的一系列事件。
下面几节包含专门针对班级项目的内容:
1.10节包含需求规格说明。可用一个可选项目描述来代替。如果正在使用一个可选项目,则该节应跳过。
2.2.2节介绍了一个易被任何熟悉普通棋类游戏的人所理解的非正式场景。即使你采用的是另一个班级项目,我们仍推荐此例。
4.9节讲述了样本班级项目中进程间通信的建模。这样的讲述易被那些熟悉因特网多人游戏的人所理解,我们建议那些采用一个可选班级项目的教师使用它。
致谢
感谢Addison Wesley出版公司的Maite Suarez-Rivas和Katherine Haruntunian在本书的编写过程中给予的大力支持。Jody Girouard为那些以此书作为教材的教师开发了大量材料,并从学生的角度为此书提供了反馈意见。John Girouard、Mark Henwood、Nick Rago和David Sleeper是使用UCCD(以用况为中心的开发)方法的第一期软件工程课程的学生。他们完成了“银河侦探”(Galaxy Sleuth)游戏,并对上述方法提出了大量反馈意见。泽维尔(Xavier)大学的Liz Johnson在其软件工程课程中使用了本书的较早版本,帮助我们了解了在本书编写方面还有哪些内容表达得不清楚。最后要说明的是,有许多审阅者在原稿写作过程中提出了宝贵的反馈意见。有些审阅者我们至今不知其名,在此一并表示感谢。下面各位审阅者对最新手稿进行了审核,并帮助我们精练文字以便读者更好地理解本书的内容:Michael Beeson(圣何塞加利福尼亚洲立大学),Jorge L.Diaz-Herrera(南方州立工业大学),Jozo Dujmovic(旧金山加利福尼亚洲立大学),Mohamed Fayad(内布拉斯加大学林肯分校),J. W. Fendrich(伊利诺依州立大学),J. A.“Drew”Hamilton(海军研究生院),Alex Iskold(纽约大学),Jonathan Maletic(孟菲斯大学),Michael McCracken(佐治亚理工学院),Fatma Mili(奥克兰大学),Robert Noonan(威廉和玛丽学院),Srini Ramaswamy(田纳西理工大学),Steve Roach(德克萨斯大学埃尔帕索分校),Don Shafer(阿森斯集团公司),Bill Shay(威斯康星大学格林贝分校),James E. Tomayko(卡内基-梅隆大学),David Umphress(奥本大学),Shon Vick(马里兰大学巴尔的摩县分校),Linda Werner(加利福尼亚大学圣克鲁斯分校),Janusz Zalewski(中央佛罗里达大学)。

作者简介

(美)Evelyn Stiller,Cathie LeBlanc:暂无简介

译者简介

贲可荣 张秀山:暂无简介

译者序

随着社会对软件的日益依赖,软件产业在全球经济中的作用愈加重要。但是,现今大部分的软件仍是由技术人员利用其掌握的技能和经验编制出来的,往往不能确保软件的质量和进度。人们为了克服“软件危机”,在软件工程领域做了大量的工作,逐渐形成了系统的软件开发理论、技术和方法。软件工程已成为信息社会高技术竞争的关键领域之一。
“软件工程”是高等学校计算机教学计划中的一门核心课程。软件教学的实践表明,如果没有亲身体验,学生很难相信软件工程技术的好处。让学生相信软件工程对其软件开发生涯至关重要的最有效的方法是让他们完成为时一学期的软件项目的开发。以本书为教材的软件工程课是一门以面向对象的软件开发为重点,集实用性与即用性于一体的课程。市面上软件工程方面的教材大多重理论轻实践,而那些基于项目的教材也没有把重点放在面向对象的范型中来。本书正好填补了这一空白。
本书重点介绍软件工程的实际应用,而且把重点放在应用于班级项目的面向对象的软件开发方法之上。本书介绍了面向对象项目的概念、分析、设计及实现,对软件工程技术作了历史综述。本书提供了两个现行的案例分析,作为为时一学期的项目开发的样板。案例分析中含有成品的样本,举例说明了学生在其项目的生命周期中所要交付资料的类型。本书不依赖于具体的程序设计语言(必要的代码示例用Java给出),并采用统一建模语言(UML)的子集来为软件建模,解释学生工作中需要用到的符号。
让学生参与一学期的集体项目,使学生体验到专业合作的好处和重要性,对此他们会认为是很大的收获。这一点在我们采用本书译文初稿作为软件工程课程辅助教材时得到了验证。
本书的前言、第9至12章由张秀山翻译,其余各章由贲可荣翻译。全书由贲可荣审校。肖斌、俞立军、徐荣花、吴铁洲、周娟、孙宁和王淑雪等参与了本书的翻译工作。
由于各种原因,译稿难免存在错误和疏漏。欢迎读者批评指正。
本书可作为计算机专业本科生、非计算机专业研究生的软件工程教材,亦可作为软件开发者、组织者和管理者的参考书。

译  者
2002年5月10日

图书目录

第1章  软件工程引论 1
1.1  关键概念 1
1.2  为什么要建造软件 1
1.3  软件开发范型要素 5
1.3.1  项目概念化 5
1.3.2  项目表示 6
1.3.3  项目实现 7
1.4  软件工程技术简史 7
1.4.1  结构化编程 7
1.4.2  功能分解 8
1.4.3  结构化分析和设计 10
1.4.4  以数据为中心的范型 11
1.4.5  面向对象范型 13
1.5  不用工程技术生产软件的代价 15
1.6  为什么软件工程不是万能的 15
1.7  项目的作用 16
1.8  分组工作 16
1.9  创建项目小组 17
1.10  班级项目:功能需求 18
1.10.1  项目概述 19
1.10.2  游戏要素 19
1.10.3  游戏事件序列 20
1.10.4  在行星间移动和着陆 21
1.10.5  赢得游戏 21
1.10.6  项目时间框架 22
1.11  复习题 22
第2章  面向对象范型概述 24
2.1  关键概念 24
2.2  熟悉班级项目 24
2.2.1  创建非正式场景的指南 24
2.2.2  非正式场景例子:用户移动 25
2.3  面向对象概念化 26
2.3.1  特殊应用关系 27
2.3.2  继承 27
2.3.3  聚合/组合 28
2.3.4  其他关系分类 29
2.4  软件生命周期 29
2.5  面向对象建模 33
2.5.1  建立模型的作用  33
2.5.2  创建优质模块 34
2.5.3  建模符号 36
2.5.4  软件工程中模型的使用 37
2.6  良好面向对象系统的属性 37
2.7  分组工作 39
2.7.1  主程序员组 39
2.7.2  召开有效的小组会议 40
2.8  复习题 41
第3章  面向对象分析 42
3.1  关键概念  42
3.2  需求分析介绍 42
3.3  需求分析的重要性 43
3.4  需求规格说明 44
3.5  案例分析:图书馆管理系统规格说明 46
3.6  评价需求规格说明 47
3.7  细化需求规格说明 48
3.8  验证需求规格说明 53
3.9  通过开发扩展需求 54
3.10  需求分析过程 54
3.10.1  识别UCCD的类 56
3.10.2  案例分析:识别LMS中的类 57
3.10.3  识别用况 58
3.10.4  案例分析:识别LMS中的用况 59
3.10.5  场景开发 61
3.10.6  案例分析:LMS中的样本场景 62
3.10.7  用UML对系统建模 63
3.10.8  类图 63
3.10.9  案例分析:LMS的类图 65
3.10.10  用况图 67
3.10.11  案例分析:LMS的用况图 68
3.10.12  需求分析小结 69
3.10.13  系统演化 71
3.11  分析班级项目 71
3.12  分组工作 71
3.13  复习题 72
第4章  产品设计 74
4.1  关键概念 74
4.2  设计目标 74
4.3  类设计与产品设计 74
4.4  产品设计概述和目标 75
4.5  对象持久化 76
4.5.1  对象序列化 77
4.5.2  评价对象持久化 78
4.6  案例分析:LMS中的对象持久化 79
4.7  进程体系结构 80
4.7.1  多节点建模 81
4.7.2  进程间通信建模 82
4.7.3  状态机 82
4.7.4  对控制的多线程建模 85
4.7.5  网络资源的有效利用 85
4.8  案例分析:LMS中的进程间通信 85
4.9  班级项目:“银河侦探”游戏中的进程
间通信 85
4.10  用户界面 88
4.11  用户界面设计 89
4.12  用户界面设计原则 90
4.12.1  了解用户 90
4.12.2  界面设计规则 92
4.12.3  交互样式 93
4.13  案例分析:LMS的用户界面 100
4.14  分组工作 106
4.15  班级项目产品设计  106
4.16  复习题 107
第5章  类设计 108
5.1  关键概念 108
5.2  类设计过程 108
5.2.1  类构架 109
5.2.2  案例分析:LMS中的类构架 110
5.2.3  系统分解 112
5.3  UML进一步介绍 113
5.3.1  类图的符号修饰   113
5.3.2  交互图 115
5.3.3  案例分析:LMS的交互图 115
5.3.4  协作图的创建 119
5.3.5  案例分析:LMS中更多的交互图 119
5.3.6  评估设计 121
5.3.7  案例分析:评估LMS的设计 121
5.3.8  对象图 121
5.3.9  案例分析:LMS的对象图 122
5.3.10  对象图的创建 122
5.4  类设计阶段的目标 123
5.4.1  代码重用 123
5.4.2  案例分析:LMS中的代码重用 123
5.4.3  良好设计的类与方法 124
5.4.4  数据完整性 125
5.5  类设计的验证 125
5.6  设计班级项目 126
5.7  复习题 127
第6章  案例分析:Game2D与方法设计 128
6.1  关键概念 128
6.2  概述 128
6.3  需求规格说明 128
6.4  细化后的需求规格说明 129
6.5  需求分析 131
6.5.1  名词列表   131
6.5.2  名词表的分析 132
6.5.3  主类列表 133
6.5.4  用况开发 133
6.5.5  场景 136
6.5.6  细化后的类列表 137
6.5.7  建模 138
6.6  产品设计 139
6.6.1  进程体系结构 140
6.6.2  图形用户界面评审 142
6.7  类设计 142
6.7.1  交互图 142
6.7.2  对象图 143
6.7.3  重用 145
6.7.4  类构架 146
6.8  方法设计 151
6.8.1  确定方法 152
6.8.2  Game2D方法设计 152 
6.8.3  创建优质方法 155
6.9  复习题 156
第7章  实现 158
7.1  关键概念 158
7.2  引论 158
7.3  实现途径 158
7.3.1  “大突击”实现 159
7.3.2  自顶向下与自底向上实现 159
7.3.3  自顶向下与自底向上方法的结合 162
7.3.4  实现的线程方法 162
7.4  实现计划 163
7.5  案例分析:LMS的实现计划 164
7.6  编程风格 167
7.6.1  越短越简单 168
7.6.2  越简单的代码判断越少 169
7.6.3  应避免过量的嵌套逻辑 171
7.7  注释和内部文档 171
7.7.1  头注释块 172
7.7.2  行注释 173
7.8  项目编码标准 175
7.9  实现班级项目 176
7.10  复习题 177
第8章  测试 178
8.1  关键概念 178
8.2  什么是测试 178
8.3  面向对象测试原理 178
8.4  定义 179
8.4.1  错误、故障和失效 179
8.4.2  测试计划 180
8.4.3  测试喻示 181
8.4.4  测试用例 182
8.4.5  白盒测试 182
8.4.6  黑盒测试 183
8.4.7  单元测试 184
8.4.8  集成测试 184
8.4.9  系统测试 186
8.5  测试步骤 186
8.6  测试面向对象系统的特殊论题 187
8.7  案例分析:测试LMS 189
8.7.1  测试计划 189
8.7.2  单元测试阶段I 191
8.7.3  系统地提出测试用例 192
8.8  测试班级项目 193
8.9  面对变化的测试:配置管理 193
8.10  复习题 196
第9章  项目管理 197
9.1  关键概念 197
9.2  引论 197
9.3 项目经理职责 198
9.3.1  软件度量 199
9.3.2  案例分析:项目估计 203
9.3.3  质量控制度量 204
9.3.4  神奇的人-月 205
9.4  配置管理 205
9.4.1  版本控制 206
9.4.2  变动控制 206
9.4.3  配置审核 207
9.4.4  配置状态报告 208
9.5  项目计划和监督 208
9.5.1  项目演化 209
9.5.2  案例分析:Game2D演化 209
9.5.3  项目计划 210
9.5.4  案例分析:Game2D项目计划 211
9.5.5  任务调度 212
9.5.6  监督进度 214
9.6  项目组 215
9.6.1  组建项目组 215
9.6.2  队伍开发的四个阶段 216
9.6.3  冲突 217
9.6.4  解决冲突 218
9.7  风险管理 219
9.7.1  技术风险起源 219
9.7.2  人员风险起源 222
9.7.3  风险的后果 223
9.8  降低风险 223
9.8.1  尽早进行产品评估 224
9.8.2  尽早实现系统有风险的部分 224
9.8.3  尽早使用新技术 224
9.8.4  尽早解决类交互问题 224
9.9  风险管理方面的进一步读物 224
9.10  案例分析:LMS的风险分析 225
9.10.1  LMS中的风险权衡 225
9.10.2  LMS中的技术风险 225
9.11  复习题 226
第10章  设计模式 227
10.1  关键概念 227
10.2  设计模式的目的 227
10.3  什么是设计模式 227
10.4  探索设计模式 229
10.4.1  案例分析:包装程序设计模式 229
10.4.2  案例分析:迭代程序设计模式 230
10.4.3  案例分析:状态设计模式 231
10.4.4  案例分析:单实例设计模式 233
10.5  复习题 234
第11章  软件开发的灾难故事 235
11.1  关键概念 235
11.2  引论 235
11.3  Therac-25 236
11.4  CONFIRM 238
11.5  电话和通信 239
第12章  完成并展示班级项目 241
12.1  成功完成班级项目 241
12.2  对项目的思考 242
12.3  展示项目 243
12.3.1  非技术类用户的类型 243
12.3.2  非技术展示要点 244
12.3.3  技术展示要点 244
12.3.4  项目展示 244
参考文献 245
索引 251

教学资源推荐
作者: 许志闻 郭晓新 杨瀛涛 主编 王云霄 高占恒 徐长青 参编
作者: Andrew S.Tanenbaum
参考读物推荐
作者: [荷]里克 F. 范德兰斯(Rick F. van der Lans) 著
作者: 周广肃 梁荣 田金秀 等编著