軟件工程軟件第1章課件_第1頁
軟件工程軟件第1章課件_第2頁
軟件工程軟件第1章課件_第3頁
軟件工程軟件第1章課件_第4頁
軟件工程軟件第1章課件_第5頁
已閱讀5頁,還剩167頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

軟件工程導(dǎo)論

主講教師:顔富強(qiáng)

2010年下學(xué)期軟件工程導(dǎo)論

主講教師:顔富強(qiáng)

2010年下學(xué)期引入:軟件工程的背景和目的為什么要學(xué)習(xí)軟件工程?實(shí)例引入:軟件工程的背景和目的第1章軟件工程學(xué)概述1.1軟件危機(jī)1.2軟件工程1.3軟件生命周期1.4軟件過程1.5小結(jié)第1章軟件工程學(xué)概述1.1軟件危機(jī)開發(fā)軟件所需的高成本同產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這就稱之為“軟件危機(jī)”。1968年北大西洋公約組織的計(jì)算機(jī)科學(xué)家在聯(lián)邦德國召開國際會(huì)議,討論軟件危機(jī)問題,在這次會(huì)議上正式提出并使用了“軟件工程”這個(gè)名詞,一門新興的工程學(xué)科就此誕生了。1.1軟件危機(jī)開發(fā)軟件所需的高成本同產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾軟件危機(jī)是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。這些問題絕不僅僅是不能正常運(yùn)行的軟件才具有的,實(shí)際上,幾乎所有軟件都不同程度地存在這些問題。概括地說,軟件危機(jī)包含下述兩方面的問題:如何開發(fā)軟件,以滿足對(duì)軟件日益增長的需求;如何維護(hù)數(shù)量不斷膨脹的已有軟件。具體地說,軟件危機(jī)主要有以下一些典型表現(xiàn)。1.1.1軟件危機(jī)的介紹軟件危機(jī)是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一(1)對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。 實(shí)際成本比估計(jì)成本有可能高出一個(gè)數(shù)量級(jí),實(shí)際進(jìn)度比預(yù)期進(jìn)度拖延幾個(gè)月甚至幾年的現(xiàn)象并不罕見。這種現(xiàn)象降低了軟件開發(fā)組織的信譽(yù)。而為了趕進(jìn)度和節(jié)約成本所采取的一些權(quán)宜之計(jì)又往往損害了軟件產(chǎn)品的質(zhì)量,從而不可避免地會(huì)引起用戶的不滿。(1)對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。 實(shí)(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件開發(fā)人員常常在對(duì)用戶要求只有模糊的了解,甚至對(duì)所要解決的問題還沒有確切認(rèn)識(shí)的情況下,就匆忙著手編寫程序。軟件開發(fā)人員和用戶之間的信息交流往往很不充分,“閉門造車”必然導(dǎo)致最終的產(chǎn)品不符合用戶的實(shí)際需要。(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3)軟件產(chǎn)品的質(zhì)量往往靠不住。軟件可靠性和質(zhì)量保證的確切的定量概念剛剛出現(xiàn)不久,軟件質(zhì)量保證技術(shù)(審查、復(fù)審和測試)還沒有堅(jiān)持不懈地應(yīng)用到軟件開發(fā)的全過程中,這些都導(dǎo)致軟件產(chǎn)品發(fā)生質(zhì)量問題。(4)軟件常常是不可維護(hù)的。很多程序中的錯(cuò)誤是非常難改正的,實(shí)際上不可能使這些程序適應(yīng)新的硬件環(huán)境,也不能根據(jù)用戶的需要在原有程序中增加一些新的功能?!翱芍赜玫能浖边€是一個(gè)沒有完全做到的、正在努力追求的目標(biāo),人們?nèi)匀辉谥貜?fù)開發(fā)類似的或基本類似的軟件。軟件工程軟件第1章(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。計(jì)算機(jī)軟件不僅僅是程序,還應(yīng)該有一整套文檔資料。這些文檔資料應(yīng)該是在軟件開發(fā)過程中產(chǎn)生出來的,而且應(yīng)該是“最新式的”(即和程序代碼完全一致的)。軟件開發(fā)組織的管理人員可以使用這些文檔資料作為“里程碑”,來管理和評(píng)價(jià)軟件開發(fā)工程的進(jìn)展?fàn)顩r;軟件開發(fā)人員可以利用它們作為通信工具,在軟件開發(fā)過程中準(zhǔn)確地交流信息;對(duì)于軟件維護(hù)人員而言,這些文檔資料更是必不可少的。缺乏必要的文檔資料或者文檔資料不合格,必然給軟件開發(fā)和維護(hù)帶來許多嚴(yán)重的困難和問題。(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。計(jì)算機(jī)軟件不僅僅是程序,(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例逐年上升。由于微電子學(xué)技術(shù)的進(jìn)步和生產(chǎn)自動(dòng)化程度不斷提高,硬件成本逐年下降,然而軟件開發(fā)需要大量人力,軟件成本隨著通貨膨脹以及軟件規(guī)模和數(shù)量的不斷擴(kuò)大而持續(xù)上升。美國在1985年軟件成本大約已占計(jì)算機(jī)系統(tǒng)總成本的90%。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計(jì)算機(jī)應(yīng)用迅速普及深入的趨勢。軟件產(chǎn)品“供不應(yīng)求”的現(xiàn)象使人類不能充分利用現(xiàn)代計(jì)算機(jī)硬件提供的巨大潛力。(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例逐年上升。由于在軟件開發(fā)和維護(hù)的過程中存在這么多嚴(yán)重問題,一方面與軟件本身的特點(diǎn)有關(guān),另一方面也和軟件開發(fā)與維護(hù)的方法不正確有關(guān)。1.1.2產(chǎn)生軟件危機(jī)的原因在軟件開發(fā)和維護(hù)的過程中存在這么多嚴(yán)重問題,一方面與軟件不同于一般程序,它的一個(gè)顯著特點(diǎn)是規(guī)模龐大,而且程序復(fù)雜性將隨著程序規(guī)模的增加而呈指數(shù)上升。為了在預(yù)定時(shí)間內(nèi)開發(fā)出規(guī)模龐大的軟件,必須由許多人分工合作,然而,如何保證每個(gè)人完成的工作合在一起確實(shí)能構(gòu)成一個(gè)高質(zhì)量的大型軟件系統(tǒng),更是一個(gè)極端復(fù)雜困難的問題,不僅涉及許多技術(shù)問題,諸如分析方法、設(shè)計(jì)方法、形式說明方法、版本控制等,更重要的是必須有嚴(yán)格而科學(xué)的管理。軟件不同于一般程序,它的一個(gè)顯著特點(diǎn)是規(guī)模龐大,而且目前相當(dāng)多的軟件專業(yè)人員對(duì)軟件開發(fā)和維護(hù)還有不少糊涂觀念,在實(shí)踐過程中或多或少地采用了錯(cuò)誤的方法和技術(shù),這可能是使軟件問題發(fā)展成軟件危機(jī)的主要原因。目前相當(dāng)多的軟件專業(yè)人員對(duì)軟件開發(fā)和維護(hù)還有不少糊涂觀念,在一個(gè)軟件從定義、開發(fā)、使用和維護(hù),直到最終被廢棄,要經(jīng)歷一個(gè)漫長的時(shí)期,這就如同一個(gè)人要經(jīng)過胎兒、兒童、青年、中年和老年,直到最終死亡的漫長時(shí)期一樣。通常把軟件經(jīng)歷的這個(gè)漫長的時(shí)期稱為生命周期。軟件開發(fā)最初的工作應(yīng)是問題定義,也就是確定要求解決的問題是什么;然后要進(jìn)行可行性研究,決定該問題是否存在一個(gè)可行的解決辦法;接下來應(yīng)該進(jìn)行需求分析,也就是深入具體地了解用戶的要求,在所要開發(fā)的系統(tǒng)(不妨稱之為目標(biāo)系統(tǒng))必須做什么這個(gè)問題上和用戶取得完全一致的看法。一個(gè)軟件從定義、開發(fā)、使用和維護(hù),直到最終被廢棄,經(jīng)過上述軟件定義時(shí)期的準(zhǔn)備工作才能進(jìn)入開發(fā)時(shí)期,而在開發(fā)時(shí)期首先需要對(duì)軟件進(jìn)行設(shè)計(jì)(通常又分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段),然后才能進(jìn)入編寫程序的階段,程序編寫完之后還必須經(jīng)過大量的測試工作(需要的工作量通常占軟件開發(fā)全部工作量的40%~50%)才能最終交付使用。所以,編寫程序只是軟件開發(fā)過程中的一個(gè)階段,而且在典型的軟件開發(fā)工程中,編寫程序所需的工作量只占軟件開發(fā)全部工作量的10%~20%。經(jīng)過上述軟件定義時(shí)期的準(zhǔn)備工作才能進(jìn)入開發(fā)時(shí)期,而在嚴(yán)重的問題是,在軟件開發(fā)的不同階段進(jìn)行修改需要付出的代價(jià)是很不相同的,在早期引入變動(dòng),涉及的面較少,因而代價(jià)也比較低;而在開發(fā)的中期軟件配置的許多成分已經(jīng)完成,引入一個(gè)變動(dòng)要對(duì)所有已完成的配置成分都做相應(yīng)的修改,不僅工作量大,而且邏輯上也更復(fù)雜,因此付出的代價(jià)劇增;在軟件“已經(jīng)完成”時(shí)再引入變動(dòng),當(dāng)然需要付出更高的代價(jià)。根據(jù)美國一些軟件公司的統(tǒng)計(jì)資料,在后期引入一個(gè)變動(dòng)比在早期引入相同變動(dòng)所需付出的代價(jià)高2~3個(gè)數(shù)量級(jí)。圖1.1定性地描繪了在不同時(shí)期引入一個(gè)變動(dòng)需要付出的代價(jià)的變化趨勢。嚴(yán)重的問題是,在軟件開發(fā)的不同階段進(jìn)行修改需要付圖1.1引入同一變動(dòng)付出的代價(jià)隨時(shí)間變化的趨勢軟件工程軟件第1章

統(tǒng)計(jì)數(shù)據(jù)表明,實(shí)際上用于軟件維護(hù)的費(fèi)用占軟件總費(fèi)用的55%~70%。軟件工程學(xué)的一個(gè)重要目標(biāo)就是提高軟件的可維護(hù)性,減少軟件維護(hù)的代價(jià)。統(tǒng)計(jì)數(shù)據(jù)表明,實(shí)際上用于軟件維護(hù)的費(fèi)用占軟件總費(fèi)用的5例題:根據(jù)歷史數(shù)據(jù)可以做出如下的假設(shè):對(duì)計(jì)算機(jī)存儲(chǔ)容量的需求大致按下面公式描述的趨勢逐年增加:M=4080e0.28(Y-1960)

存儲(chǔ)器的價(jià)格按下面公式描述的趨勢逐年下降:P1=0.3×0.72Y-1974(美分/位)如果計(jì)算機(jī)字長為16位,則存儲(chǔ)器價(jià)格下降的趨勢為:P2=0.048×0.72Y-1974(美元/字)在上列公式中Y代表年份,M是存儲(chǔ)容量(字?jǐn)?shù)),P1和P2代表價(jià)格。例題:根據(jù)歷史數(shù)據(jù)可以做出如下的假設(shè):基于上述假設(shè)可以比較計(jì)算機(jī)硬件和軟件成本的變化趨勢。要求計(jì)算:(1)在1985年對(duì)計(jì)算機(jī)存儲(chǔ)容量的需求估計(jì)是多少?如果字長為16位,這個(gè)存儲(chǔ)器的價(jià)格是多少?(2)假設(shè)在1985年一名程序員每天可開發(fā)出10條指令,每月工作20天,程序員的平均工資是每月4000美元。如果一條指令為一個(gè)字長,計(jì)算使存儲(chǔ)器裝滿程序所需用的成本。基于上述假設(shè)可以比較計(jì)算機(jī)硬件和軟件成本的變化趨勢。要求計(jì)算思考題:假設(shè)在1995年存儲(chǔ)器字長為32位,一名程序員每天可開發(fā)出30條指令,程序員的月平均工資為6000美元,重復(fù)(1)、(2)題。思考題:為了消除軟件危機(jī),首先應(yīng)該對(duì)計(jì)算機(jī)軟件有一個(gè)正確的認(rèn)識(shí)。一個(gè)軟件必須由一個(gè)完整的配置組成,事實(shí)上,軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其中,程序是能夠完成預(yù)定功能和性能的可執(zhí)行的指令序列;數(shù)據(jù)是使程序能夠適當(dāng)?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構(gòu);文檔是開發(fā)、使用和維護(hù)程序所需要的圖文資料。1.1.3消除軟件危機(jī)的途徑為了消除軟件危機(jī),首先應(yīng)該對(duì)計(jì)算機(jī)軟件有一個(gè)正確的更重要的是,必須充分認(rèn)識(shí)到軟件開發(fā)不是某種個(gè)體勞動(dòng)的神秘技巧,而應(yīng)該是一種組織良好、管理嚴(yán)密、各類人員協(xié)同配合、共同完成的工程項(xiàng)目。必須充分吸取和借鑒人類長期以來從事各種工程項(xiàng)目所積累的行之有效的原理、概念、技術(shù)和方法,特別要吸取幾十年來人類從事計(jì)算機(jī)硬件研究和開發(fā)的經(jīng)驗(yàn)教訓(xùn)??傊?,為了解決軟件危機(jī),既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施。軟件工程軟件第1章概括地說,軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的一門工程學(xué)科。采用工程的概念、原理、技術(shù)和方法來開發(fā)與維護(hù)軟件,把經(jīng)過時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟(jì)地開發(fā)出高質(zhì)量的軟件并有效地維護(hù)它,這就是軟件工程。1.2軟件工程

1.2.1軟件工程的介紹概括地說,軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的一門雖然軟件工程的不同定義使用了不同詞句,強(qiáng)調(diào)的重點(diǎn)也有差異,但是,人們普遍認(rèn)為軟件工程具有下述的本質(zhì)特性。1.軟件工程關(guān)注于大型程序的構(gòu)造“大”與“小”的分界線并不十分清晰。通常把一個(gè)人在較短時(shí)間內(nèi)寫出的程序稱為小型程序,而把多人合作用時(shí)半年以上才寫出的程序稱為大型程序。傳統(tǒng)的程序設(shè)計(jì)技術(shù)和工具是支持小型程序設(shè)計(jì)的,不能簡單地把這些技術(shù)和工具用于開發(fā)大型程序。事實(shí)上,在此處使用術(shù)語“程序”并不十分恰當(dāng),現(xiàn)在的軟件開發(fā)項(xiàng)目通常構(gòu)造出包含若干個(gè)相關(guān)程序的“系統(tǒng)”。雖然軟件工程的不同定義使用了不同詞句,強(qiáng)調(diào)的重點(diǎn)也有差異,但2.軟件工程的中心課題是控制復(fù)雜性通常,軟件所解決的問題十分復(fù)雜,以致不能把問題作為一個(gè)整體通盤考慮。人們不得不把問題分解,使得分解出的每個(gè)部分是可理解的,而且各部分之間保持簡單的通信關(guān)系。用這種方法并不能降低問題的整體復(fù)雜性,但是卻可使它變成可以管理的。注意,許多軟件的復(fù)雜性主要不是由問題的內(nèi)在復(fù)雜性造成的,而是由必須處理的大量細(xì)節(jié)造成的。2.軟件工程的中心課題是控制復(fù)雜性3.軟件經(jīng)常變化絕大多數(shù)軟件都模擬了現(xiàn)實(shí)世界的某一部分?,F(xiàn)實(shí)世界在不斷變化,軟件為了不被很快淘汰,必須隨著所模擬的現(xiàn)實(shí)世界一起變化。因此,在軟件系統(tǒng)交付使用后仍然需要耗費(fèi)成本,而且在開發(fā)過程中必須考慮軟件將來可能的變化。4.開發(fā)軟件的效率非常重要目前,社會(huì)對(duì)新應(yīng)用系統(tǒng)的需求超過了人力資源所能提供的限度,軟件供不應(yīng)求的現(xiàn)象日益嚴(yán)重。因此,軟件工程的一個(gè)重要課題就是,尋求開發(fā)與維護(hù)軟件的更好更有效的方法和工具。3.軟件經(jīng)常變化5.和諧地合作是開發(fā)軟件的關(guān)鍵軟件處理的問題十分龐大,必須多人協(xié)同工作才能解決這類問題。為了有效地合作,必須明確地規(guī)定每個(gè)人的責(zé)任和相互通信的方法。事實(shí)上僅有上述規(guī)定還不夠,每個(gè)人還必須嚴(yán)格地按規(guī)定行事。為了迫使大家遵守規(guī)定,應(yīng)該運(yùn)用標(biāo)準(zhǔn)和規(guī)程。通常,可以用工具來支持這些標(biāo)準(zhǔn)和規(guī)程??傊?,紀(jì)律是成功地完成軟件開發(fā)項(xiàng)目的一個(gè)關(guān)鍵。5.和諧地合作是開發(fā)軟件的關(guān)鍵6.軟件必須有效地支持它的用戶開發(fā)軟件的目的是支持用戶的工作。軟件提供的功能應(yīng)該能有效地協(xié)助用戶完成他們的工作。如果用戶對(duì)軟件系統(tǒng)不滿意,可以棄用該系統(tǒng),至少也會(huì)立即提出新的需求。因此,僅僅用正確的方法構(gòu)造系統(tǒng)還不夠,還必須構(gòu)造出正確的系統(tǒng)。有效地支持用戶意味著必須仔細(xì)地研究用戶,以確定適當(dāng)?shù)墓δ苄枨?、可用性要求及其他質(zhì)量要求(例如,可靠性、響應(yīng)時(shí)間等)。有效地支持用戶還意味著,軟件開發(fā)不僅應(yīng)該提交軟件產(chǎn)品,而且應(yīng)該寫出用戶手冊和培訓(xùn)材料,此外,還必須注意建立使用新系統(tǒng)的環(huán)境。6.軟件必須有效地支持它的用戶7.在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品這個(gè)特性與前兩個(gè)特性緊密相關(guān)。軟件工程師是諸如Java程序設(shè)計(jì)、軟件體系結(jié)構(gòu)、測試或統(tǒng)一建模語言(UML)等方面的專家,他們通常并不是圖書館管理、航空控制或銀行事務(wù)等領(lǐng)域的專家,但是他們卻不得不為這些領(lǐng)域開發(fā)應(yīng)用系統(tǒng)。缺乏應(yīng)用領(lǐng)域的相關(guān)知識(shí),是軟件開發(fā)項(xiàng)目出現(xiàn)問題的常見原因。7.在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文自從1968年在聯(lián)邦德國召開的國際會(huì)議上正式提出并使用了“軟件工程”這個(gè)術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或“信條”。著名的軟件工程專家B.W.Boehm綜合這些學(xué)者們的意見并總結(jié)了TRW公司多年開發(fā)軟件的經(jīng)驗(yàn),于1983年在一篇論文中提出了軟件工程的7條基本原理。他認(rèn)為這7條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合。1.2.2軟件工程的基本原理自從1968年在聯(lián)邦德國召開的國際會(huì)議上正式提出并這7條原理是互相獨(dú)立的,其中任意6條原理的組合都不能代替另一條原理,因此,它們是缺一不可的最小集合,然而這7條原理又是相當(dāng)完備的,人們雖然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是,可以證明在此之前已經(jīng)提出的100多條軟件工程原理都可以由這7條原理的任意組合蘊(yùn)含或派生。下面簡要介紹軟件工程的7條基本原理。1.用分階段的生命周期計(jì)劃嚴(yán)格管理有人經(jīng)統(tǒng)計(jì)發(fā)現(xiàn),在不成功的軟件項(xiàng)目中有一半左右是由于計(jì)劃不周造成的,可見把建立完善的計(jì)劃作為第一條基本原理是吸取了前人的教訓(xùn)而提出來的。這7條原理是互相獨(dú)立的,其中任意6條原理的組合都不能代替另一2.堅(jiān)持進(jìn)行階段評(píng)審當(dāng)時(shí)已經(jīng)認(rèn)識(shí)到,軟件的質(zhì)量保證工作不能等到編碼階段結(jié)束之后再進(jìn)行。這樣說至少有兩個(gè)理由:第一,大部分錯(cuò)誤是在編碼之前造成的,例如,根據(jù)Boehm等人的統(tǒng)計(jì),設(shè)計(jì)錯(cuò)誤占軟件錯(cuò)誤的63%,編碼錯(cuò)誤僅占37%;第二,錯(cuò)誤發(fā)現(xiàn)與改正得越晚,所需付出的代價(jià)也越高(參見圖1.1)。因此,在每個(gè)階段都進(jìn)行嚴(yán)格的評(píng)審,以便盡早發(fā)現(xiàn)在軟件開發(fā)過程中所犯的錯(cuò)誤,是一條必須遵循的重要原則。3.實(shí)行嚴(yán)格的產(chǎn)品控制2.堅(jiān)持進(jìn)行階段評(píng)審在軟件開發(fā)過程中改變需求是難免的,只能依靠科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求。也就是說,當(dāng)改變需求時(shí),為了保持軟件各個(gè)配置成分的一致性,必須實(shí)行嚴(yán)格的產(chǎn)品控制,其中主要是實(shí)行基準(zhǔn)配置管理。所謂基準(zhǔn)配置又稱為基線配置,它們是經(jīng)過階段評(píng)審后的軟件配置成分。基準(zhǔn)配置管理也稱為變動(dòng)控制:一切有關(guān)修改軟件的建議,特別是涉及到對(duì)基準(zhǔn)配置的修改建議,都必須按照嚴(yán)格的規(guī)程進(jìn)行評(píng)審,獲得批準(zhǔn)以后才能實(shí)施修改。絕對(duì)不能誰想修改軟件,就隨意進(jìn)行修改。在軟件開發(fā)過程中改變需求是難免的,只能依靠科學(xué)的產(chǎn)品控制技術(shù)4.采用現(xiàn)代程序設(shè)計(jì)技術(shù)從提出軟件工程的概念開始,人們一直把主要精力用于研究各種新的程序設(shè)計(jì)技術(shù),并進(jìn)一步研究各種先進(jìn)的軟件開發(fā)與維護(hù)技術(shù)。實(shí)踐表明,采用先進(jìn)的技術(shù)不僅可以提高軟件開發(fā)和維護(hù)的效率,而且可以提高軟件產(chǎn)品的質(zhì)量。4.采用現(xiàn)代程序設(shè)計(jì)技術(shù)5.結(jié)果應(yīng)能清楚地審查軟件產(chǎn)品不同于一般的物理產(chǎn)品,它是看不見摸不著的邏輯產(chǎn)品。軟件開發(fā)人員(或開發(fā)小組)的工作進(jìn)展情況可見性差,難以準(zhǔn)確度量,從而使得軟件產(chǎn)品的開發(fā)過程比一般產(chǎn)品的開發(fā)過程更難于評(píng)價(jià)和管理。為了提高軟件開發(fā)過程的可見性,更好地進(jìn)行管理,應(yīng)該根據(jù)軟件開發(fā)項(xiàng)目的總目標(biāo)及完成期限,規(guī)定開發(fā)組織的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使得所得到的結(jié)果能夠清楚地審查。5.結(jié)果應(yīng)能清楚地審查6.開發(fā)小組的人員應(yīng)該少而精這條基本原理的含義是,軟件開發(fā)小組的組成人員的素質(zhì)應(yīng)該好,而人數(shù)則不宜過多。開發(fā)小組人員的素質(zhì)和數(shù)量是影響軟件產(chǎn)品質(zhì)量和開發(fā)效率的重要因素。素質(zhì)高的人員的開發(fā)效率比素質(zhì)低的人員的開發(fā)效率可能高幾倍至幾十倍,而且素質(zhì)高的人員所開發(fā)的軟件中的錯(cuò)誤明顯少于素質(zhì)低的人員所開發(fā)的軟件中的錯(cuò)誤。此外,隨著開發(fā)小組人員數(shù)目的增加,因?yàn)榻涣髑闆r討論問題而造成的通信開銷也急劇增加。當(dāng)開發(fā)小組人員數(shù)為N時(shí),可能的通信路徑有N(N-1)/2條,可見隨著人數(shù)N的增大,通信開銷將急劇增加。因此,組成少而精的開發(fā)小組是軟件工程的一條基本原理。6.開發(fā)小組的人員應(yīng)該少而精7.承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性遵循上述6條基本原理,就能夠按照當(dāng)代軟件工程基本原理實(shí)現(xiàn)軟件的工程化生產(chǎn),但是,僅有上述6條原理并不能保證軟件開發(fā)與維護(hù)的過程能趕上時(shí)代前進(jìn)的步伐,能跟上技術(shù)的不斷進(jìn)步。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第7條基本原理。按照這條原理,不僅要積極主動(dòng)地采納新的軟件技術(shù),而且要注意不斷總結(jié)經(jīng)驗(yàn)。7.承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性軟件工程包括技術(shù)和管理兩方面的內(nèi)容,是技術(shù)與管理緊密結(jié)合所形成的工程學(xué)科。所謂管理就是通過計(jì)劃、組織和控制等一系列活動(dòng),合理地配置和使用各種資源,以達(dá)到既定目標(biāo)的過程。通常把在軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為方法學(xué)(methodology),也稱為范型(paradigm)。在軟件工程領(lǐng)域中,這兩個(gè)術(shù)語的含義基本相同。1.2.3軟件工程方法學(xué)軟件工程包括技術(shù)和管理兩方面的內(nèi)容,是技術(shù)與管理緊密結(jié)合所形軟件工程方法學(xué)包含3個(gè)要素:方法、工具和過程。其中,方法是完成軟件開發(fā)的各項(xiàng)任務(wù)的技術(shù)方法,回答“怎樣做”的問題;工具是為運(yùn)用方法而提供的自動(dòng)的或半自動(dòng)的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。目前使用得最廣泛的軟件工程方法學(xué),分別是傳統(tǒng)方法學(xué)和面向?qū)ο蠓椒▽W(xué)。軟件工程方法學(xué)包含3個(gè)要素:方法、工具和過程。其中,方法是完1.傳統(tǒng)方法學(xué)傳統(tǒng)方法學(xué)也稱為生命周期方法學(xué)或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)(結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化實(shí)現(xiàn))來完成軟件開發(fā)的各項(xiàng)任務(wù),并使用適當(dāng)?shù)能浖ぞ呋蜍浖こ汰h(huán)境來支持結(jié)構(gòu)化技術(shù)的運(yùn)用。這種方法學(xué)把軟件生命周期的全過程依次劃分為若干個(gè)階段,然后順序地完成每個(gè)階段的任務(wù)。采用這種方法學(xué)開發(fā)軟件的時(shí)候,從對(duì)問題的抽象邏輯分析開始,一個(gè)階段一個(gè)階段地進(jìn)行開發(fā)。1.傳統(tǒng)方法學(xué)2.面向?qū)ο蠓椒▽W(xué)當(dāng)軟件規(guī)模龐大,或者對(duì)軟件的需求是模糊的或會(huì)隨時(shí)間而變化的時(shí)候,使用傳統(tǒng)方法學(xué)開發(fā)軟件往往不成功,此外,使用傳統(tǒng)方法學(xué)開發(fā)出的軟件,維護(hù)起來仍然很困難。2.面向?qū)ο蠓椒▽W(xué)概括地說,軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為軟件維護(hù))3個(gè)時(shí)期組成,每個(gè)時(shí)期又進(jìn)一步劃分成若干個(gè)階段。軟件定義時(shí)期的任務(wù)是:確定軟件開發(fā)工程必須完成的總目標(biāo);確定工程的可行性;導(dǎo)出實(shí)現(xiàn)工程目標(biāo)應(yīng)該采用的策略及系統(tǒng)必須完成的功能;估計(jì)完成該項(xiàng)工程需要的資源和成本,并且制定工程進(jìn)度表。這個(gè)時(shí)期的工作通常又稱為系統(tǒng)分析,由系統(tǒng)分析員負(fù)責(zé)完成。軟件定義時(shí)期通常進(jìn)一步劃分成3個(gè)階段,即問題定義、可行性研究和需求分析。1.3軟件生命周期概括地說,軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為開發(fā)時(shí)期具體設(shè)計(jì)和實(shí)現(xiàn)在前一個(gè)時(shí)期定義的軟件,它通常由下述4個(gè)階段組成:總體設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼和單元測試,綜合測試。其中前兩個(gè)階段又稱為系統(tǒng)設(shè)計(jì),后兩個(gè)階段又稱為系統(tǒng)實(shí)現(xiàn)。維護(hù)時(shí)期的主要任務(wù)是使軟件持久地滿足用戶的需要。具體地說,當(dāng)軟件在使用過程中發(fā)現(xiàn)錯(cuò)誤時(shí)應(yīng)該加以改正;當(dāng)環(huán)境改變時(shí)應(yīng)該修改軟件以適應(yīng)新的環(huán)境;當(dāng)用戶有新要求時(shí)應(yīng)該及時(shí)改進(jìn)軟件以滿足用戶的新需要。通常對(duì)維護(hù)時(shí)期不再進(jìn)一步劃分階段,但是每一次維護(hù)活動(dòng)本質(zhì)上都是一次壓縮和簡化了的定義和開發(fā)過程。開發(fā)時(shí)期具體設(shè)計(jì)和實(shí)現(xiàn)在前一個(gè)時(shí)期定義的軟件,它通常由下述4下面扼要介紹軟件生命周期每個(gè)階段的基本任務(wù)。1.問題定義問題定義階段必須回答的關(guān)鍵問題是:“要解決的問題是什么?”如果不知道問題是什么就試圖解決這個(gè)問題,顯然是盲目的,只會(huì)白白浪費(fèi)時(shí)間和金錢,最終得出的結(jié)果很可能是毫無意義的。盡管確切地定義問題的必要性是十分明顯的,但是在實(shí)踐中它卻可能是最容易被忽視的一個(gè)步驟。通過對(duì)客戶的訪問調(diào)查,系統(tǒng)分析員扼要地寫出關(guān)于問題性質(zhì)、工程目標(biāo)和工程規(guī)模的書面報(bào)告,經(jīng)過討論和必要的修改之后這份報(bào)告應(yīng)該得到客戶的確認(rèn)。下面扼要介紹軟件生命周期每個(gè)階段的基本任務(wù)。2.可行性研究這個(gè)階段要回答的關(guān)鍵問題是:“對(duì)于上一個(gè)階段所確定的問題有行得通的解決辦法嗎?”為了回答這個(gè)問題,系統(tǒng)分析員需要進(jìn)行一次大大壓縮和簡化了的系統(tǒng)分析和設(shè)計(jì)過程,也就是在較抽象的高層次上進(jìn)行的分析和設(shè)計(jì)過程??尚行匝芯繎?yīng)該比較簡短,這個(gè)階段的任務(wù)不是具體解決問題,而是研究問題的范圍,探索這個(gè)問題是否值得去解,是否有可行的解決辦法。2.可行性研究可行性研究的結(jié)果是使用部門負(fù)責(zé)人作出是否繼續(xù)進(jìn)行這項(xiàng)工程的決定的重要依據(jù),一般說來,只有投資可能取得較大效益的那些工程項(xiàng)目才值得繼續(xù)進(jìn)行下去??尚行匝芯恳院蟮哪切╇A段將需要投入更多的人力物力。及時(shí)終止不值得投資的工程項(xiàng)目,可以避免更大的浪費(fèi)。3.需求分析這個(gè)階段的任務(wù)仍然不是具體地解決問題,而是準(zhǔn)確地確定“為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能??尚行匝芯康慕Y(jié)果是使用部門負(fù)責(zé)人作出是否繼續(xù)進(jìn)行這項(xiàng)工程的決4.總體設(shè)計(jì)這個(gè)階段必須回答的關(guān)鍵問題是:“概括地說,應(yīng)該怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)?”總體設(shè)計(jì)又稱為概要設(shè)計(jì)。首先,應(yīng)該設(shè)計(jì)出實(shí)現(xiàn)目標(biāo)系統(tǒng)的幾種可能的方案。通常至少應(yīng)該設(shè)計(jì)出低成本、中等成本和高成本等3種方案。軟件工程師應(yīng)該用適當(dāng)?shù)谋磉_(dá)工具描述每種方案,分析每種方案的優(yōu)缺點(diǎn),并在充分權(quán)衡各種方案的利弊的基礎(chǔ)上,推薦一個(gè)最佳方案。此外,還應(yīng)該制定出實(shí)現(xiàn)最佳方案的詳細(xì)計(jì)劃。如果客戶接受所推薦的方案,則應(yīng)該進(jìn)一步完成下述的另一項(xiàng)主要任務(wù)。4.總體設(shè)計(jì)上述設(shè)計(jì)工作確定了解決問題的策略及目標(biāo)系統(tǒng)中應(yīng)包含的程序,但是,怎樣設(shè)計(jì)這些程序呢?軟件設(shè)計(jì)的一條基本原理就是,程序應(yīng)該模塊化,也就是說,一個(gè)程序應(yīng)該由若干個(gè)規(guī)模適中的模塊按合理的層次結(jié)構(gòu)組織而成。因此,總體設(shè)計(jì)的另一項(xiàng)主要任務(wù)就是設(shè)計(jì)程序的體系結(jié)構(gòu),也就是確定程序由哪些模塊組成以及模塊間的關(guān)系。5.詳細(xì)設(shè)計(jì)總體設(shè)計(jì)階段以比較抽象概括的方式提出了解決問題的辦法。詳細(xì)設(shè)計(jì)階段的任務(wù)就是把解法具體化,也就是回答下面這個(gè)關(guān)鍵問題:“應(yīng)該怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)呢?”上述設(shè)計(jì)工作確定了解決問題的策略及目標(biāo)系統(tǒng)中應(yīng)包含的程序,但這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。這種規(guī)格說明的作用很類似于其他工程領(lǐng)域中工程師經(jīng)常使用的工程藍(lán)圖,它們應(yīng)該包含必要的細(xì)節(jié),程序員可以根據(jù)它們寫出實(shí)際的程序代碼。詳細(xì)設(shè)計(jì)也稱為模塊設(shè)計(jì),在這個(gè)階段將詳細(xì)地設(shè)計(jì)每個(gè)模塊,確定實(shí)現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。6.編碼和單元測試這個(gè)階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護(hù)的程序模塊。這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒?jí)程序設(shè)計(jì)語言(必要時(shí)用匯編語言),把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成用選定的語言書寫的程序,并且仔細(xì)測試編寫出的每一個(gè)模塊。7.綜合測試這個(gè)階段的關(guān)鍵任務(wù)是通過各種類型的測試(及相應(yīng)的調(diào)試)使軟件達(dá)到預(yù)定的要求。最基本的測試是集成測試和驗(yàn)收測試。所謂集成測試是根據(jù)設(shè)計(jì)的軟件結(jié)構(gòu),把經(jīng)過單元測試檢驗(yàn)的模塊按某種選定的策略裝配起來,在裝配過程中對(duì)程序進(jìn)行必要的測試。所謂驗(yàn)收測試則是按照規(guī)格說明書的規(guī)定,由用戶對(duì)目標(biāo)系統(tǒng)進(jìn)行驗(yàn)收。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒?jí)程必要時(shí)還可以再通過現(xiàn)場測試或平行運(yùn)行等方法對(duì)目標(biāo)系統(tǒng)進(jìn)一步測試檢驗(yàn)。為了使用戶能夠積極參加驗(yàn)收測試,并且在系統(tǒng)投入生產(chǎn)性運(yùn)行以后能夠正確有效地使用這個(gè)系統(tǒng),通常需要以正式的或非正式的方式對(duì)用戶進(jìn)行培訓(xùn)。通過對(duì)軟件測試結(jié)果的分析可以預(yù)測軟件的可靠性;反之,根據(jù)對(duì)軟件可靠性的要求,也可以決定測試和調(diào)試過程什么時(shí)候可以結(jié)束。應(yīng)該用正式的文檔資料把測試計(jì)劃、詳細(xì)測試方案以及實(shí)際測試結(jié)果保存下來,作為軟件配置的一個(gè)組成部分。必要時(shí)還可以再通過現(xiàn)場測試或平行運(yùn)行等方法對(duì)目標(biāo)系統(tǒng)進(jìn)一步測8.軟件維護(hù)維護(hù)階段的關(guān)鍵任務(wù)是,通過各種必要的維護(hù)活動(dòng)使系統(tǒng)持久地滿足用戶的需要。通常有4類維護(hù)活動(dòng):改正性維護(hù),也就是診斷和改正在使用過程中發(fā)現(xiàn)的軟件錯(cuò)誤;適應(yīng)性維護(hù),即修改軟件以適應(yīng)環(huán)境的變化;完善性維護(hù),即根據(jù)用戶的要求改進(jìn)或擴(kuò)充軟件使它更完善;預(yù)防性維護(hù),即修改軟件為將來的維護(hù)活動(dòng)預(yù)先做準(zhǔn)備。8.軟件維護(hù)雖然沒有把維護(hù)階段進(jìn)一步劃分成更小的階段,但是實(shí)際上每一項(xiàng)維護(hù)活動(dòng)都應(yīng)該經(jīng)過提出維護(hù)要求(或報(bào)告問題),分析維護(hù)要求,提出維護(hù)方案,審批維護(hù)方案,確定維護(hù)計(jì)劃,修改軟件設(shè)計(jì),修改程序,測試程序,復(fù)查驗(yàn)收等一系列步驟,因此實(shí)質(zhì)上是經(jīng)歷了一次壓縮和簡化了的軟件定義和開發(fā)的全過程。每一項(xiàng)維護(hù)活動(dòng)都應(yīng)該準(zhǔn)確地記錄下來,作為正式的文檔資料加以保存。在實(shí)際從事軟件開發(fā)工作時(shí),軟件規(guī)模、種類、開發(fā)環(huán)境及開發(fā)時(shí)使用的技術(shù)方法等因素,都影響階段的劃分。雖然沒有把維護(hù)階段進(jìn)一步劃分成更小的階段,但是實(shí)際上每一項(xiàng)維軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。1.4軟件過程軟件過程是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它過程定義了運(yùn)用方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化所需要采取的管理措施,以及標(biāo)志軟件開發(fā)各個(gè)階段任務(wù)完成的里程碑。為獲得高質(zhì)量的軟件產(chǎn)品,軟件過程必須科學(xué)、有效。沒有一個(gè)適用于所有軟件項(xiàng)目的任務(wù)集合。因此,科學(xué)、有效的軟件過程應(yīng)該定義一組適合于所承擔(dān)的項(xiàng)目特點(diǎn)的任務(wù)集合。通常,一個(gè)任務(wù)集合包括一組軟件工程任務(wù)、里程碑和應(yīng)該交付的產(chǎn)品。通常使用生命周期模型簡潔地描述軟件過程。生命周期模型規(guī)定了把生命周期劃分成哪些階段及各個(gè)階段的執(zhí)行順序,因此,也稱為過程模型。過程定義了運(yùn)用方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量在20世紀(jì)80年代之前,瀑布模型一直是惟一被廣泛采用的生命周期模型,現(xiàn)在它仍然是軟件工程中應(yīng)用得最廣泛的過程模型。傳統(tǒng)軟件工程方法學(xué)的軟件過程,基本上可以用瀑布模型來描述。圖1.2所示為傳統(tǒng)的瀑布模型。按照傳統(tǒng)的瀑布模型開發(fā)軟件,有下述的幾個(gè)特點(diǎn)。1.4.1瀑布模型在20世紀(jì)80年代之前,瀑布模型一直是惟一被廣泛采用圖1.2傳統(tǒng)的瀑布模型軟件工程軟件第1章1.階段間具有順序性和依賴性這個(gè)特點(diǎn)有兩重含義:①必須等前一階段的工作完成之后,才能開始后一階段的工作;②前一階段的輸出文檔就是后一階段的輸入文檔,因此,只有前一階段的輸出文檔正確,后一階段的工作才能獲得正確的結(jié)果。2.推遲實(shí)現(xiàn)的觀點(diǎn)對(duì)于規(guī)模較大的軟件項(xiàng)目來說,往往編碼開始得越早最終完成開發(fā)工作所需要的時(shí)間反而越長。這是因?yàn)?,前面階段的工作沒做或做得不扎實(shí),過早地考慮進(jìn)行程序?qū)崿F(xiàn),往往導(dǎo)致大量返工,有時(shí)甚至發(fā)生無法彌補(bǔ)的問題,帶來災(zāi)難性后果。1.階段間具有順序性和依賴性3.質(zhì)量保證的觀點(diǎn)軟件工程的基本目標(biāo)是優(yōu)質(zhì)、高產(chǎn)。為了保證所開發(fā)的軟件的質(zhì)量,在瀑布模型的每個(gè)階段都應(yīng)堅(jiān)持兩個(gè)重要做法:(1)每個(gè)階段都必須完成規(guī)定的文檔,沒有交出合格的文檔就是沒有完成該階段的任務(wù)。(2)每個(gè)階段結(jié)束前都要對(duì)所完成的文檔進(jìn)行評(píng)審,以便盡早發(fā)現(xiàn)問題,改正錯(cuò)誤。3.質(zhì)量保證的觀點(diǎn)但是傳統(tǒng)的瀑布模型過于理想化了,事實(shí)上,人在工作過程中不可能不犯錯(cuò)誤。在設(shè)計(jì)階段可能發(fā)現(xiàn)規(guī)格說明文檔中的錯(cuò)誤,而設(shè)計(jì)上的缺陷或錯(cuò)誤可能在實(shí)現(xiàn)過程中顯現(xiàn)出來,在綜合測試階段將發(fā)現(xiàn)需求分析、設(shè)計(jì)或編碼階段的許多錯(cuò)誤。因此,實(shí)際的瀑布模型是帶“反饋環(huán)”的,如圖1.3所示(圖中實(shí)線箭頭表示開發(fā)過程,虛線箭頭表示維護(hù)過程)。當(dāng)在后面階段發(fā)現(xiàn)前面階段的錯(cuò)誤時(shí),需要沿圖中左側(cè)的反饋線返回前面的階段,修正前面階段的產(chǎn)品之后再回來繼續(xù)完成后面階段的任務(wù)。但是傳統(tǒng)的瀑布模型過于理想化了,事實(shí)上,人在工作圖1.3實(shí)際的瀑布模型軟件工程軟件第1章瀑布模型有許多優(yōu)點(diǎn):可強(qiáng)迫開發(fā)人員采用規(guī)范的方法(例如,結(jié)構(gòu)化技術(shù));嚴(yán)格地規(guī)定了每個(gè)階段必須提交的文檔;要求每個(gè)階段交出的所有產(chǎn)品都必須經(jīng)過質(zhì)量保證小組的仔細(xì)驗(yàn)證。由于絕大部分軟件預(yù)算都花費(fèi)在軟件維護(hù)上,因此,使軟件變得比較容易維護(hù)就能顯著降低軟件預(yù)算。可以說,瀑布模型的成功在很大程度上是由于它基本上是一種文檔驅(qū)動(dòng)的模型。瀑布模型有許多優(yōu)點(diǎn):可強(qiáng)迫開發(fā)人員采用規(guī)范的方法(例如,結(jié)構(gòu)但是,“瀑布模型是由文檔驅(qū)動(dòng)的”這個(gè)事實(shí)也是它的一個(gè)主要缺點(diǎn)。在可運(yùn)行的軟件產(chǎn)品交付給用戶之前,用戶只能通過文檔來了解產(chǎn)品是什么樣的。但是,僅僅通過寫在紙上的靜態(tài)的規(guī)格說明,很難全面正確地認(rèn)識(shí)動(dòng)態(tài)的軟件產(chǎn)品。而且事實(shí)證明,一旦一個(gè)用戶開始使用一個(gè)軟件,在他的頭腦中關(guān)于該軟件應(yīng)該做什么的想法就會(huì)或多或少地發(fā)生變化,這就使得最初提出的需求變得不完全適用了。事實(shí)上,要求用戶不經(jīng)過實(shí)踐就提出完整準(zhǔn)確的需求,在許多情況下都是不切實(shí)際的??傊?,由于瀑布模型幾乎完全依賴于書面的規(guī)格說明,很可能導(dǎo)致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要。但是,“瀑布模型是由文檔驅(qū)動(dòng)的”這個(gè)事實(shí)也是它的一個(gè)主要缺點(diǎn)所謂快速原型是快速建立起來的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個(gè)子集。如圖1.4所示(圖中實(shí)線箭頭表示開發(fā)過程,虛線箭頭表示維護(hù)過程),快速原型模型的第一步是快速建立一個(gè)能反映用戶主要需求的原型系統(tǒng),讓用戶在計(jì)算機(jī)上試用它,通過實(shí)踐來了解目標(biāo)系統(tǒng)的概貌。1.4.2快速原型模型所謂快速原型是快速建立起來的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能通常,用戶試用原型系統(tǒng)之后會(huì)提出許多修改意見,開發(fā)人員按照用戶的意見快速地修改原型系統(tǒng),然后再次請(qǐng)用戶試用……一旦用戶認(rèn)為這個(gè)原型系統(tǒng)確實(shí)能做他們所需要的工作,開發(fā)人員便可據(jù)此書寫規(guī)格說明文檔,根據(jù)這份文檔開發(fā)出的軟件可以滿足用戶的真實(shí)需求。從圖1.4可以看出,快速原型模型是不帶反饋環(huán)的,這正是這種過程模型的主要優(yōu)點(diǎn):軟件產(chǎn)品的開發(fā)基本上是線性順序進(jìn)行的。能做到基本上線性順序開發(fā)的主要原因如下:通常,用戶試用原型系統(tǒng)之后會(huì)提出許多修改意見,開發(fā)人員按照用圖1.4快速原型模型軟件工程軟件第1章(1)原型系統(tǒng)已經(jīng)通過與用戶交互而得到驗(yàn)證,據(jù)此產(chǎn)生的規(guī)格說明文檔正確地描述了用戶需求,因此,在開發(fā)過程的后續(xù)階段不會(huì)因?yàn)榘l(fā)現(xiàn)了規(guī)格說明文檔的錯(cuò)誤而進(jìn)行較大的返工。(2)開發(fā)人員通過建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西(至少知道了“系統(tǒng)不應(yīng)該做什么,以及怎樣不去做不該做的事情”),因此,在設(shè)計(jì)和編碼階段發(fā)生錯(cuò)誤的可能性也比較小,這自然減少了在后續(xù)階段需要改正前面階段所犯錯(cuò)誤的可能性。軟件產(chǎn)品一旦交付給用戶使用之后,維護(hù)便開始了。根據(jù)所需完成的維護(hù)工作種類的不同,可能需要返回到需求分析、規(guī)格說明、設(shè)計(jì)或編碼等不同階段,如圖1.4中虛線箭頭所示。(1)原型系統(tǒng)已經(jīng)通過與用戶交互而得到驗(yàn)證,據(jù)此產(chǎn)生的規(guī)格快速原型的本質(zhì)是“快速”。開發(fā)人員應(yīng)該盡可能快地建造出原型系統(tǒng),以加速軟件開發(fā)過程,節(jié)約軟件開發(fā)成本。原型的用途是獲知用戶的真正需求,一旦需求確定了,原型將被拋棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是,必須迅速地構(gòu)建原型然后根據(jù)用戶意見迅速地修改原型。UNIXShell和超文本都是廣泛使用的快速原型語言,最近的趨勢是,廣泛地使用第四代語言(4GL)構(gòu)建快速原型。當(dāng)快速原型的某個(gè)部分是利用軟件工具由計(jì)算機(jī)自動(dòng)生成的時(shí)候,可以把這部分用到最終的軟件產(chǎn)品中。快速原型的本質(zhì)是“快速”。開發(fā)人員應(yīng)該盡可能快地建造出原型系增量模型也稱為漸增模型,如圖1.5所示。使用增量模型開發(fā)軟件時(shí),把軟件產(chǎn)品作為一系列的增量構(gòu)件來設(shè)計(jì)、編碼、集成和測試。每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能夠完成特定的功能。使用增量模型時(shí),第一個(gè)增量構(gòu)件往往實(shí)現(xiàn)軟件的基本需求,提供最核心的功能。第二個(gè)增量構(gòu)件提供更完善的編輯和文檔生成功能;第三個(gè)增量構(gòu)件實(shí)現(xiàn)拼寫和語法檢查功能;第四個(gè)增量構(gòu)件完成高級(jí)的頁面排版功能。1.4.3增量模型增量模型也稱為漸增模型,如圖1.5所示。使用增量模型開發(fā)軟件把軟件產(chǎn)品分解成增量構(gòu)件時(shí),應(yīng)該使構(gòu)件的規(guī)模適中,規(guī)模過大或過小都不好。最佳分解方法因軟件產(chǎn)品特點(diǎn)和開發(fā)人員的習(xí)慣而異。分解時(shí)惟一必須遵守的約束條件是,當(dāng)把新構(gòu)件集成到現(xiàn)有軟件中時(shí),所形成的產(chǎn)品必須是可測試的。采用瀑布模型或快速原型模型開發(fā)軟件時(shí),目標(biāo)都是一次就把一個(gè)滿足所有需求的產(chǎn)品提交給用戶。增量模型則與之相反,它分批地逐步向用戶提交產(chǎn)品,整個(gè)軟件產(chǎn)品被分解成許多個(gè)增量構(gòu)件,開發(fā)人員一個(gè)構(gòu)件接一個(gè)構(gòu)件地向用戶提交產(chǎn)品。從第一個(gè)構(gòu)件交付之日起,用戶就能做一些有用的工作。顯然,能在較短時(shí)間內(nèi)向用戶提交可完成部分工作的產(chǎn)品,是增量模型的一個(gè)優(yōu)點(diǎn)。把軟件產(chǎn)品分解成增量構(gòu)件時(shí),應(yīng)該使構(gòu)件的規(guī)模適中,規(guī)模過大或圖1.5增量模型軟件工程軟件第1章增量模型的另一個(gè)優(yōu)點(diǎn)是,逐步增加產(chǎn)品功能可以使用戶有較充裕的時(shí)間學(xué)習(xí)和適應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能給客戶組織帶來的沖擊。使用增量模型的困難是,在把每個(gè)新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)中時(shí),必須不破壞原來已經(jīng)開發(fā)出的產(chǎn)品。此外,必須把軟件的體系結(jié)構(gòu)設(shè)計(jì)得便于按這種方式進(jìn)行擴(kuò)充,向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過程必須簡單、方便,也就是說,軟件體系結(jié)構(gòu)必須是開放的。但是,從長遠(yuǎn)觀點(diǎn)看,具有開放結(jié)構(gòu)的軟件擁有真正的優(yōu)勢,這樣的軟件的可維護(hù)性明顯好于封閉結(jié)構(gòu)的軟件。增量模型的另一個(gè)優(yōu)點(diǎn)是,逐步增加產(chǎn)品功能可以使用戶有較充裕的因此,盡管采用增量模型比采用瀑布模型和快速原型模型需要更精心的設(shè)計(jì),但在設(shè)計(jì)階段多付出的勞動(dòng)將在維護(hù)階段獲得回報(bào)。如果一個(gè)設(shè)計(jì)非常靈活而且足夠開放,足以支持增量模型,那么,這樣的設(shè)計(jì)將允許在不破壞產(chǎn)品的情況下進(jìn)行維護(hù)。事實(shí)上,使用增量模型時(shí)開發(fā)軟件和擴(kuò)充軟件功能(完善性維護(hù))并沒有本質(zhì)區(qū)別,都是向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過程。因此,盡管采用增量模型比采用瀑布模型和快速原型模型需要更精心從某種意義上說,增量模型本身是自相矛盾的。它一方面要求開發(fā)人員把軟件看作一個(gè)整體,另一方面又要求開發(fā)人員把軟件看作構(gòu)件序列,每個(gè)構(gòu)件本質(zhì)上都獨(dú)立于另一個(gè)構(gòu)件。除非開發(fā)人員有足夠的技術(shù)能力協(xié)調(diào)好這一明顯的矛盾,否則用增量模型開發(fā)出的產(chǎn)品可能并不令人滿意。從某種意義上說,增量模型本身是自相矛盾的。它一方面要求開發(fā)人圖1.5所示的增量模型表明,必須在開始實(shí)現(xiàn)各個(gè)構(gòu)件之前就全部完成需求分析、規(guī)格說明和概要設(shè)計(jì)的工作。由于在開始構(gòu)建第一個(gè)構(gòu)件之前已經(jīng)有了總體設(shè)計(jì),因此風(fēng)險(xiǎn)較小。圖1.6描繪了一種風(fēng)險(xiǎn)更大的增量模型:一旦確定了用戶需求之后,就著手?jǐn)M定第一個(gè)構(gòu)件的規(guī)格說明文檔,完成后規(guī)格說明組將轉(zhuǎn)向第二個(gè)構(gòu)件的規(guī)格說明,與此同時(shí)設(shè)計(jì)組開始設(shè)計(jì)第一個(gè)構(gòu)件……用這種方式開發(fā)軟件,不同的構(gòu)件將并行地構(gòu)建,因此有可能加快工程進(jìn)度。但是,使用這種方法將冒構(gòu)件無法集成到一起的風(fēng)險(xiǎn),除非密切地監(jiān)控整個(gè)開發(fā)過程,否則整個(gè)工程可能毀于一旦。圖1.5所示的增量模型表明,必須在開始實(shí)現(xiàn)各個(gè)構(gòu)件之前就全部圖1.6風(fēng)險(xiǎn)更大的增量模型軟件工程軟件第1章軟件風(fēng)險(xiǎn)是任何軟件開發(fā)項(xiàng)目中都普遍存在的實(shí)際問題,項(xiàng)目越大,軟件越復(fù)雜,承擔(dān)該項(xiàng)目所冒的風(fēng)險(xiǎn)也越大。軟件風(fēng)險(xiǎn)可能在不同程度上損害軟件開發(fā)過程和軟件產(chǎn)品質(zhì)量。因此,在軟件開發(fā)過程中必須及時(shí)識(shí)別和分析風(fēng)險(xiǎn),并且采取適當(dāng)措施以消除或減少風(fēng)險(xiǎn)的危害。1.4.4螺旋模型軟件風(fēng)險(xiǎn)是任何軟件開發(fā)項(xiàng)目中都普遍存在的實(shí)際問題,項(xiàng)目越大,構(gòu)建原型是一種能使某些類型的風(fēng)險(xiǎn)降至最低的方法。正如1.4.2節(jié)所述,為了降低交付給用戶的產(chǎn)品不能滿足用戶需要的風(fēng)險(xiǎn),一種行之有效的方法是在需求分析階段快速地構(gòu)建一個(gè)原型。在后續(xù)的階段中也可以通過構(gòu)造適當(dāng)?shù)脑蛠斫档湍承┘夹g(shù)風(fēng)險(xiǎn)。當(dāng)然,原型并不能“包治百病”,對(duì)于某些類型的風(fēng)險(xiǎn),原型方法是無能為力的。螺旋模型的基本思想是,使用原型及其他方法來盡量降低風(fēng)險(xiǎn)。理解這種模型的一個(gè)簡便方法,是把它看作在每個(gè)階段之前都增加了風(fēng)險(xiǎn)分析過程的快速原型模型,如圖1.7所示。完整的螺旋模型如圖1.8所示。構(gòu)建原型是一種能使某些類型的風(fēng)險(xiǎn)降至最低的方法。正如1.4.圖1.7簡化的螺旋模型軟件工程軟件第1章圖1.8完整的螺旋模型軟件工程軟件第1章螺旋模型有許多優(yōu)點(diǎn):對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開發(fā)的一個(gè)重要目標(biāo);減少了過多測試(浪費(fèi)資金)或測試不足(產(chǎn)品故障多)所帶來的風(fēng)險(xiǎn);更重要的是,在螺旋模型中維護(hù)只是模型的另一個(gè)周期,在維護(hù)和開發(fā)之間并沒有本質(zhì)區(qū)別。螺旋模型主要適用于內(nèi)部開發(fā)的大規(guī)模軟件項(xiàng)目。如果進(jìn)行風(fēng)險(xiǎn)分析的費(fèi)用接近整個(gè)項(xiàng)目的經(jīng)費(fèi)預(yù)算,則風(fēng)險(xiǎn)分析是不可行的。事實(shí)上,項(xiàng)目越大,風(fēng)險(xiǎn)也越大,因此,進(jìn)行風(fēng)險(xiǎn)分析的必要性也越大。此外,只有內(nèi)部開發(fā)的項(xiàng)目,才能在風(fēng)險(xiǎn)過大時(shí)方便地中止項(xiàng)目。螺旋模型有許多優(yōu)點(diǎn):對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件螺旋模型的主要優(yōu)勢在于,它是風(fēng)險(xiǎn)驅(qū)動(dòng)的,但是,這也可能是它的一個(gè)弱點(diǎn)。除非軟件開發(fā)人員具有豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和這方面的專門知識(shí),否則將出現(xiàn)真正的風(fēng)險(xiǎn):當(dāng)項(xiàng)目實(shí)際上正在走向?yàn)?zāi)難時(shí),開發(fā)人員可能還認(rèn)為一切正常。螺旋模型的主要優(yōu)勢在于,它是風(fēng)險(xiǎn)驅(qū)動(dòng)的,但是,這也可能是它的思考題:

