面向对象软件工程
作者 : Stephen R.Schach
译者 : 黄林鹏 徐小辉 伍建焜
丛书名 : 计算机科学丛书
出版日期 : 2009-02-23
ISBN : 7-111-25502-4
定价 : 48.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 350
开本 : 16开
原书名 : Object-Oriented Software Engineering
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书从面向对象范型出发对软件工程进行重新演绎,全面、系统、清晰地介绍了面向对象软件工程的基本概念、原理、方法和工具,通过实例说明了面向对象软件开发的整个过程。
本书分为两个部分:第一部分介绍了面向对象软件工程的基本理论;第二部分以工作流的形式介绍了软件生命周期。

本书特色
  ●包括面向对象生命周期模型、面向对象分析、面向对象设计,以及面向对象软件的测试和维护。
  ●讨论了文档、维护、复用、可移植性、测试和CASE工具等的重要性。
  ●包括了能力成熟度模型(CMM)和人员能力成熟度模型(P-CMM)的内容。
  ●与语言无关。实例代码对于C++和Java语言背景的读者同样清晰。
  ●包括600余篇当前热点研究文章、经典文献和书籍的参考文献。
  ●包含2个用于说明完整软件生命周期的运行实例,还有7个较小的实例,分别用于突出说明特定的主题。基于统一过程、Java和C++语言的完整源码可从作者网站(www.mhhe.com/schach)下载。
  ●包括5种类型的习题,分别是概念理解、项目分析、课程设计、论文研读和实例修改。

图书特色

图书前言

在1988年,我撰写了一本教科书名为《Software Engineering》。事实上,在那本书中唯一提到面向对象范型的只有一节,即面向对象设计。
直到1994年,面向对象范型开始得到软件业界的认同,因此,我撰写了《Classical and Object-Oriented Software Engineering》一书。6年后,面向对象范型变得比传统范型更加重要。为了反映这个变化,我在2000年撰写的《Object-Oriented and Classical Software Engineering》(软件工程:面向对象和传统的方法) 该书的影印版和中文版,已由机械工业出版社出版,书号分别为ISBN 978-7-111-20822-8和ISBN 978-7-111-21722-0。中更换了这两个主题的顺序。
今天,传统范型的使用仅限于对遗留系统的维护。学生所学的第一门面向对象的程序语言是C++或Java,而面向对象语言在后续的计算机科学和计算机工程课程中也常被使用。学生们期望,他们毕业后在一个使用面向对象范型的公司工作。面向对象范型已经完全挤压了传统范型的生存空间,这也是本书命名为《面向对象软件工程》的原因。
本书特点
 统一过程仍是面向对象软件开发的首选,因此本书中,学生所学习的仍是统一过程的理论和实践。
 第1章深入分析了面向对象范型的优势。
 第2章引入了迭代-递增生命周期模型。此外,本章还讨论了敏捷过程。
 第3章介绍了统一过程的各个阶段和工作流(活动),解释了为何需要二维生命周期模型。
 第4章讨论了软件团队的多种组织方式,包括敏捷过程团队和开源软件开发团队。
 第5章介绍了一些重要的CASE工具。
 第6章强调了连续测试的重要性。
 第7章关注的重点是对象。
 第8章强调了设计模式。
 第9章给出了软件项目管理计划的新IEEE标准。
 第10章、第11章、第12章和第13章主要阐述统一过程中的工作流(活动)。
 第13章清晰地阐述了实现和集成的区别。
 第14章强调了交付后维护的重要性。
 第15章提供了更多的关于UML的资料。这一章对于采用本书作为两学期的软件工程课程教材的教师尤其有用。在第二学期,除了开发基于团队的学期项目或者“封顶”项目外,通过学习本章,学生可以获得更多的UML知识。
 本书包含两个使用统一过程的运行实例:MSG基金会实例和电梯问题。其Java和C++语言的开发源码可从www.mhhe.com/schach下载。
 除了两个用于说明完整软件生命周期的运行实例外,还有7个较小的实例,分别用于突出说明特定的主题,如移动目标、逐步求精和交付后维护等。
 本书强调文档、维护、重用、可移植性、测试和CASE工具。学生只有认识到这些面向对象软件工程的基础的重要性,才能更好地掌握最新的技术。
 本书注重面向对象生命周期模型、面向对象分析、面向对象设计、面向对象范型的管理建议、面向对象软件的测试和维护,还包括了面向对象范型的度量。除此之外,许多地方或多或少地会提及对象,因为面向对象范型不仅与执行不同的工作流相关,而且已经渗透到我们对软件工程的思考之中。对象技术的使用遍及全书。
 软件过程仍是本书的整体基础。为了控制这个过程,必须能够度量项目中所发生的一切。因此,有必要强调度量。对于过程改进,本书包括了能力成熟度模型(CMM)、ISO/IEC 15504(SPICE)和ISO/IEC 12207。在第4章中包括了人员能力成熟度模型(P-CMM)的内容。
 本书与语言无关。虽然书中少量代码是以C++或Java语言编写的,但我尽量消除与语言相关的细节,以确保代码例子对于C++或Java语言背景的读者同样清晰。例如,对于输出,我不使用C++语言的cout,也不使用Java语言的System.out.println,而是使用伪代码指令print(唯一的例外是第二个研究实例,其完整实现分别以C++和Java语言给出)。
 本书包括600余条参考文献条目,其中有当前的研究文章、一些内容仍新鲜且相关的经典文献以及书籍。毫无疑问,面向对象软件工程是一门快速发展的学科,学生需要了解最新的研究成果以及在哪里可以找到它们。同时,今天的前沿研究是在昨天的成果之上进行的,如果一篇文章的思想今天仍然实用,就没有理由将其排除在参考文献之外。
 对于先修课程,假定读者熟悉一种高级面向对象程序设计语言(如C++或Java等),除此之外,希望读者学习过数据结构课程。
