軟件設計與體系結構從CDIO工程理念出發,圍繞構思(Conceive)、設計(Design)、實現(Implement)、運作(Operate)四個方面展開闡述,以一種嶄新的視角展現軟件設計和體系結構的內容,盡可能做到覆蓋面廣和內容新穎,在保持經典內容的基礎上,力求提供來自業界最新的內容和進展。構思(C)給出一個軟件要做什么的總體思路;設計(D)給出一個軟件怎么做的方法和手段;實現(I)給出一個軟件實際做出來的實現技術和路線;運作(O)給出一個軟件如何成功運作的模式和方法。CDIO各個部分相對獨立但又互有聯系,能夠讓讀者以全面的、主動的和實用的方式學習和掌握相關內容,并著重強調工程實踐訓練和綜合能力培養。軟件設計與體系結構可作為計算機相關專業本科生和研究生的教材,同時也是軟件工程領域專業人員的優秀參考讀物。
第一篇 構思篇(Conceive)
第1章 軟件環境
1.1 軟件與軟件分類
1.1.1 軟件的特點
1.1.2 軟件的分類
1.2 程序設計語言與開發環境
1.2.1 程序設計語言
1.2.2 開發環境
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.5.1 軟件過程模型
1.5.2 軟件工程經濟學
1.5.3 軟件過程管理
1.5.4 軟件維護及演化
1.6 習題與思考題
第2章 軟件需求
2.1 軟件需求與需求工程概述
2.1.1 需求的定義
2.1.2 需求工程概述
2.2 需求獲取
2.2.1 引言
2.2.2 需求獲取的實質
2.2.3 常用方法
2.3 需求建模與分析
2.3.1 面向對象建模
2.3.2 過程建模
2.3.3 數據建模
2.4 需求規約與驗證
2.4.1 需求規約
2.4.2 需求驗證
2.5 需求管理
2.6 習題與思考題
第3章 軟件體系結構
3.1 “4+1”視圖模型
3.1.1 邏輯視圖
3.1.2 開發視圖
3.1.3 進程視圖
3.1.4 物理視圖
3.1.5 場景
3.2 軟件體系結構的定義
3.3 軟件體系結構的核心模型
3.4 軟件體系結構描述方法
3.5 軟件體系結構描述語言(ADL)
3.6 軟件體系結構設計原則
3.7 基于體系結構的軟件開發過程
3.8 軟件體系結構的風格
3.8.1 管道-過濾器風格
3.8.2 分層風格
3.8.3 客戶/服務器風格
3.8.4 瀏覽器/服務器風格
3.8.5 事件驅動風格
3.9 體系結構模式
3.9.1 從混沌到結構
3.9.2 分布式系統
3.9.3 交互系統
3.9.4 適應性系統
3.10 習題與思考題
第二篇 設計篇(Design)
第4章 軟件設計
4.1 設計目標及要素
4.2 設計原則
4.2.1 抽象化
4.2.2 模塊化
4.2.3 信息隱藏
4.2.4 模塊的功能獨立性
4.2.5 降低模塊間耦合度的方法
4.3 設計規約
4.4 設計方法
4.4.1 結構化設計方法
4.4.2 面向對象的設計
4.5 習題與思考題
第5章 統一建模語言UML
5.1 UML核心概念
5.1.1 元素
5.1.2 具名元素
5.1.3 命名空間
5.1.4 可打包元素
5.1.5 可重定義元素
5.1.6 分類器
5.1.7 特性
5.1.8 注解
5.1.9 關系
5.2 UML關鍵字與版型
5.2.1 關鍵字
5.2.2 版型
5.3 UML圖示
5.3.1 類圖
5.3.2 對象圖
5.3.3 包圖
5.3.4 組件圖
5.3.5 合成結構圖
5.3.6 部署圖
5.3.7 用例圖
5.3.8 活動圖
5.3.9 狀態機圖
5.3.10 交互圖
5.3.11 順序圖
5.3.12 通信圖
5.3.13 計時圖
5.4 習題與思考題
第6章 設計模式
6.1 模式思維方法
6.1.1 模式的概念
6.1.2 模式的重要性
6.1.3 軟件設計模式的分類
6.1.4 模式描述模板
6.1.5 模式思維的步驟
6.2 設計模式概述
6.2.1 創建型模式
6.2.2 結構型模式
6.2.3 行為型模式
6.3 習題與思考題
第7章 軟件復用
7.1 概述
7.1.1 概念
7.1.2 軟件復用的發展
7.1.3 可復用的軟件制品
7.1.4 軟件復用的分類
7.1.5 軟件復用的困難與建議
7.1.6 軟件復用的宗旨
7.2 分析復用
7.2.1 分析過程復用
7.2.2 分析制品復用
7.3 設計復用
7.3.1 設計過程復用
7.3.2 基于構件的設計復用
7.4 代碼復用
7.5 測試復用
7.5.1 面向復用的測試用例設計過程
7.5.2 復用測試用例描述要素
7.6 習題與思考題
第8章 軟件界面設計
8.1 軟件界面設計概述
8.1.1 軟件界面分析
8.1.2 軟件界面開發過程
8.1.3 軟件界面設計基本原則
8.2 人機界面基礎知識
8.2.1 認知心理學
8.2.2 軟件人機工程學
8.2.3 藝術設計
8.3 界面的定量分析
8.3.1 GOMS擊鍵層模型
8.3.2 界面效率的測量
8.3.3 Fitts律和Hick律
8.4 人本界面
8.4.1 認知和關注點
8.4.2 界面模式與單調性
8.4.3 統一性和元動作
8.4.4 易用性和幫助機制
8.5 移動設備界面設計
8.6 習題與思考題
第三篇 實現篇(Implement)
第9章 Web開發技術
9.1 Web開發概述
9.1.1 運作原理及概念
9.1.2 開發語言及技術概述
9.1.3 Web應用的特點
9.2 Web服務器
9.2.1 Microsoft IIS
9.2.2 Apache
9.2.3 Tomcat
9.2.4 J2EE服務器
9.2.5 Nginx
9.3 服務器端開發技術及框架
9.3.1 Java技術
9.3.2 .Net技術
9.3.3 PHP技術
9.3.4 Ruby技術
9.3.5 MVC框架
9.3.6 Spring框架
9.4 Web前端開發技術
9.4.1 HTML
9.4.2 CSS層疊樣式表
9.4.3 JavaScript技術
9.4.4 AJAX技術
9.4.5 Silverlight技術
9.5 習題與思考題
第10章 數據庫開發技術
10.1 SQL語言
10.2 數據庫和表
10.2.1 創建及刪除數據庫
10.2.2 創建表
10.2.3 修改表
10.2.4 刪除表
10.3 索引
10.3.1 創建索引
10.3.2 刪除索引
10.4 查詢
10.4.1 SELECT語句
10.4.2 多表查詢
10.4.3 子查詢
10.4.4 集合運算
10.4.5 聚集函數
10.5 數據維護
10.5.1 插入
10.5.2 更新
10.5.3 刪除
10.6 視圖
10.6.1 創建視圖
10.6.2 刪除視圖
10.7 游標
10.7.1 聲明游標
10.7.2 打開和關閉游標
10.7.3 刪除游標
10.7.4 應用游標
10.8 存儲過程
10.8.1 存儲過程創建與修改
10.8.2 執行存儲過程
10.8.3 刪除存儲過程
10.9 觸發器
10.9.1 創建觸發器
10.9.2 刪除觸發器
10.10 習題與思考題
第11章 軟件成本估算技術
11.1 軟件成本估算的步驟
11.1.1 建立目標
11.1.2 計劃所需的數據與資源
11.1.3 準確說明軟件需求
11.1.4 盡可能詳細地做出估算
11.1.5 采用多個獨立的方法與資源
11.1.6 比較與迭代估算
11.1.7 跟蹤與變更
11.2 軟件成本估算的方法
11.2.1 算法模型
11.2.2 專家判斷
11.2.3 通過推理來進行估算
11.2.4 帕金森估算
11.2.5 價格策略估算
11.2.6 自頂向下估算
11.2.7 自底向上估算
11.2.8 各方法的總結比較
11.3 基本COCOMO模型軟件成本估算
11.3.1 模型定義與假設
11.3.2 軟件開發模式分類
11.3.3 組織型基本COCOMO模型
11.3.4 其他模式COCOMO模型
11.4 習題與思考題
第12章 軟件架構技術
12.1 構件技術
12.1.1 軟件構件技術基礎
12.1.2 基于構件的軟件工程
12.2 軟件架構綜述
12.2.1 企業架構
12.2.2 業務架構
12.2.3 應用架構
12.2.4 信息架構
12.3 中間件
12.3.1 中間件的目標及地位
12.3.2 中間件的基本類型
12.3.3 常見中間件技術介紹
12.4 習題與思考題
第13章 軟件集成技術
13.1 軟件合成與軟件集成
13.2 軟件集成模式
13.2.1 集成適配器模式
13.2.2 集成消息器模式
13.2.3 集成正面模式
13.2.4 集成媒介器模式
13.3 企業應用集成
13.3.1 EAI的產生和意義
13.3.2 企業應用系統的分類
13.3.3 企業應用集成的基本原則
13.4 數據集成
13.4.1 數據集成的基本概念
13.4.2 參考數據模型
13.4.3 數據集成的元數據管理
13.5 基于消息服務的集成框架
13.5.1 消息傳輸模型
13.5.2 消息代理任務
13.5.3 消息代理拓撲結構
13.5.4 消息代理產品的選擇
13.5.5 使用J2EE的企業消息傳遞
13.6 過程集成
13.6.1 工作流和工作流管理系統
13.6.2 跨組織過程集成
13.7 習題與思考題
第14章 軟件測試技術
14.1 軟件測試概述
14.1.1 軟件測試技術的發展
14.1.2 軟件開發與軟件測試
14.1.3 軟件測試基本原理與原則
14.1.4 軟件測試模型
14.1.5 測試心理學
14.1.6 測試覆蓋
14.2 軟件測試管理
14.2.1 質量改進模型PDCA
14.2.2 測試需求
14.2.3 測試計劃
14.2.4 測試設計及測試用例
14.2.5 測試執行
14.2.6 測試記錄與跟蹤
14.2.7 回歸測試
14.2.8 總結與報告
14.3 軟件測試技術
14.3.1 黑盒測試與白盒測試
14.3.2 手工測試與自動化測試
14.3.3 單元測試
14.3.4 數據庫性能檢查
14.3.5 壓力測試
14.3.6 安全性測試
14.3.7 安裝測試
14.3.8 環境測試
14.4 測試工具
14.5 習題與思考題
第四篇 運作篇(Operate)
第15章 軟件架構師角色與職責
15.1 軟件架構師的定義
15.2 軟件架構師的工作場景
15.3 軟件架構師的角色
15.4 軟件架構師與其他角色的關系及區別
15.4.1 軟件架構師與產品經理的關系及區別
15.4.2 軟件架構師與項目經理的關系及區別
15.4.3 軟件架構師與系統分析員的關系及區別
15.5 軟件架構師的職責
15.6 軟件架構師的所應具備的能力
15.7 軟件架構師的工作評價標準
15.8 習題與思考題
第16章 軟件運作模式
16.1 軟件企業的崛起
16.1.1 大型科研項目的研究是軟件業的萌芽
16.1.2 獨立軟件產品的出現預示軟件業開始步入正軌
16.1.3 企業解決方案讓軟件業開始興盛
16.1.4 個人電腦及互聯網的普及讓軟件業繁榮
16.2 傳統的軟件運作模式
16.3 基于Free的運作模式
16.3.1 自由軟件
16.3.2 免費軟件
16.3.3 共享軟件
16.3.4 案例
16.4 基于開源的運作模式
16.4.1 開源軟件
16.4.2 開源軟件盈利模式
16.4.3 案例
16.5 基于服務的運作模式
16.5.1 軟件企業職能轉變
16.5.2 基礎設施即服務(IaaS)
16.5.3 平臺即服務(PaaS)
16.5.4 軟件即服務(SaaS)
16.6 習題與思考題
第17章 案例分析
17.1 Google搜索引擎
17.1.1 營銷模式
17.1.2 運作分析
17.2 Twitter
17.2.1 營銷模式
17.2.2 運作分析
17.3 Facebook
17.3.1 營銷模式
17.3.2 運作分析
17.4 淘寶
17.4.1 營銷模式
17.4.2 運作分析
17.5 習題與思考題
參考文獻
第1章 軟件環境
11 軟件與軟件分類
軟件(Software)是用戶與硬件之間的接口界面,用戶主要是通過軟件與計算機進行交流。軟件是計算機系統設計的重要依據。為了方便用戶,為了使計算機系統具有較高的總體效用,在設計計算機系統時,必須全局考慮軟件與硬件的結合,以及用戶的要求和軟件的要求。來自眾多教材的關于軟件的定義一般包含如下三方面內容:
(1)指令的集合(也稱為計算機程序),通過執行這些指令可以滿足預期的特征、功能和性能需求。
(2)數據結構,它使程序可以充分利用信息。
(3)描述程序功能需求以及程序如何操作和使用的文檔。因而可以認為軟件=程序+數據+文檔
中華人民共和國國家標準軟件工程術語GB/T11457―1995對軟件的定義是:與計算機系統的操作有關的程序、規程、規則及任何與之有關的文檔。對于計算機來說,硬件就如同是一個人的身軀,軟件就如同一個人的思想和靈魂。
111 軟件的特點軟件作為一個產品或服務,與其他產品相比具有很大的區別,具體表現如下特點:
(1)軟件是一種邏輯實體,不是具體的物理實體,它具有抽象性。軟件的好壞與否,正確與否,必須通過測試、分析、思考、判斷之后才知道。這一特性就給軟件的設計、生產和管理帶來了很多困難。
(2)軟件產品的生產主要是研制,是知識的結晶,不像傳統意義上的硬件制造有明顯的制造過程,在軟件的開發過程中沒有明顯的制造過程。
(3)軟件具有“復雜性”,其開發和運行常受到計算機系統的限制,對計算機系統有著不同程度的依賴性。為了消除這種依賴性,引入了軟件移植,并把可移植性當做衡量軟件質量的因素之一。
(4)軟件的生產職能由人采用人工方式來生產,還未完全擺脫手工開發方式,成本昂貴。所以為了加快軟件技術的發展,就必須提出和采用新的軟件開發方法。例如,可以采用軟件復用技術或者使用有效的軟件開發環境提高軟件開發效率。
(5)在軟件的運行和使用期間,沒有硬件那樣的機械磨損和老化問題,但存在退化問題,由于修改及需求的變化導致退化。硬件故障率曲線是一個U形曲線(即為浴盆曲線,在產品整個使用壽命期間,典型的故障率變化曲線,形似浴盆),說明硬件隨著使用時間的增加,故障率也急劇上升)。
軟件故障率曲線,沒有U形曲線的右半部分說明軟件不會隨著使用時間的增加使得故障率增加,所以軟件不存在磨損和老化