軟件工程
-
【作 者】曾強聰 趙歆
【I S B N 】978-7-5170-2574-0
【責任編輯】張玉玲
【適用讀者群】本科
【出版時間】2015-01-04
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】292
【千字數】445
【印 張】18.25
【定 價】¥36.8
【叢 書】普通高等應用型院校“十二五”規劃教材
【備注信息】
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
軟件工程是軟件研發與維護的工程方法學。本書較好地體現了軟件工程的實用性,有較完整的軟件工程知識體系,有對工程概念、規則的生動說明,有與工程實踐相適應的基于軟件生存周期的內容編排,有基于案例的工程方法應用。
全書共三個部分16章內容。第一部分工程基礎包含兩章內容,是對軟件工程概念方法、軟件工程項目管理的常識性介紹;第二部分工程過程包含7章內容,涉及軟件工程過程模式,并以軟件生存周期為線索,對軟件研發全過程進行了說明;第三部分工程方法包含7章內容,有基于案例的工程方法說明,涉及主流的結構化工程方法、面向對象工程方法、數據庫工程方法,并介紹了敏捷工程等一些非主流方法,第16章是一個較完整的面向對象工程案例,基于UML建模,并已通過C++和Java進行工程創建。
本書語言精簡、通俗易懂、便于自學,而且教學資源完備,書中案例均已基于主流軟件工具(Rose、Visio、PowerDesigner)建立模型,可作為教學或自學資源供讀者參考(可與出版社或作者聯系獲取)。
本書可作為高校相關專業本科生、研究生教材,也可作為軟件開發人員的技術參考書,還可供廣大讀者自學軟件工程方法。
本書較好地體現了軟件工程的實用性,有較完整的軟件工程知識體系,有對工程概念、規則的生動說明,有與工程實踐相適應的基于軟件生存周期的內容編排,有基于案例的工程方法應用;語言精簡、通俗易懂;
教學資源完備,書中案例均已基于主流軟件工具(Rose、Visio、PowerDesigner)建立模型,可作為教學或自學資源供讀者參考。
軟件工程是關于軟件產品研發與維護的工程方法學,是軟件開發者—軟件項目負責人、軟件分析師、軟件設計師、軟件程序員、軟件測試員研發與維護軟件時的作業指南。
20世紀60年代,軟件產業發展遭遇到了危機,出現了軟件研發成本進度難以控制,軟件產品不能滿足用戶需求,軟件程序容易出錯、難于維護等諸多危機現象。這樣的軟件危機引發了軟件研發者的心理恐慌,軟件工程即誕生于這樣的背景之下,其謀求對軟件研發維護能有方法上的指導,能有規則上的約束,以使得面對有待研發的復雜軟件系統,軟件開發者能更具預見力與自信心。
軟件工程影響著軟件產業的發展,軟件工程人才已越來越受到軟件業界的重視。可以看到的是,當前的軟件工程師已代替了早期的軟件程序員成為了軟件研發中的技術骨干。然而,軟件產業的發展不只是要求軟件工程師需要具備軟件工程知識與技能,還要求軟件研發的所有參與者—技術人員、管理人員、產品客戶都應該具備一定的軟件工程知識與技能,由此軟件工程規則方法才能更順利地得以應用。
軟件工程在隨軟件產業的發展而進步。目前軟件工程已是計算機科學領域中的一個重要分支,其已有了結構化、面向對象等比較成熟的工程方法學體系,并已有了對技術、管理、經濟的比較全面的工程方法支持。然而,直至今天,軟件工程還仍是處于成長過程中,仍然非常年輕,需要工程探索,需要逐步完善。
軟件工程的真正價值在于工程應用與產生工程實效。本書編寫即充分考慮到了軟件工程的實用性,有對軟件工程概念、規則的生動說明,有與工程實踐相適應的基于軟件生存周期的內容編排,并有基于工程案例的工程方法應用指導。
本書內容由三個部分共16章組成。
第一部分是工程基礎(第1、2章),涉及軟件工程概況與軟件項目管理兩個方面的內容。我們認為要學好軟件工程,首要的問題是學習者能對軟件工程有一個好的學習態度,這個部分即用于培養與樹立學習者的工程意識,并因此激發起學習者的工程學習熱情。
第二部分是工程過程(第3~9章),涉及一些主流的過程模式,并以軟件生存周期為線索,對軟件研發全過程進行了細節說明,包括:軟件需求分析、軟件概要設計、程序算法設計、軟件測試、軟件維護與進化等內容。我們認為,以軟件生存周期為線索的內容編排將有利于基于軟件項目的工程實踐與學以致用。
第三部分是工程方法(第10~16章),既包括主流的結構化工程方法、面向對象工程方法、數據庫工程方法,也涉及一些非主流的工程方法,如敏捷工程方法、凈室工程方法等。諸多方法都通過案例進行了應用說明。這個部分的核心內容是面向對象工程方法,有比較全面的基于UML的建模說明。第16章是一個較完整的面向對象工程案例,不僅有基于UML的分析設計建模,并通過C++、Java進行工程創建。
本書的重點是軟件分析與設計,并主要體現在分析設計建模上。對于分析設計建模,本書有以下方面的教學考慮,這有利于學習者更好地把握建模方法:
(1)學習建模不能僅限于識別圖形元素或看懂圖表,而應該學會如何基于一定的流程,并通過一定的建模方法,對軟件問題進行模型演變,由此使軟件問題得解。因此,本書中無論結構化建模還是面向對象建模,其都有較好的基于案例的由分析到設計的全過程推演,以反映軟件系統構建的嚴密性。
(2)結構化分析中的數據流細化建模一直是一個學習難點,其實它也是一個實際建模中的應用難點,即不知道如何進行功能細化。對此,本書基于功能樹的功能逐級分解,可使這個難點得到較好的處理,其具有教學意義,同時也有一定的工程參考價值。
(3)統一開發過程中的面向對象建模是基于用例驅動的,由此可使對系統的業務分析能延伸到系統的結構設計、過程設計、界面設計、安裝部署。然而,以往的大多數教科書,僅局限于綱領性說明,而無實際建模演示,因此也就看不到用例驅動的實際價值。對此,本書有較好的基于案例的用例驅動建模過程說明,如分析中基于用例的活動建模,設計中基于用例的類結構建模、對象協作建模,諸多案例無不體現出用例驅動的價值。
一些初學者認為,軟件工程是教條式理論。然而,它卻不應該成為教條,只是有可能出現教條式教學。實際上,軟件工程有很強的工程實踐性,其一系列的方法規則就建立在工程實踐基礎上。無疑,這個實踐性必然會對軟件工程的教學提出要求,這就是有用、能用、實用。顯然,經過軟件開發者長期的實踐與努力探索而獲得的工程方法肯定是有用的,值得認真學習。然而,有用還只能體現出軟件工程的知識特性,若要使這些知識轉化為學習者的能力,則必須能用。通常的看法是,案例教學有利于培養學習者能力。本書提供了較豐富的案例,其目的就在于培養學習者的能力,以使書中的知識能夠被用起來。軟件工程教學還要求實用,可用來解決實際問題。對此,可采取項目方式進行工程實踐,這有利于知識、能力與實際應用的結合,由此可使軟件工程學習具備實用性。
還需要注意的是,基于項目的工程實踐的成效依賴于教師的精心組織。我們的建議是,可3~5人一組進行項目實踐,并以組為單位進行整體評價,但各成員應有特定任務,以方便對各成員做個體評價。這種教學模式的好處是,既可考察學習者的團隊協作,又可體現學習者的個人學習成就。還由于是團隊合作學習,有利于調動學習者的工程實踐熱情,能產生更好的工程實踐效果。
本書主要由曾強聰、趙歆編寫,陽王東、劉震、周新民、劉娜承擔了部分內容的編寫工作。無疑,本書的創作是一件非常耗費心力的事情。首先是結構,它應該是嚴謹的。接著是語言,其應該既嚴密又暢快,以便于閱讀,并能盡量吸引學習者去閱讀。接下來就是取舍內容、定義概念、描述方法、設計案例等。
實際上,本書中的每一個細節都經過反復推敲,因為畢竟是教科書,很擔心因工作疏忽而給學習者帶來誤導。然而,由于作者學識水平與時間都是有限的,因此書中難免有一些缺點和不足,對此特請廣大讀者批評指正,以使本書再版時能夠不斷完善。值得慶幸的是,軟件工程仍在不斷發展,因此本書的再版與完善也是一件很自然的事情。
編 者
2014年9月
1.1 什么是軟件工程 1
1.2 軟件有什么特點 2
1.2.1 軟件特點 3
1.2.2 軟件分類 4
1.3 為什么會發生軟件危機 6
1.4 軟件工程技術 8
1.4.1 軟件過程 8
1.4.2 工程方法 9
1.4.3 軟件工具 9
1.5 軟件工程管理 10
1.5.1 項目計劃 10
1.5.2 人員組織 10
1.5.3 過程管理 11
1.5.4 產品管理 11
1.5.5 工程目標 11
1.6 主流軟件工程方法學 12
1.6.1 結構化方法學 12
1.6.2 面向對象方法學 12
1.7 常用軟件工具 15
1.7.1 Microsoft Visio 15
1.7.2 Sybase PowerDesigner 15
1.7.3 IBM Rational Rose 16
小結 17
習題 18
第2章 軟件項目管理 19
2.1 軟件研發團隊 19
2.1.1 軟件研發機構 19
2.1.2 軟件項目小組 20
2.1.3 項目小組管理機制 21
2.2 軟件項目計劃 23
2.2.1 任務分配 23
2.2.2 進度計劃 24
2.2.3 項目計劃書 26
2.3 軟件項目成本估算 26
2.3.1 程序代碼行成本估算 27
2.3.2 軟件功能點成本估算 28
2.3.3 基于軟件過程的成本估算 31
2.4 軟件項目風險 32
2.4.1 風險類別 32
2.4.2 風險識別 33
2.4.3 風險評估 34
2.4.4 風險防范 35
2.5 項目文檔管理 36
2.5.1 文檔概念 36
2.5.2 文檔分類 37
2.5.3 軟件文檔與軟件生命周期之間
的關系 37
2.5.4 文檔的使用者 38
2.5.5 文檔編碼 39
2.5.6 文檔格式 39
2.6 項目配置管理 41
2.6.1 軟件配置概念 41
2.6.2 配置規劃 41
2.6.3 軟件變更控制 43
2.6.4 軟件版本控制 43
2.7 項目質量管理 44
2.7.1 質量標準 44
2.7.2 質量計劃 45
2.7.3 質量保證 45
2.7.4 質量指標 46
小結 47
習題 48
第3章 軟件工程過程模式 50
3.1 軟件生存周期 50
3.1.1 軟件定義期 50
3.1.2 軟件開發期 51
3.1.3 軟件運行與維護期 52
3.2 瀑布模式 53
3.2.1 瀑布模式的特點 53
3.2.2 瀑布模式中的信息反饋 54
3.2.3 瀑布模式的作用 55
3.3 原型進化模式 55
3.3.1 軟件原型 55
3.3.2 原型進化過程 56
3.4 增量模式 57
3.4.1 增量開發過程 57
3.4.2 增量模式的優越性 57
3.5 螺旋模式 58
3.6 迭代模式 59
3.7 組件復用模式 60
小結 61
習題 62
第4章 計算機系統工程 63
4.1 計算機系統特征 63
4.2 計算機體系結構 64
4.2.1 主機結構 64
4.2.2 客戶機/服務器結構 65
4.2.3 瀏覽器/服務器結構 65
4.3 系統前期分析 66
4.3.1 分析過程 67
4.3.2 系統結構建模 68
4.3.3 系統工作流建模 68
4.4 項目可行性分析 70
4.4.1 評估內容 71
4.4.2 評估報告 72
小結 73
習題 74
第5章 軟件需求分析 75
5.1 需求分析任務 75
5.1.1 分析內容 75
5.1.2 分析過程 76
5.1.3 任務承擔者 76
5.2 獲取用戶需求 77
5.2.1 識別用戶 77
5.2.2 從調查中收集用戶需求 79
5.2.3 建立需求規約 81
5.3 建立需求模型 82
5.3.1 業務域模型 83
5.3.2 業務流模型 83
5.4 定義與驗證軟件規格 84
5.4.1 軟件規格定義 84
5.4.2 軟件需求驗證 85
5.4.3 通過原型驗證用戶需求 85
5.4.4 通過評審驗證產品規格 86
5.5 需求規格說明書 86
小結 87
習題 88
第6章 軟件概要設計 89
6.1 概要設計任務 89
6.1.1 基本任務 89
6.1.2 設計過程 90
6.2 系統構架設計 91
6.2.1 軟件系統支持環境 91
6.2.2 軟件系統體系結構 92
6.3 數據結構設計 96
6.3.1 動態程序數據 96
6.3.2 靜態存儲數據 96
6.4 程序結構設計 96
6.4.1 程序模塊 97
6.4.2 模塊獨立性 99
6.4.3 結構化程序結構 103
6.4.4 面向對象程序結構 104
6.5 概要設計說明書 105
小結 107
習題 107
第7章 程序算法設計與編碼 109
7.1 程序結構化流程控制 109
7.2 程序算法設計工具 110
7.2.1 程序流程圖 110
7.2.2 NS圖 110
7.2.3 PAD圖 112
7.2.4 PDL語言 113
7.3 程序算法復雜度評估 114
7.3.1 程序算法復雜度 114
7.3.2 McCabe方法 114
7.4 程序編碼 116
7.4.1 編程語言 116
7.4.2 編程規范 118
7.4.3 程序運行效率 120
小結 121
習題 121
第8章 軟件測試 123
8.1 測試目的、計劃與方法 123
8.1.1 測試目的 123
8.1.2 測試計劃 123
8.1.3 測試方法 124
8.2 測試任務 125
8.2.1 單元測試 125
8.2.2 集成測試 127
8.2.3 確認測試 129
8.3 測試用例 130
8.3.1 白盒測試用例設計 130
8.3.2 黑盒測試用例設計 132
8.4 面向對象程序測試 134
8.4.1 面向對象單元測試 134
8.4.2 面向對象集成測試 134
8.4.3 面向對象確認測試 135
8.5 程序調試 135
8.5.1 診斷方法 135
8.5.2 調試策略 136
8.6 測試工具 137
8.6.1 測試數據生成程序 137
8.6.2 動態分析程序 137
8.6.3 靜態分析程序 137
小結 137
習題 138
第9章 軟件維護與再工程 140
9.1 軟件維護分類 140
9.2 軟件可維護性 141
9.2.1 軟件可維護性評估 141
9.2.2 如何提高軟件的可維護性 141
9.3 軟件維護實施 142
9.3.1 維護機構 142
9.3.2 維護過程 143
9.4 軟件再工程 145
9.4.1 逆向工程 145
9.4.2 重構工程 146
9.4.3 正向工程 146
小結 146
習題 147
第10章 結構化分析建模 148
10.1 結構化分析 148
10.2 功能層級圖 149
10.3 數據流圖與功能建模 149
10.3.1 數據流圖 149
10.3.2 數據流細化 151
10.3.3 功能建模 152
10.3.4 數據字典 154
10.4 狀態轉換圖與行為建模 156
小結 158
習題 159
第11章 結構化設計建模 162
11.1 建模語言 162
11.1.1 程序結構圖 162
11.1.2 HIPO圖 163
11.1.3 框架偽碼 164
11.2 基于數據流的程序結構映射 165
11.2.1 變換流映射 165
11.2.2 事務流映射 167
11.2.3 混合流映射 168
11.3 程序結構優化 170
11.4 設計舉例 173
小結 179
習題 179
第12章 面向對象分析建模 181
12.1 面向對象工程方法 181
12.1.1 面向對象工程建模方法 181
12.1.2 UML建模語言 182
12.2 用例建模 185
12.2.1 圖形元素 185
12.2.2 參與者關系 186
12.2.3 用例關系 186
12.2.4 用例建模舉例 188
12.3 活動建模 190
12.3.1 圖形元素 190
12.3.2 業務級活動建模 191
12.3.3 用例級活動建模 192
12.4 類分析建模 193
12.4.1 實體類 193
12.4.2 實體類關系 194
11.4.3 類分析建模舉例 197
小結 198
習題 198
第13章 面向對象設計建模 200
13.1 面向對象設計方法 200
13.1.1 面向對象設計特點 200
13.1.2 基于UML的設計建模 202
13.2 邏輯結構設計 203
13.2.1 確定系統構架 203
13.2.2 設計類體 205
13.2.3 抽象類、接口及其用途 209
13.2.4 程序邏輯結構 212
13.3 動態過程設計 217
13.3.1 協作圖 217
13.3.2 時序圖 219
13.3.3 狀態圖 221
13.4 物理裝配與部署 222
13.4.1 程序構件圖 222
13.4.2 系統部署圖 224
小結 226
習題 227
第14章 數據庫分析與設計 229
14.1 數據庫體系結構 229
14.1.1 基本體系結構 229
14.1.2 基于數據庫服務器的數據庫系統 231
14.1.3 數據庫分布應用 232
14.1.4 SQL語言 232
14.2 數據庫分析建模 233
14.2.1 實體關系圖 233
14.2.2 基于工具的ER建模 234
14.2.3 商品訂購數據建模舉例 236
14.3 數據庫結構設計 237
14.3.1 數據表 237
14.3.2 數據表關聯 237
14.3.3 數據索引 238
14.3.4 數據完整性 239
14.3.5 數據表結構優化 240
14.4 數據庫訪問設計 240
14.4.1 數據視圖 240
14.4.2 存儲過程 241
14.4.3 數據事務 241
小結 242
習題 242
第15章 非主流工程方法 244
15.1 敏捷工程方法 244
15.1.1 敏捷價值觀 244
15.1.2 敏捷工程法則 245
15.1.3 敏捷過程特點 245
15.1.4 敏捷設計原則 246
15.1.5 極限編程 246
15.1.6 自適應軟件開發 247
15.1.7 動態系統開發方法 248
15.2 凈室工程方法 248
15.2.1 工程策略 249
15.2.2 盒結構建模 249
15.2.3 程序正確性驗證 251
15.3 Jackson程序設計方法 253
15.3.1 設計步驟 254
15.3.2 設計舉例 255
15.4 Z語言形式化規格說明 258
15.4.1 Z語言特點 258
15.4.2 Z語言應用舉例 259
小結 261
習題 262
第16章 “象棋對壘程序系統”工程案例 263
16.1 系統分析 263
16.1.1 基本需求說明 263
16.1.2 功能用例分析 263
16.1.3 任務活動分析 265
16.2 系統設計 266
16.2.1 系統構架設計 266
16.2.2 類結構設計 266
16.2.3 對象交互設計 268
16.2.4 棋局對壘界面設計 272
16.2.5 系統構件設計 273
16.3 程序框架清單 274
16.3.1 客戶端程序 274
16.3.2 服務器程序 279
參考文獻 281
- 庭院風骨—樹、灌、籬 [創意房主 著]
- Python語言程序設計教程 [郭其標 房宜汕]
- 微積分(經管類)教程篇(下冊) [曹海軍 王海棠 周玲麗]
- 微積分(經管類)教程篇(上冊) [曹海軍 王海棠 周玲麗]
- 微積分(經管類)導學篇(上冊) [王海棠 曹海軍 周玲麗]
- 網站前端技術案例教程(HTML+CSS+JavaScript)(第二版) [黃華升]
- 線性代數 [主編 史昱 陳鳳欣]
- 電力電子技術課程學習及實驗指導 [主編 陳榮]
- 成長對話:青春的榜樣 [主編 施端銀 黃武剛 應巨林]
- 人工智能應用基礎 [主編 楊纓 李佳]
- 中華水文化(慕課版)(第二版) [畢雪燕 楊華軻 羅玲誼 等編著]
- 電路與電子技術Ⅱ——電路分析基礎 [主編 陳曉 金哲]
- 飛機維修專業英語——飛機系統(第二版) [趙迎春]
- 英語大爆炸:跟趣味情景劇學口語(微課版) [秦然 編著]
- 機械工程制圖任務跟蹤訓練 [主編 王瑞清 趙金考 周彥云 ]
- 機械工程制圖 [主編 覃國萍 劉百順 禹晨]
- 平面設計與制作項目化教程 [主編 李晨]
- 后期影像剪輯技術 [主編 郭建偉]
- 人工智能概論(第二版) [主編 任云暉 丁紅 徐迎春 ]
- 信息時代美育之道 [主編 劉宏宇 黎婭]
- 數字媒體交互設計項目式教程(微課版) [主編 蘇陸]
- 動畫運動規律項目實例解析(微課版) [孫珊珊 袁維坤]
- 自然語言處理 [主編 馮建周]
- 新媒體內容創作實務(微課版) [主編 覃思源]
- 人工智能基礎 [主編 余平 張春陽]
- 人工智能導論 [主編 王飛 潘立武]
- Amazing!兒童英語自然拼讀分級教材(全8冊) [王玲 編著]
- Spark大數據處理技術 [主編 劉仁山 周洪翠 莊新妍]
- 毫無PS痕跡—你的第一本Photoshop書(第二版) [趙鵬 著]
- 電視新聞制作(活頁式) [主編 王曉翠 劉傳琳]