關于我們
書單推薦
新書推薦
|
軟件工程(英文版·第10版)
本書是軟件工程領域的經典教材,自1982年第1版出版至今,伴隨著軟件工程學科的發(fā)展不斷更新,影響了一代又一代的軟件工程人才,對學科建設也產生了積極影響。全書共四個部分,完整討論了軟件工程各個階段的內容,是軟件工程相關專業(yè)本科生和研究生的教材,也是軟件工程師必備的參考書籍。
軟件工程在過去50年之中取得了令人矚目的進展。我們的社會已經無法在缺少大型的專業(yè)化軟件系統(tǒng)的情況下正常運轉了。國家的公用事業(yè)和基礎設施(如能源、通信、交通)全都依賴于復雜和可靠的計算機系統(tǒng)。軟件使得我們可以探索空間,并創(chuàng)造了萬維網這一人類歷史上最重要的信息系統(tǒng)。智能手機和平板電腦無處不在,而為這些設備開發(fā)軟件的整個“應用開發(fā)產業(yè)”已經在過去幾年中悄然形成。
人類現(xiàn)在正面臨著一系列迫切的挑戰(zhàn):氣候變化和極端天氣、自然資源的減少、需要為更多的人口提供食物和住房、國際恐怖主義的威脅,以及為老年人提供令人滿意的生活的要求。我們需要新技術來幫助我們應對這些挑戰(zhàn),可以肯定的是軟件將在這些技術中扮演核心角色。因此,軟件工程對于我們在這個星球上的未來極其重要。我們必須繼續(xù)培養(yǎng)軟件工程師并推動軟件工程學科的持續(xù)發(fā)展,從而滿足開發(fā)更多的軟件系統(tǒng)以及創(chuàng)造我們所需要的越來越復雜的未來系統(tǒng)的需要。 當然,軟件項目還存在很多問題。系統(tǒng)仍然有時會延遲交付并且成本超支。我們正在創(chuàng)造越來越復雜的軟件系統(tǒng)之系統(tǒng)(software systems of systems),在這條道路上遇到各種困難也是不足為奇的。然而,我們不應該讓這些問題掩蓋軟件工程領域已經取得的巨大成就以及所形成的各種令人印象深刻的軟件工程方法和技術。 本書的不同版本已經有超過30年的歷史。這一版同樣遵循了在本書第1版中所建立的基本原則:按照工業(yè)界實踐介紹軟件工程,不對任何特定的方法(例如敏捷開發(fā)、形式化方法)持傾向性態(tài)度。在現(xiàn)實中,工業(yè)界往往將各種技術(例如敏捷以及基于計劃的開發(fā))混合在一起使用,這一點也在本書中有所反映。 根據我所知道的和所理解的知識來介紹軟件工程。我得到過很多關于增加并詳細介紹其他相關話題的建議,例如開源軟件開發(fā)、UML的使用以及移動軟件工程等。但是我對這些領域了解得并不夠多。我個人的工作主要是在系統(tǒng)可靠性和系統(tǒng)工程方面,這一點在我為本書所選擇的高級主題中有所反映。 我認為現(xiàn)代軟件工程的關鍵問題是管理復雜性,將敏捷和其他方法結合起來,并確保系統(tǒng)是安全的且有韌性的。這些問題是促使我在這一版中修改和新增內容的驅動力。 對第9版的更新這一版對第9版的更新內容匯總如下:全面更新了關于敏捷軟件工程的章節(jié),增加了關于Scrum的新內容。此外還根據需要對其他章節(jié)進行了更新以反映敏捷方法在軟件工程中日益增長的應用。 增加了關于韌性工程、系統(tǒng)工程、系統(tǒng)之系統(tǒng)的新章節(jié)。 對于涉及可靠性、安全性、信息安全性的三章進行了徹底的重新組織。 在面向服務的軟件工程一章中增加了關于RESTful服務的新內容。 更新和修改了關于配置管理的章節(jié),增加了關于分布式版本控制系統(tǒng)的新內容。 將關于面向方面的軟件工程以及過程改進的章節(jié)從本書的紙質版移到了網站上。 在網站上新增了補充材料,包括一系列教學視頻。我在視頻中對于一些關鍵話題進行了解釋并且推薦了相關的YouTube視頻。 這一版保留了本書在此前版本中采用的四部分結構,但我對其中每個部分都進行了大量的修改。 在第一部分軟件工程導論中,我徹底重寫了第3章(敏捷方法)并對其進行了更新以反映Scrum方法在實踐中日益增長的應用。第1章中增加了一個關于數(shù)字化學習環(huán)境的案例研究,這個案例在其他幾章中也有用到。第9章更加詳細地介紹了遺留系統(tǒng)。所有其他章節(jié)都進行了少量的修改和更新。 第二部分介紹系統(tǒng)可依賴性,這部分進行了修改和重新組織。原來采用的面向活動的組織方式使得與安全性、信息安全性、可靠性相關的信息分散在多個章節(jié)中,而重新組織之后,安全性、信息安全性、可靠性各屬于一章。這使得相關內容(例如信息安全性)可以更加方便地作為獨立的專題在更加綜合性的課程中使用。我增加了一個全新的關于韌性工程的章節(jié),其中涉及網絡安全、組織韌性以及韌性系統(tǒng)設計。 第三部分增加了關于系統(tǒng)工程、系統(tǒng)之系統(tǒng)的新章節(jié),并對與面向服務的系統(tǒng)工程相關的內容進行了全面修改以反映RESTful服務的應用增長趨勢。面向方面的軟件工程相關的章節(jié)從本書的紙質版中移除,但在網站上作為在線章節(jié)保留。 第四部分對配置管理相關的內容進行了更新以反映分布式版本控制工具(如Git)的日益普及。過程改進相關的章節(jié)從本書的紙質版中移除,但在網站上作為在線章節(jié)保留。 本書補充材料中的一個重要變化是為每個章節(jié)增加了視頻。我制作了關于一系列不同主題的40多段視頻,放在我的YouTube頻道上,并在本書網頁上提供鏈接。對于沒有制作視頻的地方,我推薦了一些可能有用的YouTube視頻。 我在下面這個視頻中解釋了我在這一版中所做的修改背后的原因:http://iansommerville.com/software-engineering-book/videos/10th-edition-changes-2/。 讀者對象本書主要面向各大學和學院里正在學習軟件和系統(tǒng)工程的初高級課程的學生。我假設讀者對于編程基礎和基本數(shù)據結構都已有所理解。 工業(yè)界的軟件工程師們也會發(fā)現(xiàn)它是一本很好的讀物,能幫助他們在軟件復用、體系結構設計、可依賴性和信息安全性以及系統(tǒng)工程等方面獲得新的知識。 教學建議針對三種不同類型的軟件工程課程,我對本書進行了如下設計:軟件工程一般導論課程。本書的第一部分專門用于一個學期的軟件工程導論課程。這部分包括9章,涵蓋了軟件工程領域的基礎內容。如果你的課程中包含實踐性教學環(huán)節(jié),那么可以選講第四部分中關于管理的章節(jié)。 軟件工程特定主題的導論課程或進階課程。通過使用本書第二~四部分的內容,可以創(chuàng)建一系列更高級的課程。例如,我采用第二部分的各章加上關于系統(tǒng)工程和質量管理的兩章來講授以關鍵系統(tǒng)為主題的課程。而對于討論軟件密集型系統(tǒng)的課程,我選擇的章節(jié)涉及系統(tǒng)工程、需求工程、系統(tǒng)之系統(tǒng)、分布式軟件工程、嵌入式軟件、項目管理和項目計劃。 軟件工程特定主題的更高階課程。對于這類課程,本書的各章可以構成課程的基礎,然后輔之以更多的閱讀以便進一步探索某個主題。例如,關于軟件復用的課程就可以基于第15~18章的內容。 用書教師可以訪問培生網站獲取相關教輔資源,網址為http://www.pearsonhighered.com/sommerville。部分資源為加密內容,可在網站上通過注冊來獲取密碼。教輔資源包括:部分章末練習題的答案。 每章的測驗題目及答案。 配套網站本書采用紙質圖書和在線網站內容相結合的方式,其中紙質書的核心信息可以鏈接到網站上的補充材料。有些章節(jié)包含特別編寫的“在線段落”以提供更多的信息。網站上還有6個在線章節(jié),介紹了幾個紙質版中未涉及的主題。 讀者可以從本書網站software-engineering-book.com下載各種豐富的補充材料,包括:本書所有章節(jié)的PowerPoint幻燈片。 我所錄制的針對一系列軟件工程主題的視頻,我還推薦了一些有助于學習本書內容的YouTube視頻。 針對課程教師的指南,其中給出了在教授不同課程過程中如何使用本書的建議。 關于本書中案例研究(胰島素泵、心理健康護理系統(tǒng)、野外氣象站系統(tǒng)、數(shù)字化學習系統(tǒng))的附加信息,以及其他一些案例研究(例如阿麗亞娜5型發(fā)射器失效故障)。 6個在線章節(jié)介紹了過程改進、形式化方法、交互設計、應用體系結構、文檔化以及面向方面的開發(fā)。 為每個章節(jié)提供補充內容的在線段落,這些在線段落可以通過每一章中用方框突出顯示的鏈接來訪問。 一些附加的涉及一系列系統(tǒng)工程主題的PowerPoint幻燈片。 應讀者的要求,我已經在本書的網站上發(fā)布了其中一個系統(tǒng)案例研究的完整需求規(guī)格說明。對于學生而言,獲得這種文檔并理解其結構和復雜性有些困難。為了避免保密問題,我對這個來自于真實系統(tǒng)的需求文檔進行了再工程,因此使用該文檔沒有任何限制。 聯(lián)系信息網站 software-engineering-book.com郵件名字:software.engineering.book;域名:gmail.com博客iansommerville.com/systems-software-and-technologyYouTubeyoutube.com/user/SoftwareEngBookFacebookfacebook.com/sommerville.software.engineeringTwitter@SoftwareEngBook 或者 @iansommerville(有一些更廣泛的推文)歡迎在Twitter或Facebook上關注我以及時獲得關于軟件和系統(tǒng)工程的新材料和新評論。 致謝多年以來許多人都對本書的成長做出了貢獻,在此我想感謝每一位曾經評論過本書之前的版本并且給出了建設性意見的人(審閱人、學生、讀者)。我想特別感謝我的家人Anne、Ali和Jane,感謝他們在我編寫本書(以及此前所有版本)過程中給予我的愛、幫助和支持。 Ian Sommerville2014年9月
Contents
Part1 Introduction to Software Engineering 01
Chapter 1 Introduction 03
1.1 Professional software development 05
1.2 Software engineering ethics 14
1.3 Case studies 17
Chapter 2 Software processes 29
2.1 Software process models 31
2.2 Process activities 40
2.3 Coping with change 47
2.4 Process improvement 51
Chapter 3 Agile software development 58
3.1 Agile methods 61
3.2 Agile development techniques 63
3.3 Agile project management 70
3.4 Scaling agile methods 74
Chapter 4 Requirements engineering 87
4.1 Functional and non-functional requirements 91
4.2 Requirements engineering processes 97
4.3 Requirements elicitation 98
4.4 Requirements specification 106
4.5 Requirements validation 115
4.6 Requirements change 116
Chapter 5 System modeling 124
5.1 Context models 127
5.2 Interaction models 130
5.3 Structural models 135
5.4 Behavioral models 140
5.5 model-driven architecture 145
Chapter 6 Architectural design 153
6.1 Architectural design decisions 157
6.2 Architectural views 159
6.3 Architectural patterns 161
6.4 Application architectures 170
Chapter 7 Design and implementation 182
7.1 Object-oriented design using the UmL 184
7.2 Design patterns 195
7.3 Implementation issues 198
7.4 Open-source development 205
Chapter 8 Software testing 212
8.1 Development testing 217
8.2 Test-driven development 228
8.3 Release testing 231
8.4 User testing 235
Chapter 9 Software evolution 241
9.1 Evolution processes 244
9.2 Legacy systems 247
9.3 Software maintenance 256
Part 2 System Dependability and Security 269
Chapter 10 Dependable systems 271
10.1 Dependability properties 274
10.2 Sociotechnical systems 277
10.3 Redundancy and diversity 281
10.4 Dependable processes 283
10.5 Formal methods and dependability 285
Chapter 11 Reliability engineering 292
11.1 Availability and reliability 295
11.2 Reliability requirements 298
11.3 Fault-tolerant architectures 304
11.4 Programming for reliability 311
11.5 Reliability measurement 317
Chapter 12 Safety engineering 325
12.1 Safety-critical systems 327
12.2 Safety requirements 330
12.3 Safety engineering processes 338
12.4 Safety cases 347
Chapter 13 Security engineering 359
13.1 Security and dependability 362
13.2 Security and organizations 366
13.3 Security requirements 368
13.4 Secure systems design 374
13.5 Security testing and assurance 388
Chapter 14 Resilience engineering 394
14.1 Cybersecurity 398
14.2 Sociotechnical resilience 402
14.3 Resilient systems design 410
Part 3 Advanced Software Engineering 421
Chapter 15 Software reuse 423
15.1 The reuse landscape 426
15.2 Application frameworks 429
15.3 Software product lines 432
15.4 Application system reuse 439
Chapter 16 Component-based software engineering 450
16.1 Components and component models 453
16.2 CBSE processes 459
16.3 Component composition 466
Chapter 17 Distributed software engineering 476
17.1 Distributed systems 478
17.2 Client–server computing 485
17.3 Architectural patterns for distributed systems 487
17.4 Software as a service 498
Chapter 18 Service-oriented software engineering 506
18.1 Service-oriented architecture 510
18.2 RESTful services 515
18.3 Service engineering 519
18.4 Service composition 527
Chapter 19 Systems engineering 537
19.1 Sociotechnical systems 542
19.2 Conceptual design 549
19.3 System procurement 552
19.4 System development 556
19.5 System operation and evolution 560
Chapter 20 Systems of systems 566
20.1 System complexity 570
20.2 Systems of systems classification 573
20.3 Reductionism and complex systems 576
20.4 Systems of systems engineering 579
20.5 Systems of systems architecture 585
Chapter 21 Real-time software engineering 596
21.1 Embedded system design 599
21.2 Architectural patterns for real-time software 606
21.3 Timing analysis 612
21.4 Real-time operating s
你還可能感興趣
我要評論
|