具體描述
				
				
					産品特色
        編輯推薦
                                         《軟件工程》的八篇內容重構為四個部分,使教師講授軟件工程課程更加容易。每一章都有30%~40%的更新,增加瞭敏捷軟件開發和嵌入式係統等新章,補充瞭模型驅動工程、開源開發、測試驅動開發、可依賴係統體係結構、靜態分析和模型檢查、COTS復用、服務作為軟件以及敏 
     捷規劃等新內容。著重討論瞭開發可靠的分布式係統的相關主題以及敏捷方法和軟件復用。反映敏捷方法先進性的同時,不忘強調傳統的計劃驅動軟件工程的作用,闡述瞭兩者結閤構建優秀軟件係統的重要性。以一個新的病人記錄係統案例研究貫穿始終,係統、完整地講解軟件工程的各個方麵。《軟件工程》設計為“印刷/Web”相結閤的方式,核心信息采用印刷版本,教輔材料及先前版本中的一些章節放在Web上,為讀者提供豐富翔實的信息。      
內容簡介
      《軟件工程》是係統介紹軟件工程理論的經典教材,自1982年初版以來,隨著軟件工程學科的不斷發展,不斷更新版本,影響瞭一代又一代軟件工程人纔,對學科本身也産生瞭重大影響。本版保留瞭上一版中的軟件工程的基本材料,但對各章都進行瞭修改和更新,並增加瞭很多有關其他主題的新材料。
  《軟件工程》包含四個部分:第1部分是對軟件工程的一般性介紹,包括軟件工程過程和敏捷開發,以及麵嚮對象的設計和設計模式的使用;第2部分介紹可依賴性和信息安全性問題;第3部分介紹高級軟件工程;第四部分介紹軟件管理,重點介紹技術管理問題。      
作者簡介
      薩默維爾(Ian Sommerville),英國著名軟件工程專傢。曾任教於蘭卡斯特大學,現為聖安德魯斯大學軟件工程學教授。他在軟件工程的教學和科研方麵有20多年的經驗。他是IEEECS組織編撰“軟件工程知識體係”(SWEBOK)的專傢委員會成員之一。他的研究領域包括計算機係統工程、需求工程、係統可靠性以及軟件進貨。      
精彩書評
      在計算機科學的同一領域往往都有比肩齊聲的佳作。軟件工程類綜述性的巨著也有兩本:一本就是Roger Pressman所著的《軟件工程:實踐者的研究方法》,另一本就是lan Sommerville所著的本書。這兩本名著都有多年曆史(初版可追溯到20世紀80年代早期)。對於軟件工程學科的形成和發展起到瞭重要作用。尤其是在教育界和學術界影響極大。相比Pressman的書,Sommerville的這本教材將全部內容劃分為四個部分,每個部分可以單獨使用或者是結閤其他部分作為軟件工程課程的基本內容,更加適閤不同類型軟件工程課程的教學需求,敘述也更趨清晰和簡明。
  ——摘自業界專業人士的推薦 
  這本軟件工程的經典教材不僅展現瞭軟件工程的廣闊視野。還著重闡述瞭在開發大型係統中一些廣泛采用的技術。並輔以大量的例子和圖解。作者將所有的話題控製在適度的篇幅,用簡練到位的文字把重要的內容呈現給讀者,並提供進一步閱讀資料,供有興趣的讀者深入學習,使得本書更符閤國內軟件工程課程的教學需求。書中沒有學院派布道式的說教,作者認為並不存在解決軟件工程問題的靈丹妙藥,而是強調讀者需要學習和掌握更廣泛的技術和工具以解決軟件工程問題。從內容選材上,本書不落俗套,大膽捨棄瞭傳統的軟件工程內容和一些繁瑣的軟件工程理論。代之以簡潔實用的軟件工程新知識、新方法,增加瞭教材的實用性和可讀性;從專題安排上,本書避虛就實,沒有對軟件工程技術泛泛而談,而是針對那些大型係統開發技術進行分析,避免對個彆産品中的技術進行過多闡述。
  ——劉藝,《計算機英語》作者     
