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章,尤其是專案計畫和配置管理。
對反覆出現的案例研究做筆記,並把作者的投影片、影片和教師指南當作學習輔助。
