软件工程:实践者的研究方法(原书第6版)
作者 : Roger S.Pressman
译者 : 郑人杰 马素霞 白晓颖 等
丛书名 : 计算机科学丛书
出版日期 : 2006-12-04
ISBN : 7-111-19400-4
定价 : 69.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 702
开本 : 16开
原书名 : Software Engineering: A Practitioner's Approach, Sixth Edition
原出版社: McGraw-Hill
属性分类: 教材
包含CD :
绝版 :
图书简介

Roger Pressman编写的这部翔实而全面的软件工程指南,广泛适合软件工程专业的学生及投身软件工程实践或需要参与这种实践的软件开发人员和管理人员。
——《IEEE Software》
  这是一本经典的现代教材,叙述清晰而又有权威性。本书包含大量插图、例子、习题和参考资料……如果读者心存疑问:“软件工程是什么?它现在在哪里?”那么最好阅读这本书。
——《ACM Computing Reviews》
  作为一名软件工程实践者,我发现此书是无价的。对于我做过的所有项目,本书都有重大的参考价值。
——摘自Amazon.com的评论

  20多年以来,《软件工程:实践者的研究方法》一书是最受学生和行业专业人员欢迎的软件工程指南。它在全面而系统、概括而清晰地介绍软件工程的有关概念、原则、方法和工具方面获得了广大读者的好评,在国际软件工程界享有无可质疑的权威地位。
  本书第6版在结构和内容上均有不少调整、更新和充实。第6版更加突出了软件过程,增加了敏捷开发方法,论述了很多人们称之为“21世纪工程学科”的重要主题。
  对第6版的内容做了如下划分,更便于课堂教学及自学使用:

  ●第一部分 软件过程,介绍了惯例模型和敏捷过程模型。
  ●第二部分 软件工程实践,介绍了现代分析、设计和测试方法,新的重点放在基于UML的建模方面。
  ●第三部分 应用Web工程,是第6版中新增的内容,描述了如何使软件工程实践适应WebApp 工程。
  ●第四部分 管理软件项目,介绍与计划、管理和控制软件项目有关的主题。
  ●第五部分 软件工程高级课题,专门讲述了形式化方法、净室软件工程、基于构件的方法及再工程。

图书特色

图书前言

成功的计算机软件能够很好地满足使用者的要求,能在相当长的时间内无故障地运行,能够非常好用,也容易修改;这样的软件能够也确实会把事情办好。反之,有问题的软件无法让用户满意,容易出错,难于修改,甚至很难使用;这样的软件将会也确实会把事情办糟。我们希望开发出好的软件,把事情办好,避免那些隐藏在背后的糟糕的事情发生。为了获得成功,在设计和开发软件时,我们需要有规范,需要有工程化的方法。
  在本书第1版问世以来的25年中,软件工程已经从少数倡导者提出的一些朦胧概念发展成为一门正规的工程学科。如今,软件工程已被公认为是一个值得深入研究、认真学习和热烈讨论的课题。在整个行业中软件工程师已经代替了程序员成为人们优先选择的工作岗位。软件过程模型、软件工程方法和软件工具已在广阔的行业应用领域得到成功的采用。
  尽管管理人员和工作在第一线的专业人员都承认,需要有更为规范化的软件方法,但他们却始终在争论着应该采取什么样的规范。许多个人和公司至今仍在杂乱无章地开发着自己的软件,甚至即使他们正在开发的系统服务于目前最为先进的技术,也仍然如此。许多专业人员和学生并不了解现代方法。于是造成了严重的后果,以至所开发的软件质量很差,糟糕的事情时有发生。此外,有关软件工程方法性质的争论一直持续进行着。软件工程的重要地位问题已成为研究课题。人们对待软件工程的态度已有所改变,研究工作已取得了进展,不过要成为一个完全成熟的学科还有大量的工作要做。
  本书第6版希望成为推动工程学科走向成熟的入门读物。和前五版一样,第6版对学生和专业人员同样具有很强的吸引力。本书既是软件行业专业人员的工作指南,同时也是大学高年级学生以及一年级研究生的综合性参考书。
  第6版包含很多新的内容,它绝不是前一版的简单更新。这一版做了不少修订,结构上也有调整,更加强调一些新的和重要的软件工程过程和实践。此外,我们专门为本书开辟了一个网站(www.mhhe.com/pressman),其中提供的“支持系统”(见图0-1)包含了为学生、教师和专业人员提供的大量专业资源,从而丰富和充实了本书的内容。(访问原书网站可能无法获取有些配套资源,需要这些配套资源的教师可联系麦格劳-希尔教育出版公司北京办事处,联系方式参见书后的“教学服务沟通表”。—编者注)
  第6版共32章,分为五个部分。这样就把全书分为五个主题,从而有助于教师解决无法在一个学期内讲完书中全部材料的问题。
  * 第一部分 软件过程,给出了软件过程的不同论点,考虑到所有重要的过程模型,涉及传统过程和敏捷过程在指导思想上的争论。
  * 第二部分 软件工程实践,给出了分析、设计和测试方法,其中突出讨论了面向对象技术和UML建模。鉴于面向对象方法目前在行业中已被广泛采用,原来第5版中第四部分的内容(面向对象软件工程)现已全部纳入到这里了。
  * 第三部分 应用Web工程,提供了Web应用系统的分析、设计和测试的全面工程方法。
  * 第四部分 管理软件项目,给出的是与计划、管理和控制软件项目的人员有关的问题。
  * 第五部分 软件工程高级课题,涉及形式化方法、净室软件工程、基于构件的软件工程、再工程以及未来的发展趋势等问题。
  第6版除了对前一版本做了许多更新和重要修改外,还特别增加了120多个框。主要分为以下4种:
  * 让读者跟随一个虚构的项目组,跟随他们的工作进程开发一个计算机应用系统。
  * 对选择的题目提供补充的讨论。
  * 概述反映某些软件工程活动工作流的任务集。
  * 推荐与特定章节相关的自动化工具。
  第6版分为五部分,这样方便教师根据时间和学习要求安排讲课内容。在一个学期内可进行一个部分,也可进行多个部分。例如“方法课”可能只强调第一和第二部分;而Web开发课会强调第一和第三部分;管理课应把重点放在第一和第四部分。第6版内容这样组织,其意图在于给教师提供多种教学安排的选择。但无论如何选择,第6版的内容都可获得“支持系统”的补充支持(参见图0-1):
  图0-1  本书第6版的支持系统
  为学生提供的资源
  提供种类繁多、内容丰富的材料供学生学习。包括:在线学习中心可提供学习指南、实习测验以及Web资源(包括软件工程检查单、一套不断演化的微型工具、完整的案例研究以及工作产品模板)。此外,还有900多种网上参考资料可供学生更深入地探讨软件工程问题。
  为教师提供的资源
  本书第6版为教师提供了广泛的资源,包括综合性在线教师指南(可下载)、教学补充材料、700多幅供讲课用的PowerPoint幻灯片、试题库及试卷模板。此外,参考文献指明了500多篇软件工程的研究论文(分专题组织,且可下载),在讲授高级软件工程课程时可作为专题讨论课使用。在教师指南中,对各种类型的软件工程课程的教学提出了建议,介绍了与课程配合开展的软件项目以及许多有用的教学辅助工具。
  为专业人员提供的资源
  有许多资源可供工业界的专业人员(也包括学校师生)使用,包括软件工程文档及其他工作产品的纲要和模板、一套有用的软件工程检查单、CASE工具目录、综合性Web资源,并且还提供了根据具体任务划分的软件工程过程的“通用过程模型”。
  本书第6版配有在线支持系统,这样既保证了使用上的灵活性,又保证了内容上的足够深度。这一点是任何单本教科书无法比拟的。