目錄
   齣版者的話譯者序前言第一部分 軟件工程導論第1章 概述1.1 專業化軟件開發1.1.1 軟件工程1.1.2 軟件工程的多樣性1.1.3 軟件工程和Web1.2 軟件工程人員的職業道德1.3 案例研究1.3.1 胰島素泵控製係統1.3.2 用於心理健康治療的患者信息係統1.3.3 野外氣象站要點進一步閱讀材料練習參考書目第2章 軟件過程2.1 軟件過程模型2.1.1 瀑布模型2.1.2 增量式開發2.1.3 麵嚮復用的軟件工程2.2 過程活動2.2.1 軟件描述2.2.2 軟件設計和實現2.2.3 軟件有效性驗證2.2.4 軟件進化2.3 應對變更2.3.1 原型構造2.3.2 增量式交付2.3.3 Boehm的螺鏇模型2.4 Rational統一過程要點進一步閱讀材料練習參考書目第3章 敏捷軟件開發3.1 敏捷方法3.2 計劃驅動開發和敏捷開發3.3 極限編程3.3.1 極限編程中的測試3.3.2 結對編程3.4 敏捷項目管理3.5 擴展的敏捷方法要點進一步閱讀材料練習參考書目第4章 需求工程4.1 功能需求和非功能需求4.1.1 功能需求4.1.2 非功能需求4.2 軟件需求文檔4.3 需求描述4.3.1 自然語言描述4.3.2 結構化描述4.4 需求工程過程4.5 需求導齣和分析4.5.1 需求發現4.5.2 采訪4.5.3 腳本4.5.4 用例4.5.5 深入實際4.6 需求有效性驗證4.7 需求管理4.7.1 需求管理規劃4.7.2 需求變更管理要點進一步閱讀材料練習參考書目第5章 係統建模5.1 上下文模型5.2 交互模型5.2.1 用例建模5.2.2 時序圖5.3 結構模型5.3.1 類圖5.3.2 泛化5.3.3 聚閤5.4 行為模型5.4.1 數據驅動的建模5.4.2 事件驅動模型5.5 模型驅動工程5.5.1 模型驅動體係結構5.5.2 可執行UML要點進一步閱讀材料練習參考書目第6章 體係結構設計6.1 體係結構設計決策6.2 體係結構視圖6.3 體係結構模式6.3.1 分層體係結構6.3.2 容器體係結構6.3.3 客戶機一服務器體係結構6.3.4 管道和過濾器體係結構6.4 應用體係結構6.4.1 事務處理係統6.4.2 信息係統6.4.3 語言處理係統要點進一步閱讀材料練習參考書目第7章 設計與實現7.1 利用UML進行麵嚮對象設計7.1.1 係統上下文與交互7.1.2 體係結構的設計7.1.3 對象類識彆7.1.4 設計模型7.1.5 接口描述7.2 設計模式7.3 實現問題7.3.1 復用7.3.2 配置管理7.3.3 宿主機一目標機開發7.4 開源開發要點進一步閱讀材料練習參考書目第8章 軟件測試8.1 開發測試8.1.1 單元測試8.1.2 選擇單元測試案例8.1.3 組件測試8.1.4 係統測試8.2 測試驅動開發8.3 發布測試8.3.1 基於需求的測試8.3.2 情景測試8.3.3 性能測試8.4 用戶測試要點進一步閱讀材料練習參考書目第9章 軟件進化9.1 進化過程9.2 程序進化的動態特性9.3 軟件維護9.3.1 維護預測9.3.2 軟件再工程9.3.3 通過重構進行預防性維護9.4 遺留係統管理要點進一步閱讀材料練習參考書目第二部分 可依賴性和信息安全性第三部分 高級軟件工程第四部分 軟件管理      
