《軟件設計和體系結構/21世紀高等學校規劃教材·軟件工程》全面系統地講述軟件設計和體系結構的相關思想、理論和方法,并提供了來自業界的最新研究內容和進展。全書共包含14章,第1章是軟件工程和軟件設計概述,第2章至第14章講述軟件模型和描述、軟件體系結構建模和UML、軟件設計過程、軟件體系結構風格、面向對象的軟件設計方法、面向數據流的軟件設計方法、用戶界面分析與設計、設計模式、Web服務體系結構、基于分布構件的體系結構、軟件體系結構評估、軟件設計的進化、云計算的體系結構。
《軟件設計和體系結構/21世紀高等學校規劃教材·軟件工程》條理清晰、語言流暢、通俗易懂,在內容組織上力求自然、合理、循序漸進,并提供了豐富的實例和實踐要點,使讀者更好地把握軟件工程學科的特點,更容易理解所學的理論知識,掌握軟件設計和體系結構的應用。
《軟件設計和體系結構/21世紀高等學校規劃教材·軟件工程》可作為高等學校的軟件工程專業、計算機應用專業和相關專業的教材,并可作為其他各類軟件工程技術人員的參考書。
計算機語言C++的發明人Bjarne Stroustrup這樣說道: “人類的文明運行于軟件之上。”在過去的半個世紀里,軟件已成為構建我們這個世界的深入滲透的人工產品。以前,軟件工程師致力于如何操縱計算機,使其正常工作并正確地解決問題,當時軟件的核心是數據的組織和算法的實現。如今,越來越多的底層工作,像內存管理、網絡通信等,都已實現自動化了,或者可以用更少的代碼來重用。這樣,軟件工程師就無須在機器代碼中埋頭苦干,而是使用高級編程語言、集成開發工具把更多的問題留給軟件本身。隨著軟件的功能越來越強,使用越來越方便,規模和復雜程度越來越高,無論是大型的電信網絡管理系統,還是大規模應用的互聯網架構,以及企業級的ERP軟件,構建軟件系統比起以前更加困難。
解決這些復雜、困難問題的關鍵,正是軟件設計和體系結構。
作為軟件開發的核心活動之一,軟件設計對開發出滿足需求的高質量軟件起關鍵作用。軟件設計需要綜合考慮軟件系統的各種約束條件,并給出相應方案,因此,及早發現軟件設計中存在的錯誤將極大地減少修復成本、維護成本。程序設計方法的快速發展和應用程序的大量部署,使現有計算機系統內部的代碼構成差異很大。須知,應用軟件市場競爭的加劇對更快的用戶需求交付、更多的系統功能、更可靠的性能要求越來越高,于是就有了復用現有的系統代碼、代碼外包,以及采購商品化構件進行系統集成。在這種大環境下,很多軟件工程師都不能很舒服地采用一種程序設計方法,從頭開始,按照詳細設計書進行開發,而是從閱讀、維護或遷移各種已有的系統代碼、外包代碼進行程序設計。各種程序設計方法隱藏在不同來源的代碼中,要理解、復用、改造這些代碼,軟件工程師應全面了解各種方法的優點和局限,因為不存在一種放之四海而皆準的程序設計方法,各種方法都有其長處和短處。例如,更抽象和高級的方法,在帶來開發效率提高的同時,往往會導致執行效率的降低; 更低級和離硬件近的方法,盡管可能學習時間短,但是適應面受到了限制。適合的才是最好的,軟件工程師需要根據自己的情況,分析、選擇適合的程序設計方法。
軟件如同建筑,它的設計不能脫離實用價值。今天,“軟件架構師”這個在軟件領域負責軟件設計、分析、處理來自不同涉眾、不同關注點和需求關系的職位,已經被普遍認為是軟件開發團隊的核心。在軟件工程方法中,需求和設計之間存在著一條很難逾越的鴻溝,從而很難有效地將需求轉換為相應的設計,軟件體系結構的出現,在軟件需求與軟件設計之間架起了一座“橋梁”,由此實現了軟件系統的結構和需求向實現的平坦過渡。軟件體系結構是軟件架構師洞見系統內部結構、規律、原則、邏輯的過程。作為系統整體設計的刻畫,軟件體系結構包括全局組織與控制結構,構件間通信、同步、數據訪問的協議,設計元素間的功能分配,物理分布,設計元素集成,伸縮性和性能,設計選擇等。軟件項目開發首先需要一個健壯、優雅、靈活、易維護的軟件體系結構。正因為如此,軟件體系結構討論如何快速、可靠地復用構件構造系統的方式,著重于軟件系統自身的整體結構和構件間的互聯,主要包括軟件體系結構的原理和風格、軟件體系結構的描述和規約、特定領域的軟件體系結構、基于軟件體系結構的構件組裝機制等。
全書由秦航任主編,第1、14章由秦航編寫,第2章由包小軍編寫,第3、9章由夏浩波編寫,第4、6章由邱林編寫,第5、7、11章由張健編寫,第8、10章由徐杏芳編寫,第12、13章由胡森森編寫,付盈參與了第5、9、13章的編寫。全書由秦航負責統稿,由王同喜主審。借此機會,作者謹向為本書付出辛勤勞動和智慧的老師和同仁表示誠摯的謝意。
本書可作為高等院校“軟件設計與體系結構”課程的教材或教學參考書,也可供有一定實際經驗的軟件工程人員和需要開發應用軟件的廣大計算機用戶閱讀參考。由于作者水平有限,書中不當與錯誤之處在所難免,敬請讀者和專家提出寶貴的意見,以幫助本書不斷地改進和完善。
編者2013年10月
第1章 軟件工程和軟件設計概述
1.1 軟件
1.1.1 軟件的本質
1.1.2 軟件神話
1.2 軟件工程
1.2.1 軟件工程基礎知識
1.2.2 軟件過程和軟件工程實踐
1.2.3 網絡環境帶來的影響
1.3 軟件設計
1.3.1 軟件工程中的設計
1.3.2 設計過程和設計質量
1.3.3 軟件設計原則
1.4 軟件體系結構
1.4.1 什么是軟件體系結構
1.4.2 軟件體系結構的內容 第1章 軟件工程和軟件設計概述
1.1 軟件
1.1.1 軟件的本質
1.1.2 軟件神話
1.2 軟件工程
1.2.1 軟件工程基礎知識
1.2.2 軟件過程和軟件工程實踐
1.2.3 網絡環境帶來的影響
1.3 軟件設計
1.3.1 軟件工程中的設計
1.3.2 設計過程和設計質量
1.3.3 軟件設計原則
1.4 軟件體系結構
1.4.1 什么是軟件體系結構
1.4.2 軟件體系結構的內容
1.4.3 設計階段的軟件體系結構
1.5 小結
1.6 思考題
第2章 軟件模型和描述
2.1 什么是軟件模型
2.2 軟件模型的發展歷程
2.3 軟件模型解析
2.3.1 功能模型
2.3.2 對象模型
2.3.3 組件模型
2.3.4 配置型組件模型
2.3.5 服務模型
2.3.6 抽象模型
2.4 深入認識軟件模型
2.4.1 軟件體系結構的描述
2.4.2 軟件體系結構的設計
2.5 體系結構描述語言
2.5.1 ADL簡介
2.5.2 幾種典型ADL的比較
2.5.3 描述體系結構行為
2.6 小結
2.7 思考題
第3章 軟件體系結構建模和UML
3.1 軟件體系結構建模概述
3.2 基于軟件體系結構的開發
3.3 UML概述
3.3.1 UML的發展歷程
3.3.2 UML的特點和用途
3.3.3 UML2.0的建模機制
3.4 面向對象方法
3.4.1 面向對象方法中的基本概念
3.4.2 面向對象方法的優勢
3.5 UML2.0中的結構建模
3.5.1 類圖
3.5.2 對象圖
3.5.3 構件圖
3.5.4 部署圖
3.6 UML2.0中的行為建模
3.6.1 用例圖
3.6.2 順序圖
3.6.3 通信圖
3.6.4 交互概覽圖
3.6.5 時序圖
3.6.6 狀態圖
3.6.7 活動圖
3.7 小結
3.8 思考題
第4章 軟件設計過程
4.1 軟件設計基礎
4.2 軟件體系結構設計
4.3 高可信軟件設計
4.3.1 可信軟件的特點
4.3.2 容錯設計
4.3.3 軟件失效模式和影響分析
4.3.4 軟件故障樹分析
……
第5章 軟件體系結構風格
第6章 面向對象的軟件設計方法
第7章 面向數據流的軟件設計方法
第8章 用戶界面分析與設計
第9章 設計模式
第10章 Web服務體系結構
第11章 基于分布構件的體系結構
第12章 軟件體系結構評估
第13章 軟件設計的進化
第14章 云計算的體系結構