本书主要内容包括软件工程概述、软件过程、敏捷软件开发、需求工程、系统建模、体系结构设计、 软件测试、 可依赖性和信息安全性、高级软件工程、软件管理等,是系统介绍软件工程理论的经典教材。
软件工程(原书第9版)
Software Engineering Ninth Edition
(英)Ian Sommerville 圣安德鲁斯大学 著 程 成 北京理工大学 等译
封底:
本书是系统介绍软件工程理论的经典教材,自1982年初版以来,随着软件工程学科的发展不断更新,影响了一代又一代软件工程人才,对学科本身也产生了积极影响。全书共四个部分,完整讨论了软件工程各个阶段的内容,是软件工程和系统工程专业本科和研究生的优秀教材,也是软件工程师必备的参考书籍。
本书特点
涵盖了对所有开发过程都很基础的重要主题,包括软件工程理论与实践的最新进展。
将本书第8版中的八篇内容重构为四个部分,使教师讲授软件工程课程更加容易。
每一章都有30%~40%的更新,增加了敏捷软件开发和嵌入式系统等新章,补充了模型驱动工程、开源开发、测试驱动开发、可依赖系统体系结构、静态分析和模型检查、COTS复用、服务作为软件以及敏捷规划等新内容。
着重讨论了开发可靠的分布式系统的相关主题以及敏捷方法和软件复用。
反映敏捷方法先进性的同时,不忘强调传统的计划驱动软件工程的作用,阐述了两者结合构建优秀软件系统的重要性。
以一个新的病人记录系统案例研究贯穿始终,系统、完整地讲解软件工程的各个方面。
将本书设计为“印刷/Web”相结合的方式,核心信息采用印刷版本,教辅材料及先前版本中的一些章节放在Web上,为读者提供丰富翔实的信息。
前:
Ian Sommerville
英国著名软件工程专家,曾任教于兰卡斯特大学,现为圣安德鲁斯大学软件工程学教授。他在软件工程的教学和科研方面有20多年的经验。他是IEEE CS组织编撰“软件工程知识体系”(SWEBOK)的专家委员会成员之一。他的研究领域包括计算机系统工程、需求工程、系统可靠性以及软件进货。
后:
在计算机科学的同一领域往往都有比肩齐声的佳作,软件工程类综述性的巨著也有两本:第一本就是Roger Pressman所著的《软件工程:实践者的研究方法》,另一本就是Ian Sommerville所著的本书。 这两本名著都有多年历史(初版可追溯到20世纪80年代早期),对于软件工程学科的形成和发展起到了重要作用,尤其是在教育界和学术界影响极大。相比Pressman的书,Sommerville的这本教材将全部内容划分为四个部分,每个部分可以单独使用或者是结合其他部分作为软件工程课程的基本内容,更加适合不同类型软件工程课程的教学需求,叙述也更趋清晰和简明。
——摘自业界专业人士的推荐
这本软件工程的经典教材不仅展现了软件工程的广阔视野,还着重阐述了在开发大型系统中一些广泛采用的技术,并辅以大量的例子和图解。作者将所有的话题控制在适度的篇幅,用简练到位的文字把最重要的内容呈现给读者,并提供进一步阅读资料,供有兴趣的读者深入学习,使得本书更符合国内软件工程课程的教学需求。书中没有学院派布道式的说教,作者认为并不存在解决软件工程问题的灵丹妙药,而是强调读者需要学习和掌握更广泛的技术和工具以解决软件工程问题。从内容选材上,本书不落俗套,大胆舍弃了传统的软件工程内容和一些繁琐的软件工程理论,代之以简洁实用的软件工程新知识、新方法,增加了教材的实用性和可读性;从专题安排上,本书避虚就实,没有对软件工程技术泛泛而谈,而是针对那些大型系统开发技术进行分析,避免对个别产品中的技术进行过多阐述。
——刘艺,《计算机英语》作者
2009年夏,当我写本书最后一章的时候,软件工程正好有40年的历史了。“软件工程”这个名字是在1969年的NATO大会上讨论软件开发问题时提出来的。所讨论的开发问题是,大型软件系统总是延期,不能交付用户期待的功能,成本超出预期,软件不可靠。本人并没有参加那次会议,但是一年之后,我写了我的第一个程序并开始了我的软件职业生涯。
在我的整个职业生涯中软件工程的进展是不同凡响的。我们的社会如果没有大型专业软件系统就根本不能运转。对于构建业务系统,这里有一串技术习语,J2EE、.NET、 SaaS、SAP、BPEL4WS、SOAP、CBSE等,它们支持大型企业应用的开发和部署。国家公用事业和基础设施(能源、通信以及运输)都依赖于复杂而可靠的计算机系统。软件让我们能够探索空间,创建万维网这个人类历史上最为强大的信息系统。人类正面临着新的挑战——气候变化和极端天气,自然资源的减少,需要为更多的人口提供食物和住房,国际恐怖主义的威胁,还有需要为老年人提供更加满意的生活。我们需要新技术来帮助我们解决这些问题。而且可以肯定,软件将在这些技术中扮演核心角色。
因此,软件工程是人类未来十分重要的技术。我们必须不断地教育软件工程师和发展这门学科,使我们能构造出更加复杂的软件系统。当然,现在我们的软件项目还有很多问题,软件仍然在延期,成本超过预算。但是,我们不应该让这些问题遮挡住视线,应该看到在软件工程上取得的真正的成功,应该看到我们已经研究出了了不起的软件工程方法和技术。
软件工程现在是一个非常大的领域,任何一本书都不可能覆盖它的所有主题。因此,我的重点放在对所有开发过程都很基础的重要主题上,以及放在关于开发可靠的分布式系统的一些主题上。对敏捷方法和软件复用给予了更多的关注。 我坚信敏捷方法会有它们的位置,但是“传统”的计划驱动软件工程也肯定不会消失。我们需要将这些方法中的最好的东西结合起来以构建更好的软件系统。
任何一本书都不可避免地反映作者的观点和倾向。肯定会有某些读者不赞成我的观点和我所选择的材料。这种不同意见是学科多样性的一种健康反映,对学科的演化也是很有好处的。尽管如此,我还是希望所有的软件工程师和学习软件工程的学生能从本书中发现自己感兴趣的东西。
与Web 的整合
在Web上关于软件工程有非常大量的信息可用,因此很多人会问是否有必要写这样一本教科书。然而,网络上的可用信息是很不完整的,质量也是参差不齐的,有的信息呈现的形式很差,很难找到你想要的内容。 所以,我相信教科书在学习上仍然有不可替代的作用。它们会像路标一样指引你奔向主题,可以将方法和技术的内容很好地组织在一起方便你阅读。它们也会为你提供一个深入探索研究文献和网上可用信息的起点。
我坚信,只有当教科书与网络上的材料结合在一起并能为众多可用信息增加价值的时候,它们才是有前途的。本书因而设计成混合的“印刷/Web”这样的文本形式。核心信息用印刷版本,教辅材料放在Web上。几乎所有的章都包含特别的“Web小节”,成为该章内容的补充。另外还有4个“Web章”,这4章内容没有在本书印刷版中出现。
与本书相关的Web站点是:
http://wwwSoftwareEngineering9com
本书的网站有4个主要部分:
1. Web 小节(Web sections)一些额外的小节,是为每一章所添加的部分内容。这些Web小节是通过每章当中用方框括起的内容指引的。
2. Web 章(Web chapters)这4个Web章覆盖了形式化方法、交互设计、文档化以及应用体系结构。今后,我会在本书的升级版本中添加其他新的主题到“Web章”中。
3. 教师材料此部分的材料是为那些讲授软件工程课程的教师准备的。参见前言后面的“支持材料”。
4. 案例研究提供关于本书中使用的案例研究的附加信息(胰岛素泵、心理健康护理系统、野外气象站系统),也包括另外更深入的案例信息,如阿丽亚娜5号火箭发射失败。
除此之外,本书还有到其他网站的链接,包括关于软件工程、进一步阅读、博客以及通讯简报等有价值材料的网站。
我很欢迎读者提出关于本书及其网站的建设性意见和建议。读者可以通过ian@SoftwareEngineering9com 与我联系。请在主题中注明[SE9]字样,否则,我的邮件过滤器会拒绝你的邮件因而得不到我的回信。我本人没有时间帮助学生解答他们的课后作业,所以请不要问类似问题。
读者对象
本书主要面向各大学和学院正在学习软件和系统工程的初高级课程的学生。工业界的软件工程师也会发现它是一本很好的读物,能帮助他们更新在软件复用、体系结构设计、可依赖性和信息安全性以及过程改善等方面的知识。我假设读者都完成了初级的编程课程学习并了解编程方面的术语。
对先前版本的变更
这一版保留了上一版中的软件工程的基本材料,但是我还是修改和更新了所有章的内容,并增加了很多有关其他主题的新材料。其中最重大的改变有:
1. 从单纯的印刷版转变到混合的“印刷/Web”版,将Web材料与印刷材料紧密结合在一起。这就允许我减少本书章的数量,且能更加专注于每一章的核心内容。
2. 结构变化很大使得教师讲授软件工程课程会更加容易。本书现在有4个部分而不是8个部分,每个部分可以单独使用或者是结合其他部分作为软件工程课程的基本内容。这4个部分分别是软件工程导论、可依赖性和信息安全性、高级软件工程和软件管理。
3. 将来自先前版本的多个主题压缩到一章中阐述,并与其他材料一起放在Web上。
4. 额外的Web章,那些出现在先前版本中而没有包含在本书中的各章,现在都放在Web上了。
5. 更新和修改了每一章。我估计有30%~40%的内容都经过全面彻底的重写。
6. 增加了关于敏捷软件开发和嵌入式系统的一些章。
7. 除了这些新的章节外,在以下方面也增添了新的内容:模型驱动工程、开源开发、测试驱动开发、 Reason的瑞士乳酪模型、可依赖系统体系结构、静态分析和模型检测、COTS复用、作为服务的软件以及敏捷规划。
8. 关于病人记录系统的新案例研究,是在很多章中都会用到的关于接受心理健康问题治疗的病人的信息系统。
用作教学
针对3种不同类型的软件工程课程,我对本书进行了如下设计:
1. 软件工程一般性介绍课程本书第一部分就是设计来明确支持一个学期的介绍软件工程基本内容的课程。
2. 特别软件工程主题的介绍课程或过渡课程通过使用第二~四部分的内容,可以创建一系列更高级课程。例如,我采用第二部分的各章加上关于质量管理和配置管理的两章讲授要求极高的系统工程课程。
3. 关于特别软件工程主题的更高级的课程在此情况下,本书的各章可以构成课程的基础,然后辅之以更多的阅读以便进一步探索某个主题。例如,关于软件复用的课程就可以基于第16~19章的内容。
支持材料
本书带有大量支持材料帮助教师采用此书作为软件工程教材授课。这些材料包括:
● 本书所有章的幻灯片。
● 幻灯片中的图和表。
● 教师指导,包括一些关于如何在不同的课程中利用本书的建议,并解释了在此版和先前版本中各个章之间的关系。
● 关于书中案例研究的进一步资料。
● 会在软件工程课程中用到的其他案例研究。
● 有关系统工程的其他幻灯片。
● 4个Web章,涵盖了形式化方法、交互设计、应用体系结构以及文档化。
● 部分章后练习的答案。
所有上述材料都是免费提供给本书读者的,可以从本书的网站wwwhzbookcom下载。
致谢
在过去的几年时间里有很多人对本书的改进做出了贡献,我想在此感谢所有的人(审阅人、学生、读者),他们对本书先前版本给出了很多评论,对本书的更新给出了建设性的意见。
特别要感谢我的家人(Anne、Ali和Jane),没有她们的帮助和支持,我是不可能完成本书的写作的。尤其是我的女儿Jane,我要特别谢谢她。她利用自己校对和编辑方面的天赋,在通读全书的过程中给了我巨大的帮助,帮助我发现和校正了大量的拼写错误和语法错误。
Ian Sommerville
2009年10月
计算机\软件工程
本书是系统介绍软件工程理论的经典教材,自1982年初版以来,随着软件工程学科的发展不断更新版本,影响了一代又一代软件工程人才,对学科的发展建设也产生了积极影响。全书分四部分完整讨论了软件工程的各级段内容,是软件工程和系统工程专业本科和研究生的优秀教材,也是软件工程师必备的参考书籍。
本书特点
● 涵盖了对所有开发过程都很基础的重要主题,包括了软件工程理论与实践的最新进展。
● 将本书第8版中的八篇内容重构为四个部分,使教师讲授软件工程课程更加容易。
● 每一章都有30%~40%的更新,增加了敏捷软件开发和嵌入式系统等新章,补充了模型驱动工程、开源开发、测试驱动开发、可依赖系统体系结构、静态分析和模型检查、COTS复用、服务作为软件以及敏捷规划等新内容。
● 着重讨论了开发可靠的分布式系统的相关主题以及敏捷方法和软件复用。
● 反映敏捷方法先进性的同时,不忘强调传统的计划驱动软件工程的作用,阐述了两者结合构建优秀软件系统的重要性。
● 以一个新的病人记录系统案例研究贯穿始终,系统、完整地讲解软件工程的各个方面。
● 将本书设计为“印刷/Web”相结合的方式,核心信息采用印刷版本,教辅材料及先前版本中的一些章节放在Web上,为读者提供丰富翔实的信息。
程成 等译:暂无简介
又一轮榈庭落叶,兰畦浮香,银蟾新满,我们再次拿出了本书的中文译稿。此时的心情轻松愉悦。往日的辛劳没有让我们感到任何痛苦,近800页原著的每一页犹如一杯杯醇香咖啡,令人回味悠长。自从本书第6版中文译著由我们翻译出版以来,一直得到众多读者的帮助和厚爱,所以对这次第9版的翻译我们更加珍惜,倍加努力。如果要问我们的感想,那就是通过此书对社会尽一点绵薄之力,让同胞一同分享该书的快乐了。
本书是一部阐述软件工程理论和技术的著作,几乎涵盖了软件工程的所有方面,同时,就像本书作者所声明的那样,由于作者对需求分析和实时系统的特殊偏好,使得本书极具特点。本书的第一个特点是,通篇阐述主要以要求极高的一类系统为实例,使得本书的理论和方法阐述非常容易理解。同时,译者认为,由于要求极高的一类系统具有一般软件系统的几乎所有特性,而且具备一般软件不必要的很多特征,因此,掌握本书精髓,对于一般软件系统的研究和开发无疑会深得要领且更加得心应手。本书的第二个特点是形式化描述内容较多,这一方面与要求极高的一类系统设计有关,另一方面也多少反映出一些欧洲学者的研究之风。作者将形式化描述结合具体应用实例阐述得深入浅出,是我们学习和掌握该方法的极好教材。本书的第三个特点就是关于软件进化理论和方法的系统介绍。译者也读过其他的一些著作,但比较起来在软件进化理论和方法的阐述上本书当属最透彻的一本了。有过软件进化相关工程经历的人经常会有困惑之处,本书在这方面的高屋建瓴般的阐述无疑将对同行们起到答疑解惑的作用。本书的第四个特点是,通过对本书第8版的改造,从多个角度集中介绍了在快速软件开发等方面的技术,以反映当前软件领域的最新动向。以上这些只是我们的一点粗浅认识,相信读过本书之后,读者会有更多更深的领悟。不过本书内容之系统翔实,阐述之精辟透彻,引文和材料之丰富,确实让我们叹为观止。
本书主要由程成翻译。参与本书翻译和审校等相关工作的还有北京理工大学计算机学院的研究生蔡雪琴、董雪梅、姜儒、刘晓峰、周小飞、马鹏飞、高彦明、邵霞、刘佳,在此对他们的工作热情和认真态度以及对本书翻译的大力帮助表示感谢。
鉴于译者自身的知识局限及时间仓促,译稿中难免有错误和遗漏之处,谨向原书作者表示歉意,并欢迎广大读者批评指正。
程成
北京理工大学
出版者的话
译者序
前言
第一部分软件工程导论
第1章概述
11专业化软件开发
111软件工程
112软件工程的多样性
113软件工程和Web
12软件工程人员的职业道德
13案例研究
131胰岛素泵控制系统
132用于心理健康治疗的患者信息系统
133野外气象站
要点
进一步阅读材料
练习
参考书目
第2章软件过程
21软件过程模型
211瀑布模型
212增量式开发
213面向复用的软件工程
22过程活动
221软件描述
222软件设计和实现
223软件有效性验证
224软件进化
23应对变更
231原型构造
232增量式交付
233Boehm的螺旋模型
24Rational统一过程
要点
进一步阅读材料
练习
参考书目
第3章敏捷软件开发
31敏捷方法
32计划驱动开发和敏捷开发
33极限编程
331极限编程中的测试
332结对编程
34敏捷项目管理
35可扩展的敏捷方法
要点
进一步阅读材料
练习
参考书目
第4章需求工程
41功能需求和非功能需求
411功能需求
412非功能需求
42软件需求文档
43需求描述
431自然语言描述
432结构化描述
44需求工程过程
45需求导出和分析
451需求发现
452采访
453脚本
454用例
455深入实际
46需求有效性验证
47需求管理
471需求管理规划
472需求变更管理
要点
进一步阅读材料
练习
参考书目
第5章系统建模
51上下文模型
52交互模型
521用例建模
522时序图
53结构模型
531类图
532泛化
533聚合
54行为模型
541数据驱动的建模
542事件驱动模型
55模型驱动工程
551模型驱动体系结构
552可执行UML
要点
进一步阅读材料
练习
参考书目
第6章体系结构设计
61体系结构设计决策
62体系结构视图
63体系结构模式
631分层体系结构
632容器体系结构
633客户机-服务器体系结构
634管道和过滤器体系结构
64应用体系结构
641事务处理系统
642信息系统
643语言处理系统
要点
进一步阅读材料
练习
参考书目
第7章设计与实现
71利用UML进行面向对象设计
711系统上下文与交互
712体系结构的设计
713对象类识别
714设计模型
715接口描述
72设计模式
73实现问题
731复用
732配置管理
733宿主机-目标机开发
74开源开发
要点
进一步阅读材料
练习
参考书目
第8章软件测试
81开发测试
811单元测试
812选择单元测试案例
813组件测试
814系统测试
82测试驱动开发
83发布测试
831基于需求的测试
832情景测试
833性能测试
84用户测试
要点
进一步阅读材料
练习
参考书目
第9章软件进化
91进化过程
92程序进化的动态特性
93软件维护
931维护预测
932软件再工程
933通过重构进行预防性维护
94遗留系统管理
要点
进一步阅读材料
练习
参考书目
第二部分可依赖性和信息安全性
第10章社会技术系统
101复杂系统
1011系统总体特性
1012系统非确定性
1013成功标准
102系统工程
103系统采购
104系统开发
105系统运行
1051人为错误
1052系统进化
要点
进一步阅读材料
练习
参考书目
第11章可依赖性与信息安全性
111可依赖性特征
112可用性和可靠性
113安全性
114信息安全性
要点
进一步阅读材料
练习
参考书目
第12章可依赖性与信息安全性描述
121风险驱动的需求描述
122安全性描述
1221危险识别
1222危险评估
1223危险分析
1224风险降低
123可靠性描述
1231可靠性度量
1232非功能性的可靠性需求
1233功能可靠性描述
124信息安全性描述
125形式化描述
要点
进一步阅读材料
练习
参考书目
第13章可依赖性工程
131冗余性和多样性
132可依赖的过程
133可依赖的系统体系结构
1331保护性系统
1332自监控系统体系结构
1333N-版本编程
1334软件多样性
134可依赖的编程
要点
进一步阅读材料
练习
参考书目
第14章信息安全工程
141信息安全风险管理
1411生存期风险评估
1412运行风险评估
142面向信息安全的设计
1421体系结构设计
1422设计准则
1423部署设计
143系统生存能力
要点
进一步阅读材料
练习
参考书目
第15章可依赖性与信息安全保证
151静态分析
1511检验和形式化方法
1512模型检测
1513自动静态分析
152可靠性测试
153信息安全性测试
154过程保证
155安全性和可依赖性案例
1551结构化论证
1552结构化的安全性论证
要点
进一步阅读材料
练习
参考书目
第三部分高级软件工程
第16章软件复用
161复用概览
162应用框架
163软件产品线
164COTS产品的复用
1641COTS解决方案系统
1642COTS集成系统
要点
进一步阅读材料
练习
参考书目
第17章基于组件的软件工程
171组件和组件模型
172CBSE过程
1721面向复用的CBSE
1722基于复用的CBSE
173组件合成
要点
进一步阅读材料
练习
参考书目
第18章分布式软件工程
181分布式系统的问题
1811交互模型
1812中间件
182客户机-服务器计算
183分布式系统的体系结构模式
1831主从体系结构
1832两层客户机-服务器结构
1833多层客户机-服务器结构
1834分布式组件体系结构
1835对等体系结构
184软件作为服务
要点
进一步阅读材料
练习
参考书目
第19章面向服务的体系结构
191服务作为可复用的组件
192服务工程
1921可选服务的识别
1922服务接口设计
1923服务实现和部署
1924遗留系统服务
193使用服务的软件开发
1931工作流设计和实现
1932服务测试
要点
进一步阅读材料
练习
参考书目
第20章嵌入式软件
201嵌入式系统设计
2011实时系统建模
2012实时编程
202体系结构模式
2021观察和反应
2022环境控制
2023处理管道
203时序分析
204实时操作系统
要点
进一步阅读材料
练习
参考书目
第21章面向方面的软件工程
211关注点分离
212方面、连接点和切入点
213采用方面的软件工程
2131面向关注点的需求工程
2132面向方面的设计和编程
2133检验和有效性验证
要点
进一步阅读材料
练习
参考书目
第四部分软 件 管 理
第22章项目管理
221风险管理
2211风险识别
2212风险分析
2213风险规划
2214风险监控
222人员管理
223团队协作
2231成员挑选
2232小组的结构
2233小组的沟通
要点
进一步阅读材料
练习
参考书目
第23章项目规划
231软件报价
232计划驱动的开发
2321项目计划
2322规划过程
233项目进度安排
234敏捷规划
235估算技术
2351算法成本建模
2352COCOMO Ⅱ模型
2353项目的工期和人员配备
要点
进一步阅读材料
练习
参考书目
第24章质量管理
241软件质量
242软件标准
243复查与审查
2431复查过程
2432程序审查
244软件度量和量度
2441产品量度
2442软件组件分析
2443度量歧义
要点
进一步阅读材料
练习
参考书目
第25章配置管理
251变更管理
252版本管理
253系统构建
254发布版本管理
要点
进一步阅读材料
练习
参考书目
第26章过程改善
261过程改善过程
262过程度量
263过程分析
264过程变更
265CMMI过程改善框架
2651分阶段的CMMI模型
2652连续CMMI模型
要点
进一步阅读材料
练习
参考书目
术语表