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