1、假設(shè)要求你開發(fā)一個(gè)軟件,該軟件的功能是把輸入的浮點(diǎn)數(shù)開平方,所得的結(jié)果精確到小數(shù)點(diǎn)后4位。一旦實(shí)現(xiàn)并測試完成后,該軟件將被拋棄。那么你打算選用哪種軟件生命周期模型?為什么?軟件工程軟件第1章2、假設(shè)你被任命為一家軟件公司的項(xiàng)目負(fù)責(zé)人,你的工作是管理該公司已被廣泛應(yīng)用的字處理軟件的新版本進(jìn)行開發(fā)。由于市場競爭激烈,公司規(guī)定了嚴(yán)格的完成日期并已經(jīng)對(duì)外公布。你打算選用哪種軟件生命周期模型?為什么?2、假設(shè)你被任命為一家軟件公司的項(xiàng)目負(fù)責(zé)人,你的工作是管理該本章力圖對(duì)計(jì)算機(jī)軟件工程學(xué)作一個(gè)簡短的概述。首先通過回顧計(jì)算機(jī)系統(tǒng)發(fā)展簡史,說明開發(fā)軟件的一些錯(cuò)誤方法和觀念是怎樣形成的。然后列舉了這些錯(cuò)誤方法帶來的嚴(yán)重弊病(軟件危機(jī)),澄清了一些糊涂觀念。為了計(jì)算機(jī)系統(tǒng)的進(jìn)一步發(fā)展,需要認(rèn)真研究開發(fā)和維護(hù)軟件的科學(xué)技術(shù)。應(yīng)總結(jié)計(jì)算機(jī)軟件的歷史經(jīng)驗(yàn)教訓(xùn),借鑒其他工程領(lǐng)域的管理技術(shù),逐步使軟件工程這門新學(xué)科發(fā)展和完善起來。1.5小結(jié)本章力圖對(duì)計(jì)算機(jī)軟件工程學(xué)作一個(gè)簡短的概述。首先通過回顧計(jì)算