本书的结构
本书既可为传统的一个学期的软件工程课程使用,也同样适用于目前普遍流行的较为新颖的两个学期软件工程课程。在传统的一个学期(或者四分之一学年)的课程中,理论部分内容不得不一掠而过,这样,教师才有时间给学生讲授完成学期项目所需要的知识和技能。如此匆忙的目的是使学生能尽早开始项目并在学期结束前完成项目。为了满足一个学期的、基于项目的软件工程课程教学的需要,本书第二部分以一个工作流接着一个工作流的形式介绍了软件生命周期,而第一部分则提供了为理解第二部分所需要的理论基础。例如,第一部分介绍了CASE、度量和测试,而第二部分的每一章都包含一节讲授工作流的CASE工具、一节讲授工作流的度量和一节介绍工作流期间的测试。为了尽早讲授第二部分内容,第一部分的教学内容应保持简短。另外,第一部分最后两章(第8章和第9章)的内容的教学可以推迟,留待和第二部分的内容一起并行讲授。由此,可以尽快地开始学期项目。
现在来看一下两个学期的软件工程课程的教学情况。越来越多的计算机科学系和计算机工程系的教师认识到大部分毕业生受聘的职位是软件工程师,因此,许多大学都开设两个学期(或两个四分之一学年)的软件工程系列课程。第一学期的课程主要是理论性的(但通常也包括某种形式的小型项目),而第二学期的课程则是以基于团队的学期项目开发为主。学期项目通常是课程的最后一部分内容,因此,如果学期项目是第二学期的内容,教师的授课时间就不会显得捉襟见肘。
综上所述,使用本书作为一个学期(或四分之一学年)课程的教科书的教师,可首先讲授本书第1章至第7章的大部分内容,然后开始讲授第二部分(第10章至第15章)的内容。第8章和第9章的内容可以和第二部分的内容平行教授或在学期末(学生完成项目)时讲授。当本书作为两个学期使用的教材时,应当按顺序讲授各章节的内容。第一学期课程结束之后,学生就应该做好参与第二学期基于团队的学期项目的准备。
为了确保学生能够真正理解第二部分所介绍的一些关键软件工程技术,本书对每项技术都介绍了两次。首先,通过电梯问题引入该技术并进行讲解。电梯问题大小适中,读者借此可以看到技术在一个完整问题上的应用,而且还包括了足够多的细节,可以凸显所教技术的优缺点。然后,给出MSG基金会案例中与该项技术相关的部分,借助案例的详细解决方案展开对应技术的第二次阐述。
习题类型
本书有5种类型的习题。第一,在第10章、第11章和第12章末尾都有连续的面向对象的分析和设计项目。因为只有通过实践才能掌握如何执行需求、分析和设计工作流。
第二,每一章的末尾都包含意在突出知识点的习题。这些习题是独立的,所有相关的技术信息都可以在本书中找到。
第三,有一个学期项目。这个项目是为3个人组成的团队设计的,3是最小的不用通过标准电话交换意见的团队成员的数目。学期项目由14个独立的组件组成,每一组件都位于某一相关章节之后。例如,第12章中,学期项目的组件所涉及的就是软件设计。通过将一个大的项目分解为较小的、明确定义的若干部分,指导教师就能更密切地掌控学生的学习进度。学期项目的构造目的是使指导教师可以自由地将这14个组件应用于其他所选择的项目。
本书是为研究生和本科高年级学生编写的,因此,第4种类型的习题是基于软件工程领域的研究论文而设计的。每一章都选择一篇重要的论文。要求学生阅读文章并回答与其内容相关的问题。当然,教师也可自由选择其他的研究论文,每一章的“延伸阅读材料”中包含了多篇相关的论文。
第5种类型的习题和实例研究相关。这种类型的题目是应许多授课教师的要求加入的。许多教师感到学生通过修改一个现成的产品比从头开始开发一个产品所学的要多。许多业界的资深工程师也同意这个观点。由此,在每章给出实例研究之处都有需要学生对实例进行某种修改的问题。例如,其中一章就要求学生回答如下问题:若以不同的顺序执行面向对象分析的步骤,效果如何。为了使学生便于修改实例,在www.mhhe.com/schach上可获得实例的源代码。
该网站也给授课教师提供了PowerPoint形式的授课笔记以及包含学期项目在内的所有习题的详细解答。
UML材料
本书大量使用统一建模语言(UML)。如果学生以前没有学过UML,该方面的内容可以两种方式讲授。我倾向于在需要时才进行教授,即每个UML概念仅在需要时才介绍。下表给出了本书使用的UML结构所对应的章节。