致谢
  本书六个版本的出版工作是我一生中持续最久的技术项目。甚至在书稿完成后,我仍然不断地从一些技术文献中提取信息并加以吸收和组织。正是这个原因,我十分感谢这些书籍、文章(包括发表在硬拷贝和电子媒体上)的作者,在过去的25年中是他们给了我不少见解和想法。
  特别感谢渥太华(Ottawa)大学的Tim Lethbridge,他非常仔细地审核了第6版,并帮助我开发了UML及OCL实例,还开发了与本书配套的综合案例研究,他的支持和建议非常有价值。特别感谢密歇根大学迪尔本分校(Michigan-Dearborn)的Bruce Maxim,他帮助我开发了与本书配套的Web站点,Bruce负责大部分教学内容。最后,我想感谢第6版的所有评审人员,他们的深入见解和批评非常宝贵:
  使用本书早期版本的工业界的专业人员、大学教授及学生塑造了本书第6版的内容,他们花费了很多时间提出建议、批评和想法,在此向他们表示感谢。另外,还要感谢许多工业界的客户,他们教给我的比我能够教给他们的更多。
  随着本书版本的更新,我的儿子Mathew和Michael已经长大成人。他们在现实生活中的成熟、品质和成功给了我灵感,没有什么比这更让我感到自豪的了。最后,感谢我的妻子Barbara鼓励我继续出版本书的下一个版本。

作者简介

Roger S.Pressman:Roger S.Pressman: 是软件过程改进和软件工程技术领域知名的权威。30多年来,他作为软件工程师、管理人员、教授、作者及咨询顾问始终投身于软件工程领域。 Pressman博士曾经以软件产业专业技术人员和管理人员的身份从事先进工程、制造领域的CAD/CAM系统的开发。他也做过科学和系统程序设计方面的工作。 在获得美国康涅狄格大学工程学博士学位后,Pressman博士进入学术界成为布里奇波特(Bridgeport)大学计算机工程系的Bullard副教授,同时担任该校CAD/CAM中心主任。 现在,Pressman博士是R. S. Pressman & Associates,Inc.的总裁,该公司专门从事软件工程方法的咨询和培训业务。作为公司的主要咨询专家,他设计和开发了一套完整的软件工程录像课程“Essential Software Engineering”以及软件过程改进的指导系统“Process Advisor”。这两项产品已为世界上数千家公司采用。最近,他与印度QAI公司合作,开发网上软件工程教学系统“eSchool”。 Pressman博士撰写了许多论文,是多种行业期刊的固定撰稿人,并著有6本技术书。除本书之外,还有: * 《A Manager誷 Guide to Software Engineering》(McGraw-Hill) 该书曾获奖。 * 《Making Software Engineering Happen》(Prentice-Hall) 这是涉及软件过程改进的关键管理问题的第一本书。 * 《Software Shock》(Dorset House) 该书论述软件及其对商业和社会的影响。 Pressman博士曾任多种行业杂志的编委,并多年来一直担任《IEEE Software》杂志Manager专栏的编辑。 Pressman博士是知名的演讲者,曾在许多行业会议上作重要讲话,他还是美国计算机协会(ACM)、美国电气与电子工程师协会(IEEE)等组织的成员。 Pressman博士和他的妻子Barbara住在南佛罗里达。他热爱体育运动,擅长网球和高尔夫球。还曾写过两部小说:《The Aymara Bridge》和《The Puppeteer》。

