本书对软件工程的基础知识(包括面向对象和传统方法)进行了严谨和全面的介绍,是软件工程领域的经典著作。
第7版着重扩展了敏捷过程和开源软件的内容。此外,崭新的MSG基金案例研究取代了以前的Osbert Oglesby案例研究,新的案例研究突出统一过程的更多方面。
本书共分两大部分:第一部分介绍基本的软件工程理论;第二部分讲述更实用的软件生命周期。作者采用这种独特的、极具可读性的组织方式,帮助学生和广大读者理解软件工程中一些复杂的概念。
本版新增内容:
●关于敏捷过程的全新介绍。将极限编程(XP)放在敏捷过程的更大语境中介绍。
●扩展了开放源码的相关介绍内容。全书(尤其是第2章和第4章)用很大篇幅介绍开源软件开发的相关内容。
●更多的习题。在每章中都添加了新习题。
●崭新的案例研究。根据评审人员和读者的反馈意见,新版在第10~15章中增加了一个全新的有关MSG基金案例研究,以说明软件开发的各种技术。这个案例研究主要针对学生或广大读者今后很可能会在现实生活中遇到的一个情况——住房抵押。这个新案例取代了前几版中的Osbert Oglesby案例,突出介绍了统一过程的更多方面。
●新增网上内容。配套网站www.mhhe.com/schach为采用本书作为教材的教师提供了教学幻灯片、习题解答以及学期项目和实例研究的C++和Java代码等教辅资源。
无
本书的第6版出版于2004年,与第5版有很大的不同。第6版中有一半以上的内容由新素材组成,大部分是有关统一过程的,并从一个更新的视角重写了从第5版中保留下来的主题。
许多指导教师为第6版提供了反馈意见,他们认可我在第6版中所做的大幅修改,但建议第7版的目标应着眼于更新第6版,而不是再次做广泛的修改。另外,一些指导教师提出在本书的第二部分增加新的运行实例。
因此,在第7版中有两类修改:
对全书进行了整体更新。特别地,我在第2章和第4章专门扩充了敏捷过程和开源软件开发方面的内容。对参考文献也进行了更新,并且每章都有一些新的习题。
我用MSG基金实例研究替代Osbert Oglesby实例研究,来阐述第10~15章中的软件开发技术。
第6版保留下来的特性
统一过程仍是面向对象软件开发方法的首选。因此,贯穿全书的仍是统一过程的理论和实践。
第1章深入分析面向对象范型的优势。
在第2章,尽可能早地引入反复递增生命周期模型。进一步地,与前面的所有版本一样,对其他的生命周期模型进行描述、比较和对比。
在第3章(“软件过程”)中,介绍工作流(活动)和统一过程的各个阶段,并解释二维生命周期模型的需求。
第4章(“软件小组”)讨论组织软件小组的多种方式,包括开发敏捷过程的小组和开发源码公开软件的小组。
第5章(“软件工程工具”)包含一些CASE工具中重要的类的信息。
第6章(“测试”)中着重讨论连续测试的重要性。
对象仍旧是第7章(“从模块到对象”)关注的焦点。
关于互操作性的内容,在第6版中从第8章(“可重用性和可移植性”)中删除,在本版中仍没有可替代的材料。在第4版和第5版中,这些部分在出版书籍所需的6个月中便毫无希望地落伍了。以我的观点看,这个领域变化得太快,以致于无法包含在课本中,希望在软件工程课程中包含互操作性内容的指导教师应该从互联网中获取实时更新的材料。
软件项目管理计划的新IEEE标准在第9章(“计划和估算”)中再次提供。
第10章(“需求”)、第12章(“面向对象分析”)和第13章(“设计”)大都致力于阐述统一过程的工作流(活动)。基于显然的理由,第11章(“传统的分析”)中除了实例研究外,没有进行修改。
第14章(“实现”)中的内容明确区分实现和集成。
第15章重点描述交付后维护的重要性。
第16章为准备在软件业中就业的学生提供了UML方面的额外材料。这一章特别适用于采用本书作为两学期软件工程课程系列教材的指导教师们。在第二个学期,除了开发基于小组的学期项目或顶石(capstone)项目以外,学生还可以获得UML的额外知识。
与以前一样,有两个运行实例研究。使用统一过程开发的MSG基金实例研究和电梯问题实例研究。同往常一样,Java和C++实现在www.mhhe.com/schach在线可用。
除了使用这两个运行实例研究阐述完整的生命周期外,还通过七个小实例研究来突出专门的主题,例如移动目标问题、逐步求精和交付后维护。
在先前的所有版本中,我强调文档、维护、重用、可移植性、测试和CASE工具的重要性。在本版中,所有这些概念都无疑将受到同等程度的重视。如果学生不理解这些软件工程基础的重要性,教授学生们最新的思想就没有什么用处了。
如同第6版,对以下几方面给予特殊的重视:面向对象生命周期模型、面向对象分析、面向对象设计、面向对象范型的管理含义、面向对象软件的测试和维护,其中还包括面向对象范型的度量。此外,对对象作了许多更简明的注解,有的是一个段落,有的只是一句话。这样做的原因是,面向对象范型不仅与各种阶段如何执行有关,也影响着我们思考软件工程的方式。对象技术再次贯穿本书始终。
软件过程仍然是整体贯穿本书的一个概念。为了控制这个过程,我们必须能够测量项目中发生了什么。相应地,保留对度量的强调。考虑到软件过程的进展情况,保留有关能力成熟度模型(CMM)、ISO/IEC 15504(SPICE)以及ISO/IEC 12207,在有关小组的章节中加入人员能力成熟度模型(P-CMM)。
本书仍然与计算机语言无关,少量代码实例用C++或Java表示,而且我尽量减少与语言有关的细节,确保代码实例对于C++和Java用户同样清晰。例如,不使用cout表示C++的输出,也没有使用System.out.println表示Java的输出,而使用伪码指令print。(一种例外情况是新的实例研究,其完整的实现细节用C++和Java同时给出。)
像在第6版中一样,本书包含600多个参考文献。我选择了当前的研究文章和一些仍保持有关最新信息的经典的文章和书籍。毫无疑问,软件工程是一个快速发展的领域,学生需要知道最新的成果以及在哪些文献里可以找到它们。与此同时,今天的前沿研究是在昨天的事实基础上进行的,没有理由将一篇较早的参考文献排除在外,如果它的思想在今天如最初一样仍在应用着。
作为先决条件,假设读者对诸如C、C++、Ada或Java的一种高级编程语言很熟悉,另外,读者应学习过数据结构。
为什么仍然包括经典范型
现在几乎一致认为面向对象范型比经典范型优越。但是,我感觉试图完全不提及经典范型是不明智的。
首先,没有完全理解经典范型,而且不知道它与面向对象方法的区别,就不可能明白为什么面向对象技术比经典技术优越。例如,面向对象范型使用一个反复递增的生命周期模型。要说明为什么需要这样一个生命周期模型,最根本的是解释在经典的如瀑布模型这样的生命周期模型和面向对象的反复递增生命周期模型之间的区别。因此,在本书中包含了有关经典范型的材料,使学生们能够清楚地把握经典范型和面向对象范型之间的不同。
在书中包含两种范型的第二个理由是,技术的转变是一个缓慢的过程。要不是经受不住千年虫(Y2K)问题的影响从而加速了向面向对象范型的转变,大多数软件组织至今还不会采纳面向对象范型。因此,有可能使用本书的许多学生将会受雇于仍然使用经典软件工程技术的组织。进一步说,即使一个组织使用面向对象方法开发新的软件,现有的软件仍将得到维护,并且这个延续下来的软件不是面向对象的。因此,排除经典内容对于许多使用这本教材的学生将是不合适的。
包括两种范型的第三个理由是,一个受雇于正考虑向面向对象技术转变的组织的学生,将能够对该组织就新的范型的长处和短处提出自己的忠告。因此,如同前一版中一样,对经典和面向对象方法进行了比较、对照和分析。
第7版是如何安排的
就像本书第6版一样,第7版是为传统的一学期的和新的、现在流行的两学期的软件工程课程而编写的。在传统的一学期(或1/4学年)课程中,教师不得不把理论部分内容一带而过,以便尽早提供给学生们进行学期设计所必需的知识和技能。这样的匆忙安排,使学生们能够及早开始学期设计,从而得以在学期结束前完成设计。为了满足一个学期的基于设计的软件工程课程的要求,本书的第二部分涵盖了按工作流进行的软件生命周期,第一部分包含了理解第二部分所需的理论知识。例如,第一部分向读者介绍CASE、量度和测试;第二部分的每一章都有一节讲述该工作流的CASE工具,一节讲述该工作流的量度,还有一节讲述在该工作流期间的测试。第一部分编写得简短一些,以便教师能够在一学期里较早开始第二部分内容的讲授。而且,第一部分的最后两章(第8章和第9章)可以拖后讲,留待与第二部分同时讲授。这样,本课程可以在尽早的时候开始进行学期设计。
我们再来看两学期的软件工程课程。越来越多的计算机科学和计算机工程系认识到毕业生绝大多数将找到软件工程师的工作。因而,许多学院和大学采用连续两学期(或两个1/4学年)的软件工程课程安排。第一学期课程中理论内容占多数(但也总有少部分的某种设计实践内容)。第二学期课程主要由以小组为基础的学期设计为主,通常是一个前沿课题。当学期设计安排在第二学期课程内时,指导教师就没有必要匆忙开始第二部分内容了。
因此,使用本书第7版教一学期(或1/4学年)课程的教师需要讲解第1~7章的大部分,然后开始第二部分(第10~16章)。第8章和第9章可以与第二部分并行讲授,或者在课程结束前,学生们正在进行学期设计时讲授。当教师进行连续两学期的课程讲授时,应当顺序讲授本书的各章。通过本学期的学习,同学们可以完全准备好进行第二个学期的基于小组的学期设计了。
为了确保同学们能够真正理解第二部分一些关键的软件工程技术,每项技术都出现两次。首先,当介绍一项技术的时候,先通过电梯问题来讲解它。电梯问题对于读者难易比较适中,它能够使读者明白,应用于某个完整问题的技术有许多精妙之处,足以凸显所讲授技术的优点和缺点。然后,给出与该项技术有关的MSG基金实例研究的相关部分。这个详细解决方案为每一项技术提供了第二种阐述。
习题集
与以前的版本一样,本书有5种类型的习题。首先,在第10、12和13章结束时有运行着的面向对象分析和设计项目。包含这些项目是因为,学习如何进行需求、分析和设计工作流的唯一途径来自于广泛的实习经历。
第二,每一章结尾包含一些意在突出重点的练习。这些练习是独立的,全部练习的技术信息都可以在本书中找到。
第三,有一个软件学期设计项目。该设计需要由最少三人组成的小组协作完成,而不是通过常规的电话协商完成。学期设计项目由15个独立的组件组成,每个组件都附在相应的一章之后。例如,“设计”是第13章的题目,因此在该章中此学期设计的这个组件与软件设计有关。通过将一个大的项目分解为小的、明确定义的几个部分,教师能够更密切地掌控班上的学习进度。学期设计项目是这样一种结构:指导教师能够自由将这15个组件应用于任何其他所选择的项目。
本书是为研究生和大学高年级学生而编写的,第4种类型的习题是根据软件工程文献中的研究报告拟制的。在每一章都选择了一篇重要的文章,尽可能选择一篇与面向对象软件工程有关的文章。要求学生阅读该篇文章并回答与其内容有关的一个问题。当然,教师可以自由安排任何其他研究文献,在每一章后的“进一步阅读指导”中包含各种相关论文。
第5种类型的习题与实例研究有关。这类习题首先在第3版中引入,是响应许多教师的要求加入的。教师们感觉:学生们通过修改一个现成的产品而不是从头开发一个新的产品可以学到更多的东西。业界的许多高级软件工程师同意这个观点。基于此,给出实例研究的每一章有需要学生在某种程度上修改该实例的问题。例如,在某一章中,要求学生使用一项与该实例研究中使用的不同的设计技术重新设计该实例。在另一章中,要求学生回答以不同的顺序执行面向对象分析的步骤会产生什么不同的效果。为了使学生易于修改实例研究的源代码,在万维网上提供这些源代码,网址见:www.mhhe.com/ schach。
该网址还提供给教师一个完整的PowerPoint讲稿笔记和包括学期项目在内的所有习题的详解。
有关UML的材料
本书实际使用统一建模语言(UML)。如果学生没有UML的前期知识,可以用两种方式教授这部分。我倾向于在需要时才教授UML,也就是说,每个UML概念只在需要它之前讲解。下表描述了本书使用的UML结构所在的章节。
结构介绍对应的UML范型的章节范型的章节类图、注解、继承(泛化)、聚合、关联、导航三角形77节用例1043节用例图、用例描述107节固定形式121节状态图126节交互图(序列图、协作图)1215节另一方面,第16章介绍UML,包括本书当前及以后所需的材料。第16章可以在任何时间讲授,它不需要依赖前面的第15章。第16章涵盖的主题如下表所示。结构介绍对应的UML范型的章节类图、聚合、多态、组合、泛化、关联162节注解163节用例图164节固定形式165节交互图166节状态图167节活动图168节包169节组件图1610节配置图1611节致谢
我非常感谢前面6版书的审阅者所给予的建设性批评和许多有帮助的建议,他们是 :
此外,还要特别感谢本版书的审阅者,他们是:
我对发给我有关第6版的电子邮件的全世界的众多教师表示感谢,尤其感谢他们发来建议、评论和批评意见。特别地,我要感谢Michael Haugrud教授(明尼苏达州立大学Moorhead)提出对Winburg小型实例研究的改进建议。对于本版,我同样希望能得到教师们的反馈意见,我的电子邮件地址为 srs@vuse.vanderbilt.edu。
学生们也继续对我有很大帮助。我要再次感谢范德比尔特(Vanderbilt)大学我的学生在课内和课外提出的颇有争议的问题和建设性的建议。我也非常感谢世界各地的学生们发给我有关第6版问题和评论的电子邮件,特别的感谢送给德国Erlangen大学的学生Benjamin Polak,他对电梯问题实例研究提出了改进建议。与前面的版本一样,我也恳切地希望得到学生们对本版的反馈意见。
我衷心地感谢曾为本书以前版本做出贡献的三个人:首先是Kris Irwin再一次提供了学期项目的完整题解,包括Java和C++两种语言的实现;其次是Jeff Gray完成了MSG基金实例研究;然后是Lauren Ryder再次作为教师解题手册的合作者并制作了PowerPoint幻灯片。
现在我要转向McGraw Hill。我的出版商Alan Apt和执行编辑Rebecca Olson为整个项目提供了帮助和指导。感谢Lucy Mullins编辑提出了许多有益的建议。我与市场经理Michael Weitz、媒介经理Christina Nelson、产品监制Kara Kudronowicz和校对Carrie Barker一起工作很愉快。本书漂亮的封面由Michelle Whitaker和Christopher Reese设计,我衷心感谢他们。最后,我特别希望能够感谢产品经理Lora Kalb,感谢她无尽的帮助和始终将此项目列入日程,她始终具有前瞻性。
一如既往,我乐于与交互排版公司(Interactive Composition Corporation)非常胜任的排版人员们一同工作,我还要感谢ICC项目经理Deepti Hingle。
最后,和以往一样,我感谢我的妻子Sharon一直支持我。与我以前的所有书情况一样,我极力确保尽家庭义务优于写作,然而当最后期限临近时,这有时是不可能的。在这种时候,她总是理解我,为此我特别感激她。
我愿把我的第13本专著献给我的爱孙Jackson。
Stephen R. Schach
Stephen R. Schach:Stephen R. Schach: 1972年获魏兹曼科学院物理学理科硕士学位,1973年获开普敦大学应用数学博士学位。Schach在软件工程领域有广泛研究,特别是对软件维护与开放源代码软件的实验分析有深入研究。他著有多部有关软件工程、面向对象软件工程、面向对象系统分析与设计的教材,署名出版物 (包括录像带) 达100部之多。他还在国际上广泛讲授软件工程方面的课程,包括重用、CASE和面向对象范型等。
邓迎春 韩松 徐天顺:暂无简介
这是本书的第7版,也是我们第3次翻译本书。我们想先谈三点感想。
一是惊奇。一本书出到第7版(也许还会继续)并不多见。这说明本书具有长久的生命力,用软件工程的话说,就是生命周期长。有了老师、学生、工程师和评论者的期待,才有了这本书的不断再版。
二是敬佩。从第1版到第7版,虽然作者一直围绕着软件工程基础与原理的核心讲述,但针对应用新方法和新技术的取舍方面变化非常大,特别是为适应软件工程新的发展方向而对全书结构进行了相当大的调整。软件工程是一个发展变化很快,同时面向基础和应用的学科,作者以其敏捷的反应、深刻的洞察和准确的把握,始终使本书成为软件界有影响和有实用价值的著作。
三是愉快。我们再次翻译本书,感觉像和老朋友再次重逢一样,既亲切又欣喜地看到老朋友的一些变化。我们在翻译过程中直接感受到作者直白易懂、贴近学生的讲述方式,以及作者为跟踪本学科最新的变化和发展所做的一次次修改,这一切使得这本经典的教科书日臻完美,翻译的过程也变得令人愉快。
关于本书的主要特点和新版增加的内容,作者已经在前言中做了详细说明,在此不再赘述。我们只想强调本书最近几版的最大特点,那就是:理论结合应用、讲述深入浅出、内容广泛新颖。毫无疑问,本书既是一本适合大学高年级学生和研究生学习的经典教材,又是一本适合软件开发的管理者和工程师阅读的实用技术参考书。
本书主要由邓迎春、韩松、徐天顺翻译。参加本书翻译工作的还有李萍、傅兵、赵玉亮、王国文、杜长任等,在此对他们的工作表示感谢。此外,感谢出版社编辑多次具体的指导和帮助。
由于译者水平和时间限制,译文难免有不足之处,希望广大读者不吝指正。
韩松
2007年3月于北京
出版者的话
专家指导委员会
译者序
前言
第一部分软件工程概述
第1章软件工程的范畴
11历史方面
12经济方面
13维护性方面
131维护的传统和现代观点
132交付后维护的重要性
14需求、 分析和设计方面
15小组编程方面
16为什么没有计划阶段
17为什么没有测试阶段
18为什么没有文档阶段
19面向对象范型
110正确看待面向对象范型
111术语
112道德问题
本章回顾
进一步阅读指导
习题
参考文献
第2章软件生命周期模型
21理论上的软件开发
22Winburg小型实例研究
23Winburg小型实例研究心得
24野鸭拖拉机公司小型实例研究
25迭代和递增
26修订的Winburg小型实例研究
27迭代和递增的风险和其他方面
28迭代和递增的控制
29其他生命周期模型
291编码-修补生命周期模型
292瀑布生命周期模型
293快速原型开发生命周期模型
294开源生命周期模型
295敏捷过程
296同步-稳定生命周期模型
297螺旋生命周期模型
210生命周期模型的比较
本章回顾
进一步阅读指导
习题
参考文献
第3章软件过程
31统一过程
32面向对象范型内的迭代和递增
33需求流
34分析流
35设计流
36实现流
37测试流
371需求制品
372分析制品
373设计制品
374实现制品
38交付后维护
39退役
310统一过程的各阶段
3101开始阶段
3102细化阶段
3103构建阶段
3104转换阶段
311一维与二维生命周期模型
312改进软件过程
313能力成熟度模型
314软件过程改进方面的其他努力
315软件过程改进的代价和收益
本章回顾
进一步阅读指导
习题
参考文献
第4章软件小组
41小组组织
42民主小组方法
43传统的主程序员小组方法
431《纽约时报》项目
432传统的主程序员小组方法的
不实用性
44主程序员小组和民主小组之外的
编程小组
45同步-稳定小组
46敏捷过程小组
47开源编程小组
48人员能力成熟度模型
49选择合适的小组组织
本章回顾
进一步阅读指导
习题
参考文献
第5章软件工程工具
51逐步求精法
52成本-效益分析法
53软件度量
54CASE
55CASE的分类
56CASE的范围
57软件版本
571修订版
572变种版
58配置控制
581交付后维护期间的配置控制
582基准
583产品开发过程中的配置控制
59建造工具
510使用CASE技术提高生产力
本章回顾
进一步阅读指导
习题
参考文献
第6章测试
61质量问题
611软件质量保证
612管理独立
62非执行测试
621走查
622管理走查
623审查
624审查与走查的对比
625评审的优缺点
626审查的度量
63执行测试
64应该测试什么
641实用性
642可靠性
643健壮性
644性能
645正确性
65测试与正确性证明
651正确性证明的例子
652正确性证明小型实例研究
653正确性证明和软件工程
66谁应当完成执行测试
67测试什么时候停止
本章回顾
进一步阅读指导
习题
参考文献
第7章从模块到对象
71什么是模块
72内聚
721偶然性内聚
722逻辑性内聚
723时间性内聚
724过程性内聚
725通信性内聚
726功能性内聚
727信息性内聚
728内聚示例
73耦合
731内容耦合
732共用耦合
733控制耦合
734印记耦合
735数据耦合
736耦合示例
737耦合的重要性
74数据封装
741数据封装和产品开发
742数据封装和产品维护
75抽象数据类型
76信息隐藏
77对象
78继承、 多态和动态绑定
79面向对象范型
本章回顾
进一步阅读指导
习题
参考文献
第8章可重用性和可移植性
81重用的概念
82重用的障碍
83重用实例研究
831Raytheon导弹系统部
832欧洲航天局
84对象和重用
85设计和实现期间的重用
851设计重用
852应用框架
853设计模式
854软件体系结构
855基于组件的软件工程
86重用和交付后维护
87可移植性
871硬件的不兼容性
872操作系统的不兼容性
873数值计算软件的不兼容性
874编译器的不兼容性
88为什么需要可移植性
89实现可移植性的技术
891可移植的系统软件
892可移植的应用软件
893可移植的数据
本章回顾
进一步阅读指导
习题
参考文献
第9章计划和估算
91计划和软件过程
92周期和成本估算
921产品规模的度量
922成本估算技术
923中间COCOMO
924COCOMO II
925跟踪周期和成本估算
93软件项目管理计划的组成
94软件项目管理计划框架
95IEEE 软件项目管理计划
96计划测试
97计划面向对象的项目
98培训需求
99文档标准
910用于计划和估算的CASE工具
911测试软件项目管理计划
本章回顾
进一步阅读指导
习题
参考文献
第二部分软件生命周期的各个工作流
第10章需求
101确定客户需要什么
102需求流概述
103理解应用域
104业务模型
1041访谈
1042其他技术
1043用例
105初始需求
106对应用领域的初始理解: MSG基金
实例研究
107初始业务模型: MSG基金实例
研究
108初始需求: MSG基金实例研究
109继续需求流: MSG基金实例研究
1010修订需求:MSG基金实例研究
1011测试流: MSG基金实例研究
1012传统的需求阶段
1013快速原型开发
1014人的因素
1015重用快速原型
1016需求流的CASE工具
1017需求流的度量
1018需求流面临的挑战
本章回顾
进一步阅读指导
习题
参考文献
第11章传统的分析
111规格说明文档
112非形式化规格说明
113结构化系统分析
114结构化系统分析: MSG基金实例
研究
115其他半形式化技术
116建造实体-关系模型
117有穷状态机
118Petri网
119Z
1191Z: 电梯问题实例研究
1192Z的分析
1110其他的形式化技术
1111传统分析技术的比较
1112在传统分析阶段测试
1113传统分析阶段的CASE工具
1114传统分析阶段的度量
1115软件项目管理计划: MSG基金
实例研究
1116传统分析阶段面临的挑战
本章回顾
进一步阅读指导
习题
参考文献
第12章面向对象分析
121分析流
122抽取实体类
123面向对象分析: 电梯问题实例研究
124功能建模: 电梯问题实例研究
125实体类建模: 电梯问题实例研究
1251名词抽取
1252CRC卡片
126动态建模: 电梯问题实例研究
127测试流: 面向对象分析
128抽取边界类和控制类
129初始功能模型: MSG基金实例
研究
1210初始类图: MSG基金实例研究
1211初始动态模型: MSG基金实例
研究
1212修订实体类: MSG基金实例研究
1213抽取边界类: MSG基金实例研究
1214抽取控制类:MSG基金实例研究
1215用例实现:MSG基金实例研究
12151Estimate Funds Avaibuble for Week用例
12152Manage an Asset用例
12153Update Estimated Annual
Operating Expenses用例
12154Produce a Report用例
1216类图递增: MSG基金实例研究
1217测试流: MSG基金实例研究
1218统一过程中的规格说明文档
1219关于参与者和用例更详细的内容
1220用于面向对象分析流的CASE
工具
1221面向对象分析流所面临的挑战
本章回顾
进一步阅读指导
习题
参考文献
第13章设计
131设计和抽象
132面向操作设计
133数据流分析
1331小型实例研究: 字数统计
1332数据流分析扩展
134事务分析
135面向数据设计
136面向对象设计
137面向对象设计: 电梯问题实例研究
138面向对象设计: MSG基金实例研究
139设计流
1310测试流: 设计
1311测试流: MSG基金实例研究
1312详细设计的形式化技术
1313实时设计技术
1314设计的CASE工具
1315设计的度量
1316设计流面临的挑战
本章回顾
进一步阅读指导
习题
参考文献
第14章实现
141编程语言的选择
142第四代语言
ⅩⅤⅡ143良好的编程实践
1431使用一致和有意义的变量名
1432自文档代码的问题
1433使用参数
1434为增加可读性的代码编排
1435嵌套的if语句
144编码标准
145代码重用
146集成
1461自顶向下的集成
1462自底向上的集成
1463三明治集成
1464面向对象产品的集成
1465集成的管理
147实现流
148实现流:MSG基金实例研究
149测试流: 实现
1410测试用例选择
14101规格说明测试与代码测试
14102规格说明测试的可行性
14103代码测试的可行性
1411黑盒单元测试技术
14111等价测试和边界值分析
14112功能测试
1412黑盒测试用例: MSG基金实例
研究
1413玻璃盒单元测试技术
14131结构测试: 语句、 分支和路径
覆盖
14132复杂性度量
1414代码走查和审查
1415单元测试技术的比较
1416净室
1417测试对象时潜在的问题
1418单元测试的管理方面
1419何时该重写而不是调试代码制品
1420集成测试
1421产品测试
1422验收测试
1423测试流: MSG基金实例研究
1424实现的CASE工具
14241软件开发全过程的CASE
工具
14242集成化开发环境
14243商业应用环境
14244公共工具基础结构
14245环境的潜在问题
1425测试流的CASE工具
1426实现流的度量
1427实现流面临的挑战
本章回顾
进一步阅读指导
习题
参考文献
第15章交付后维护
151开发与维护
152为什么交付后维护是必要的
153对交付后维护程序员的要求是什么
154交付后维护小型实例研究
155交付后维护的管理
1551缺陷报告
1552批准对产品的修改
1553确保可维护性
1554迭代维护造成的问题
156面向对象软件的维护
157交付后维护技能与开发技能
158逆向工程
159交付后维护期间的测试
1510交付后维护的CASE工具
1511交付后维护的度量
1512交付后维护:MSG基金实例研究
1513交付后维护面临的挑战
本章小结
进一步阅读指导
习题
参考文献
第16章UML的进一步讨论
161UML不是一种方法
162类图
1621聚合
1622多重性
1623组合
1624泛化
1625关联
163注解
164用例图
165构造型
166交互图
ⅩⅤⅢ167状态图
168活动图
169包
1610组件图
1611部署图
1612UML图回顾
1613UML和迭代
本章回顾
进一步阅读指导
习题
参考文献
附录
附录A学期项目: Osric的办公室
用具和装饰
附录B软件工程资源
附录C需求流: MSG基金实例研究
附录D结构化系统分析: MSG基金
实例研究
附录E分析流: MSG基金实例研究
附录F软件项目管理计划: MSG基金
实例研究
附录G设计流: MSG基金实例研究
附录H实现流: MSG基金实例
研究(C++版)
附录I实现流: MSG基金实例
研究(Java版)
附录J测试流: MSG基金实例研究