軟件工程導(dǎo)論

主講教師:顔富強(qiáng)

2010年下學(xué)期軟件工程導(dǎo)論

主講教師:顔富強(qiáng)

2010年下學(xué)期引入:軟件工程的背景和目的為什么要學(xué)習(xí)軟件工程?實(shí)例引入:軟件工程的背景和目的第1章軟件工程學(xué)概述1.1軟件危機(jī)1.2軟件工程1.3軟件生命周期1.4軟件過程1.5小結(jié)第1章軟件工程學(xué)概述1.1軟件危機(jī)開發(fā)軟件所需的高成本同產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這就稱之為“軟件危機(jī)”。1968年北大西洋公約組織的計(jì)算機(jī)科學(xué)家在聯(lián)邦德國召開國際會(huì)議,討論軟件危機(jī)問題,在這次會(huì)議上正式提出并使用了“軟件工程”這個(gè)名詞,一門新興的工程學(xué)科就此誕生了。1.1軟件危機(jī)開發(fā)軟件所需的高成本同產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾軟件危機(jī)是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。這些問題絕不僅僅是不能正常運(yùn)行的軟件才具有的,實(shí)際上,幾乎所有軟件都不同程度地存在這些問題。概括地說,軟件危機(jī)包含下述兩方面的問題:如何開發(fā)軟件,以滿足對(duì)軟件日益增長的需求;如何維護(hù)數(shù)量不斷膨脹的已有軟件。具體地說,軟件危機(jī)主要有以下一些典型表現(xiàn)。1.1.1軟件危機(jī)的介紹軟件危機(jī)是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一(1)對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。 實(shí)際成本比估計(jì)成本有可能高出一個(gè)數(shù)量級(jí),實(shí)際進(jìn)度比預(yù)期進(jìn)度拖延幾個(gè)月甚至幾年的現(xiàn)象并不罕見。這種現(xiàn)象降低了軟件開發(fā)組織的信譽(yù)。而為了趕進(jìn)度和節(jié)約成本所采取的一些權(quán)宜之計(jì)又往往損害了軟件產(chǎn)品的質(zhì)量,從而不可避免地會(huì)引起用戶的不滿。(1)對(duì)軟件開發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確。 實(shí)(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。軟件開發(fā)人員常常在對(duì)用戶要求只有模糊的了解,甚至對(duì)所要解決的問題還沒有確切認(rèn)識(shí)的情況下,就匆忙著手編寫程序。軟件開發(fā)人員和用戶之間的信息交流往往很不充分,“閉門造車”必然導(dǎo)致最終的產(chǎn)品不符合用戶的實(shí)際需要。(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3)軟件產(chǎn)品的質(zhì)量往往靠不住。軟件可靠性和質(zhì)量保證的確切的定量概念剛剛出現(xiàn)不久,軟件質(zhì)量保證技術(shù)(審查、復(fù)審和測試)還沒有堅(jiān)持不懈地應(yīng)用到軟件開發(fā)的全過程中,這些都導(dǎo)致軟件產(chǎn)品發(fā)生質(zhì)量問題。(4)軟件常常是不可維護(hù)的。很多程序中的錯(cuò)誤是非常難改正的,實(shí)際上不可能使這些程序適應(yīng)新的硬件環(huán)境,也不能根據(jù)用戶的需要在原有程序中增加一些新的功能。“可重用的軟件”還是一個(gè)沒有完全做到的、正在努力追求的目標(biāo),人們?nèi)匀辉谥貜?fù)開發(fā)類似的或基本類似的軟件。軟件工程軟件第1章(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。計(jì)算機(jī)軟件不僅僅是程序,還應(yīng)該有一整套文檔資料。這些文檔資料應(yīng)該是在軟件開發(fā)過程中產(chǎn)生出來的,而且應(yīng)該是“最新式的”(即和程序代碼完全一致的)。軟件開發(fā)組織的管理人員可以使用這些文檔資料作為“里程碑”,來管理和評(píng)價(jià)軟件開發(fā)工程的進(jìn)展?fàn)顩r;軟件開發(fā)人員可以利用它們作為通信工具,在軟件開發(fā)過程中準(zhǔn)確地交流信息;對(duì)于軟件維護(hù)人員而言,這些文檔資料更是必不可少的。缺乏必要的文檔資料或者文檔資料不合格,必然給軟件開發(fā)和維護(hù)帶來許多嚴(yán)重的困難和問題。(5)軟件通常沒有適當(dāng)?shù)奈臋n資料。計(jì)算機(jī)軟件不僅僅是程序,(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例逐年上升。由于微電子學(xué)技術(shù)的進(jìn)步和生產(chǎn)自動(dòng)化程度不斷提高,硬件成本逐年下降,然而軟件開發(fā)需要大量人力,軟件成本隨著通貨膨脹以及軟件規(guī)模和數(shù)量的不斷擴(kuò)大而持續(xù)上升。美國在1985年軟件成本大約已占計(jì)算機(jī)系統(tǒng)總成本的90%。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計(jì)算機(jī)應(yīng)用迅速普及深入的趨勢。軟件產(chǎn)品“供不應(yīng)求”的現(xiàn)象使人類不能充分利用現(xiàn)代計(jì)算機(jī)硬件提供的巨大潛力。(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例逐年上升。由于在軟件開發(fā)和維護(hù)的過程中存在這么多嚴(yán)重問題,一方面與軟件本身的特點(diǎn)有關(guān),另一方面也和軟件開發(fā)與維護(hù)的方法不正確有關(guān)。1.1.2產(chǎn)生軟件危機(jī)的原因在軟件開發(fā)和維護(hù)的過程中存在這么多嚴(yán)重問題,一方面與軟件不同于一般程序,它的一個(gè)顯著特點(diǎn)是規(guī)模龐大,而且程序復(fù)雜性將隨著程序規(guī)模的增加而呈指數(shù)上升。為了在預(yù)定時(shí)間內(nèi)開發(fā)出規(guī)模龐大的軟件,必須由許多人分工合作,然而,如何保證每個(gè)人完成的工作合在一起確實(shí)能構(gòu)成一個(gè)高質(zhì)量的大型軟件系統(tǒng),更是一個(gè)極端復(fù)雜困難的問題,不僅涉及許多技術(shù)問題,諸如分析方法、設(shè)計(jì)方法、形式說明方法、版本控制等,更重要的是必須有嚴(yán)格而科學(xué)的管理。軟件不同于一般程序,它的一個(gè)顯著特點(diǎn)是規(guī)模龐大,而且目前相當(dāng)多的軟件專業(yè)人員對(duì)軟件開發(fā)和維護(hù)還有不少糊涂觀念,在實(shí)踐過程中或多或少地采用了錯(cuò)誤的方法和技術(shù),這可能是使軟件問題發(fā)展成軟件危機(jī)的主要原因。目前相當(dāng)多的軟件專業(yè)人員對(duì)軟件開發(fā)和維護(hù)還有不少糊涂觀念,在一個(gè)軟件從定義、開發(fā)、使用和維護(hù),直到最終被廢棄,要經(jīng)歷一個(gè)漫長的時(shí)期,這就如同一個(gè)人要經(jīng)過胎兒、兒童、青年、中年和老年,直到最終死亡的漫長時(shí)期一樣。通常把軟件經(jīng)歷的這個(gè)漫長的時(shí)期稱為生命周期。軟件開發(fā)最初的工作應(yīng)是問題定義,也就是確定要求解決的問題是什么;然后要進(jìn)行可行性研究,決定該問題是否存在一個(gè)可行的解決辦法;接下來應(yīng)該進(jìn)行需求分析,也就是深入具體地了解用戶的要求,在所要開發(fā)的系統(tǒng)(不妨稱之為目標(biāo)系統(tǒng))必須做什么這個(gè)問題上和用戶取得完全一致的看法。一個(gè)軟件從定義、開發(fā)、使用和維護(hù),直到最終被廢棄,經(jīng)過上述軟件定義時(shí)期的準(zhǔn)備工作才能進(jìn)入開發(fā)時(shí)期,而在開發(fā)時(shí)期首先需要對(duì)軟件進(jìn)行設(shè)計(jì)(通常又分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)階段),然后才能進(jìn)入編寫程序的階段,程序編寫完之后還必須經(jīng)過大量的測試工作(需要的工作量通常占軟件開發(fā)全部工作量的40%~50%)才能最終交付使用。所以,編寫程序只是軟件開發(fā)過程中的一個(gè)階段,而且在典型的軟件開發(fā)工程中,編寫程序所需的工作量只占軟件開發(fā)全部工作量的10%~20%。經(jīng)過上述軟件定義時(shí)期的準(zhǔn)備工作才能進(jìn)入開發(fā)時(shí)期,而在嚴(yán)重的問題是,在軟件開發(fā)的不同階段進(jìn)行修改需要付出的代價(jià)是很不相同的,在早期引入變動(dòng),涉及的面較少,因而代價(jià)也比較低;而在開發(fā)的中期軟件配置的許多成分已經(jīng)完成,引入一個(gè)變動(dòng)要對(duì)所有已完成的配置成分都做相應(yīng)的修改,不僅工作量大,而且邏輯上也更復(fù)雜,因此付出的代價(jià)劇增;在軟件“已經(jīng)完成”時(shí)再引入變動(dòng),當(dāng)然需要付出更高的代價(jià)。根據(jù)美國一些軟件公司的統(tǒng)計(jì)資料,在后期引入一個(gè)變動(dòng)比在早期引入相同變動(dòng)所需付出的代價(jià)高2~3個(gè)數(shù)量級(jí)。圖1.1定性地描繪了在不同時(shí)期引入一個(gè)變動(dòng)需要付出的代價(jià)的變化趨勢。嚴(yán)重的問題是,在軟件開發(fā)的不同階段進(jìn)行修改需要付圖1.1引入同一變動(dòng)付出的代價(jià)隨時(shí)間變化的趨勢軟件工程軟件第1章

統(tǒng)計(jì)數(shù)據(jù)表明,實(shí)際上用于軟件維護(hù)的費(fèi)用占軟件總費(fèi)用的55%~70%。軟件工程學(xué)的一個(gè)重要目標(biāo)就是提高軟件的可維護(hù)性,減少軟件維護(hù)的代價(jià)。統(tǒng)計(jì)數(shù)據(jù)表明,實(shí)際上用于軟件維護(hù)的費(fèi)用占軟件總費(fèi)用的5例題:根據(jù)歷史數(shù)據(jù)可以做出如下的假設(shè):對(duì)計(jì)算機(jī)存儲(chǔ)容量的需求大致按下面公式描述的趨勢逐年增加:M=4080e0.28(Y-1960)

存儲(chǔ)器的價(jià)格按下面公式描述的趨勢逐年下降:P1=0.3×0.72Y-1974(美分/位)如果計(jì)算機(jī)字長為16位,則存儲(chǔ)器價(jià)格下降的趨勢為:P2=0.048×0.72Y-1974(美元/字)在上列公式中Y代表年份,M是存儲(chǔ)容量(字?jǐn)?shù)),P1和P2代表價(jià)格。例題:根據(jù)歷史數(shù)據(jù)可以做出如下的假設(shè):基于上述假設(shè)可以比較計(jì)算機(jī)硬件和軟件成本的變化趨勢。要求計(jì)算:(1)在1985年對(duì)計(jì)算機(jī)存儲(chǔ)容量的需求估計(jì)是多少?如果字長為16位,這個(gè)存儲(chǔ)器的價(jià)格是多少?(2)假設(shè)在1985年一名程序員每天可開發(fā)出10條指令,每月工作20天,程序員的平均工資是每月4000美元。如果一條指令為一個(gè)字長,計(jì)算使存儲(chǔ)器裝滿程序所需用的成本。基于上述假設(shè)可以比較計(jì)算機(jī)硬件和軟件成本的變化趨勢。要求計(jì)算思考題:假設(shè)在1995年存儲(chǔ)器字長為32位,一名程序員每天可開發(fā)出30條指令,程序員的月平均工資為6000美元,重復(fù)(1)、(2)題。思考題:為了消除軟件危機(jī),首先應(yīng)該對(duì)計(jì)算機(jī)軟件有一個(gè)正確的認(rèn)識(shí)。一個(gè)軟件必須由一個(gè)完整的配置組成,事實(shí)上,軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其中,程序是能夠完成預(yù)定功能和性能的可執(zhí)行的指令序列;數(shù)據(jù)是使程序能夠適當(dāng)?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構(gòu);文檔是開發(fā)、使用和維護(hù)程序所需要的圖文資料。1.1.3消除軟件危機(jī)的途徑為了消除軟件危機(jī),首先應(yīng)該對(duì)計(jì)算機(jī)軟件有一個(gè)正確的更重要的是,必須充分認(rèn)識(shí)到軟件開發(fā)不是某種個(gè)體勞動(dòng)的神秘技巧,而應(yīng)該是一種組織良好、管理嚴(yán)密、各類人員協(xié)同配合、共同完成的工程項(xiàng)目。必須充分吸取和借鑒人類長期以來從事各種工程項(xiàng)目所積累的行之有效的原理、概念、技術(shù)和方法,特別要吸取幾十年來人類從事計(jì)算機(jī)硬件研究和開發(fā)的經(jīng)驗(yàn)教訓(xùn)??傊?,為了解決軟件危機(jī),既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施。軟件工程軟件第1章概括地說,軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的一門工程學(xué)科。采用工程的概念、原理、技術(shù)和方法來開發(fā)與維護(hù)軟件,把經(jīng)過時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來,以經(jīng)濟(jì)地開發(fā)出高質(zhì)量的軟件并有效地維護(hù)它,這就是軟件工程。1.2軟件工程

