軟體工程包含一系列軟體開發的基本原理、方法和實踐經驗,用來指導人們進行正确的軟體開發。軟體工程強調從工程化的原理出發,按照标準化規程和軟體開發實踐來引導軟體開發人員進行軟體開發和實踐活動,并進行過程改進,促進軟體企業向标準化和成熟化的方向發展。軟體工程是一門理論與實踐相結合的學科,更注重通過實踐來了解原理和方法。為此,我們結合多年的軟體工程教學和項目開發經驗,通過5個項目執行個體,從不同的角度、利用不同的方法學來循序漸進地介紹軟體開發過程中所涉及的原理、方法和技術。本書的另一個特色是從問題的角度引導學生根據自己的體會來讨論軟體開發過程中的問題,進而了解軟體工程的概念和原理,總結出一些有效的方法和實踐經驗。
本書強調以問題為引導的軟體工程所涉及的概念和方法,進而讨論具體的過程及其優缺點,并結合具體案例進行解析,讓學生對問題産生的原因和新方法的提出有更深入的了解,還支援學生進行深入閱讀。
我們将傳統的結構化方法學和面向對象方法學分開介紹,這有利于學生了解二者的本質差別,厘清其分析與設計模型的不同特點,進而針對不同的項目來選擇不同的開發方法學和過程。從結構化到面向對象的路線也便于學生逐漸接受軟體開發的思想和本質。
結構化方法學。重點讨論開發過程、原理和方法,這些都可以推廣到面向對象的開發範型中。最後通過胰島素輸送這一高要求系統案例介紹如何将這些方法應用到實踐中。
面向對象方法學。重點讨論面向對象分析模型和設計模型的建構,強調它們之間的關系,抓住面向對象模型開發的要點,通過uml模組化語言來描述分析和設計模型,進一步加深學生對面向對象模型本質的了解,同時也清楚其适用的情況。最後通過pos機這一複雜系統案例幫助學生掌握面向對象分析與設計的主要思想。
本書還注重大學生研究性教學實踐,針對現代軟體開發方法—靈活方法,重點介紹結對程式設計,在幫助學生了解結對程式設計思想的同時,分析其中存在的問題和解決方法,結合系統需求進行設計、實作與測試。通過這一過程可達到研究性教學的目的,也可将結對程式設計作為學期項目。
本書分為四個部分,共14章内容。第一部分“軟體工程基礎”(第1~4章)主要從軟體危機引出軟體工程的基本概念和基本原理,介紹軟體開發的工程化思想和開發過程等。第二部分“結構化分析、設計與測試”(第5~9章)針對傳統結構化的軟體開發方法學,主要介紹其基本概念、分析與設計過程、分析與設計模型、軟體測試原理和技術、高要求系統的分析與設計方法等。第三部分“面向對象分析、設計與測試”(第10~12章)将介紹面向對象方法學的基本概念、用例分析模型及其設計過程、面向對象分析與設計模型、面向對象的實作以及測試技術。第四部分“軟體維護與項目管理”(第13、14章)主要介紹軟體維護政策與方法、軟體項目管理概念與原理、軟體成本估算以及項目計劃與管理。
由于本書分别介紹了傳統的結構化方法學和面向對象方法學兩大體系,是以專門選擇了适合不同方法學的具有代表性的案例進行研究,以便讀者能夠深入了解其各自的優勢。這些案例中既有簡單常見的應用系統,如面對面結對程式設計系統和atm系統;也有比較實用的系統,如pos機系統;還有一些稍微複雜的系統,如分布式結對程式設計系統和胰島素輸送系統。這些系統由簡單到複雜,循序漸進,引導學生逐漸了解系統的開發過程和關鍵問題。
面對面結對程式設計系統是一個輔助學生進行結對程式設計和學習的系統,該系統支援角色交換、資訊統計和相容性分析等功能,克服了程式設計過程中的一些不便,如交換位置、互相幹擾等。同時,該系統采用一台主機支援結對,還具有節約實驗室建設費用等優點。
pos機系統是電子收款機系統的簡稱,通過計算機來處理銷售和支付資訊。該系統包括計算機終端、條碼掃描器、現金抽屜、票據列印機等硬體以及支援系統運轉的軟體,能夠為不同服務的應用程式提供接口。收銀員通過條碼掃描器讀取的或鍵盤輸入的商品條碼号來記錄商品資訊,系統自動計算銷售總價。收銀員通過系統能夠處理支付,包括現金支付、信用卡支付和支票支付。經理通過系統能夠處理顧客退貨。
atm系統即自動櫃員機系統,能夠自動處理銀行儲戶的各種業務,如取款、存款、轉賬、查詢、修改密碼等。atm軟體系統使客戶能夠直接通路銀行計算機完成交易,無需銀行從業人員的介入。
分布式結對程式設計系統支援跨地域的結對程式設計或學習。為了支援異地結對者像在本地一樣友善地工作,系統通過文本、音頻和視訊進行交流。系統與內建開發環境進行內建,包括vc++、eclipse等開發環境。系統支援角色交換,但通常不嚴格遵循“驅動者”和“領航者”的角色,是以分布結對程式設計的工具應該允許合作者很容易地通路控制鍵盤。
胰島素輸送系統是關于人體胰腺操作(一種體内組織)的仿真,其目标是幫助那些糖尿病患者控制血糖水準。該系統用于監控血糖濃度,根據需要輸送正确劑量的胰島素,對安全性的要求非常高。
前言
<a href="https://yq.aliyun.com/articles/89577">第一部分 軟體工程基礎</a>
<a href="https://yq.aliyun.com/articles/89579">第1章 軟體工程概述</a>
<a href="https://yq.aliyun.com/articles/89579">1.1 引言</a>
<a href="https://yq.aliyun.com/articles/89579">1.2 什麼是軟體</a>
1.2.1 軟體的定義與特性
1.2.2 軟體技術的演化
<a href="https://yq.aliyun.com/articles/89598">1.3 什麼是軟體工程</a>
1.3.1 軟體危機
1.3.2 解決軟體危機的途徑
1.3.3 軟體工程的定義
<a href="https://yq.aliyun.com/articles/89604">1.4 軟體工程的基本原理與基本原則</a>
1.4.1 基本原理
1.4.2 基本原則
<a href="https://yq.aliyun.com/articles/89609">1.5 軟體工程開發方法學</a>
1.5.1 結構化開發方法學
1.5.2 面向對象開發方法學
1.5.3 重型軟體工程與輕型軟體工程
<a href="https://yq.aliyun.com/articles/89613">1.6 小結</a>
習題
<a href="https://yq.aliyun.com/articles/89617">第2章 軟體過程</a>
<a href="https://yq.aliyun.com/articles/89617">2.1 引言</a>
<a href="https://yq.aliyun.com/articles/89635">2.2 什麼是軟體過程</a>
2.2.1 軟體過程的定義
2.2.2 軟體過程架構
<a href="https://yq.aliyun.com/articles/89644">2.3 軟體産品與過程</a>
<a href="https://yq.aliyun.com/articles/89651">2.4 軟體生存周期</a>
<a href="https://yq.aliyun.com/articles/89655">2.5 軟體工程活動</a>
<a href="https://yq.aliyun.com/articles/89658">2.6 小結</a>
<a href="https://yq.aliyun.com/articles/89664">第3章 軟體過程模型</a>
<a href="https://yq.aliyun.com/articles/89664">3.1 引言</a>
<a href="https://yq.aliyun.com/articles/89669">3.2 什麼是軟體過程模型</a>
<a href="https://yq.aliyun.com/articles/89681">3.3 傳統的軟體過程模型</a>
3.3.1 瀑布模型
3.3.2 增量模型
3.3.3 螺旋模型
<a href="https://yq.aliyun.com/articles/89691">3.4 面向對象模型</a>
3.4.1 構件內建模型
3.4.2 統一過程模型
<a href="https://yq.aliyun.com/articles/89696">3.5 小結</a>
第4章 靈活軟體開發方法
4.1 引言
4.2 靈活軟體開發過程
4.2.1 靈活過程
4.2.2 靈活開發原則
4.3 scrum開發過程
4.3.1 scrum的特點
4.3.2 scrum模型與過程
4.4 極限程式設計
4.4.1 什麼是極限程式設計
4.4.2 極限程式設計的要素
4.5 結對程式設計
4.5.1 什麼是結對程式設計
4.5.2 結對程式設計的優勢分析
4.5.3 結對程式設計的分類
4.5.4 結對程式設計的方式
4.6 小結
第二部分 結構化分析、設計與測試
第5章 軟體需求分析
5.1 引言
5.2 什麼是軟體需求
5.3 需求分析過程
5.4 會談技術
5.4.1 非正式會談
5.4.2 正式會談
5.5 調查技術
5.5.1 确定調查内容
5.5.2 可靠可信分析
5.6 場景分析技術
5.7 小結
第6章 結構化分析
6.1 引言
6.2 結構化分析模型
6.3 面向資料流的模組化方法
6.3.1 資料流模組化方法
6.3.2 執行個體分析
6.4 面向資料的模組化方法
6.4.1 資料模組化方法
6.4.2 執行個體分析
6.5 面向狀态的模組化方法
6.5.1 狀态模組化方法
6.5.2 執行個體分析
6.6 規格說明書編寫示例
6.7 小結
第7章 結構化設計
7.1 引言
7.2 軟體設計過程
7.3 軟體子產品化設計
7.4 軟體結構
7.5 結構化概要設計
7.5.1 資料流模型
7.5.2 資料流設計方法
7.5.3 執行個體分析
7.6 概要設計文檔編寫示例
7.7 詳細設計
7.8 結構化詳細設計
7.9 詳細設計文檔編寫示例
7.10 編碼實作
7.10.1 編碼語言
7.10.2 編碼風格
7.11 小結
第8章 結構化軟體測試
8.1 引言
8.2 軟體測試的目的和原則
8.3 軟體測試的基本過程
8.3.1 單元測試
8.3.2 內建測試
8.3.3 确認測試
8.3.4 系統測試
8.4 測試用例設計
8.5 黑盒測試技術
8.5.1 等價類劃分
8.5.2 邊界值分析
8.5.3 錯誤推測
8.5.4 因果圖
8.6 白盒測試技術
8.6.1 邏輯覆寫
8.6.2 路徑覆寫
8.6.3 循環路徑測試政策
8.7 內建測試技術
8.7.1 內建政策
8.7.2 性能測試
8.7.3 執行個體分析
8.8 調試技術
8.8.1 調試過程
8.8.2 調試政策
8.9 軟體測試文檔
8.9.1 軟體測試計劃文檔
8.9.2 內建測試文檔
8.10 小結
第9章 高要求系統的分析與設計
9.1 引言
9.2 什麼是高要求系統
9.3 高要求系統的需求分析
9.3.1 風險需求描述
9.3.2 安全性描述
9.3.3 資訊安全描述
9.3.4 軟體可靠性描述
9.3.5 胰島素輸送系統完整的需求描述
9.4 形式化描述方法
9.4.1 軟體過程中的形式化描述
9.4.2 接口描述方法
9.4.3 行為描述
9.5 高要求系統的設計
9.6 高要求系統的開發
9.7 系統驗證
9.7.1 可靠性驗證
9.7.2 安全性保證
9.7.3 資訊安全評估
9.8 小結
第三部分 面向對象分析、設計與測試
第10章 面向對象分析
10.1 引言
10.2 面向對象模型
10.3 uml
10.3.1 uml的組成
10.3.2 uml的視圖
10.4 面向對象分析過程
10.5 用例驅動分析
10.5.1 用例模組化分析
10.5.2 開發活動圖
10.5.3 開發泳道圖
10.6 領域與業務模組化
10.6.1 識别業務類和領域類
10.6.2 業務類圖
10.6.3 識别屬性和操作
10.6.4 開發協作圖
10.6.5 開發包圖
10.6.6 邏輯架構
10.7 系統行為模組化
10.7.1 系統順序圖
10.7.2 建立操作契約
10.7.3 建立順序圖
10.7.4 系統狀态圖
10.8 pos機系統案例分析
10.9 分布式結對程式設計系統分析
10.9.1 項目概述
10.9.2 功能描述
10.9.3 邏輯分析與模組化
10.10 小結
第11章 面向對象設計
11.1 引言
11.2 面向對象設計模型
11.3 構件設計
11.3.1 構件設計的步驟
11.3.2 構件設計的原則
11.4 并發性設計
11.5 設計模式
11.5.1 基于職責的設計
11.5.2 常見的設計模式
11.6 面向對象詳細設計
11.6.1 模型精化
11.6.2 邏輯架構精化設計
11.6.3 分層設計
11.6.4 類操作設計
11.7 方法設計
11.8 精化設計
11.9 資料存儲與持久性設計
11.10 部署設計與構件圖
11.11 小結
第12章 面向對象實作與測試
12.1 引言
12.2 面向對象實作
12.3 pos機系統實作
12.4 分布式結對程式設計系統實作
12.5 面向對象測試
12.6 面向對象測試政策
12.7 測試驅動開發
12.7.1 什麼是測試驅動開發
12.7.2 測試驅動開發的步驟
12.7.3 編寫測試程式
12.7.4 代碼重構
12.8 小結
第四部分 軟體維護與項目管理
第13章 軟體維護
13.1 引言
13.2 軟體的可維護性
13.3 軟體維護的類型
13.4 軟體維護方法
13.5 提高軟體的可維護性
13.5.1 結構化維護與非結構化維護
13.5.2 提高軟體可維護性的技術途徑
13.6 小結
第14章 軟體項目管理
14.1 引言
14.2 軟體項目組織
14.3 軟體過程管理
14.3.1 軟體過程度量
14.3.2 軟體過程改進
14.3.3 軟體項目度量
14.4 軟體項目風險管理
14.4.1 風險識别
14.4.2 風險預測
14.4.3 風險管理
14.5 軟體配置管理
14.5.1 基本概念
14.5.2 軟體配置管理過程
14.6 軟體項目估算
14.6.1 軟體項目資源
14.6.2 軟體規模度量
14.6.3 估算管理
14.7 分解技術
14.7.1 基于問題分解的估算
14.7.2 基于過程分解的估算
14.8 經驗估算技術
14.8.1 專家類比推斷
14.8.2 中級cocomo估算模型
14.9 軟體品質管理
14.9.1 軟體品質保證
14.9.2 軟體品質度量
14.10 項目進度管理
14.10.1 項目進度管理計劃
14.10.2 進度安排
14.10.3 進度跟蹤管理
14.11 小結