精彩書摘
      現代社會離不開軟件。國傢基礎設施和公共建設都是由基於計算機的係統控製,大多數的電子産品都有計算機和控製軟件。工業製造和分銷已經完全計算機化瞭,金融係統也是這樣。娛樂業,包括音樂産業、計算機遊戲産業、電影和電視産業,也是一個軟件密集型的産業。因此,軟件工程對於一個國傢和整個國際社會的運轉都是必不可少的。  軟件是抽象的、不可觸摸的,它不受物質材料的限製,也不受物理定律或加工過程的製約,這一方麵使軟件工程得以簡化,因為軟件的潛能不受物理因素的限製;另一方麵,由於缺乏自然約束,軟件係統也就很容易變得極為復雜,理解它會很睏難、改變它價格高昂。  從簡單的嵌入式係統到復雜的全球信息係統,有很多不同類型的軟件係統。正是由於不同的軟件係統需要不同的技術,所以試圖為軟件工程尋求通用的符號係統、方法和技術是毫無意義的。開發一個機構信息係統和開發一個科學儀器的控製器是完全不同的。而這些係統都跟圖形密集型的計算機遊戲沒有太多的共同點。所有這些應用都需要軟件工程,但不是都需要相同的軟件工程技術。  現在仍有許多有關軟件項目齣問題和“軟件失敗”的報道。軟件工程因不能充分支持現代軟件的開發而遭非議。然而,在我看來,這些所謂的軟件失敗源於以下兩方麵的原因:  1.不斷增長的需求由於新的軟件工程技術可以幫助我們構建更大更復雜的係統,用戶的需要因而在發生改變。係統必須更快速地構建並交付;需要更大更復雜的係統;係統必須具備在以前看來不可能實現的功能。現有的軟件工程方法已經不能應對新形勢,而新的軟件工程技術還有待於進一步發展。   ……      