1.2.1軟件工程的介紹概括地說,軟件工程是指導(dǎo)計(jì)算機(jī)軟件開發(fā)和維護(hù)的一門雖然軟件工程的不同定義使用了不同詞句,強(qiáng)調(diào)的重點(diǎn)也有差異,但是,人們普遍認(rèn)為軟件工程具有下述的本質(zhì)特性。1.軟件工程關(guān)注于大型程序的構(gòu)造“大”與“小”的分界線并不十分清晰。通常把一個(gè)人在較短時(shí)間內(nèi)寫出的程序稱為小型程序,而把多人合作用時(shí)半年以上才寫出的程序稱為大型程序。傳統(tǒng)的程序設(shè)計(jì)技術(shù)和工具是支持小型程序設(shè)計(jì)的,不能簡單地把這些技術(shù)和工具用于開發(fā)大型程序。事實(shí)上,在此處使用術(shù)語“程序”并不十分恰當(dāng),現(xiàn)在的軟件開發(fā)項(xiàng)目通常構(gòu)造出包含若干個(gè)相關(guān)程序的“系統(tǒng)”。雖然軟件工程的不同定義使用了不同詞句,強(qiáng)調(diào)的重點(diǎn)也有差異,但2.軟件工程的中心課題是控制復(fù)雜性通常,軟件所解決的問題十分復(fù)雜,以致不能把問題作為一個(gè)整體通盤考慮。人們不得不把問題分解,使得分解出的每個(gè)部分是可理解的,而且各部分之間保持簡單的通信關(guān)系。用這種方法并不能降低問題的整體復(fù)雜性,但是卻可使它變成可以管理的。注意,許多軟件的復(fù)雜性主要不是由問題的內(nèi)在復(fù)雜性造成的,而是由必須處理的大量細(xì)節(jié)造成的。2.軟件工程的中心課題是控制復(fù)雜性3.軟件經(jīng)常變化絕大多數(shù)軟件都模擬了現(xiàn)實(shí)世界的某一部分?,F(xiàn)實(shí)世界在不斷變化,軟件為了不被很快淘汰,必須隨著所模擬的現(xiàn)實(shí)世界一起變化。因此,在軟件系統(tǒng)交付使用后仍然需要耗費(fèi)成本,而且在開發(fā)過程中必須考慮軟件將來可能的變化。4.開發(fā)軟件的效率非常重要目前,社會(huì)對(duì)新應(yīng)用系統(tǒng)的需求超過了人力資源所能提供的限度,軟件供不應(yīng)求的現(xiàn)象日益嚴(yán)重。因此,軟件工程的一個(gè)重要課題就是,尋求開發(fā)與維護(hù)軟件的更好更有效的方法和工具。3.軟件經(jīng)常變化5.和諧地合作是開發(fā)軟件的關(guān)鍵軟件處理的問題十分龐大,必須多人協(xié)同工作才能解決這類問題。為了有效地合作,必須明確地規(guī)定每個(gè)人的責(zé)任和相互通信的方法。事實(shí)上僅有上述規(guī)定還不夠,每個(gè)人還必須嚴(yán)格地按規(guī)定行事。為了迫使大家遵守規(guī)定,應(yīng)該運(yùn)用標(biāo)準(zhǔn)和規(guī)程。通常,可以用工具來支持這些標(biāo)準(zhǔn)和規(guī)程??傊o(jì)律是成功地完成軟件開發(fā)項(xiàng)目的一個(gè)關(guān)鍵。5.和諧地合作是開發(fā)軟件的關(guān)鍵6.軟件必須有效地支持它的用戶開發(fā)軟件的目的是支持用戶的工作。軟件提供的功能應(yīng)該能有效地協(xié)助用戶完成他們的工作。如果用戶對(duì)軟件系統(tǒng)不滿意,可以棄用該系統(tǒng),至少也會(huì)立即提出新的需求。因此,僅僅用正確的方法構(gòu)造系統(tǒng)還不夠,還必須構(gòu)造出正確的系統(tǒng)。有效地支持用戶意味著必須仔細(xì)地研究用戶,以確定適當(dāng)?shù)墓δ苄枨?、可用性要求及其他質(zhì)量要求(例如,可靠性、響應(yīng)時(shí)間等)。有效地支持用戶還意味著,軟件開發(fā)不僅應(yīng)該提交軟件產(chǎn)品,而且應(yīng)該寫出用戶手冊和培訓(xùn)材料,此外,還必須注意建立使用新系統(tǒng)的環(huán)境。6.軟件必須有效地支持它的用戶7.在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品這個(gè)特性與前兩個(gè)特性緊密相關(guān)。軟件工程師是諸如Java程序設(shè)計(jì)、軟件體系結(jié)構(gòu)、測試或統(tǒng)一建模語言(UML)等方面的專家,他們通常并不是圖書館管理、航空控制或銀行事務(wù)等領(lǐng)域的專家,但是他們卻不得不為這些領(lǐng)域開發(fā)應(yīng)用系統(tǒng)。缺乏應(yīng)用領(lǐng)域的相關(guān)知識(shí),是軟件開發(fā)項(xiàng)目出現(xiàn)問題的常見原因。7.在軟件工程領(lǐng)域中是由具有一種文化背景的人替具有另一種文自從1968年在聯(lián)邦德國召開的國際會(huì)議上正式提出并使用了“軟件工程”這個(gè)術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或“信條”。著名的軟件工程專家B.W.Boehm綜合這些學(xué)者們的意見并總結(jié)了TRW公司多年開發(fā)軟件的經(jīng)驗(yàn),于1983年在一篇論文中提出了軟件工程的7條基本原理。他認(rèn)為這7條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合。1.2.2軟件工程的基本原理自從1968年在聯(lián)邦德國召開的國際會(huì)議上正式提出并這7條原理是互相獨(dú)立的,其中任意6條原理的組合都不能代替另一條原理,因此,它們是缺一不可的最小集合,然而這7條原理又是相當(dāng)完備的,人們雖然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是,可以證明在此之前已經(jīng)提出的100多條軟件工程原理都可以由這7條原理的任意組合蘊(yùn)含或派生。下面簡要介紹軟件工程的7條基本原理。1.用分階段的生命周期計(jì)劃嚴(yán)格管理有人經(jīng)統(tǒng)計(jì)發(fā)現(xiàn),在不成功的軟件項(xiàng)目中有一半左右是由于計(jì)劃不周造成的,可見把建立完善的計(jì)劃作為第一條基本原理是吸取了前人的教訓(xùn)而提出來的。這7條原理是互相獨(dú)立的,其中任意6條原理的組合都不能代替另一2.堅(jiān)持進(jìn)行階段評(píng)審當(dāng)時(shí)已經(jīng)認(rèn)識(shí)到,軟件的質(zhì)量保證工作不能等到編碼階段結(jié)束之后再進(jìn)行。這樣說至少有兩個(gè)理由:第一,大部分錯(cuò)誤是在編碼之前造成的,例如,根據(jù)Boehm等人的統(tǒng)計(jì),設(shè)計(jì)錯(cuò)誤占軟件錯(cuò)誤的63%,編碼錯(cuò)誤僅占37%;第二,錯(cuò)誤發(fā)現(xiàn)與改正得越晚,所需付出的代價(jià)也越高(參見圖1.1)。因此,在每個(gè)階段都進(jìn)行嚴(yán)格的評(píng)審,以便盡早發(fā)現(xiàn)在軟件開發(fā)過程中所犯的錯(cuò)誤,是一條必須遵循的重要原則。3.實(shí)行嚴(yán)格的產(chǎn)品控制2.堅(jiān)持進(jìn)行階段評(píng)審在軟件開發(fā)過程中改變需求是難免的,只能依靠科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求。也就是說,當(dāng)改變需求時(shí),為了保持軟件各個(gè)配置成分的一致性,必須實(shí)行嚴(yán)格的產(chǎn)品控制,其中主要是實(shí)行基準(zhǔn)配置管理。所謂基準(zhǔn)配置又稱為基線配置,它們是經(jīng)過階段評(píng)審后的軟件配置成分?;鶞?zhǔn)配置管理也稱為變動(dòng)控制:一切有關(guān)修改軟件的建議,特別是涉及到對(duì)基準(zhǔn)配置的修改建議,都必須按照嚴(yán)格的規(guī)程進(jìn)行評(píng)審,獲得批準(zhǔn)以后才能實(shí)施修改。絕對(duì)不能誰想修改軟件,就隨意進(jìn)行修改。在軟件開發(fā)過程中改變需求是難免的,只能依靠科學(xué)的產(chǎn)品控制技術(shù)4.采用現(xiàn)代程序設(shè)計(jì)技術(shù)從提出軟件工程的概念開始,人們一直把主要精力用于研究各種新的程序設(shè)計(jì)技術(shù),并進(jìn)一步研究各種先進(jìn)的軟件開發(fā)與維護(hù)技術(shù)。實(shí)踐表明,采用先進(jìn)的技術(shù)不僅可以提高軟件開發(fā)和維護(hù)的效率,而且可以提高軟件產(chǎn)品的質(zhì)量。4.采用現(xiàn)代程序設(shè)計(jì)技術(shù)5.結(jié)果應(yīng)能清楚地審查軟件產(chǎn)品不同于一般的物理產(chǎn)品,它是看不見摸不著的邏輯產(chǎn)品。軟件開發(fā)人員(或開發(fā)小組)的工作進(jìn)展情況可見性差,難以準(zhǔn)確度量,從而使得軟件產(chǎn)品的開發(fā)過程比一般產(chǎn)品的開發(fā)過程更難于評(píng)價(jià)和管理。為了提高軟件開發(fā)過程的可見性,更好地進(jìn)行管理,應(yīng)該根據(jù)軟件開發(fā)項(xiàng)目的總目標(biāo)及完成期限,規(guī)定開發(fā)組織的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使得所得到的結(jié)果能夠清楚地審查。5.結(jié)果應(yīng)能清楚地審查6.開發(fā)小組的人員應(yīng)該少而精這條基本原理的含義是,軟件開發(fā)小組的組成人員的素質(zhì)應(yīng)該好,而人數(shù)則不宜過多。開發(fā)小組人員的素質(zhì)和數(shù)量是影響軟件產(chǎn)品質(zhì)量和開發(fā)效率的重要因素。素質(zhì)高的人員的開發(fā)效率比素質(zhì)低的人員的開發(fā)效率可能高幾倍至幾十倍,而且素質(zhì)高的人員所開發(fā)的軟件中的錯(cuò)誤明顯少于素質(zhì)低的人員所開發(fā)的軟件中的錯(cuò)誤。此外,隨著開發(fā)小組人員數(shù)目的增加,因?yàn)榻涣髑闆r討論問題而造成的通信開銷也急劇增加。當(dāng)開發(fā)小組人員數(shù)為N時(shí),可能的通信路徑有N(N-1)/2條,可見隨著人數(shù)N的增大,通信開銷將急劇增加。因此,組成少而精的開發(fā)小組是軟件工程的一條基本原理。6.開發(fā)小組的人員應(yīng)該少而精7.承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性遵循上述6條基本原理,就能夠按照當(dāng)代軟件工程基本原理實(shí)現(xiàn)軟件的工程化生產(chǎn),但是,僅有上述6條原理并不能保證軟件開發(fā)與維護(hù)的過程能趕上時(shí)代前進(jìn)的步伐,能跟上技術(shù)的不斷進(jìn)步。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第7條基本原理。按照這條原理,不僅要積極主動(dòng)地采納新的軟件技術(shù),而且要注意不斷總結(jié)經(jīng)驗(yàn)。7.承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性軟件工程包括技術(shù)和管理兩方面的內(nèi)容,是技術(shù)與管理緊密結(jié)合所形成的工程學(xué)科。所謂管理就是通過計(jì)劃、組織和控制等一系列活動(dòng),合理地配置和使用各種資源,以達(dá)到既定目標(biāo)的過程。通常把在軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為方法學(xué)(methodology),也稱為范型(paradigm)。在軟件工程領(lǐng)域中,這兩個(gè)術(shù)語的含義基本相同。1.2.3軟件工程方法學(xué)軟件工程包括技術(shù)和管理兩方面的內(nèi)容,是技術(shù)與管理緊密結(jié)合所形軟件工程方法學(xué)包含3個(gè)要素:方法、工具和過程。其中,方法是完成軟件開發(fā)的各項(xiàng)任務(wù)的技術(shù)方法,回答“怎樣做”的問題;工具是為運(yùn)用方法而提供的自動(dòng)的或半自動(dòng)的軟件工程支撐環(huán)境;過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。目前使用得最廣泛的軟件工程方法學(xué),分別是傳統(tǒng)方法學(xué)和面向?qū)ο蠓椒▽W(xué)。軟件工程方法學(xué)包含3個(gè)要素:方法、工具和過程。其中,方法是完1.傳統(tǒng)方法學(xué)傳統(tǒng)方法學(xué)也稱為生命周期方法學(xué)或結(jié)構(gòu)化范型。它采用結(jié)構(gòu)化技術(shù)(結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化實(shí)現(xiàn))來完成軟件開發(fā)的各項(xiàng)任務(wù),并使用適當(dāng)?shù)能浖ぞ呋蜍浖こ汰h(huán)境來支持結(jié)構(gòu)化技術(shù)的運(yùn)用。這種方法學(xué)把軟件生命周期的全過程依次劃分為若干個(gè)階段,然后順序地完成每個(gè)階段的任務(wù)。采用這種方法學(xué)開發(fā)軟件的時(shí)候,從對(duì)問題的抽象邏輯分析開始,一個(gè)階段一個(gè)階段地進(jìn)行開發(fā)。1.傳統(tǒng)方法學(xué)2.面向?qū)ο蠓椒▽W(xué)當(dāng)軟件規(guī)模龐大,或者對(duì)軟件的需求是模糊的或會(huì)隨時(shí)間而變化的時(shí)候,使用傳統(tǒng)方法學(xué)開發(fā)軟件往往不成功,此外,使用傳統(tǒng)方法學(xué)開發(fā)出的軟件,維護(hù)起來仍然很困難。2.面向?qū)ο蠓椒▽W(xué)概括地說,軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為軟件維護(hù))3個(gè)時(shí)期組成,每個(gè)時(shí)期又進(jìn)一步劃分成若干個(gè)階段。軟件定義時(shí)期的任務(wù)是:確定軟件開發(fā)工程必須完成的總目標(biāo);確定工程的可行性;導(dǎo)出實(shí)現(xiàn)工程目標(biāo)應(yīng)該采用的策略及系統(tǒng)必須完成的功能;估計(jì)完成該項(xiàng)工程需要的資源和成本,并且制定工程進(jìn)度表。這個(gè)時(shí)期的工作通常又稱為系統(tǒng)分析,由系統(tǒng)分析員負(fù)責(zé)完成。軟件定義時(shí)期通常進(jìn)一步劃分成3個(gè)階段,即問題定義、可行性研究和需求分析。1.3軟件生命周期概括地說,軟件生命周期由軟件定義、軟件開發(fā)和運(yùn)行維護(hù)(也稱為開發(fā)時(shí)期具體設(shè)計(jì)和實(shí)現(xiàn)在前一個(gè)時(shí)期定義的軟件,它通常由下述4個(gè)階段組成:總體設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼和單元測試,綜合測試。其中前兩個(gè)階段又稱為系統(tǒng)設(shè)計(jì),后兩個(gè)階段又稱為系統(tǒng)實(shí)現(xiàn)。維護(hù)時(shí)期的主要任務(wù)是使軟件持久地滿足用戶的需要。具體地說,當(dāng)軟件在使用過程中發(fā)現(xiàn)錯(cuò)誤時(shí)應(yīng)該加以改正;當(dāng)環(huán)境改變時(shí)應(yīng)該修改軟件以適應(yīng)新的環(huán)境;當(dāng)用戶有新要求時(shí)應(yīng)該及時(shí)改進(jìn)軟件以滿足用戶的新需要。通常對(duì)維護(hù)時(shí)期不再進(jìn)一步劃分階段,但是每一次維護(hù)活動(dòng)本質(zhì)上都是一次壓縮和簡化了的定義和開發(fā)過程。開發(fā)時(shí)期具體設(shè)計(jì)和實(shí)現(xiàn)在前一個(gè)時(shí)期定義的軟件,它通常由下述4下面扼要介紹軟件生命周期每個(gè)階段的基本任務(wù)。1.問題定義問題定義階段必須回答的關(guān)鍵問題是:“要解決的問題是什么?”如果不知道問題是什么就試圖解決這個(gè)問題,顯然是盲目的,只會(huì)白白浪費(fèi)時(shí)間和金錢,最終得出的結(jié)果很可能是毫無意義的。盡管確切地定義問題的必要性是十分明顯的,但是在實(shí)踐中它卻可能是最容易被忽視的一個(gè)步驟。通過對(duì)客戶的訪問調(diào)查,系統(tǒng)分析員扼要地寫出關(guān)于問題性質(zhì)、工程目標(biāo)和工程規(guī)模的書面報(bào)告,經(jīng)過討論和必要的修改之后這份報(bào)告應(yīng)該得到客戶的確認(rèn)。下面扼要介紹軟件生命周期每個(gè)階段的基本任務(wù)。2.可行性研究這個(gè)階段要回答的關(guān)鍵問題是:“對(duì)于上一個(gè)階段所確定的問題有行得通的解決辦法嗎?”為了回答這個(gè)問題,系統(tǒng)分析員需要進(jìn)行一次大大壓縮和簡化了的系統(tǒng)分析和設(shè)計(jì)過程,也就是在較抽象的高層次上進(jìn)行的分析和設(shè)計(jì)過程??尚行匝芯繎?yīng)該比較簡短,這個(gè)階段的任務(wù)不是具體解決問題,而是研究問題的范圍,探索這個(gè)問題是否值得去解,是否有可行的解決辦法。2.可行性研究可行性研究的結(jié)果是使用部門負(fù)責(zé)人作出是否繼續(xù)進(jìn)行這項(xiàng)工程的決定的重要依據(jù),一般說來,只有投資可能取得較大效益的那些工程項(xiàng)目才值得繼續(xù)進(jìn)行下去??尚行匝芯恳院蟮哪切╇A段將需要投入更多的人力物力。及時(shí)終止不值得投資的工程項(xiàng)目,可以避免更大的浪費(fèi)。3.需求分析這個(gè)階段的任務(wù)仍然不是具體地解決問題,而是準(zhǔn)確地確定“為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能??尚行匝芯康慕Y(jié)果是使用部門負(fù)責(zé)人作出是否繼續(xù)進(jìn)行這項(xiàng)工程的決4.總體設(shè)計(jì)這個(gè)階段必須回答的關(guān)鍵問題是:“概括地說,應(yīng)該怎樣實(shí)現(xiàn)目標(biāo)系統(tǒng)?”總體設(shè)計(jì)又稱為概要設(shè)計(jì)。首先,應(yīng)該設(shè)計(jì)出實(shí)現(xiàn)目標(biāo)系統(tǒng)的幾種可能的方案。通常至少應(yīng)該設(shè)計(jì)出低成本、中等成本和高成本等3種方案。軟件工程師應(yīng)該用適當(dāng)?shù)谋磉_(dá)工具描述每種方案,分析每種方案的優(yōu)缺點(diǎn),并在充分權(quán)衡各種方案的利弊的基礎(chǔ)上,推薦一個(gè)最佳方案。此外,還應(yīng)該制定出實(shí)現(xiàn)最佳方案的詳細(xì)計(jì)劃。如果客戶接受所推薦的方案,則應(yīng)該進(jìn)一步完成下述的另一項(xiàng)主要任務(wù)。4.總體設(shè)計(jì)上述設(shè)計(jì)工作確定了解決問題的策略及目標(biāo)系統(tǒng)中應(yīng)包含的程序,但是,怎樣設(shè)計(jì)這些程序呢?軟件設(shè)計(jì)的一條基本原理就是,程序應(yīng)該模塊化,也就是說,一個(gè)程序應(yīng)該由若干個(gè)規(guī)模適中的模塊按合理的層次結(jié)構(gòu)組織而成。因此,總體設(shè)計(jì)的另一項(xiàng)主要任務(wù)就是設(shè)計(jì)程序的體系結(jié)構(gòu),也就是確定程序由哪些模塊組成以及模塊間的關(guān)系。5.詳細(xì)設(shè)計(jì)總體設(shè)計(jì)階段以比較抽象概括的方式提出了解決問題的辦法。詳細(xì)設(shè)計(jì)階段的任務(wù)就是把解法具體化,也就是回答下面這個(gè)關(guān)鍵問題:“應(yīng)該怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)呢?”上述設(shè)計(jì)工作確定了解決問題的策略及目標(biāo)系統(tǒng)中應(yīng)包含的程序,但這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。這種規(guī)格說明的作用很類似于其他工程領(lǐng)域中工程師經(jīng)常使用的工程藍(lán)圖,它們應(yīng)該包含必要的細(xì)節(jié),程序員可以根據(jù)它們寫出實(shí)際的程序代碼。詳細(xì)設(shè)計(jì)也稱為模塊設(shè)計(jì),在這個(gè)階段將詳細(xì)地設(shè)計(jì)每個(gè)模塊,確定實(shí)現(xiàn)模塊功能所需要的算法和數(shù)據(jù)結(jié)構(gòu)。6.編碼和單元測試這個(gè)階段的關(guān)鍵任務(wù)是寫出正確的容易理解、容易維護(hù)的程序模塊。這個(gè)階段的任務(wù)還不是編寫程序,而是設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取一種適當(dāng)?shù)母呒?jí)程序設(shè)計(jì)語言(必要時(shí)用匯編語言),把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成用選定的語言書寫的程序,并且仔細(xì)測試編寫出的每一個(gè)模塊。7.綜合測試這個(gè)階段的關(guān)鍵任務(wù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論