ObjectOriented and Classical Software Engineering,8E
现在几乎每门计算机科学和计算机工程课都包含一个要求团队完成的软件开发项目。有时这个项目只持续一个学期(半年或三个月),但持续一年时间的团队软件开发项目越来越成为标准。
理想情况下,每个学生在学完一门软件工程课程后才开始进入基于团队的项目(“两阶段课程”)。然而实际上许多学生在学习软件工程课的中途即启动项目,甚至在课程开始时就启动项目(“并行课程”)。
下面将描述本书的结构,从中可以看出本书适用于上述两种情况。
第8版的结构
本书包含两大部分:第二部分指导学生如何开发软件产品;第一部分为第二部分提供必要的理论支持。18章按如下结构组织:
第1章软件工程简介
第一部分第2章至第9章软件工程概念
第二部分第10章至第17章软件工程技术
第18章新兴技术
第10章为新增章节,概要介绍了第一部分的关键内容。如果采用两阶段课程,可先讲授第一部分,然后讲授第二部分(可跳过第10章,因为第10章的内容在第一部分中已经深入讲解过)。对于并行课程,教师会先讲授第二部分(这样学生可以尽早启动项目),然后再讲授第一部分,第10章的内容可帮助学生在没有学习第一部分的情况下理解第二部分。
后面的方法看起来不合常规:理论应在实践前学习,但事实上许多使用过本书第7版教材的教师在第一部分之前讲授第二部分的内容,他们这样做也收到了很好的效果。他们反映学生们在进行项目工作的过程中能够更好地理解第一部分的理论内容,也就是说,基于团队的项目工作使学生们更容易接受和理解软件工程基础的理论概念。
具体而言,第8版的内容可按以下两种方式讲授:
1两阶段课程
第1章(软件工程简介)
第一部分第2章至第9章(软件工程概念)
第二部分第10章至第17章(软件工程技术)
第18章(新兴技术)
. 然后学生在接下来的学期(半年或三个月)里开展基于团队的项目
2并行课程
第1章(软件工程简介)
第10章(第一部分的关键内容)
学生现在开始进行基于团队的项目,与第二部分内容的学习并行
第二部分第11章至第17章(软件工程技术)
第一部分第2章至第9章(软件工程概念)
第18章(新兴技术)
第8版的新特性
1)对本书全面进行了更新。
2)增加了两章。如前面所述,一个新增章是第10章——第一部分的关键内容概述,这样学生可与软件工程课程并行地开始基于团队的项目。另一个新增章是第18章,概述了10个新兴技术,包括:
面向层面技术;
模型驱动技术;
基于组件技术;
面向服务技术;
社交计算;
Web工程;
云技术;
Web 30;
计算机安全;
模型检查。
3)第8章扩充了设计模式方面的内容,包括新扩充了一个小型实例研究。
4)第5章增加了两个理论工具:分治和关注分离。
5)第13章中电梯问题的面向对象分析体现了现代分布式的分散结构。
6)围绕当前研究的重点,广泛更新了参考文献。
7)新增了100多道习题。
8)新增了一些“如果你想知道”内容。
继承第7版的特性
统一过程仍是面向对象软件开发方法的首选。因此,贯穿全书的仍是统一过程的理论和实践。
第1章深入分析面向对象范型的优势。
在第2章,尽可能早地引入迭代-递增生命周期模型。进一步地,与前面的所有版本一样,对其他的生命周期模型进行描述、比较和对比,并特别关注敏捷过程。
在第3章(“软件过程”)中,介绍工作流(活动)和统一过程的各个阶段,并解释二维生命周期模型的需求。
第4章(“软件小组”)讨论组织软件小组的多种方式,包括开发敏捷过程的小组和开发开源软件的小组。
第5章(“软件工程工具”)包含一些CASE工具中重要的类的信息。
第6章(“测试”)着重讨论连续测试的重要性。
对象仍旧是第7章(“从模块到对象”)关注的焦点。
设计模式仍是第8章(“可重用性和可移植性”)的核心。
软件项目管理计划的IEEE标准在第9章(“计划和估算”)中再次提供。
第11章(“需求”)、第13章(“面向对象分析”)和第14章(“设计”)大都致力于阐述统一过程的工作流(活动)。基于显然的理由,第12章(“传统的分析”)大体没有进行修改。
第15章(“实现”)中的内容明确区分实现和集成。
第16章重点描述交付后维护的重要性。
第17章为准备在软件业中就业的学生提供了UML方面的额外材料。这一章特别适用于采用本书作为两学期软件工程课程系列教材的指导教师们。在第二个学期,除了开发基于小组的学期项目或顶石(capstone)项目以外,学生还可以获得UML的额外知识。
与以前一样,有两个运行实例研究,即使用统一过程开发的MSG基金实例研究和电梯问题实例研究。同往常一样,Java和C++实现在wwwmhhecom/schach在线可用。
除了使用这两个运行实例研究阐述完整的生命周期外,还通过8个小实例研究来突出专门的主题,例如移动目标问题、逐步求精、设计模式和交付后维护。
在先前的所有版本中,我强调文档、维护、重用、可移植性、测试和CASE工具的重要性。在本版中,所有这些概念都无疑受到同等程度的重视。如果学生不理解这些软件工程基础知识的重要性,教授学生们最新的思想就没有什么用处了。
如同第7版,对以下几方面给予特殊的重视:面向对象生命周期模型、面向对象分析、面向对象设计、面向对象范型的管理含义、面向对象软件的测试和维护,其中还包括面向对象范型的度量。此外,对对象作了许多更简明的注解,有的是一个段落,有的只是一句话。这样做的原因是,面向对象范型不仅与各种阶段如何执行有关,也影响着我们思考软件工程的方式。对象技术再次贯穿本书始终。
软件过程仍然是整体贯穿本书的一个概念。为了控制这个过程,我们必须能够测量项目中发生了什么。相应地,继续保留对度量的强调。关于过程改进,保留有关能力成熟度模型(CMM)、ISO/IEC 15504(SPICE)以及ISO/IEC 12207内容。
本书仍然与计算机语言无关,少量代码实例用C++或Java表示,而且我尽量减少与语言有关的细节,确保代码实例对于C++和Java用户同样清晰。例如,不使用cout表示C++的输出,也没有使用System.out.println表示Java的输出,而使用伪码指令print。(一种例外情况是新的实例研究,其完整的实现细节用C++和Java同时给出。)
像在第7版中一样,本书包含600多个参考文献。我选择了当前的研究文章以及一些仍保持有关最新信息的经典的文章和书籍。毫无疑问,软件工程是一个快速发展的领域,学生需要知道最新的成果以及在哪些文献里可以找到它们。与此同时,今天的前沿研究是在昨天的事实基础上进行的,没有理由将一篇较早的参考文献排除在外,如果它的思想在今天如最初一样仍在应用着。
本书假设读者对诸如C、C#、C++或Java的一种高级编程语言很熟悉,另外,读者应学习过数据结构。
为什么仍然包括经典范型
现在几乎一致认为面向对象范型比经典范型优越。
相应地,许多选用了本书第7版的教师只选择该书中面向对象方面的内容进行讲授。然而,当问起这些教师们的意见时,教师们指出,他们更倾向于选择包含有经典范型内容的教材。
原因在于,尽管越来越多的教师只“讲授”面向对象范型,但他们仍旧愿意在课堂上“提到”经典范型;许多面向对象技术难以理解,除非学生们对演化出这些面向对象技术的经典技术有一些认识。例如,如果学生对实体关系建模有所了解,即使是肤浅的了解,也会更容易理解实体类建模。类似地,对有穷状态机的简要介绍会使教师更容易讲授状态图。因此,我在第8版中保留了经典方面的内容,这样教师们在教学中就有可用的经典材料。
习题集
与第7版一样,本书有5种类型的习题。首先,在第11、13和14章结束时有运行着的面向对象分析和设计项目。之所以包含这些项目,是因为学习如何执行需求、分析和设计工作流的唯一途径来自于广泛的实践。
第二,每一章结尾包含一些意在突出重点的练习。这些练习是独立的,全部练习的技术信息都可以在本书中找到。
第三,有一个软件学期设计项目。该设计需要由最少三人组成的小组协作完成,而不是通过常规的电话协商完成。学期设计项目由15个独立的组件组成,每个组件都附在相应的章后。例如,“设计”是第14章的主题,因此在该章中学期设计的组件与软件设计有关。通过将一个大的项目分解为小的、明确定义的几个部分,教师能够更密切地掌控班上的学习进度。学期设计项目是这样一种结构:指导教师能够自由地将这15个组件应用于任何其他项目。
本书是为研究生和高年级本科生而编写的,第4种类型的习题是根据软件工程文献中的研究报告拟制的。在每一章都选择了一篇重要的文章,尽可能选择一篇与面向对象软件工程有关的文章。要求学生阅读该篇文章并回答与其内容有关的一个问题。当然,教师可以自由安排任何其他研究文献,在每一章后的“进一步阅读指导”中包含各种相关论文。
第5种类型的习题与实例研究有关。这类习题首先在第3版中引入,是应许多教师的要求加入的。教师们感觉:学生们通过修改一个现成的产品而不是从头开发一个新的产品可以学到更多的东西。业界的许多高级软件工程师同意这个观点。基于此,给出实例研究的每一章有需要学生在某种程度上修改该实例的问题。例如,在某一章中,要求学生使用一项与该实例研究中使用的不同的设计技术重新设计该实例。在另一章中,要求学生回答以不同的顺序执行面向对象分析的步骤会产生什么不同的效果。为了使学生易于修改实例研究的源代码,在万维网上提供这些源代码,网址是:wwwmhhecom/ schach。
该网站还提供给教师一个完整的电子课件和包括学期项目在内的所有习题的详解。
有关UML的材料
本书实际使用统一建模语言(UML)。如果学生没有UML的前期知识,可以用两种方式教授这部分。我倾向于在需要时才教授UML,也就是说,每个UML概念只在需要它之前讲解。下表描述了本书使用的UML结构所在的章节。
结构 介绍对应的UML图的章节
类图、注解、继承(泛化)、聚合、关联、导航三角形 77节
用例 1143节
用例图、用例描述 117节
构造型 131节
状态图 136节
交互图(顺序图、通信图) 1315节
另一方面,第17章介绍UML,包括本书当前及以后所需的材料。第17章可以在任何时间讲授,它不需要依赖前16章。第17章涵盖的主题如下表所示。
结构 介绍对应的UML图的章节
类图、聚合、多重性、组合、泛化、关联 172节
注解 173节
用例图 174节
构造型 175节
交互图 176节
状态图 177节
活动图 178节
包 179节
组件图 1710节
部署图 1711节
在线资源
本教材的支持网站:wwwmhhecom/schach上有供学生使用的MSG实例研究的Java和C++实现和源代码,以及供教师使用的课件、所有练习和学期项目的详解及图库。有关具体的细节请联络销售代表麦格劳-希尔教育出版公司服务热线:8008101936。Email:instructorchina@mcgrawhillcom。——编辑注 。
致谢
我非常感谢前面7版书的审阅者,他们给予了建设性意见和许多有帮助的建议。特别感谢本版书的审阅者,他们是:
关于出版商McGrawHill,我特别感谢样本编辑Kevin Campbell和设计师Brenda Rolwes,我还特别感谢Montage工作室的Melissa Welch,她将悉尼港大桥夜景图片转化为极美的封面。
还要感谢Jean Naudé(Vaal University of Technology, Secunda Campus)与我合作完成教师用的题解手册,特别是Jean提供了学期项目的详细解答,包括它的Java和C++实现。在编写题解手册的过程中,Jean提出了大量建设性建议来完善本书,对此我深表谢意。
最后,我感谢我的妻子Sharon一如既往地支持和鼓励我。与我以前所有书的情况一样,我尽力使尽家庭义务优先于写作,然而当最后期限临近时,这总是不可能的。在这种时候,Sharon总是理解我,为此我特别感激她。
我愿把我的这第15本专著献给我的爱孙Jackson和Mikaela。
Stephen R Schach