结  构  介绍对应UML图的章节类图、注解、继承(泛化)、聚合、关联、导航三角形  7.7节用例  10.4.3节用例图、用例描述  10.7节固定形式  11.4节状态图  11.9节交互图(顺序图、协作图)  11.18节
另外一种讲授方式是整体教学。本书第15章介绍了UML,包含上述概念以及以后学习所需的材料。第15章可以随时讲授,这章的内容不依赖于前面14章。第15章包含的主题见下表:

结 构  介绍对应UML图的小节类图、聚合、多态、结合、泛化、关联  15.2节注解  15.3节用例图  15.4节固定形式  15.5节交互图  15.6节状态图  15.7节活动图  15.8节包  15.9节组件图  15.10节配置图  15.11节
致谢
感谢本书的评审,他们是
  Michael A.Aars(Baylor University)
Keith S.Decker(University of Delaware)
Xiaocong Fan(The Pennsylvania State University)
Adrian Fiech(Memorial University)
Sudipto Ghosh(Colorado State University)
David C.Rine(George Mason University)
Keng Siau(University of Nebraska-Lincoln)
Anita Kuchera(Rensselaer Polytechnic Institute)Matthew R.McBride(Southern Methodist University)
Michael McCracken(Georgia Institute of Technology)
Rick Mercer(University of Arizona)
Richard J.Povinelli(Marquette University)
John Sturman(Rensselaer Polytechnic Institute)
Levent Yilmaz(Auburn University)
衷心地感谢对本书以及我先前书籍做出重要贡献的三位同仁,其一是Kris Irwin,他提供了用Java和C++语言实现的学期项目的完整解答;其二是Jeff Gray,他给出了MSG基金会案例的实现;其三是Lauren Ryder,他和我一起完成了本书的教师指导手册和PowerPoint幻灯片。
接着要感谢的是出版商McGraw-Hill。真诚地感谢资深出版编辑Faye Schilling,她在出版中期主动承担了产品经理的工作,对于她在需要时能欣然应允修改日程安排表示感激。策划编辑Lora Kalb,她自始至终都是本书出版的顶梁柱,非常高兴能再次和她一起工作。衷心感谢本书排版Lucy Mullins、校对Dorothy Wendell和产品经理Joyce Berendes。最后,感谢Brenda Rolwes,在他的协调下,Studio Montage公司的封面设计师Jenny Hobein将位于悉尼海港的桥梁变形为能在读者脑海产生深刻印象的封面图案。
感谢世界各地的教师,他们发来了关于我的其他书籍的意见。我期待着收到他们针对本书发来的反馈意见。我的E-mail地址是srs@vuse.vanderbilt.edu。
学生们对本书的出版也做出了巨大的贡献。再次感谢Vanderbilt大学的学生提出的来自课堂内外的挑战性问题和建设性意见。非常感谢来自世界各地的学生通过E-mail发给我的问题和建议。我真诚期望学生如对待我以前的书籍一样发来本书的反馈意见。
最后,感谢我的家人对我持之以恒的支持。和编写先前的书籍一样,我尽量确保家庭义务先于书籍写作。然而,当交稿临近时,有时这是不可能的。此时,他们总是能表示理解,为此我深深地感谢他们。
让我将这本我所撰写的第14本书籍和我的爱一起献给我的孙子Jackson。

