《軟件工程》全面系統地講述了軟件工程的概念、原理和典型的方法,以及軟件項目的管理技術和軟件工程的新方法。主要內容包括軟件生命周期各階段的任務、過程、結構化方法和面向對象方法,軟件項目管理相關技術及工具,軟件工程應用中的新技術等。著重介紹面向數據流的系統分析和設計,面向對象的分析和設計,面向對象基礎和UML。
《軟件工程》在介紹面向數據流和面向對象的設計時,緊密圍繞實例進行闡述,對讀者深入理解軟件工程學很有幫助,可以作為學生綜合實驗前的練習。《軟件工程》可作為高等院校軟件工程課程的教材或教學參考書,也可作為軟件開發人員和軟件項目管理人員的參考書。
前言
第1章軟件工程概述
1.1軟件概述
1.1.1軟件的定義
1.1.2軟件的特點
1.1.3軟件的分類
1.1.4軟件的發展
1.2軟件危機
1.2.1什么是軟件危機
1.2.2產生的原因及解決途徑
1.3軟件工程
1.3.1軟件工程定義
1.3.2軟件工程的研究內容
1.3.3軟件工程的目標和原則
1.3.4軟件工程基本原理
1.4軟件開發方法
1.4.1結構化方法
1.4.2面向數據結構的開發方法
1.4.3 面向對象的方法
1.5 CASE工具
小結
習題
第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.2.5增量模型
2.2.6構件組裝模型
2.2.7 RUP
小結
習題
第3章可行性研究
3.1問題定義
3.2可行性研究
3.2.1 可行性研究的任務
3.2.2 可行性研究的步驟
3.3成本估計與效益分析
3.3.1 成本估算方法
3.3.2效益估算
3.4系統流程圖
3.4.1 系統流程圖的符號
3.4.2 系統流程圖舉例
3.5制訂軟件計劃
3.5.1確定軟件計劃
3.5.2復審軟件計劃
小結
習題
第4章需求工程
4.1需求的概念與內容
4.1.1 需求的問題
4.1.2需求的定義和分類
4.1.3 需求的層次
4.2需求工程
4.2.1 需求工程的定義
4.2.2需求工程的方法
4.3需求開發
4.3.1 需求獲取技術
4.3.2需求建模
4.3.3 需求規格說明
4.3.4需求評審
4.4需求管理
4.4.1 需求變更控制
4.4.2需求版本控制
4.4.3需求跟蹤
4.4.4需求狀態跟蹤
4.5需求管理工具
小結
習題
第5章結構化分析方法
5.1結構化分析方法概述
5.1.1基本思想
5.1.2 分析過程
5.1.3 描述工具
5.2數據流圖
5.2.1 數據流圖的結構
5.2.2 數據流與加工之間的關系
5.2.3 數據流圖的分層
5.2.4數據流圖的繪制
5.2.5 繪制數據流圖的注意事項
5.3數據字典
5.3.1 數據字典的作用和內容
5.3.2 數據字典編寫的基本要求
5.3.3 數據字典的定義符號和編寫格式
5.4加工邏輯說明
5.4.1結構化英語
5.4.2 判定表
5.4.3判定樹
5.4.4三種表達工具的比較
5.5 實例:供銷管理系統的需求分析
5.5.1需求調研
5.5.2需求建模
小結
習題
第6章面向對象基礎
6.1 傳統開發方法與面向對象的開發方法比較
6.1.1 結構化軟件工程方法的缺點
6.1.2 面向對象方法的優點
6.2面向對象的基本概念
6.3 面向對象的軟件開發過程
6.4幾種典型的面向對象方法簡介
6.4.1 Booch的面向對象方法
6.4.2 Jacobson的面向對象方法
6.4.3 Coad—Yourdon的面向對象方法
6.4.4 James Rumbaugh的面向對象方法
6.5統一建模語言UML
6.5.1 UML概述
6.5.2 UML的概念模型
6.5.3 UML的擴展機制
6.6案例:基于UML的客戶服務記賬系統需求分析
6.6.1 問題描述
6.6.2尋找參與者
6.6.3 尋找用例
6.6.4 確定參與者和用例之間的關系,繪制用例圖
6.6.5 編寫用例描述
小結
習題
第7章面向對象分析
7.1 面向對象分析過程
7.1.1 分析類的概念
7.1.2分析過程
7.2識別分析類
7.2.1 識別實體類
7.2.2識別邊界類
7.2.3識別控制類
7.2.4交互原則
7.3描述行為
7.3.1 消息與責任
7.3.2登錄用例的順序圖
7.3.3 其他用例的順序圖
7.4描述類
7.5評審分析模型
小結
習題
第8章軟件設計基礎
8.1軟件設計的目標和任務
8.1.1 軟件設計的目標
8.1.2軟件設計的任務
8.2軟件設計的概念與原則
8.2.1 模塊化與模塊獨立性
8.2.2抽象與逐步求精
8.2.3信息隱藏
8.3軟件體系結構風格
8.3.1 管道—過濾器
8.3.2 倉庫體系結構
8.3.3 分層體系結構
8.3.4 MVC體系結構
8.3.5 三層C/S體系結構
8.3.6 C/S與B/S混合軟件體系結構
8.4設計復審
小結
習題
第9章結構化設計方法
9.1概要設計
9.1.1基本概念
9.1.2變換分析
9.1.3事務分析
9.1.4變換一事務混合型分析
9.1.5啟發式規則
9.1.6設計優化
9.2詳細設計
9.2.1 程序流程圖
9.2.2盒圖
9.2.3 PAD圖
9.2.4 PDL
9.2.5 HIPO圖
9.3 案例:供銷管理系統的設計
9.3.1模塊結構設計
9.3.2 系統IPO圖
9.3.3 其他設計工作
小結
習題
第10章 面向對象的設計
10.1 OOD概述
10.2面向對象設計原則
10.2.1 單一職責原則
10.2.2開放一封閉原則
10.2.3 Liskov替換原則
10.2.4接口隔離原則
10.2.5依賴倒置原則
10.3系統體系結構設計
10.3.1 軟件系統體系結構設計
10.3.2 硬件系統體系結構設計
10.4系統設計
10.4.1識別設計元素
10.4.2數據存儲策略
10.5詳細設計
10.5.1 方法和屬性建模
10.5.2狀態建模
10.5.3 詳細類圖
10.6評審設計模型
10.7設計優化
10.7.1 確定優先級
10.7.2 提高效率的幾項技術
10.7.3 調整繼承關系
10.8設計模式
10.8.1 設計模式的作用和研究意義
10.8.2經典設計模式
10.8.3 設計模式的使用策略
小結
習題
第11章用戶界面設計
11.1用戶界面基礎
11.1.1 交互模型和框架
11.1.2人類工程學
11.1.3用戶界面風格
11.2用戶界面設計原則
11.2.1 置用戶于控制之下
11.2.2減輕用戶的記憶負擔
11.2.3保持界面一致
11.3用戶界面設計過程
11.3.1 界面分析和建模
11.3.2界面設計
11.3.3 界面實現和評估
小結
習題
第12章軟件實現
12.1軟件實現的目標和任務
12.2程序設計語言
12.2.1 程序設計語言的分類
12.2.2程序設計語言的選擇
12.3軟件編碼規范
12.3.1 頭文件規范
12.3.2 注釋規范
12.3 3 命名規范
12.3.4排版規范
12.3.5 目錄結構規范
12.4程序效率
12.4.1 運行速度的提高
12.4.2 存儲空間的優化
12.4.3 輸入/輸出效率的提高
12.5軟件代碼審查
小結
習越
第13章軟件測試
13.1軟件測試基礎
13.1.1 失敗的軟件案例
13.1.2軟件缺陷概念
13.1.3 軟件測試概念
13.2軟件測試技術
13.2.1 靜態黑盒測試
13.2.2動態黑盒測試
13.2.3 靜態白盒測試
13.2.4動態白盒測試
13.3軟件測試策略
13.3.1 單元測試
13.3.2集成測試
13.3.3 確認測試
13.3.4 系統測試
13.4面向對象的軟件測試
13.4.1 面向對象測試類型
13.4.2面向對象測試策略
13.4.3 面向對象測試用例設計
13.5軟件調試
13.5.1 調試過程
13.5.2調試方法
13.5.3 調試原則
13.6軟件測試自動化
13.7軟件測試管理
小結
習題
第14章軟件維護
14.1軟件維護概述
14.1.1 軟件維護的產生及其目的
14.1.2 軟件維護的分類
14.1.3 維護的成本
14.2軟件維護的特征
14.2.1 結構化維護和非結構化維護
14.2.2 維護可能存在的問題
14.2.3影響軟件維護工作量的因素
14.3軟件維護實施
14.3.1 軟件維護組織
14.3.2軟件維護申請
14.3.3 維護過程
14.3.4維護檔案記錄
14.3.5 維護評價
14.4軟件可維護性
14.4.1 影響軟件可維護性的因素
14.4.2 軟件可維護性的度量
14.4.3 提高可維護性的策略
14.5軟件維護的副作用
14.6逆向工程和再工程
14.6.1 逆向工程
14.6.2 軟件再工程
小結
習題
第15章軟件項目管理
15.1軟件項目管理概述
15.1.1軟件項目的特點
15.1.2軟件項目管理的特點和職能
15.2人員的組織與管理
15.2.1 軟件項目組織
15.2.2人員的配置和管理
15.3成本的估計與控制
15.3.1 軟件開發成本估計方法
15.3.2 專家判斷法
15.3.3 成本估算模型
15.4進度計劃
15.4.1 甘特圖法
15.4.2 工程網絡
15.4.3 項目活動工期估算的方法
15.4.4關鍵路徑法(CPM)
15.5軟件配置管理
15.5.1 軟件配置
15.5.2 軟件配置管理過程
15.6風險分析與管理
15.6.1 軟件風險
15.6.2風險識別
15.6.3 風險預測
15.6.4風險規劃
15.7 項目管理工具
15.7.1 SourceSafe
15.7.2 CVS
15.7.3 ClearCase
15.7.4軟件工程中的CASE工具
15.7.5 Microsoft Project 2010系列產品
小結
習題
第16章軟件工程新技術
16.1 XP技術
16.1.1 XP基本原則
16.1.2 XP軟件開發中的基本活動
16.1.3 XP的十二條慣例和規則
16.2凈室軟件工程方法
16.2.1 凈室軟件工程目標
16.2.2 凈室理論基礎
16.2.3 凈室技術
16.2.4凈室技術的發展
16.3 AOP編程
16.3.1 AOP的基本定義
16.3.2 開發步驟
16.3.3 AOP的關鍵技術
16.3.4 實現方法
16.3.5 AOP的技術優勢
16.4軟件復用技術
16.4.1 軟件復用的分類
16.4.2軟件復用技術
16.4.3 軟件復用的過程
16.4.4軟件復用的發展
小結
習題
參考文獻
4.建立快速原型
快速建立軟件原型是最準確最有效、最強大的需求分析技術。快速原型就是快速建立起來的旨在演示目標系統主要功能的可運行的程序。一個軟件原型通常僅僅是真實系統的一部分或一個模型,是對新產品的部分實現。這種方法要求盡可能快地建造一個粗糙的系統,這系統只需實現目標系統的某些功能,并且該系統可能在可靠性、界面的友好性或其他方面上存在缺陷。但是,借助于這個原型可以加快對需求的挖掘和雙方對需求的理解,以便快速獲取用戶需求。
在使用原型化方法時有兩種不同的策略:廢棄策略和追加策略。例如,為了獲得具體的用戶需求,可以用某些軟件工具快速的建造一個原型系統,這個系統只是一個界面,然后聽取用戶的意見,改進這個原型。以后的目標系統可以在原型系統的基礎上演化而成,為后續開發工作節省工作量和成本。
叢原型的用途可以看出,原型只要能夠體現它的作用、滿足評價的要求,它可以忽略一切暫時不關心的部分。正是由于這樣忽略,追加策略原型進化為最終系統時需要十分小心,否則會對后期的開發造成很大問題。
5.基于用例的方法
隨著面向對象技術的發展,基于用例的方法在需求獲取和建模方面應用得越來越廣泛。這種方法以用戶和任務為中心,不但能夠更加清楚地描述新系統允許用戶做什么,而且能夠幫助開發人員理解用戶的業務和應用領域,并且可以運用面向對象的分析和設計方法將用例轉化為對象模型。
在用例模型中,只關心系統所應實現的功能,而不關心內部的具體實現細節。一般情況下,用例模型的建立需要開發方和用戶方的共同參與和反復討論。基于用例的方法需求完成以下幾個任務。
1)確定參與者
參與者指與系統交互的人或事。確定系統的參與者可以通過確認系統功能的使用者和維護者,確認系統與其他軟件或系統的接口,確定系統與硬件設備的接口等方法來實現。
2)確定用例
用例描述系統完成的動作序列,產生對參與者有價值的結果。一個系統包含若干個用例,每個用例具體說明應完成的功能。識別用例首先要決定系統所能反映的外部事件,并把這些事件與參與的執行者和特定的使用實例聯系起來,最終繪制出用例圖。
3)描述用例
單純地使用用例圖不能提供用例所具有的全部信息,因此,對于那些不能反映到圖形上的信息需求用文字加以描述。用例描述實際上是關于參與者與系統如何交互的規格說明,要求清晰明確,沒有二義性。
由此可見,需求獲取要求系統分析人員能夠從復雜的原始材料中整理并抽取出能夠反映用戶真實需要的用戶需求信息。系統分析人員根據目標系統的實際特點,獨立或者組合使用以上方法,通過與用戶的多次溝通最終實現需求獲取階段的任務。