译者简介

郑人杰 马素霞 白晓颖 等:郑人杰: 清华大学教授,清华同方股份有限公司顾问。1961年毕业于清华大学,后留校任教。多年来围绕软件工程领域从事教学、科研工作,近年注重于软件质量及软件过程改进。曾编写《实用软件工程》、《计算机软件测试技术》、《基于软件能力成熟度模型(CMM)的软件过程改进》等。
马素霞: 华北电力大学计算机科学与技术系教授。1989年于清华大学计算机系获工学硕士学位;1986年于南开大学计算机系获学士学位。毕业后一直从事计算机软件方面的教学及研究工作。2000年通过国家留学基金委的选拔,2001年作为国家公派访问学者在加拿大卡尔顿(Carleton)大学计算机科学系进修一年,2002年4月回国。主要研究方向为软件工程、分布式地理信息系统。
白晓颖: 博士,现任清华大学计算机科学与技术系副教授。2001年于美国亚利桑那州立大学计算机科学与工程系获博士学位,1998年于北京航空航天大学计算机系获硕士学位,1995年于西北工业大学计算机系获学士学位。主要研究方向为软件工程。

译者序

作为一部软件工程著作,本书全面、系统地阐述了当前软件工程技术的各个层面。它概括而清晰地介绍了有关的概念、原则、技术、方法和工具。自从20多年前第1版问世以来,它在国际软件工程界发挥了巨大而深远的影响,从而树立了无可质疑的权威形象。
  从第1版开始,我一直是本书的忠实读者,它是我在教学工作中的一本重要参考教材,也是我的良师益友。
  软件工程是一门工程学科,它告诉我们如何规范化地开发软件。事实一再表明,不规范的软件是不可用、不易修改的软件。本人从20世纪80年代中期开始承担软件工程课的教学任务,深知这门专业课的重要性及教学的难点。如果询问从大学计算机专业毕业多年的从事实际工作的专业人员,在大学哪门课最为实用,许多人会毫不犹豫地回答:是软件工程课。其实,软件工程课不只在计算机行业有用,非计算机专业的学生也会对这门课很有兴趣。十几年前,我所工作的清华大学要求我面向非计算机专业的理工科研究生开设软件工程选修课,结果报名十分踊跃,竟出现700人同堂听课的场面。据学校研究生处称,如果不具备软件工程的概念和知识,这些来自各专业的研究生在各自的研究项目中所开发的软件,因为极不规范而难以理解。对导师来说,整个研究课题前后工作无法很好地衔接,也很难交流。
  本书从1982年第1版开始就为我国软件界密切关注,国内至少已出版了第2版、第5版的中译本,对国内大学的软件工程课程产生了巨大的影响。
第6版的特点
  1. 在第5版的基础上做了大量的充实和更新,例如,突出了软件过程,增加了敏捷开发方法。
  2. 除各章后面提供了大量供进一步阅读的参考文献信息外,针对不同的读者(学生、教师和专业人员)提供了各种形式的材料,范围广泛,内容丰富,且使用方便。
  3. 为了方便阅读和理解,除在各章开头给出全章内容简介和关键词外,在文中穿插了许多内容不同的解释框。而且全书贯穿了一个应用实例(住宅安全系统—SafeHome),以对话形式逐步展开这一软件的开发过程,从而提高了严肃的技术书籍的可读性,极大地引发了读者的阅读兴趣。
读者对象
  本书前言中已明确指出了三类主要读者,即高校学生、教师和专业技术人员,总体上该书是为教学服务的。教师如果以本书为教材,面对的又是软件工程的初学者,可能需自行补充一些具体的材料,让学生在本书内容的基础上掌握一些具体的、实用的、操作性更强的工作步骤。当然这可结合习题或实习,可以在课内讲解,也可作为指定的补充读物,由学生自学掌握。对于教师自己,或具有一定软件工程基础的研究生和软件专业人员,本书给你的是全面的、丰富的、代表当前发展水平的软件工程知识。
  参加本书翻译工作的主要有清华大学计算机系和华北电力大学计算机系的教师,包括马素霞(第18~20章、第28~32章),白晓颖(第1~3章),董渊(第4~6章),赵冲冲(第7~9章),张志强(第10~12章),戴桂兰(第13~15章),王素琴(第21~23章),谢萍(第24~27章),贾克(第16~17章)等。在翻译过程中,得到清华大学计算机系栗宏、谢继辉,软件学院马秋霞、程明、李海庆、邬双,华北电力大学计算机系周莉梅、杜江的帮助,内蒙古大学的郇失宇老师仔细审阅了第4~6章,在此对他(她)们的辛勤劳动表示感谢。本人将大部分译稿、马素霞教授将后半部分译稿做了仔细审核与修改。尽管翻译工作历时一年,在大家非全时投入又不能集中工作的情况下仍感到时间紧张,某些部分仍不够理想。限于水平,对内容的理解和中文表达难免有不当之处,在此敬请读者批评指正。又,原书中存在的个别问题(包括错、漏及不妥之处)均在译者注中指出。
  总之,这是一本非常优秀的软件工程读物,本人也十分高兴地向读者推荐,认真阅读它将会使你受益匪浅。