Stephen R.Schach

封底文字

本书从面向对象范型出发对软件工程进行重新演绎,全面、系统、清晰地介绍了面向对象软件工程的基本概念、原理、方法和工具,通过实例说明了面向对象软件开发的整个过程。 本书分为两个部分:第一部分介绍了面向对象软件工程的基本理论;第二部分以工作流的形式介绍了软件生命周期。 本书特色 ●包括面向对象生命周期模型、面向对象分析、面向对象设计,以及面向对象软件的测试和维护。 ●讨论了文档、维护、复用、可移植性、测试和CASE工具等的重要性。 ●包括了能力成熟度模型(CMM)和人员能力成熟度模型(P-CMM)的内容。 ●与语言无关。实例代码对于C++和Java语言背景的读者同样清晰。 ●包括600余篇当前热点研究文章、经典文献和书籍的参考文献。 ●包含2个用于说明完整软件生命周期的运行实例,还有7个较小的实例,分别用于突出说明特定的主题。基于统一过程、Java和C++语言的完整源码可从作者网站(www.mhhe.com/schach)下载。 ●包括5种类型的习题,分别是概念理解、项目分析、课程设计、论文研读和实例修改。

译者简介

黄林鹏 徐小辉 伍建焜:暂无简介

译者序

软件工程的目标是按时交付满足客户需要、未超出预算、无错误、能随需求变化易于修改的软件。
  在计算机界,范型一词最早用于描述编程风格。编程范型可以看成是程序员对程序执行的看法,而一些语言是专门为某个特定的范型设计的,当然也有一些语言支持多种范型。由于编程语言和软件开发的密切关系,范型一词也被引申至软件工程领域。面向对象的软件工程(object-oriented software engineering)就是一门利用面向对象范型实现软件工程目标的学科。
  本书的作者Stephen R. Schach博士编写了14本与软件工程相关的畅销书,他撰写的书籍深入浅出,被许多学校选为教材并翻译为多国文字。Stephen R. Schach认为,当前传统范型的使用在很大程度上仅限于遗留系统的维护。学生所学的第一门面向对象程序语言是C++或Java,他们毕业后一般也将工作于一个使用面向对象范型的公司,因此有必要从面向对象范型出发对软件工程进行重新演绎,本书正是这样一本教科书。它全面、系统、清晰地介绍了面向对象软件工程的基本概念、原理、方法和工具,并通过实例说明了面向对象软件开发的整个过程。
  本书分为两个部分,第一部分介绍了面向对象软件工程的基本理论,第二部分以工作流的形式介绍了软件生命周期,并通过一个小规模和一个中等规模的软件开发实例进行阐述。按照作者建议的课程内容安排,本书既可作为一个学期也可作为两个学期的教科书使用。
  本书的习题也很有特色,可分为5类:一是每章都包含的与知识点相关的练习;二是每一章都选择了一篇经典论文,要求学生阅读并对相关的问题展开讨论,此类题目对于研究性的学习或讨论班类的课程特别有助;三是针对需求、分析和设计工作流设计的面向对象的分析和设计的小项目,通过实践,学生可快速掌握相关的工具和技术;四是针对每章讨论的实例,要求学生按照需求变化对实例进行某种修改,修改一个现成的产品与从头开始开发一个产品相比,有时前者对于知识的掌握更加有效;五是project,其是为3个人组成的团队设计的,目的是锻炼团队的协同软件开发能力。
  本书的翻译工作主要由黄林鹏负责,参与本书翻译的还有徐小辉、王欣、陈俊清、任建焜、王德俊、孙俊、沈飞、徐成、黄冠、曾慧清和杜思奇等。其中第2章至第4章由徐小辉初译,第5章至第7章由王欣初译,第8章至第11章由陈俊清初译,第12章至第15章由伍建焜初译。陆朝俊副教授对本书的翻译提供了不少建设性的帮助。本书译稿由黄林鹏修改、整理和定稿,其对最终出现的问题负责,请将批评意见发至lphuang@sjtu.edu.cn,不胜感激。

  黄林鹏
  2008年11月于上海交通大学

