01 / 导读
导读
引用
Sommerville, I. (2015). Software Engineering (10th ed.). Pearson.
章节概要
第10版分四部分共25章,另有术语表和索引,约800页。Sommerville 本人的网站说,本书于2015年4月出版,并列出了相对第9版的变化:敏捷一章被完全重写,增加了关于 Scrum 的新内容;可靠性、安全性(safety)和安全(security)各成独立章节;新增了关于韧性工程、系统工程和系统的系统的章节。Pearson 把本书介绍为带领学生了解可靠软件背后经过验证的过程与技术,同时引导读者了解广泛使用的敏捷方法和基于计划的方法。
第一部分,第1–3章:引论;软件过程;敏捷软件开发
第1章讲专业软件开发、软件工程伦理和案例研究。第2章讲过程模型与活动、应对变化和过程改进。第3章讲敏捷方法与技术、敏捷项目管理以及敏捷方法的规模化。
第一部分,第4–5章:需求工程;系统建模
第4章讲功能需求和非功能需求,以及需求的获取、描述、验证和变更等过程。第5章介绍上下文模型、交互模型、结构模型和行为模型,以及模型驱动工程。
第一部分,第6–7章:体系结构设计;设计与实现
第6章讲体系结构设计的决策、视图、模式和应用体系结构。第7章讲使用UML的面向对象设计、设计模式、实现问题和开源开发。
第一部分,第8–9章:软件测试;软件演化
第8章区分开发测试、测试驱动开发、发布测试和用户测试。第9章讲演化过程、遗留系统和软件维护;作者指出,遗留系统比上一版讲得更详细。
第二部分,第10–14章:可信赖系统;可靠性工程;安全性工程;安全工程;韧性工程
这一部分讲系统的可信赖性和安全。第10章介绍可信赖性的各种特性、社会技术系统、冗余与多样性、可信赖的过程和形式化方法。可靠性、安全性(safety)和安全(security)各有独立的一章,Sommerville 说这样便于在更一般的课程中讲授其中某一个主题。第14章是本版新增的,讲网络安全、社会技术韧性和有韧性的系统设计。(Pearson 的在线目录漏掉了第14章,作者的目录中有这一章。)
第三部分,第15–18章:软件复用;基于构件的软件工程;分布式软件工程;面向服务的软件工程
复用(包括应用框架和软件产品线)、构件及其组合、分布式系统与客户端—服务器计算,以及包含RESTful服务的面向服务架构。
第三部分,第19–21章:系统工程;系统的系统;实时软件工程
三章中有两章是本版新增的:系统工程和系统的系统。第21章讲嵌入式系统设计、实时体系结构模式、时序分析和实时操作系统。
第四部分,第22–25章:项目管理;项目计划;质量管理;配置管理
风险管理、人员与团队合作;定价、基于计划的开发与敏捷计划、估算和COCOMO;质量、标准、评审与度量;以及版本、构建、变更和发布管理。配置管理一章已针对分布式版本控制更新。
核心概念
第一部分:软件工程导论
- 软件过程模型与敏捷方法:基于计划和敏捷两种组织工作的方式。
- 需求工程:功能需求和非功能需求的获取、描述与验证。
- 系统建模与体系结构设计:系统的模型与视图,体系结构模式。
- 测试与演化:开发测试、发布测试和用户测试;遗留系统的维护。
第二部分:系统的可信赖性与安全
- 可信赖性、可靠性、安全性、安全和韧性:一章一章分别讲解的一组特性。
- 冗余与多样性、安全论证(safety case)、安全系统设计。
第三、四部分:进阶主题与管理
- 复用与基于构件的工程,面向服务的架构。
- 系统的系统,实时系统。
- 风险管理、估算与质量管理,版本管理。
评析
优点
- 在不同过程传统之间保持平衡。 Pearson 把本书介绍为同时涵盖敏捷和基于计划的方法;敏捷一章在本版中重写,计划也以两种形式出现(基于计划的开发和敏捷计划)。
- 把可信赖性拆成一连串各有侧重的章节。 可靠性、安全性、安全和韧性各有一个自成体系的章节,因此课程可以只选其中一个。
- 案例研究分布在全书各处。 作者有意使用了多个案例:数字学习环境 iLearn、心理健康支持系统 Mentcare、胰岛素泵、荒野气象站、空客A340飞行控制系统,以及阿丽亚娜5号发射事故。
- 免费的配套材料。 Sommerville 的网站提供各章的幻灯片、含部分习题解答和小测验的教师指南、案例研究说明、四十多个视频、样章(第1、12、20章)以及以前版本的网络章节。
局限
- 广度重于深度。 25章约800页,意味着大多数主题(实时、分布式、面向服务的软件)只有三到五节,所以本书是概览而非专门深入。
- 一些以前的内容只在网上。 过程改进和面向方面的工程已从印刷版中移走;作者说,这些网络章节自首次发布以来没有更新,有些地方已经过时。
- 2015年的一个快照。 目录和作者列出的变化提到了Scrum、RESTful服务和分布式版本控制,但没有提到DevOps或持续交付,所以讲当前交付实践的课程需要补充材料。
在课程中的定位
Sommerville 的书是本课程中广泛的概览式教材,其他几本则是更深入某一主题的专题著作。Ousterhout 的 A Philosophy of Software Design 是一本关于通过模块设计来管理复杂性的短书;Bass、Clements 和 Kazman 的 Software Architecture in Practice 深入讨论体系结构和质量属性;Jackson 的 Software Abstractions 借助 Alloy 介绍轻量级形式化方法。Ousterhout 的书可从第6章和第7章(体系结构、设计与实现)自然衔接,Bass 等人的书可从第6章衔接,Jackson 的书则可从讲系统建模的第5章衔接。
Software Engineering at Google 是一本免费的文集,讲述大型组织如何长期维持软件;The Pragmatic Programmer 汇集了面向在职开发者的习惯与技巧。两本书都适合已经接触过第一部分术语、想要从实践角度看问题的读者。
如何使用本书
本书面向第一门软件工程课程的学生、需要了解概况的其他领域研究生,以及从业者。有程序设计经验,包括写过比单个练习更大的程序,是合理的先修要求。
一个实用的读法:
- 核心: 按顺序读第一部分(第1–9章),先把样章第1章当作试读。把第2–3章与一个遵循某种过程的团队项目结合起来。
- 按兴趣选择: 第二部分选第11章(可靠性)、第12章(安全性)、第13章(安全)和第14章(韧性);第三部分选复用、服务或实时主题。
- 管理: 项目课程读第22–25章,尤其是项目计划和配置管理。
对反复出现的案例研究做笔记,并把作者的幻灯片、视频和教师指南当作学习辅助。