郑人杰
2006年元旦

图书目录

第1章 软件工程介绍 1
1.1 软件角色的演化 2
1.2 软件 4
1.3 软件特性的变化 6
1.4 遗留软件 7
1.4.1 遗留软件的质量 8
1.4.2 软件演化 8
1.5 软件神话 9
1.6 这一切是如何开始的 11
1.7 小结 12
参考文献 12
习题与思考题 13
推荐读物与阅读信息 13
第一部分 软件过程
第2章 过程综述 16
2.1 软件工程:一种层次化技术 17
2.2 过程框架 18
2.3 能力成熟度模型集成 22
2.4 过程模式 25
2.5 过程评估 27
2.6 个人过程模型和团队过程模型 29
2.6.1 个人软件过程 29
2.6.2 团队软件过程 30
2.7 过程技术 31
2.8 产品与过程 32
2.9 小结 33
参考文献 33
习题与思考题 34
推荐读物与阅读信息 34
第3章 过程模型 36
3.1 惯例过程模型 37
3.2 瀑布模型 37
3.3 增量过程模型 38
3.3.1 增量模型 38
3.3.2 RAD模型 39
3.4 演化过程模型 40
3.4.1 原型开发 41
3.4.2 螺旋模型 43
3.4.3 协同开发模型 44
3.4.4 演化过程模型的最终评述 45
3.5 专用过程模型 46
3.5.1 基于构件的开发 46
3.5.2 形式化方法模型 47
3.5.3 面向方面的软件开发 47
3.6 统一过程 49
3.6.1 简史 49
3.6.2 统一过程的阶段 50
3.6.3 统一过程工作产品 51
3.7 小结 52
参考文献 53
习题与思考题 54
推荐读物与阅读信息 54
第4章 敏捷视角下的过程 56
4.1 敏捷是什么 57
4.2 敏捷过程是什么 58
4.2.1 敏捷开发的立场 59
4.2.2 人的因素 59
4.3 敏捷过程模型 60
4.3.1 极限编程 61
4.3.2 自适应软件开发 64
4.3.3 动态系统开发方法 66
4.3.4 Scrum 66
4.3.5 Crystal 68
4.3.6 特征驱动开发 68
4.3.7 敏捷建模 69
4.4 小结 71
参考文献 71
习题与思考题 72
推荐读物与阅读信息 73
第二部分 软件工程实践
第5章 软件工程实践综述 76
5.1 概念 77
5.1.1 实践的精髓 77
5.1.2 核心原则 78
5.2 沟通实践 79
5.3 策划实践 82
5.4 建模实践 84
5.4.1 分析建模原则 85
5.4.2 设计建模原则 86
5.5 构造实践 89
5.5.1 编码原则和概念 89
5.5.2 测试原则 90
5.6 部署 92
5.7 小结 93
参考文献 94
习题与思考题 95
推荐读物与阅读信息 95
第6章 系统工程 97
6.1 基于计算机的系统 98
6.2 系统工程层次结构 99
6.2.1 系统建模 100
6.2.2 系统仿真 101
6.3 业务过程工程概述 102
6.4 产品工程概述 103
6.5 系统建模 105
6.5.1 Hatley-Pirbhai建模 105
6.5.2 UML系统建模 107
6.6 小结 109
参考文献 110
习题与思考题 110
推荐读物与阅读信息 111
第7章 需求工程 112
7.1 连接设计和构造的桥梁 113
7.2 需求工程任务 113
7.2.1 起始 114
7.2.2 导出 114
7.2.3 精化 115
7.2.4 协商 115
7.2.5 规格说明 115
7.2.6 确认 116
7.2.7 需求管理 116
7.3 启动需求工程过程 118
7.3.1 确认共利益者 118
7.3.2 识别多种观点 118
7.3.3 协同合作 119
7.3.4 首次提问 119
7.4 导出需求 120
7.4.1 协同需求收集 120
7.4.2 质量功能部署 123
7.4.3 用户场景 124
7.4.4 导出工作产品 125
7.5 开发用例 125
7.6 构建分析模型 129
7.6.1 分析模型的元素 129
7.6.2 分析模式 132
7.7 协商需求 133
7.8 确认需求 134
7.9 小结 135
参考文献 135
习题与思考题 136
推荐读物与阅读信息 137
第8章 构建分析模型 139
8.1 需求分析 140
8.1.1 整体目标和原理 140
8.1.2 分析的经验原则 141
8.1.3 域分析 141
8.2 分析建模的方法 142
8.3 数据建模概念 143
8.3.1 数据对象 143
8.3.2 数据属性 143
8.3.3 关系 144
8.3.4 基数和形态 145
8.4 面向对象的分析 146
8.5 基于场景建模 147
8.5.1 编写用例 147
8.5.2 开发活动图 152
8.5.3 泳道图 153
8.6 面向流的建模 153
8.6.1 创建数据流模型 154
8.6.2 创建控制流模型 156
8.6.3 控制规格说明 157
8.6.4 处理规格说明 158
8.7 基于类的建模 159
8.7.1 识别分析类 160
8.7.2 描述属性 162
8.7.3 定义操作 162
8.7.4 CRC建模 164
8.7.5 关联和依赖 169
8.7.6 分析包 170
8.8 生成行为模型 171
8.8.1 识别用例事件 171
8.8.2 状态表现 171
8.9 小结 174
参考文献 175
习题与思考题 175
推荐读物与阅读信息 176
第9章 设计工程 178
9.1 软件工程中的设计 179
9.2 设计过程和设计质量 180
9.3 设计概念 183
9.3.1 抽象 183
9.3.2 体系结构 183
9.3.3 模式 184
9.3.4 模块化 184
9.3.5 信息隐蔽 185
9.3.6 功能独立 186
9.3.7 求精 186
9.3.8 重构 187
9.3.9 设计类 188
9.4 设计模型 190
9.4.1 数据设计元素 190
9.4.2 体系结构设计元素 191
9.4.3 接口设计元素 191
9.4.4 构件级设计元素 192
9.4.5 部署级设计元素 193
9.5 基于模式的软件设计 194
9.5.1 描述设计模式 194
9.5.2 在设计中使用模式 195
9.5.3 框架 195
9.6 小结 196
参考文献 196
习题与思考题 197
推荐读物与阅读信息 197
第10章 进行体系结构设计 199
10.1 软件体系结构 200
10.1.1 什么是体系结构 200
10.1.2 为什么体系结构如此重要 201
10.2 数据设计 201
10.2.1 体系结构级的数据设计 201
10.2.2 构件级的数据设计 202
10.3 体系结构风格和模式 203
10.3.1 体系结构风格的简单分类 203
10.3.2 体系结构模式 206
10.3.3 组织和求精 207
10.4 体系结构设计 208
10.4.1 系统的环境表示 208
10.4.2 定义原始模型 209
10.4.3 将体系结构精化为构件 210
10.4.4 描述系统实例 211
10.5 评估可选的体系结构设计 212
10.5.1 体系结构权衡分析方法 212
10.5.2 体系结构复杂性 214
10.5.3 体系结构描述语言 214
10.6 映射数据流到软件体系结构 215
10.6.1 变换流 215
10.6.2 事务流 215
10.6.3 变换映射 215
10.6.4 事务映射 221
10.6.5 精化体系结构设计 224
10.7 小结 224
参考文献 225
习题与思考题 225
推荐读物与阅读信息 226
第11章 构件级设计建模 228
11.1 什么是构件 229
11.1.1 面向对象的观点 229
11.1.2 传统观点 230
11.1.3 过程相关的观点 232
11.2 设计基于类的构件 233
11.2.1 基本设计原则 233
11.2.2 构件级设计指导方针 236
11.2.3 内聚性 236
11.2.4 耦合性 238
11.3 实施构件级设计 240
11.4 对象约束语言 244
11.5 设计传统构件 246
11.5.1 图形化设计表示 246
11.5.2 表格式设计表示 247
11.5.3 程序设计语言 248
11.5.4 设计表示方法的比较 249
11.6 小结 250
参考文献 250
习题与思考题 251
推荐读物与阅读信息 251
第12章 完成用户界面设计 253
12.1 黄金规则 254
12.1.1 置用户于控制之下 254
12.1.2 减轻用户的记忆负担 255
12.1.3 保持界面一致 256
12.2 用户界面的分析与设计 257
12.2.1 用户界面分析和设计模型 257
12.2.2 用户界面分析和设计过程 258
12.3 界面分析 260
12.3.1 用户分析 260
12.3.2 任务分析和建模 261
12.3.3 显示内容分析 265
12.3.4 工作环境分析 265
12.4 界面设计步骤 266
12.4.1 应用界面设计步骤 266
12.4.2 用户界面设计模式 268
12.4.3 设计问题 269
12.5 设计评估 272
12.6 小结 273
参考文献 274
习题与思考题 274
推荐读物与阅读信息 275
第13章 软件测试策略 276
13.1 软件测试的策略性方法 277
13.1.1 验证与确认 277
13.1.2 软件测试的组织 278
13.1.3 传统软件体系结构的测试策略 279
13.1.4 面向对象软件体系结构的测试策略 280
13.1.5 测试完成的标准 281
13.2 策略问题 281
13.3 传统软件的测试策略 282
13.3.1 单元测试 282
13.3.2 集成测试 284
13.4 面向对象软件的测试策略 289
13.4.1 面向对象环境中的单元测试 289
13.4.2 面向对象环境中的集成测试 289
13.5 确认测试 290
13.5.1 确认测试准则 290
13.5.2 配置评审 290
13.5.3 a测试与b测试 290
13.6 系统测试 292
13.6.1 恢复测试 292
13.6.2 安全测试 292
13.6.3 压力测试 293
13.6.4 性能测试 293
13.7 调试技巧 294
13.7.1 调试过程 294
13.7.2 心理因素 295
13.7.3 调试策略 296
13.7.4 错误改正 298
13.8 小结 298
参考文献 299
习题与思考题 299
推荐读物与阅读信息 300
第14章 测试战术 302
14.1 软件测试基础 303
14.2 黑盒测试与白盒测试 304
14.3 白盒测试 305
14.4 基本路径测试 305
14.4.1 流图表示 305
14.4.2 独立程序路径 307
14.4.3 导出测试用例 308
14.4.4 图矩阵 310
14.5 控制结构测试 310
14.5.1 条件测试 311
14.5.2 数据流测试 311
14.5.3 循环测试 311
14.6 黑盒测试 312
14.6.1 基于图的测试方法 313
14.6.2 等价划分 314
14.6.3 边界值分析 315
14.6.4 正交数组测试 315
14.7 面向对象测试方法 317
14.7.1 面向对象概念的测试用例设计的含义 318
14.7.2 传统测试用例设计方法的可应用性 318
14.7.3 基于故障的测试 318
14.7.4 测试用例与类层次 319
14.7.5 基于场景的测试 319
14.7.6 表层结构和深层结构的测试 320
14.8 类级可应用的测试方法 321
14.8.1 面向对象的随机测试 321
14.8.2 类级的划分测试 322
14.9 类间测试用例设计 323
14.9.1 多类测试 323
14.9.2 从行为模型中导出的测试 324
14.10 针对特定环境、体系结构和应用系统的测试 325
14.10.1 图形用户界面测试 325
14.10.2 客户/服务器体系结构测试 325
14.10.3 测试文档和帮助设施 326
14.10.4 实时系统的测试 327
14.11 测试模式 328
14.12 小结 329
参考文献 329
习题与思考题 330
推荐读物与阅读信息 331
第15章 产品度量 333
15.1 软件质量 334
15.1.1 McCall的质量因素 334
15.1.2 ISO 9126质量因素 335
15.1.3 向量化视图变迁 336
15.2 产品度量框架 336
15.2.1 测度、度量和指标 336
15.2.2 产品度量的挑战 337
15.2.3 测量原则 338
15.2.4 面向目标的软件测量 338
15.2.5 有效软件度量的属性 339
15.2.6 产品度量全景 339
15.3 分析模型的度量 341
15.3.1 基于功能的度量 341
15.3.2 规格说明质量的度量 344
15.4 设计模型的度量 344
15.4.1 体系结构设计度量 345
15.4.2 面向对象设计的度量 346
15.4.3 面向类的度量—CK度量集 347
15.4.4 面向类的度量—MOOD度量集 350
15.4.5 Lorenz与Kidd提出的面向对象度量 350
15.4.6 构件级设计度量 351
15.4.7 面向操作的度量 352
15.4.8 用户界面设计度量 353
15.5 源代码的度量 353
15.6 测试的度量 354
15.6.1 应用于测试的Halstead度量 355
15.6.2 面向对象测试的度量 355
15.7 维护的度量 356
15.8 小结 357
参考文献 357
习题与思考题 359
推荐读物与阅读信息 359
第三部分 应用Web工程
第16章 Web工程 362
16.1 基于Web的系统及应用的特点 363
16.2 WebApp工程的层次 365
16.2.1 过程 365
16.2.2 方法 366
16.2.3 工具与技术 366
16.3 Web工程过程 366
16.3.1 定义框架 367
16.3.2 精化框架 369
16.4 Web工程的最佳实践 369
16.5 小结 371
参考文献 371
习题与思考题 371
推荐读物与阅读信息 372
第17章 开始一个WebApp项目 373
17.1 表达基于Web的系统 374
17.1.1 表达问题 374
17.1.2 WebApp的需求收集 375
17.1.3 分析模型的过渡 379
17.2 策划Web工程项目 379
17.3 Web工程团队 380
17.3.1 人员 380
17.3.2 组建团队 381
17.4 Web工程的项目管理问题 382
17.4.1 WebApp策划—外包 382
17.4.2 WebApp策划—内部Web工程 385
17.5 Web工程与WebApp的度量 387
17.5.1 Web工程工作量的度量 387
17.5.2 评估商业价值的度量 388
17.6 WebApp项目的“最坏实践” 389
17.7 小结 390
参考文献 390
习题与思考题 391
推荐读物与阅读信息 392
第18章 WebApp分析 393
18.1 WebApp的需求分析 394
18.1.1 用户层次 394
18.1.2 开发用例 395
18.1.3 精化用例模型 397
18.2 WebApp的分析模型 397
18.3 内容模型 398
18.3.1 定义内容对象 398
18.3.2 内容关系与层次 399
18.3.3 WebApp的分析类 399
18.4 交互模型 400
18.5 功能模型 402
18.6 配置模型 403
18.7 关系导航分析 404
18.7.1 关系分析—关键问题 404
18.7.2 导航分析 405
18.8 小结 406
参考文献 406
习题与思考题 407
推荐读物与阅读信息 407
第19章 WebApp设计 409
19.1 Web工程的设计问题 410
19.1.1 设计与WebApp质量 410
19.1.2 设计目标 412
19.2 WebE设计金字塔 413
19.3 WebApp界面设计 414
19.3.1 界面设计原则与指导方针 414
19.3.2 界面控制机制 418
19.3.3 界面设计工作流 418
19.4 美学设计 420
19.4.1 布局问题 420
19.4.2 美术设计问题 421
19.5 内容设计 421
19.5.1 内容对象 421
19.5.2 内容设计问题 422
19.6 体系结构设计 423
19.6.1 内容体系结构 423
19.6.2 WebApp体系结构 425
19.7 导航设计 426
19.7.1 导航语义 426
19.7.2 导航语法 427
19.8 构件级设计 428
19.9 超媒体设计模式 428
19.10 面向对象的超媒体设计方法 429
19.10.1 OOHDM的概念设计 430
19.10.2 OOHDM的导航设计 431
19.10.3 抽象界面设计与实现 431
19.11 WebApp的设计度量 431
19.12 小结 432
参考文献 433
习题与思考题 434
推荐读物与阅读信息 435
第20章 WebApp测试 436
20.1 WebApp的测试概念 436
20.1.1 质量维度 437
20.1.2 WebApp环境中的错误 438
20.1.3 测试策略 438
20.1.4 测试策划 438
20.2 测试过程概述 439
20.3 内容测试 442
20.3.1 内容测试的目标 442
20.3.2 数据库测试 443
20.4 用户界面测试 444
20.4.1 界面测试策略 444
20.4.2 测试界面机制 445
20.4.3 测试界面语义 446
20.4.4 可用性测试 447
20.4.5 兼容性测试 448
20.5 构件级测试 449
20.6 导航测试 451
20.6.1 测试导航语法 451
20.6.2 测试导航语义 451
20.7 配置测试 452
20.7.1 服务器端问题 453
20.7.2 客户端问题 453
20.8 安全性测试 453
20.9 性能测试 455
20.9.1 性能测试的目标 455
20.9.2 负载测试 455
20.9.3 压力测试 456
20.10 小结 458
参考文献 458
习题与思考题 459
推荐读物与阅读信息 460
第四部分 管理软件项目
第21章 项目管理 462
21.1 管理涉及的范围 463
21.1.1 人员 463
21.1.2 产品 463
21.1.3 过程 464
21.1.4 项目 464
21.2 人员 464
21.2.1 共利益者 465
21.2.2 团队负责人 465
21.2.3 软件团队 466
21.2.4 敏捷团队 468
21.2.5 协调和通信问题 469
21.3 产品 470
21.3.1 软件范围 470
21.3.2 问题分解 470
21.4 过程 471
21.4.1 合并产品和过程 471
21.4.2 过程分解 472
21.5 项目 473
21.6 W5HH原则 474
21.7 关键实践 475
21.8 小结 475
参考文献 476
习题与思考题 476
推荐读物与阅读信息 477
第22章 过程和项目度量 479
22.1 过程领域和项目领域中的度量 480
22.1.1 过程度量和软件过程改进 480
22.1.2 项目度量 481
22.2 软件测量 483
22.2.1 面向规模的度量 483
22.2.2 面向功能的度量 484
22.2.3 调和代码行和功能点的度量方法 485
22.2.4 面向对象的度量 486
22.2.5 面向用例的度量 487
22.2.6 Web工程项目度量 487
22.3 软件质量度量 489
22.3.1 测量质量 489
22.3.2 缺陷排除效率 490
22.4 在软件过程中集成度量 491
22.4.1 支持软件度量的论点 492
22.4.2 建立基线 492
22.4.3 度量收集、计算和评估 492
22.5 小型组织的度量 493
22.6 制定软件度量大纲 494
22.7 小结 496
参考文献 496
习题与思考题 497
推荐读物与阅读信息 498
第23章 估算 500
23.1 对估算的观察 501
23.2 项目策划过程 501
23.3 软件范围和可行性 502
23.4 资源 503
23.4.1 人力资源 503
23.4.2 可复用软件资源 504
23.4.3 环境资源 504
23.5 软件项目估算 505
23.6 分解技术 505
23.6.1 软件规模估算 506
23.6.2 基于问题的估算 506
23.6.3 基于LOC估算的实例 507
23.6.4 基于FP估算的实例 509
23.6.5 基于过程的估算 510
23.6.6 基于过程估算的实例 511
23.6.7 基于用例的估算 511
23.6.8 基于用例的估算实例 512
23.6.9 调和不同的估算方法 513
23.7 经验估算模型 514
23.7.1 估算模型的结构 514
23.7.2 COCOMOII模型 515
23.7.3 软件方程式 516
23.8 面向对象项目的估算 517
23.9 特殊的估算技术 517
23.9.1 敏捷开发的估算 518
23.9.2 Web工程项目的估算 518
23.10 自行开发或购买的决策 519
23.10.1 创建决策树 520
23.10.2 外包 521
23.11 小结 522
参考文献 523
习题与思考题 523
推荐读物与阅读信息 524
第24章 项目进度安排 525
24.1 基本概念 526
24.2 项目进度安排 527
24.2.1 基本原则 528
24.2.2 人员与工作量之间的关系 529
24.2.3 工作量分配 530
24.3 为软件项目定义任务集 531
24.3.1 任务集举例 531
24.3.2 主要任务的求精 532
24.4 定义任务网络 533
24.5 进度安排 533
24.5.1 时序图 535
24.5.2 跟踪进度 536
24.5.3 跟踪OO项目的进展 537
24.6 获得值分析 538
24.7 小结 539
参考文献 540
习题与思考题 540
推荐读物与阅读信息 541
第25章 风险管理 543
25.1 被动风险策略和主动风险策略 544
25.2 软件风险 544
25.3 风险识别 545
25.3.1 评估整体项目风险 546
25.3.2 风险因素和驱动因子 547
25.4 风险预测 548
25.4.1 建立风险表 548
25.4.2 评估风险影响 549
25.5 风险求精 551
25.6 风险缓解、监测和管理 552
25.7 RMMM计划 553
25.8 小结 555
参考文献 555
习题与思考题 555
推荐读物与阅读信息 556
第26章 质量管理 558
26.1 质量概念 559
26.1.1 质量 559
26.1.2 质量控制 560
26.1.3 质量保证 560
26.1.4 质量成本 560
26.2 软件质量保证 561
26.2.1 背景 562
26.2.2 SQA活动 562
26.3 软件评审 563
26.3.1 软件缺陷对成本的影响 564
26.3.2 缺陷放大和消除 564
26.4 正式技术评审 566
26.4.1 评审会议 566
26.4.2 评审报告和记录保存 567
26.4.3 评审指导原则 567
26.4.4 样本驱动评审 568
26.5 SQA的形式化方法 570
26.6 基于统计的软件质量保证 570
26.6.1 一个普通的例子 570
26.6.2 软件工程中的六西格玛 571
26.7 软件可靠性 572
26.7.1 可靠性和可用性的测量 572
26.7.2 软件安全 573
26.8 ISO 9000质量标准 574
26.9 SQA计划 575
26.10 小结 576
参考文献 577
习题与思考题 578
推荐读物与阅读信息 578
第27章 变更管理 580
27.1 软件配置管理 581
27.1.1 SCM场景 581
27.1.2 配置管理系统元素 582
27.1.3 基线 582
27.1.4 软件配置项 583
27.2 SCM中心存储库 584
27.2.1 中心存储库的作用 585
27.2.2 一般特征和内容 585
27.2.3 SCM特征 585
27.3 SCM过程 587
27.3.1 软件配置中对象的标识 587
27.3.2 版本控制 588
27.3.3 变更控制 589
27.3.4 配置审核 592
27.3.5 状态报告 593
27.4 Web工程的配置管理 593
27.4.1 WebApp的配置管理问题 594
27.4.2 WebApp的配置对象 595
27.4.3 内容管理 595
27.4.4 变更管理 597
27.4.5 版本控制 599
27.4.6 审核和报告 599
27.5 小结 600
参考文献 601
习题与思考题 602
推荐读物与阅读信息 602
第五部分 软件工程高级课题
第28章 形式化方法 606
28.1 基本概念 607
28.1.1 非形式化方法的缺陷 607
28.1.2 软件开发中的数学 608
28.1.3 形式化方法概念 608
28.2 数学预备知识 610
28.2.1 集合与构造性规格说明 610
28.2.2 集合运算符 611
28.2.3 逻辑运算符 613
28.2.4 序列 613
28.3 应用数学表示法描述形式化规格说明 614
28.4 形式化规格说明语言 615
28.5 对象约束语言 616
28.5.1 OCL语法及语义概述 616
28.5.2 使用OCL举例 617
28.6 Z规格说明语言 618
28.6.1 Z语法及语义概述 619
28.6.2 使用Z举例 620
28.7 形式化方法的十条戒律 621
28.8 形式化方法—未来之路 622
28.9 小结 622
参考文献 623
习题与思考题 623
推荐读物与阅读信息 624
第29章 净室软件工程 626
29.1 净室方法 627
29.1.1 净室策略 627
29.1.2 净室方法的特异之处 629
29.2 功能规格说明 629
29.2.1 黑盒规格说明 630
29.2.2 状态盒规格说明 631
29.2.3 清晰盒规格说明 631
29.3 净室设计 631
29.3.1 设计求精与验证 632
29.3.2 设计验证的优点 634
29.4 净室测试 635
29.4.1 统计使用测试 636
29.4.2 认证 636
29.5 小结 637
参考文献 638
习题与思考题 638
推荐读物与阅读信息 639
第30章 基于构件的开发 640
30.1 基于构件系统的工程 641
30.2 CBSE过程 642
30.3 领域工程 643
30.3.1 领域分析过程 643
30.3.2 特征化函数 643
30.3.3 结构化建模与结构点 644
30.4 基于构件的开发 645
30.4.1 构件合格性检验、适应性修改与组装 645
30.4.2 构件工程 648
30.4.3 复用的分析与设计 648
30.5 构件分类与检索 649
30.5.1 描述可复用构件 649
30.5.2 复用环境 650
30.6 CBSE经济学 651
30.6.1 对质量、生产率及成本的影响 651
30.6.2 运用结构点的成本分析 652
30.7 小结 653
参考文献 653
习题与思考题 654
推荐读物与阅读信息 655
第31章 再工程 657
31.1 业务过程再工程 658
31.1.1 业务过程 658
31.1.2 BPR模型 659
31.2 软件再工程 660
31.2.1 软件维护 660
31.2.2 软件再工程过程模型 661
31.3 逆向工程 663
31.3.1 数据的逆向工程 664
31.3.2 处理的逆向工程 665
31.3.3 用户界面的逆向工程 665
31.4 重构 666
31.4.1 代码重构 666
31.4.2 数据重构 667
31.5 正向工程 668
31.5.1 客户/服务器体系结构的正向工程 668
31.5.2 面向对象体系结构的正向工程 669
31.5.3 用户界面的正向工程 670
31.6 再工程经济学 670
31.7 小结 671
参考文献 671
习题与思考题 672
推荐读物与阅读信息 673
第32章 未来之路 675
32.1 再论软件的重要性 676
32.2 变化的范围 676
32.3 人及其构造系统的方式 677
32.4 新的软件工程过程 678
32.5 表示信息的新模式 679
32.6 技术作为推动力 680
32.7 软件工程师的责任 681
32.8 结束语 682
参考文献 683
习题与思考题 683
推荐读物与阅读信息 684
索引 686

教学资源推荐
作者: 麻志毅
作者: Georges G. Merx;Ronald J. Norman
作者: 韩万江
作者: 毋国庆
参考读物推荐
作者: 吴伟敏 秦 军 林巧民 何丽萍
作者: Robert E.Filman, Tzilia Elrad, Siobhan Clarke, Mehmet Aksit
作者: Joshua Kerievsky