图书目录

出版者的话
译者序
前言

第一部分 面向对象软件工程简介
第1章 面向对象软件工程的范畴3
 1.1 历史方面4
 1.2 经济方面6
 1.3 维护方面6
  1.3.1 现代软件维护观点8
  1.3.2 交付后维护的重要性9
 1.4 需求、分析和设计方面10
 1.5 团队开发11
 1.6 没有计划阶段的原因12
 1.7 没有测试阶段的原因12
 1.8 没有文档阶段的原因13
 1.9 面向对象范型13
 1.10 术语15
 1.11 道德规范问题17
 本章回顾18
 延伸阅读材料18
 习题19
 参考文献20
第2章 软件生命周期模型23
 2.1 理想软件开发23
 2.2 Winburg小型案例研究23
 2.3 Winburg小型案例研究经验25
 2.4 Teal Tractors公司小型案例研究25
 2.5 迭代与增量26
 2.6 Winburg小型案例研究再探28
 2.7 迭代和增量的风险及其他29
 2.8 管理迭代与增量31
 2.9 其他生命周期模型31
  2.9.1 边写边改生命周期模型32
  2.9.2 瀑布生命周期模型32
  2.9.3 快速原型生命周期模型33
  2.9.4 开源生命周期模型34
  2.9.5 敏捷过程35
  2.9.6 同步稳定生命周期模型37
  2.9.7 螺旋生命周期模型38
 2.10 生命周期模型的比较40
 本章回顾41
 延伸阅读材料41
 习题42
 参考文献43
第3章 软件过程46
 3.1 统一过程47
 3.2 迭代与增量48
 3.3 需求工作流49
 3.4 分析工作流50
 3.5 设计工作流51
 3.6 实现工作流52
 3.7 测试工作流52
  3.7.1 需求制品53
  3.7.2 分析制品53
  3.7.3 设计制品53
  3.7.4 实现制品53
 3.8 交付后维护54
 3.9 退役55
 3.10 统一过程的阶段55
  3.10.1 初始阶段56
  3.10.2 细化阶段57
  3.10.3 构造阶段58
  3.10.4 移交阶段58
 3.11 一维与二维生命周期模型对比59
 3.12 改进软件过程60
 3.13 能力成熟度模型60
 3.14 软件过程改进的其他方面62
 3.15 软件过程改进的成本与收益62
 本章回顾64
 延伸阅读材料64
 习题65
 参考文献65
第4章 软件团队68
 4.1 团队组织68
 4.2 民主团队方式69
 4.3 主程序员团队方式70
  4.3.1 《纽约时报》项目71
  4.3.2 主程序员团队方式的不切实际性72
 4.4 超越主程序员和民主团队72
 4.5 同步-稳定团队73
 4.6 敏捷过程团队74
 4.7 开源编程团队74
 4.8 人力资源能力成熟度模型75
 4.9 选择合适的团队组织75
 本章回顾76
 延伸阅读材料76
 习题77
 参考文献77
