出版時間:2010-4 出版社:陳建明、王輝、 孫涌 機械工業(yè)出版社 (2010-04出版) 作者:孫涌,等 編 頁數(shù):332
前言
自20世紀60年代末期創(chuàng)立以來,軟件工程伴隨著計算機軟、硬件的快速發(fā)展,經(jīng)歷了從結構化到面向對象的一系列發(fā)展過程,并且已經(jīng)形成了若干工具、分支學科,目前軟件工程仍然是一個異?;钴S的研究領域。人們已經(jīng)認識到,如果有哪個項目不遵循軟件工程原則,必定會受到實踐的懲罰。當然,軟件工程學的研究范圍非常廣泛,包括技術方法、工具和管理等許多方面,新的技術方法和工具還在不斷涌現(xiàn)。 本書集合作者多年從事本科生和研究生軟件工程課程教學經(jīng)驗,在參考了大量國內(nèi)外教材與專著的基礎上,結合當前大學軟件工程課程教學的實際要求和將來從事實際軟件開發(fā)的相關情況而編寫。本教程作為蘇州大學首批精品課程建設計劃之一,是計算機專業(yè)的一門專業(yè)課。本教材雖然不可能包含軟件工程的全部內(nèi)容,但卻是本著易懂、實用的原則并結合多年從事軟件工程教學、科研實踐編寫而成。另外考慮到軟件工程的發(fā)展,編入了一定量的現(xiàn)代軟件工程的概念、方法及技術。 在寫作過程中,本書重點關注了以下幾個方面: ?以實用為主的同時,適當加強理論的敘述,在相關章節(jié)中增加了一些形式化的內(nèi)容,便于更深入地學習軟件工程相關理論或指導實際的軟件項目開發(fā)。 ?按照一般軟件產(chǎn)品(項目)開發(fā)過程的順序進行軟件工程內(nèi)容敘述,便于進行相關實驗或實踐。 ?面向對象技術在突出統(tǒng)一建?;靖拍?、方法的同時,強調(diào)建模與高級語言的結合與融合,避免了過程建模與具體實現(xiàn)脫節(jié)的問題。這一點對于我國的學生尤為重要,其理由是我國當前絕大部分學生認為只有編寫代碼才能進行軟件開發(fā)。 ?對一些比較成熟的最新技術進行了介紹,如設計模式、Web工程等。通過這部分內(nèi)容的學習,既能夠與當前實際開發(fā)緊密結合,也可為將來繼續(xù)深化、研究起到一個入門的作用。 本書共15章。第1章概括介紹了軟件工程學的基本原理、概念和方法。第2章到第6章主要介紹了面向過程軟件工程生命周期順序的前幾個階段的任務、過程、方法和工具。第7章到第9章比較完整地介紹了面向對象的開發(fā)方法。第10章到第13章介紹了軟件工程中面向過程及面向對象的軟件測試、維護、質(zhì)量保證及相關的過程、方法和工具。第15章較詳細地介紹了目前軟件工程的一些新技術,包括敏捷軟件開發(fā)、設計模式、軟件復用、Web工程等。 由于軟件工程這門課程涉及面廣,內(nèi)容豐富,發(fā)展迅速,所以我們在取材方面,既考慮保持傳統(tǒng)的內(nèi)容,又充分將軟件工程中的新技術、新發(fā)展融入其中。同時,我們也兼顧到目前高校學生的實際情況,力爭做到取材合理、內(nèi)容新穎、理論為主、結合實際、重點突出、實用性強。 根據(jù)多年從事軟件開發(fā)和軟件工程課程教學的經(jīng)驗和體會,作者認為:軟件工程這門課程的特點在于:它看似簡單,大部分內(nèi)容是敘述性的,但要真正掌握好并運用好,絕非易事!特別是軟件工程的思想、方法、理論、技術等貫穿整個軟件產(chǎn)品(項目)開發(fā)的始終,這是任何一門課程所無法替代的。它既有宏觀的一面,又有微觀、具體的一面,同時還與諸多學科相關聯(lián)。在此,希望廣大學生與讀者,能夠在學習本書內(nèi)容的同時,將相關知識與一個實際項目結合,哪怕是非常小的項目,只有這樣,才有可能真正學好軟件工程。 本書由孫涌主編,陳建明、王輝參編。全書完稿后,由孫涌進行統(tǒng)稿和整理工作。 在本書的編寫過程中,感謝王璁偉、房鵬、王晉、姜曉猛、沈文超、葛小培、陳祥榮、耿勝恩等同學為之付出的辛勤勞動,同時還要感謝機械工業(yè)出版社的編輯們對本書出版給予的支持。 由于時間倉促,加之作者水平有限,書中難免存在不足和疏漏之處,敬請廣大讀者不吝賜教。
內(nèi)容概要
《軟件工程教程》全面系統(tǒng)地介紹了軟件工程的有關概念、原則、方法和工具。全書共15章,內(nèi)容包括:軟件工程中面向過程、面向對象的開發(fā)方法,技術度量,質(zhì)量保證,軟件項目計劃與管理,用統(tǒng)一建模語言UML開發(fā)軟件的方法等。另外,還對設計模式、敏捷軟件開發(fā)、Web工程等軟件工程相關領域進行了介紹和討論?!盾浖こ探坛獭芳茸⒅乜茖W性和系統(tǒng)性,又注重實用性和新穎性?! 盾浖こ探坛獭房勺鳛榇髮W計算機及相關專業(yè)本(專)科學生的教材或教學參考書,也可作為研究生的參考教材。
書籍目錄
出版者的話 前言 教學建議 第1章 軟件工程概述 1 1.1 軟件發(fā)展和軟件危機 1 1.1.1 軟件的定義和發(fā)展 1 1.1.2 軟件危機過程 2 1.2 軟件工程學的范疇 5 1.3 軟件開發(fā)的生命周期 5 1.4 傳統(tǒng)軟件工程和面向對象軟件工程 7 1.5 軟件的特點 10 1.6 軟件工程的基本目標 11 小結 12 習題 12 第2章 軟件生命周期過程模型 13 2.1 過程及軟件生命周期 13 2.2 軟件過程模型 14 2.2.1 瀑布模型 15 2.2.2 具有原型化的瀑布模型 17 2.3 演化過程模型 18 2.3.1 原型化模型 18 2.3.2 螺旋模型 19 2.3.3 操作說明模型 20 2.4 增量過程模型 21 2.4.1 RAD模型 21 2.4.2 增量和迭代模型 22 2.5 其他類型的過程模型 23 2.5.1 噴泉模型 23 2.5.2 智能模型 24 2.5.3 V模型 25 2.5.4 變換模型 25 小結 26 習題 26 第3章 需求分析 27 3.1 需求分析的任務 27 3.1.1 需求定義 27 3.1.2 需求的層次 28 3.1.3 需求的開發(fā)與管理 28 3.2 需求獲取技術 30 3.2.1 需求分析人員的組成 30 3.2.2 需求的類型 30 3.2.3 獲取需求的途徑 31 3.3 需求規(guī)格說明書 36 3.3.1 需求說明的目的 36 3.3.2 需求說明的方法 36 3.4 需求描述技術 36 3.4.1 結構化技術 36 3.4.2 形式化技術 40 3.5 需求驗證 48 小結 49 習題 49 第4章 概要設計 51 4.1 概要設計的概念 51 4.1.1 概要設計的目標和任務 51 4.1.2 概要設計的過程 53 4.1.3 概要設計的工具 53 4.2 模塊獨立性 55 4.2.1 模塊化 55 4.2.2 模塊的耦合性 56 4.2.3 模塊的內(nèi)聚性 60 4.3 結構化設計方法 63 4.3.1 概念 63 4.3.2 變換分析 66 4.3.3 事務分析 68 4.3.4 設計的后處理 69 4.4 數(shù)據(jù)設計 70 4.4.1 數(shù)據(jù)設計的原則 70 4.4.2 數(shù)據(jù)結構設計 71 4.4.3 文件設計 71 4.4.4 數(shù)據(jù)庫設計 72 小結 73 習題 73 第5章 詳細設計 74 5.1 詳細設計的任務 74 5.2 詳細設計的方法 75 5.2.1 設計表示法 75 5.2.2 結構化程序設計 77 5.2.3 面向數(shù)據(jù)結構的設計 80 5.2.4 詳細設計文檔與復審 85 小結 90 習題 91 第6章 編碼與語言選擇 92 6.1 編碼的目的和任務 92 6.2 編碼所使用的語言 93 6.2.1 程序設計語言范型 93 6.2.2 程序設計語言的發(fā)展 94 6.2.3 常用的編碼語言 96 6.2.4 編碼語言的選擇 98 6.3 編碼的風格 99 小結 103 習題 103 第7章 面向對象方法 104 7.1 面向對象的基本概念 104 7.1.1 對象 104 7.1.2 類與消息 105 7.1.3 類的基本特征 106 7.2 面向對象的開發(fā)方法 106 7.2.1 概述 107 7.2.2 面向對象方法的發(fā)展歷程 107 7.2.3 常用的面向對象分析的方法 108 7.3 面向對象的設計 111 7.3.1 面向對象設計概述 111 7.3.2 底層設計—類的設計 118 7.3.3 OOD的Yourdon的方法 120 7.3.4 Booch的方法 125 7.3.5 系統(tǒng)的設計過程 126 小結 129 習題 129 第8章 統(tǒng)一建模語言 130 8.1 統(tǒng)一建模語言簡介 130 8.1.1 發(fā)展歷史 130 8.1.2 UML簡介 131 8.1.3 UML視圖簡介 132 8.1.4 視圖 132 8.1.5 UML類、構件、部署和協(xié)作圖 中的圖標 133 8.1.6 擴展組件 134 8.1.7 各種視圖間的關系 134 8.2 概念與視圖 135 8.2.1 靜態(tài)視圖 135 8.2.2 用例圖 136 8.2.3 交互視圖 136 8.2.4 狀態(tài)圖 138 8.2.5 活動視圖 139 8.2.6 物理視圖 140 8.2.7 模型管理視圖 142 8.3 UML與Java的對應關系 143 8.3.1 表示結構 143 8.3.2 表示關系 145 8.4 統(tǒng)一建模語言的綜合應用 149 8.4.1 項目概述 149 8.4.2 靜態(tài)分析和設計 150 8.4.3 持久對象設計 151 8.4.4 動態(tài)對象設計 152 8.4.5 通用接口設計 154 8.4.6 體系結構設計 157 小結 159 習題 160 第9章 統(tǒng)一軟件過程 161 9.1 軟件開發(fā)過程 161 9.2 迭代和遞增 162 9.3 核心工作流 162 9.3.1 需求流 162 9.3.2 分析流 164 9.3.3 設計流 166 9.3.4 實現(xiàn)流 167 9.3.5 測試流 168 9.3.6 交付后維護 170 9.3.7 退役 170 9.4 統(tǒng)一過程的各階段 171 9.4.1 開始階段 171 9.4.2 細化階段 173 9.4.3 構建階段 173 9.4.4 轉換階段 174 9.5 二維生命周期模型 174 小結 174 習題 174 第10章 軟件測試 176 10.1 軟件測試概述 176 10.1.1 軟件測試的目標 176 10.1.2 軟件測試的原則 177 10.1.3 軟件測試的方法 178 10.1.4 軟件測試與軟件開發(fā)各階段的 關系 178 10.1.5 測試信息流 179 10.1.6 錯誤分類 179 10.2 軟件測試過程與策略 182 10.2.1 單元測試 182 10.2.2 集成測試 183 10.2.3 確認測試 186 10.2.4 平行運行 187 10.3 設計測試方案 187 10.3.1 邏輯覆蓋 188 10.3.2 等價劃分 191 10.3.3 邊界值分析 194 10.3.4 錯誤推測 194 10.3.5 實用測試策略 195 10.4 糾錯 198 10.5 對OOA和OOD模型的測試 200 10.5.1 擴大測試的視角 201 10.5.2 測試OOA和OOD模型 201 10.6 面向對象的測試策略 203 10.6.1 在OO語境中的單元測試 203 10.6.2 在OO語境中的集成測試 203 10.6.3 在OO語境中的有效性測試 204 10.7 OO軟件的測試用例設計 204 10.7.1 OO概念的測試用例設計的 含義 204 10.7.2 傳統(tǒng)測試用例設計方法的 可用性 204 10.7.3 基于故障的測試 205 10.7.4 OO編程對測試的影響 205 10.7.5 測試用例和類層次 206 10.7.6 基于場景的測試設計 206 10.7.7 測試表層結構和深層結構 207 10.8 其他專門環(huán)境要求的測試 208 10.8.1 GUI測試 208 10.8.2 測試文檔和幫助設施 209 10.8.3 實時系統(tǒng)測試 210 小結 211 習題 211 第11章 軟件維護 213 11.1 系統(tǒng)的變化 213 11.1.1 系統(tǒng)的類型 214 11.1.2 系統(tǒng)生命周期中的變化 215 11.1.3 系統(tǒng)的生命范圍 216 11.2 軟件維護的基本內(nèi)容和特點 218 11.2.1 軟件維護概述 218 11.2.2 軟件維護的特點 219 11.2.3 維護中的問題 220 11.3 軟件維護的實施 221 11.3.1 軟件維護的過程 221 11.3.2 軟件維護的技術 224 11.4 軟件的可維護性 224 11.4.1 軟件可維護性概述 225 11.4.2 軟件可維護性度量 225 11.4.3 提高可維護性的方法 225 11.5 軟件維護的副作用 226 11.5.1 代碼副作用 226 11.5.2 數(shù)據(jù)副作用 227 11.5.3 文檔副作用 227 11.6 軟件再工程 227 11.6.1 軟件再工程的過程 227 11.6.2 軟件再工程的方法 228 小結 228 習題 229 第12章 軟件質(zhì)量及其管理 230 12.1 軟件質(zhì)量的概念及屬性 230 12.1.1 軟件質(zhì)量概述 230 12.1.2 軟件質(zhì)量的屬性 230 12.2 軟件質(zhì)量保證與控制 231 12.2.1 軟件質(zhì)量保證概述 232 12.2.2 軟件質(zhì)量保證計劃 232 12.2.3 軟件質(zhì)量成本 234 12.2.4 軟件質(zhì)量控制 234 12.3 軟件質(zhì)量度量 235 12.3.1 軟件質(zhì)量度量概述 235 12.3.2 質(zhì)量度量模型 235 12.3.3 三種度量模型的比較 236 12.3.4 軟件質(zhì)量評價 238 12.4 軟件可靠性 238 12.4.1 基本概念 238 12.4.2 影響軟件可靠性的因素 239 12.4.3 軟件可靠性模型 240 12.4.4 軟件可靠性工程 242 12.5 CMM:軟件能力成熟度模型 242 12.5.1 CMM的發(fā)展 242 12.5.2 基本概念 243 12.5.3 SW-CMM的用途 243 12.5.4 CMM的五個等級 244 12.5.5 CMM的內(nèi)部結構 246 12.5.6 采用CMM的意義 248 小結 249 習題 249 第13章 軟件項目管理 250 13.1 項目管理的概念 250 13.1.1 項目管理過程 250 13.1.2 項目管理的范圍 251 13.1.3 項目管理中的資源 251 13.2 可行性研究 252 13.2.1 可行性研究的任務和過程 252 13.2.2 技術可行性研究 253 13.2.3 經(jīng)濟可行性研究 254 13.2.4 運行可行性研究 256 13.3 軟件項目估算 257 13.3.1 代碼行技術 257 13.3.2 功能點技術 257 13.4 軟件開發(fā)成本估算 260 13.4.1 軟件開發(fā)成本估算方法 260 13.4.2 專家判定技術 260 13.4.3 軟件開發(fā)成本估算的早期經(jīng)驗 模型 261 13.5 進度安排 264 13.5.1 軟件開發(fā)小組人數(shù)與軟件 生產(chǎn)率 264 13.5.2 任務的確定與并行性 264 13.5.3 制定開發(fā)進度計劃 265 13.5.4 項目的追蹤和控制 265 13.6 人員組織 266 13.6.1 民主制程序員組 266 13.6.2 主程序員組 267 13.6.3 現(xiàn)代程序員組 268 13.7 軟件風險管理 269 13.7.1 風險識別 269 13.7.2 風險估計 271 13.7.3 風險評價 272 13.7.4 風險駕馭和監(jiān)控 273 13.8 軟件配置管理 274 13.8.1 軟件配置 274 13.8.2 軟件配置管理過程 275 小結 276 習題 276 第14章 CASE環(huán)境與工具 278 14.1 工程環(huán)境 278 14.1.1 軟件開發(fā)環(huán)境的特點 278 14.1.2 理想環(huán)境的模型 280 14.1.3 CASE環(huán)境簡介 280 14.2 CASE環(huán)境的組成與結構 281 14.2.1 CASE的組成構件 281 14.2.2 CASE的一般結構 283 14.3 CASE環(huán)境工具與實踐 284 14.3.1 CASE軟件工程實踐 284 14.3.2 常用CASE工具介紹 285 14.4 逐步求精 287 小結 290 習題 290 第15章 軟件工程新技術概述 292 15.1 敏捷軟件開發(fā)過程 292 15.1.1 敏捷的概念 293 15.1.2 敏捷過程的含義 293 15.1.3 敏捷過程模型 295 15.2 設計模式 302 15.2.1 設計模式的基本概念 302 15.2.2 關系環(huán)與組合模式 303 15.2.3 工廠模式 306 15.2.4 觀察者模式與拉推數(shù)據(jù) 315 15.3 Web工程簡介 320 15.3.1 Web系統(tǒng)和應用特點 320 15.3.2 Web工程的層次 321 15.3.3 Web分析 322 15.3.4 Web設計 323 15.3.5 Web測試 324 15.3.6 Web的項目管理 328 小結 330 習題 330 參考文獻 331
章節(jié)摘錄
插圖:做好軟件定義階段的工作,是降低軟件開發(fā)成本并提高軟件質(zhì)量的關鍵。如果軟件開發(fā)人員在定義階段沒有正確全面地理解用戶需求,直到測試階段或軟件交付使用后才發(fā)現(xiàn)“已完成的”軟件不完全符合用戶的需要,這時再修改就為時已晚了。嚴重的問題是,在軟件開發(fā)的不同階段進行修改需要付出的代價是很不相同的,在早期引入變動,涉及的面較少,因而代價也比較低。而在開發(fā)的中期軟件配置的許多部分已經(jīng)完成,引入一個變動要對所有已完成的配置部分都做相應的修改,不僅工作量大,而且邏輯上也更復雜,因此付出的代價劇增。在軟件“已經(jīng)完成”時再引入變動,當然需要付出更高的代價。根據(jù)美國一些軟件公司的統(tǒng)計資料,在后期引入一個變動比在早期引入相同變動所需付出的代價高2~3個數(shù)量級。通過上面的論述不難認識到,輕視維護是一個最大的錯誤.許多軟件產(chǎn)品的使用壽命長達10年甚至20年,在這樣漫長的時期中不僅必須改正使用過程中發(fā)現(xiàn)的每一個潛伏的錯誤,而且當環(huán)境變化時(如硬件或系統(tǒng)軟件更新?lián)Q代)還必須相應地修改軟件以適應新的環(huán)境。特別是必須經(jīng)常改進或擴充原來的軟件以滿足用戶不斷變化的需要。所有這些改動都屬于維護工作,而且是在軟件已經(jīng)完成之后進行的,因此維護是極端艱巨和復雜的工作,需要花費很大代價。統(tǒng)計數(shù)據(jù)表明,實際上用于軟件維護的費用占軟件總費用的55%一70%。軟件工程學的:一個重要目標就是提高軟件的可維護性,減少軟件維護的代價。了解產(chǎn)生軟件危機的原因,澄清錯誤認識,建立起關于軟件開發(fā)和維護的正確概念,還僅僅是解決軟件危機的開始,全面解決軟件危機需要一系列綜合措施。 3.緩解軟件危機的途徑 軟件開發(fā)不是某種個體勞動的神秘技巧,而應該是一種組織良好,管理嚴密,各類人員協(xié)同配合,共同完成的工程項目。必須充分吸取和借鑒人類長期以來從事各種工程項目所積累的行之有效的原理、概念、技術和方法,特別要吸取幾十年來人類從事計算機硬件研究和開發(fā)的經(jīng)驗教訓。應該推廣使用在實踐中總結出來的開發(fā)軟件的成功的技術和方法,并且研究探索更好、更有效的技術和方法,盡快消除在計算機系統(tǒng)早期發(fā)展階段形成的一些錯誤概念和做法。應該開發(fā)和使用更好的軟件工具。正如機械工具可以“放大”人類的體力一樣,軟件工具可以“放大”人類的智力。在軟件開發(fā)的每個階段都有許多煩瑣重復的工作需要做,在適當?shù)能浖ぞ咻o助下,開發(fā)人員可以把這類工作做得既快又好。如果把各個階段使用的軟件工具有機地集合成一個整體,支持軟件開發(fā)的全過程,則稱為軟件工程支撐環(huán)境??傊?,為了解決軟件危機,既要有技術措施(方法和工具),又要有必要的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好地開發(fā)和維護計算機軟件的一門新興學科。
編輯推薦
《軟件工程教程》:高等院校精品課程系列教材
圖書封面
評論、評分、閱讀與下載