前言/序言
       
				 
				
				
					《軟件工程(原書第9版)》圖書簡介  一、 軟件工程的基石:從概念到實踐的演進  本書深入探討瞭軟件工程這一多學科交叉領域的核心理念與前沿實踐,旨在為讀者構建一套係統、紮實且與時俱進的軟件開發知識體係。我們將從軟件工程的本質齣發,追溯其發展曆程,理解為何在信息技術飛速迭代的今天,規範化的軟件工程方法論顯得尤為重要。從最初對代碼質量和效率的粗放式追求,到如今強調全生命周期管理、敏捷協作、風險控製和可維護性,軟件工程早已超越瞭單純的技術範疇,成為保障復雜軟件係統成功交付的關鍵驅動力。  核心內容梳理:     軟件工程的定義與目標: 軟件工程並非僅僅是編寫代碼,而是涵蓋瞭從需求獲取、設計、實現、測試、部署到維護的全過程。其核心目標是“以工程化的方法來開發和維護軟件”,確保軟件産品在規定的時間、成本和質量要求下完成。這包括提高軟件的可靠性、可維護性、可重用性、效率以及滿足用戶需求。    軟件生命周期模型: 本書詳細剖析瞭各種經典的軟件生命周期模型,如瀑布模型、迭代模型(包括螺鏇模型)、原型模型以及麵嚮對象模型。每種模型都有其適用的場景和局限性,理解它們的內在邏輯有助於開發者根據項目特點選擇最閤適的開發流程。例如,瀑布模型強調綫性順序,適閤需求明確的項目;而迭代模型則允許在開發過程中不斷完善和修正,更契閤需求模糊或易變的項目。    軟件開發流程與活動: 軟件開發是一個復雜而有序的流程,本書將細緻講解其中的關鍵活動:        可行性研究: 在項目啓動階段,評估技術、經濟、法律和操作上的可行性,為決策提供依據。        需求工程: 這是整個軟件開發流程的基石。我們將深入探討需求獲取(訪談、問捲、場景分析等)、需求分析(建模、衝突檢測)、需求規格說明(清晰、無歧義、完整、一緻)以及需求驗證。理解用戶真實的需求是避免後期返工、降低項目風險的關鍵。        軟件設計: 設計是將需求轉化為具體藍圖的過程。本書將涵蓋結構化設計(自頂嚮下分解、模塊化)和麵嚮對象設計(類、對象、繼承、多態、封裝)的原則和方法。我們會探討架構設計(全局結構、模塊劃分)和詳細設計(數據結構、算法、接口)。        軟件實現: 編碼階段是設計的具體落地。我們將關注編碼規範、代碼風格、可讀性、可維護性以及如何利用集成開發環境(IDE)提高效率。        軟件測試: 測試是保證軟件質量的重要環節。本書將全麵介紹各種測試策略和技術,包括單元測試、集成測試、係統測試、驗收測試,以及黑盒測試、白盒測試、灰盒測試等。我們將強調測試的係統性、計劃性以及自動化測試的重要性。        軟件維護: 軟件交付並非終點,維護是軟件生命周期中最耗時、成本最高的階段。本書將分析不同類型的維護活動(糾錯性、適應性、完善性、預防性),並探討如何通過良好的設計和文檔來降低維護成本,提高軟件的長期價值。  二、 軟件工程方法論與實踐:構建高質量軟件的基石  軟件工程的價值體現在其所倡導的各種方法論和技術,這些工具和框架幫助團隊更有效地協作、更精準地解決問題。本書將全麵介紹當前業界廣泛應用且經久考驗的軟件工程方法論。  核心內容梳理:     結構化方法: 盡管麵嚮對象方法已成為主流,但結構化方法所強調的邏輯清晰、模塊化和數據流分析等思想仍然具有重要的參考價值。本書將簡要迴顧結構化分析(SA)和結構化設計(SD)的核心概念。    麵嚮對象方法(OOM): 麵嚮對象思想是現代軟件工程的基石。我們將深入講解麵嚮對象分析(OOA)和麵嚮對象設計(OOD)的關鍵原則,包括封裝、繼承、多態、抽象等,以及如何利用UML(統一建模語言)進行建模,如類圖、序列圖、用例圖等,將復雜的係統邏輯可視化。    敏捷開發方法: 敏捷方法論的興起是軟件工程領域的一場革命。本書將詳細介紹敏捷開發的核心價值觀(個體與交互、工作的軟件、客戶閤作、響應變化)和原則,並重點講解Scrum、XP(極限編程)等主流敏捷框架。我們將探討敏捷開發中的角色(如Scrum Master, Product Owner, Development Team)、活動(如Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective)以及工件(如Product Backlog, Sprint Backlog, Increment)。敏捷方法論強調快速迭代、持續交付、頻繁反饋和團隊協作,極大地提高瞭軟件開發的響應速度和適應性。    DevOps文化與實踐: DevOps作為一種文化理念和實踐集閤,將開發(Dev)和運維(Ops)緊密結閤,旨在縮短係統開發生命周期,同時提供高質量的軟件交付。本書將介紹DevOps的核心理念,如自動化(CI/CD)、持續集成、持續交付、持續部署、基礎設施即代碼、監控與反饋等,以及它們如何在軟件工程實踐中發揮關鍵作用,打破開發與運維之間的壁壘。    軟件項目管理: 軟件工程離不開有效的項目管理。本書將覆蓋項目啓動、規劃、執行、監控和收尾等階段的關鍵活動。我們將探討項目範圍管理、進度管理、成本管理、質量管理、風險管理、溝通管理和資源管理等。熟悉這些管理原則,有助於確保項目按時、按預算、高質量地完成。    軟件度量與過程改進: “度量纔能改進”是軟件工程的核心思想之一。本書將介紹各種軟件度量指標,如代碼行數(LOC)、圈復雜度、缺陷密度、客戶滿意度等,以及如何利用這些指標來評估軟件質量、預測項目風險、識彆過程瓶頸,並指導過程改進活動,如CMMI(能力成熟度模型集成)和ISO標準。  三、 關鍵技術與支撐:構建現代軟件係統的工具箱  除瞭理論和方法論,掌握相關的技術和工具也是軟件工程實踐不可或缺的一部分。本書將探討支撐現代軟件開發的一係列關鍵技術。  核心內容梳理:     需求工程技術: 深入講解用例建模、用戶故事(User Stories)的編寫與管理,以及如何進行需求優先級排序。    建模與設計工具: 介紹UML(統一建模語言)的各種圖示(類圖、對象圖、用例圖、序列圖、協作圖、狀態圖、活動圖、組件圖、部署圖),以及如何使用建模工具(如Enterprise Architect, Visio, Lucidchart等)輔助設計過程。    版本控製係統: 強調Git等分布式版本控製係統在團隊協作、代碼管理、分支策略、閤並衝突解決等方麵的重要性。    自動化構建與部署(CI/CD): 詳細介紹Jenkins, GitLab CI/CD, GitHub Actions等CI/CD工具的原理與應用,如何實現代碼提交後的自動化構建、測試和部署,縮短發布周期,提高交付效率。    軟件測試自動化: 探討單元測試框架(如JUnit, NUnit, Pytest)、集成測試框架、端到端測試框架(如Selenium, Cypress)的應用,以及測試驅動開發(TDD)和行為驅動開發(BDD)的實踐。    質量保證(QA)與代碼審查: 講解靜態代碼分析工具(如SonarQube)的使用,以及代碼審查(Code Review)在發現潛在問題、知識共享和團隊協作中的價值。    軟件架構模式: 介紹常見的軟件架構風格,如分層架構、客戶端-服務器架構、微服務架構、事件驅動架構等,理解不同架構模式的優缺點及其適用場景。    可維護性與重用性設計: 強調模塊化、低耦閤、高內聚的設計原則,以及如何設計可重用的組件和庫,降低維護成本,提高開發效率。    軟件安全工程: 隨著網絡安全威脅的日益嚴峻,本書也將涵蓋軟件安全的基本原則,如最小權限原則、安全編碼實踐、常見的安全漏洞(如SQL注入、XSS攻擊)及其防禦方法。    軟件度量工具與技術: 介紹如何使用各種工具收集軟件度量數據,並對數據進行分析,從而指導過程改進。  四、 行業趨勢與未來展望:引領軟件工程的發展方嚮  軟件工程領域正以前所未有的速度演進,本書將目光投嚮行業前沿,探討未來的發展趨勢,幫助讀者保持敏銳的洞察力。  核心內容梳理:     人工智能與機器學習在軟件工程中的應用: 探討AI在代碼生成、缺陷檢測、自動化測試、需求預測、項目管理等方麵的潛力,以及如何利用ML技術優化軟件開發過程。    低代碼/無代碼平颱: 分析低代碼/無代碼平颱如何改變軟件開發模式,降低開發門檻,加速應用交付,以及它們對傳統軟件工程的挑戰與機遇。    雲原生與容器化技術: 深入理解Kubernetes、Docker等雲原生技術在構建彈性、可伸縮、高可用的現代應用係統中的核心作用,以及它們對軟件架構和部署的影響。    微服務架構的演進與挑戰: 探討微服務架構的優勢(獨立部署、技術多樣性、彈性伸縮)與挑戰(分布式事務、服務治理、監控復雜性),以及應對策略。    區塊鏈技術在軟件工程中的潛在應用: 探討區塊鏈在代碼溯源、版本管理、安全審計、去中心化應用開發等方麵的可能應用。    可持續軟件工程: 關注軟件開發過程對環境的影響,以及如何通過設計和實踐實現更節能、更環保的軟件係統。    人機協作與開發者體驗: 探討如何通過更好的工具、更友好的開發環境和更有效的協作方式,提升開發者的生産力和幸福感。    軟件工程的倫理與社會責任: 隨著軟件在社會中的影響日益加深,本書也將引導讀者思考軟件工程的倫理問題,如數據隱私、算法偏見、技術公平性等,以及開發者應承擔的社會責任。  結論:  《軟件工程(原書第9版)》是一本全麵、深入且緊跟時代步伐的著作。它不僅為初學者構建瞭紮實的理論基礎,也為經驗豐富的開發者提供瞭前沿的實踐指導。通過學習本書,讀者將能夠深刻理解軟件工程的核心價值,掌握先進的開發方法與技術,從而更自信、更有效地設計、開發、部署和維護高質量的軟件係統,應對快速變化的數字時代帶來的挑戰與機遇。本書的目標是培養具備工程素養、能夠獨立解決復雜軟件問題、並持續學習和適應新技術的優秀軟件工程師。