第5章 软件工程工具79
 5.1 逐步求精79
 5.2 成本-效益分析法82
 5.3 软件度量83
 5.4 CASE84
 5.5 CASE的分类85
 5.6 CASE的范围86
 5.7 软件版本88
  5.7.1 修订版89
  5.7.2 变体89
 5.8 配置控制89
  5.8.1 交付后维护期间的配置控制91
  5.8.2 基线91
  5.8.3 产品开发过程中的配置控制91
 5.9 建造工具92
 5.10 使用CASE技术提高生产力93
 本章回顾93
 延伸阅读材料93
 习题94
 参考文献95
第6章 测试97
 6.1 质量问题97
  6.1.1 软件质量保证98
  6.1.2 管理独立性98
 6.2 基于非执行的测试99
  6.2.1 走查99
  6.2.2 管理走查100
  6.2.3 审查100
  6.2.4 走查和审查的对比102
  6.2.5 评审的优缺点102
  6.2.6 审查的度量方法102
 6.3 基于执行的测试103
 6.4 应该测试什么103
  6.4.1 实用性104
  6.4.2 可靠性104
  6.4.3 健壮性104
  6.4.4 性能105
  6.4.5 正确性105
 6.5 测试与正确性证明106
  6.5.1 正确性证明的例子106
  6.5.2 正确性证明小型实例研究108
  6.5.3 正确性证明和软件工程109
 6.6 由谁来完成基于执行的测试111
 6.7 测试何时停止112
 本章回顾112
 延伸阅读材料112
 习题113
 参考文献114
第7章 从模块到对象117
 7.1 什么是模块117
 7.2 内聚119
  7.2.1 偶然性内聚119
  7.2.2 逻辑性内聚120
  7.2.3 时间性内聚120
  7.2.4 过程性内聚121
  7.2.5 通信性内聚121
  7.2.6 功能性内聚121
  7.2.7 信息性内聚121
  7.2.8 内聚示例122
 7.3 耦合122
  7.3.1 内容耦合122
  7.3.2 公共耦合123
  7.3.3 控制耦合124
  7.3.4 印记耦合125
  7.3.5 数据耦合125
  7.3.6 耦合示例126
  7.3.7 耦合的重要性126
 7.4 数据封装127
  7.4.1 数据封装和开发128
  7.4.2 数据封装和维护129
 7.5 抽象数据类型133
 7.6 信息隐藏134
 7.7 对象135
 7.8 继承、多态和动态绑定137
 7.9 面向对象范型139
 本章回顾140
 延伸阅读材料141
 习题141
 参考文献142
第8章 可复用性和可移植性144
 8.1 复用的概念145
 8.2 复用的障碍146
 8.3 复用案例研究147
  8.3.1 雷锡恩导弹系统部门147
  8.3.2 欧洲航天局148
 8.4 对象和复用149
 8.5 在设计和实现过程中的复用149
  8.5.1 设计复用149
  8.5.2 应用架构150
  8.5.3 设计模式151
  8.5.4 软件体系结构152
  8.5.5 基于组件的软件工程153
 8.6 关于设计模式的更多内容153
  8.6.1 FLIC小型案例研究153
  8.6.2 适配器设计模式154
  8.6.3 桥接设计模式154
  8.6.4 迭代器设计模式155
  8.6.5 抽象工厂设计模式156
 8.7 设计模式的范畴159
 8.8 设计模式的优点和缺点159
 8.9 复用和交付后的维护160
 8.10 可移植性161
  8.10.1 硬件的不兼容性161
  8.10.2 操作系统的不兼容性162
  8.10.3 数值计算软件的不兼容性162
  8.10.4 编译器的不兼容性163
 8.11 为什么需要可移植性165
 8.12 实现可移植性的技术166
  8.12.1 可移植的系统软件166
  8.12.2 可移植的应用软件166
  8.12.3 可移植数据167
  8.12.4 基于Web的应用程序167
 本章回顾168
 延伸阅读材料168
 习题169
 参考文献170
