《軟件工程》在軟件工程的知識域組織方面參考了IEEE和ACM提出的“軟件工程的知識體系(SWEBOK)”的基本框架,比較全面、系統(tǒng)地反應了軟件工程的全貌,從理論與實踐的視角介紹了軟件工程的基本原理、概念和技術方法。全書共18章,在內容結構上可分為軟件工程與項目管理、結構化開發(fā)方法、面向對象的開發(fā)方法及軟件工程高級專題4個部分。在每章后面都附有思考與練習題,供讀者復習鞏固之用。
《軟件工程》汲取了國內外軟件工程的精華,并融人了作者多年在教學與科研過程中對軟件工程的理解與經驗總結。在內容上既兼顧了傳統(tǒng)、實用的軟件開發(fā)方法,又引入了軟件工程領域比較新穎的技術和方法,并結合一個貫穿全書的具體案例加以介紹!盾浖こ獭返牧硪粋特點是介紹了許多軟件工程度量與估算的技術與方法,突出了軟件工程學科工程化、可度量的特點。
《軟件工程》可作為計算機相關專業(yè)本科生或研究生的教材,同時也可作為軟件工程領域專業(yè)人員的參考書。
《軟件工程》特色:內容涵蓋軟件工程理論與實踐的最新發(fā)展,以具體案例為驅動,貫穿結構化方法與面向對象方法的全過程,軟件項目管理內容符合美國項目管理學會(PMI)的主要體系框架,軟件度量使軟件工程成為可量化的學科。
面向對象程序設計(OOP)技術是當前主流的程序設計技術。和傳統(tǒng)的面向過程的程序設計技術相比,面向對象程序設計技術具有明顯的優(yōu)勢。這種優(yōu)勢主要體現(xiàn)在以下幾個方面:
(1) 傳統(tǒng)的面向過程的程序設計方法忽略了數(shù)據(jù)和操作之間的內在聯(lián)系,程序中的數(shù)據(jù)和操作它們的方法分離,而面向對象程序設計技術將程序要處理的數(shù)據(jù)和處理它們的方法封裝在一起,構成一個統(tǒng)一體——對象。程序中用對象模型來建,F(xiàn)實世界中的事物。這樣就使得空間模型的結構和問題空間模型的結構相一致。使用面向對象的方法解決問題的思路更加符合人類一貫的思維方法。
(2) 面向對象的封裝技術為程序提供了更好的數(shù)據(jù)安全性。
(3) 面向對象的繼承技術為程序提供了更好的可重用性。
(4) 面向對象的多態(tài)調用技術使程序具有更好的可擴展性。
(5) 和傳統(tǒng)的面向過程的程序設計方法相比,面向對象的程序設計技術更適合開發(fā)大型的圖形界面應用程序。
目前,常用的面向對象的編程語言有C++、Java、C#等。
C++語言是由C語言發(fā)展演變成的一種面向對象的程序設計語言。它既具備C語言面向過程設計方法的特點,同時又支持面向對象的程序設計方法。它是目前程序員使用最多的編程語言之一。
本書以C++語言為基礎,闡述面向對象的編程原理。本書的特色是內容全面、語言簡潔易懂、重點突出,是一部面向大學本科計算機科學相關專業(yè)的入門教材。
為了使讀者能夠透徹理解面向對象編程的原理和方法,本書使用了大量自編的例程。全部例程的源代碼均使用Visual C++ 6.0編寫,并編譯通過。
本書由董正言主編,張聰、劉文濤、阮靈等老師也參加了部分章節(jié)的編寫工作。
由于學識水平和時間的限制,疏漏和不妥之處在所難免,敬請批評指正。
作者
2010年5月
第1章 軟件工程概述
1.1 軟件的定義與特點
1.1.1 什么是軟件
1.1.2 軟件的特點與本質
1.1.3 “沒有銀彈”——復雜性是“軟件危機”的本質原因
1.2 軟件工程的定義及研究的內容
1.2.1 科學、工程與技術的界定
1.2.2 軟件工程的定義與原理
1.2.3 軟件工程的3個要素
1.2.4 軟件開發(fā)方法——對客觀世界的認知觀
1.2.5 軟件工程與相關科學的關系
1.3 軟件工程的教育與知識體系
1.3.1 軟件工程的教育體系
1.3.2 CC2005的4個方向專業(yè)規(guī)范
1.3.3 軟件工程的知識體系——SWEBOK
1.4 軟件工程的標準
1.4.1 軟件工程標準化的意義
1.4.2 軟件工程的國際標準與體系
1.4.3 國家標準
1.5 計算機輔助軟件工程
1.6 軟件工程人員的職業(yè)道德與行為準則
本章小結
思考與練習
第2章 軟件過程
2.1 軟件過程
2.1.1 過程及其特征
2.1.2 軟件過程的公共框架
2.2 軟件過程模型
2.2.1 理解軟件過程模型
2.2.2 瀑布模型
2.2.3 演化軟件過程模型
2.2.4 快速原型開發(fā)方法
2.2.5 統(tǒng)一軟件過程
2.2.6 核心工作流
2.2.7 形式化方法模型
2.2.8 軟件復用一一基于構件的開發(fā)方法
2.2.9 第4代技術
2.2.10微軟公司的軟件過程模型
2.3 軟件過程改進
2.3.1 軟件能力成熟度模型——CMM與CMMI
2.3 CMM/CMMI的應用及面臨的問題
2.3.3 個體軟件過程
2.3.4 團隊軟件過程
2.3.5 CMM、TSP、PSP三者的關系
本章小結
思考與練習
第3章 軟件工程領域下的項目管理
3.1 項目管理的歷史實踐
3.1.1 遠古的偉大工程實踐
3.1.2 溝通的故事——巴比倫塔的倒塌
3.2 軟件項目管理的范圍與內容
3.2.1 什么是項目管理
3.2.2 軟件項目管理的范圍
3.2.3 人員
3.2.4 產品
3.2.5 過程
3.2.6 項目
3.3 軟件項目管理的活動一一從這里開始
3.3.1 軟件項目管理的活動概述
3.3.2 項目溝通與需求管理
3.3.3 軟件項目計劃的制定
3.3.4 項目范圍與管理
3.3.5 3-:作分解結構
3.3.6 軟件項目的組織
3.4 項目進度管理
3.4.1 項目里程碑
3.4.2 人員與工作量分配
3.4.3 項目進度管理的可視化工具
3.4.4 項目管理軟件及其功能
本章小結
思考與練習
第4章 軟件項目估算
4.1 軟件項目估算概述
4.1.1 什么是估算
4.1.2 軟件項目估算的特點
4.1.3 軟件項目估算的復雜性分析
4.1.4 軟件項目估算的相關內容
4.2 項目規(guī)模估算
4.2.1 基于代碼行的規(guī)模估算
4.2.2 功能點估算
4.2.3 基于計劃評審技術的規(guī)模估算
4.3 工作量估算
4.3.1 用代碼行與功能點估算工作量的例子
4.3.2 基于數(shù)學模型的工作量估算
4.3.3 COCOMO模型
4.3.4 COCOMOⅡ模型
4.3.5 Putnam模型
4.4 軟件成本估算
4.4.1 軟件項目成本的組成
4.4.2 軟件成本的估算方法
4.4.3 估算技術的應用與評價
4.5 項目進度估算
4.5.1 三點估算方法
4.5.2 項目進度獲取值分析——項目計劃與實際進展的定量比較
4.6 軟件工程經濟學
4.6.1 經濟學與工程經濟學
4.6.2 軟件工程經濟學研究的基本問題
4.6.3 資金的時間價值
4.6.4 軟件工程經濟學中的成本效益評價技術
本章小結
思考與練習
第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 正式技術復審
本章小結
思考與練習
第6章 軟件風險管理
6.1 軟件項目的風險管理
6.1.1 風險與項目風險
6.1.2 軟件項目風險與管理
6.1.3 軟件風險的定義
6.1.4 軟件風險的類型
6.2 軟件風險管理的體系框架
6.2.1 常見風險管理過程框架
6.2.2 軟件風險管理的一般過程
6.3 風險識別
6.3.1 風險識別過程
6.3.2 風險識別的方法與工具
6.4 風險分析
6.4.1 風險分析過程
6.4.2 風險分析的技術與工具
6.5 風險規(guī)劃
6.5.1 風險規(guī)劃過程
6.5.2 風險規(guī)劃的工具與技術
6.6 風險監(jiān)控
6.6.1 風險監(jiān)控過程
6.6.2 風險監(jiān)控的技術與方法
6.6.3 風險監(jiān)控與管理計劃——RMMM計劃
本章小結
思考與練習
第2篇 結構化開發(fā)方法
第7章 面向過程的結構化分析
7.1 系統(tǒng)工程
……
第3篇 面向對象的開發(fā)方法
第11章 面向對象概述
第12章 面向對象分析
第13章 面向對象設計
第14章 面向對象測試
第15章 面向對象系統(tǒng)的技術度量
第4篇 軟件工程高級專題
第16章 敏捷過程開發(fā)
第17章 Web工程
第18章 形式化方法
附錄A 軟件工程和知可視化表征
瀑布模型強調系統(tǒng)開發(fā)應有完整的周期,且必須完整地經歷周期中的每一個開發(fā)階段。由于該模式強調系統(tǒng)開發(fā)過程需有完整的規(guī)劃、分析、設計、測試及文件等管理與控制,因此能有效地確保系統(tǒng)品質,它已經成為業(yè)界大多數(shù)軟件開發(fā)的標準。
“線性”是人們最容易掌握并能熟練應用的思維方法。當人們碰到一個復雜的“非線性”問題時,總是千方百計地將其分解或轉化為一系列簡單的線性問題,然后逐個解決。然而在實踐中,過程很少能夠以純線性的方式進行。應提倡以一種迭代的方式重復地使用瀑布模型,通過回到前面的階段或改變前一階段的結果的迭代是非常普遍的。但是,很多人忽視了這一點。
線性順序模型過程的缺點也是非常明顯的,主要有以下幾點。
。1)實際的項目很少按照該模型給出的順序進行。
。2)項目初期用戶常常難以清楚地給出所有需求,而這恰恰是線性順序模型所必須給出的。
。3)用戶必須有耐心,程序的運行版本要等到項目開發(fā)晚期才能得到。大的錯誤如果到檢查運行程序時才被發(fā)現(xiàn),后果可能是災難性的。
(4)開發(fā)者常常被不必要地耽擱。項目組某些成員不得不等待組內其他成員先完成其依賴的任務。
盡管如此,瀑布模型仍然是軟件工程中應用最廣泛的過程模型。很顯然,它比起軟件開發(fā)中隨意的狀態(tài)要好得多。
2.2.3演化軟件過程模型
人們已經越來越認識到軟件就像所有復雜系統(tǒng)一樣要經過一段時間的演化。業(yè)務和產品需求隨著開發(fā)的發(fā)展常常發(fā)生改變,想找到最終產品的一條直線路徑是不可能的。
演化模型是利用一種迭代的思想方法,它的特征是使軟件工程師漸進地開發(fā)逐步完善的軟件版本。主要包括增量模型和螺旋模型兩種范型。