第9章 计划与估算174
 9.1 计划活动与软件过程174
 9.2 估算项目周期和成本175
  9.2.1 产品规模的衡量标准176
  9.2.2 成本估算技术178
  9.2.3 中级COCOMO180
  9.2.4 COCOMO II182
  9.2.5 跟踪周期和成本估算183
 9.3 估算探讨183
 9.4 软件项目管理计划的组成184
 9.5 软件项目管理计划框架185
 9.6 IEEE软件项目管理计划186
 9.7 对测试进行计划188
 9.8 培训需求188
 9.9 文档标准189
 9.10 计划和估算的CASE工具189
 9.11 测试软件项目管理计划190
 本章回顾190
 延伸阅读材料190
 习题191
 参考文献192
第二部分 软件生命周期工作流
第10章 需求工作流196
 10.1 确定什么是客户所需196
 10.2 需求工作流概述197
 10.3 域的理解197
 10.4 业务模型198
  10.4.1 访谈198
  10.4.2 其他技术198
  10.4.3 用例199
 10.5 初始需求200
 10.6 对应用域的初始理解:MSG基金会
实例研究200
 10.7 初始业务模型:MSG基金会实例
研究202
 10.8 初始需求:MSG基金会实例研究204
 10.9 需求工作流继续:MSG基金会实例
研究205
 10.10 修订需求:MSG基金会实例
研究206
 10.11 测试工作流:MSG基金会实例
研究211
 10.12 什么是面向对象的需求217
 10.13 快速原型218
 10.14 人为因素218
 10.15 复用快速原型219
 10.16 需求工作流的CASE工具220
 10.17 需求工作流的度量220
 10.18 需求工作流的挑战220
 本章回顾221
 延伸阅读材料222
 习题222
 参考文献223
第11章 分析工作流224
 11.1 规格说明文档224
 11.2 非形式化规格说明225
 11.3 小型案例研究的正确性证明回顾226
 11.4 分析工作流227
 11.5 实体类的提取228
 11.6 电梯问题228
 11.7 功能建模:电梯问题案例研究229
 11.8 实体类建模:电梯问题案例研究230
  11.8.1 名词提取230
  11.8.2 CRC 卡片232
 11.9 动态建模:电梯问题案例研究233
 11.10 测试工作流:电梯问题案例研究235
 11.11 提取边界类和控制类237
 11.12 初始功能建模:MSG基金会案例
研究238
 11.13 初始类图:MSG基金会案例
研究239
 11.14 初始动态建模:MSG基金会案例
研究240
 11.15 修订实体类:MSG基金会案例
研究242
 11.16 提取边界类:MSG基金会案例
研究243
 11.17 提取控制类:MSG基金会案例
研究243
 11.18 用例实现:MSG基金会案例
研究243
  11.18.1 Estimate Funds Available
for Week用例244
  11.18.2 Manage an Asset
用例248
  11.18.3 Update Estimated Annual
Operating Expenses
用例251
  11.18.4 Produce a Report用例252
 11.19 类图增量:MSG基金会案例
研究256
 11.20 软件项目管理计划:MSG基金会
案例研究257
 11.21 测试工作流:MSG基金会案例
研究257
 11.22 统一过程中的规格说明文档257
 11.23 更多关于参与者和用例的内容258
 11.24 支持分析工作流的CASE工具259
 11.25 分析工作流的挑战259
 本章回顾259
 延伸阅读材料260
 习题260
 参考文献262
第12章 设计工作流264
 12.1 面向对象设计264
 12.2 面向对象设计:电梯问题案例
研究268
 12.3 面向对象设计:MSG基金会案例
研究270
 12.4 设计工作流272
 12.5 测试工作流:设计273
 12.6 测试工作流:MSG基金会
案例273
 12.7 详细设计的形式化技术273
 12.8 实时设计技术274
 12.9 用于设计的CASE工具274
 12.10 设计的度量275
 12.11 设计工作流面临的挑战276
 本章回顾277
 延伸阅读材料277
 习题277
 参考文献278
第13章 实现工作流280
 13.1 选择编程语言280
 13.2 良好的编程实践282
  13.2.1 使用一致和有意义的变量名282
  13.2.2 自文档化代码的问题283
  13.2.3 使用参数284
  13.2.4 为增加可读性的代码编排284
  13.2.5 嵌套的if语句285
 13.3 编码标准286
 13.4 代码复用286
 13.5 集成286
  13.5.1 自顶向下的集成287
  13.5.2 自底向上的集成288
  13.5.3 三明治集成288
  13.5.4 集成技术289
  13.5.5 集成管理290
 13.6 实现工作流290
 13.7 实现工作流:MSG基金会案例
研究290
 13.8 测试工作流:实现290
 13.9 测试用例的选择290
  13.9.1 规格说明测试与代码测试291
  13.9.2 规格说明测试的可行性291
  13.9.3 代码测试的可行性291
 13.10 黑盒单元测试技术293
  13.10.1 等价测试和边界值分析293
  13.10.2 功能测试294
 13.11 黑盒测试用例:MSG基金会
案例研究294
 13.12 玻璃盒单元测试技术296
  13.12.1 结构测试:语句、分支和路径
覆盖296
  13.12.2 复杂性度量297
 13.13 代码走查和审查298
 13.14 单元测试技术的比较298
 13.15 净室298
 13.16 测试中的问题299
 13.17 单元测试的管理方面内容301
 13.18 何时重写而不是调试代码制品301
 13.19 集成测试302
 13.20 产品测试303
 13.21 验收测试303
 13.22 测试流:MSG基金会案例
研究304
 13.23 用于实现的CASE工具304
  13.23.1 软件开发全过程的CASE
工具304
  13.23.2 集成开发环境304
  13.23.3 商业应用环境305
  13.23.4 公共工具基础结构305
  13.23.5 环境的潜在问题306
 13.24 测试工作流的CASE工具306
 13.25 实现工作流的度量306
 13.26 实现工作流面临的挑战307
 本章回顾307
 延伸阅读材料308
 习题309
 参考文献310
第14章 交付后维护313
 14.1 开发与维护313
 14.2 为什么交付后维护是必要的314
 14.3 交付后维护程序员要求具备
什么314
 14.4 交付后维护小型案例研究316
 14.5 交付后维护的管理317
  14.5.1 缺陷报告317
  14.5.2 授权对产品的修改318
  14.5.3 确保可维护性318
  14.5.4 反复维护的问题319
 14.6 维护问题319
 14.7 交付后维护技能与开发技能321
 14.8 逆向工程321
 14.9 交付后维护期间的测试322
 14.10 交付后维护的CASE工具323
 14.11 交付后维护的度量323
 14.12 交付后维护:MSG基金会案例
研究323
 14.13 交付后维护面临的挑战323
 本章回顾323
 延伸阅读材料324
 习题324
 参考文献325
第15章 UML的进一步讨论327
 15.1 UML不是一种方法学327
 15.2 类图327
  15.2.1 聚合328
  15.2.2 多重性329
  15.2.3 组合329
  15.2.4 泛化330
  15.2.5 关联330
 15.3 注释330
 15.4 用例图330
 15.5 构造型331
 15.6 交互图331
 15.7 状态图333
 15.8 活动图335
 15.9 包335
 15.10 组件图336
 15.11 部署图336
 15.12 UML图回顾336
 15.13 UML和迭代336
 本章回顾337
 延伸阅读材料337
 习题337
 参考文献337
附  录338
 附录A 学期项目:Osric办公用品和
装饰公司项目338
 附录B 软件工程资源340
 附录C 需求工作流:MSG基金会
案例研究341
 附录D 分析工作流:MSG基金会
案例研究341
 附录E 软件工程管理计划:MSG
基金会案例研究341
 附录F 设计工作流:MSG基金会
案例研究345
 附录G 实现工作流:MSG基金会
案例研究(C++版)349
 附录H 实现工作流:MSG基金会
案例研究(Java版)349
 附录 I  测试工作流:MSG基金会
案例研究350

教学资源推荐
作者: 康一梅 张永革 李志军 胡江 吴伟
作者: (美)Stephen R. Schach 著 范德比尔特大学
参考读物推荐
作者: [美]伦·巴斯(Len Bass),[美]保罗·克莱门茨(Paul Clements),[美]瑞克·凯兹曼(Rick Kazman) 著
作者: Donald J.Reifer
作者: [加] 唐·麦格里尔(Don McGreal) [德] 拉尔夫·乔查姆(Ralph Jocham) 著
作者: Geri Schneider Jason P.Winters