《軟件工程理論與實(shí)踐》-第一章_第1頁
《軟件工程理論與實(shí)踐》-第一章_第2頁
《軟件工程理論與實(shí)踐》-第一章_第3頁
《軟件工程理論與實(shí)踐》-第一章_第4頁
《軟件工程理論與實(shí)踐》-第一章_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章概述

本章的目標(biāo)是介紹軟件工程這門學(xué)科和學(xué)習(xí)本書其余部分所需的框架知識。讀完本章,讀者將了解以下內(nèi)容。導(dǎo)致軟件危機(jī)的原因;什么是軟件工程,學(xué)習(xí)軟件工程的意義;軟件生命周期包括哪些階段;軟件工程方法學(xué)及其演化過程。下一頁返回第1章概述

軟件是人類思維的產(chǎn)品,并且越來越成為國民經(jīng)濟(jì)和人類生活中必需的組成部分。軟件的發(fā)展經(jīng)歷了一個(gè)階段。最初,軟件僅僅是計(jì)算機(jī)硬件的附屬品,軟件規(guī)模較小,成本相對于硬件也微乎其微。隨著計(jì)算機(jī)硬件的普及,軟件的需求越來越大,軟件也變得越來越復(fù)雜。軟件不僅成為影響系統(tǒng)性能的關(guān)鍵要素,在系統(tǒng)總成本中的比重也越來越大。因此,如何快速開發(fā)經(jīng)濟(jì)的、高質(zhì)量的軟件成為待解決的關(guān)鍵問題。軟件工程就是借助于工程化的思想、技術(shù)來解決軟件開發(fā)過程中面臨的問題,其目標(biāo)是提高軟件的質(zhì)量與生產(chǎn)率,最終實(shí)現(xiàn)軟件的工業(yè)化生產(chǎn)。從1968年北大西洋公約組織的計(jì)算機(jī)科學(xué)家在國際會議上首次提出軟件工程的概念至今,軟件工程的發(fā)展一直指引人們朝著徹底解決軟件危機(jī)的方向前行。40多年來,軟件工程在與軟件的互相推動中逐漸完善,形成了一整套理論知識體系。

上一頁下一頁返回第1章概述

軟件工程方法學(xué)是在軟件生命周期全過程中使用的一整套技術(shù)方法,包括:方法、工具和過程。軟件工程方法學(xué)經(jīng)歷了4個(gè)階段,代表了4種不同的解決軟件危機(jī)的思想。上一頁返回1.1軟件與軟件危機(jī)

1.1.1軟件

在20世紀(jì)50年代,軟件伴隨著第一臺電子計(jì)算機(jī)的問世誕生了。接著,以寫程序?yàn)槁殬I(yè)的人也開始出現(xiàn),這些人大多是經(jīng)過訓(xùn)練的數(shù)學(xué)家和電子工程師。50年后,美國大學(xué)里開始出現(xiàn)計(jì)算機(jī)專業(yè)學(xué)位,專門教人們寫軟件。在隨后的20年里,軟件行業(yè)迅速發(fā)展成為推動人類社會發(fā)展的龍頭產(chǎn)業(yè),并造就了一批百萬、千萬富翁。隨著信息產(chǎn)業(yè)的發(fā)展,軟件對人類社會的發(fā)展越來越重要。那么,如何給軟件定義?軟件是什么?

軟件對于人類而言是一個(gè)全新的東西,其發(fā)展歷史不過四五十年。人們對軟件的認(rèn)識經(jīng)歷了一個(gè)由淺到深的過程。在計(jì)算機(jī)系統(tǒng)發(fā)展的初期,硬件通常用來執(zhí)行一個(gè)單一的程序而這個(gè)程序又是為一個(gè)特定上一頁下一頁返回1.1軟件與軟件危機(jī)

的目的而編制的。當(dāng)時(shí),大多數(shù)軟件的使用者就是軟件的編寫者。這使得早期軟件的開發(fā)方法存在許多先天的問題:①軟件的需求、設(shè)計(jì)是在某個(gè)人的頭腦中完成的一個(gè)隱藏的過程,這個(gè)過程也沒有什么系統(tǒng)的方法可以遵循。②軟件往往帶有強(qiáng)烈的個(gè)人色彩,而且除了源代碼,往往沒有軟件說明書等文檔。從20世紀(jì)7o年代中期到20世紀(jì)80年代中期,計(jì)算機(jī)硬件系統(tǒng)經(jīng)歷了一個(gè)大的發(fā)展。在這一時(shí)期,軟件開始作為一種產(chǎn)品被廣泛使用,出現(xiàn)了專門給別人開發(fā)軟件的“小型作坊”。但這些作坊仍然沿用早期的個(gè)體化軟件開發(fā)方式,隨著軟件數(shù)量的急劇膨脹、軟件需求的日趨復(fù)雜,維護(hù)軟件的難度越來越大,軟件開發(fā)的成本也令人吃驚的高,而失敗的軟件項(xiàng)目卻屢見不鮮。“軟件危機(jī)”就這樣開始了!上一頁下一頁返回1.1軟件與軟件危機(jī)

“軟件危機(jī)”促使人們開始對軟件及其特性進(jìn)行更深一步的研究,人們改變了早期對軟件的不正確看法,認(rèn)識到優(yōu)秀的程序除了功能正確、性能優(yōu)良之外,還應(yīng)該容易看懂、容易使用、容易修改和擴(kuò)充。現(xiàn)在,被普遍接受的軟件的定義如下。軟件是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它包括程序、數(shù)據(jù)及其相關(guān)文檔。其中程序是按事先設(shè)計(jì)的功能和性能要求執(zhí)行的指令序列;數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的各種圖文資料。然而,軟件遠(yuǎn)非一個(gè)形式化的定義所能刻畫的。越來越多的軟件包含有該軟件應(yīng)用領(lǐng)域的業(yè)務(wù)流程、規(guī)則等。因此,軟件還是嵌入業(yè)務(wù)知識的系統(tǒng)。上一頁下一頁返回1.1軟件與軟件危機(jī)

軟件是人工制品,但它是人類思維的產(chǎn)品,與傳統(tǒng)的工業(yè)產(chǎn)品相比,軟件有其獨(dú)特的特點(diǎn)。

(1)軟件是一種邏輯實(shí)體,而不是具體的物理實(shí)體,具有抽象性。這個(gè)特點(diǎn)使它在開發(fā)、生產(chǎn)、使用、維護(hù)等方面與硬件相比有明顯的差異。人們可以把它記錄在紙上、內(nèi)存、磁盤、光盤上,但無法看到軟件本身的形態(tài),必須通過觀察、分析、思考、判斷,才能了解軟件的功能、性能等特性。

(2)軟件是開發(fā),硬件是制造。一旦軟件研制開發(fā)成功,就可以大量復(fù)制同一內(nèi)容的副本。所以對軟件的質(zhì)量控制,重在軟件的開發(fā)方面。

(3)硬件存在機(jī)械磨損問題,但軟件在使用過程中,沒有磨損、老化的問題。軟件在生存周期后期不會因?yàn)槟p而老化,但會為了適應(yīng)硬件、環(huán)境以及需求的變化而進(jìn)行修改,而這些修改又不可避免地引入上一頁下一頁返回1.1軟件與軟件危機(jī)

錯誤,導(dǎo)致軟件失效率升高,從而出現(xiàn)軟件退化。當(dāng)修改的成本變得難以接受時(shí),軟件就會被拋棄。

(4)軟件對硬件和環(huán)境有著不同程度的依賴性,包括不同的硬件平臺和支持軟件運(yùn)行的其他軟件系統(tǒng)。這導(dǎo)致了軟件移植的問題。

(5)軟件是定制的,而不是通過已有構(gòu)件組裝而成的。雖然人們提出了軟件復(fù)用、構(gòu)件技術(shù),但是手工作坊式的軟件開發(fā)方式仍然占主導(dǎo)地位,像硬件生產(chǎn)那樣基于已有零部件進(jìn)行組裝,實(shí)現(xiàn)軟件開發(fā)自動化一直是追求的夢想。

(6)軟件是復(fù)雜的,而且會變得更加復(fù)雜。軟件是人類思維和智能的產(chǎn)品,它的開發(fā)凝聚了大量的腦力勞動,是人類有史以來生產(chǎn)的復(fù)雜度最高的工業(yè)產(chǎn)品。在大型軟件系統(tǒng)中,軟件涉及大量的數(shù)據(jù)、狀態(tài)和它們之間的邏輯關(guān)系,加上人類思維的復(fù)雜性和不確定性,導(dǎo)致系統(tǒng)的復(fù)雜性急劇增加,也使得軟件的分析、設(shè)計(jì)、實(shí)現(xiàn)和測試變得相當(dāng)困難。上一頁下一頁返回1.1軟件與軟件危機(jī)

此外,由于軟件使用在社會的各行各業(yè)、方方面面,軟件開發(fā)常常涉及其他領(lǐng)域的專門知識,這對軟件工程師提出了很高的要求。

(7)軟件的成本相當(dāng)昂貴。軟件開發(fā)是高智商者從事的工作,需要投入大量、高強(qiáng)度的腦力勞動,成本非常高,風(fēng)險(xiǎn)也大。現(xiàn)在軟件的開銷已遠(yuǎn)遠(yuǎn)超過了硬件的開銷。

(8)軟件工作牽涉到很多社會因素。許多軟件的開發(fā)和運(yùn)行涉及機(jī)構(gòu)、體制和管理方式等問題,還會涉及人的觀念和心理。這些人的因素,常常成為軟件開發(fā)的困難所在,直接影響到項(xiàng)目的成敗。上一頁下一頁返回1.1軟件與軟件危機(jī)

1.1.2軟件危機(jī)

軟件危機(jī)是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。20世紀(jì)60代末至20世紀(jì)70年代初,“軟件危機(jī)”一詞在計(jì)算機(jī)界廣為流傳。事實(shí)上,幾乎從計(jì)算機(jī)誕生的那一天起,就出現(xiàn)了軟件危機(jī)。如今,50多年過去了,雖然軟件開發(fā)的技術(shù)和工具不斷改進(jìn),但是軟件危機(jī)依然沒有徹底消除。概括來說,軟件危機(jī)包含兩方面問題:①如何開發(fā)軟件,以滿足不斷增長、日趨復(fù)雜的需求。②如何維護(hù)數(shù)量不斷膨脹的已有軟件產(chǎn)品。具體地說,軟件危機(jī)主要有以下表現(xiàn)。

1)軟件成本日益增長,在計(jì)算機(jī)系統(tǒng)的整個(gè)成本中所占比例越來越大

20世紀(jì)50年代,軟件成本在整個(gè)計(jì)算機(jī)系統(tǒng)成本中所占的比例為上一頁下一頁返回1.1軟件與軟件危機(jī)

10%~20%。但隨著軟件產(chǎn)業(yè)的發(fā)展,軟件成本日益增長。相反,計(jì)算機(jī)硬件隨著技術(shù)的進(jìn)步、生產(chǎn)規(guī)模的擴(kuò)大,價(jià)格卻不斷下降。這樣一來,軟件成本在計(jì)算機(jī)系統(tǒng)中所占的比例越來越大。到20世紀(jì)60年代中期,軟件成本在計(jì)算機(jī)系統(tǒng)中所占的比例已經(jīng)增長到50%左右。而且,該數(shù)字還在不斷地遞增,圖1.1所示顯示了軟件成本的上升趨勢。

2)開發(fā)進(jìn)度難以控制,延遲交付甚至取消項(xiàng)目的現(xiàn)象屢見不鮮在軟件開發(fā)過程中,用戶需求變化等各種意想不到的情況層出不窮,令軟件開發(fā)過程很難保證按預(yù)定的計(jì)劃實(shí)現(xiàn),給項(xiàng)目計(jì)劃和論證工作帶來了很大的困難。此外,由于軟件是邏輯、智力產(chǎn)品,軟件的開發(fā)需建立龐大的邏輯體系,在硬件生產(chǎn)中常用的加快進(jìn)度的方法上一頁下一頁返回1.1軟件與軟件危機(jī)

(如增加人力)不能用在軟件開發(fā)上。IBM360機(jī)的操作系統(tǒng)項(xiàng)目負(fù)責(zé)人F.D.Brooks曾經(jīng)提出:“在已拖延的軟件項(xiàng)目上,增加人力只會使其更難按期完成。”事實(shí)上,軟件系統(tǒng)的結(jié)構(gòu)很復(fù)雜,各部分聯(lián)系極大,盲目增加軟件開發(fā)人員并不能成比例地提高軟件開發(fā)能力。相反,隨著人員數(shù)量的增加,人員的組織、協(xié)調(diào)、通信、培訓(xùn)和管理等方面的問題將更為嚴(yán)重。

3)軟件存在著錯誤多、性能低、不安全、不可靠等質(zhì)量問題軟件項(xiàng)目即使能按預(yù)定日期完成,結(jié)果卻不盡如人意。1965197。年,美國范登堡基地發(fā)射火箭多次失敗,絕大部分故障是由應(yīng)用程序錯誤造成的。程序的一些微小錯誤可以造成災(zāi)難性的后果。例如,有一次,在美國肯尼迪發(fā)射一枚阿脫拉斯火箭,火箭飛離地面幾十英里高空開始翻轉(zhuǎn),地面控制中心被迫下令炸毀。后經(jīng)檢查,發(fā)現(xiàn)是飛行上一頁下一頁返回1.1軟件與軟件危機(jī)

計(jì)劃程序里漏掉了一個(gè)連字符。就是這樣一個(gè)小小的疏漏,造成了這支價(jià)值1850萬美元的火箭試驗(yàn)失敗。隨著軟件越來越多地用在國民經(jīng)濟(jì)和人類社會的高安全性、高可靠性系統(tǒng)中,軟件的質(zhì)量保證成為人們關(guān)注的焦點(diǎn)。

4)軟件維護(hù)困難正式投入使用的軟件,總是存在著一定數(shù)量的錯誤,在不同的運(yùn)行條件下,軟件就會出現(xiàn)故障,因此需要維護(hù)。軟件即使能夠正常使用,由于軟硬件環(huán)境的變化或用戶提出新需求,也需要進(jìn)行修改。但是,由于在軟件設(shè)計(jì)和開發(fā)過程中,沒有嚴(yán)格遵循軟件開發(fā)標(biāo)準(zhǔn),各種隨意性很大,沒有完整的真實(shí)反映系統(tǒng)狀況的記錄文檔,給軟件維護(hù)造成了巨大的困難。特別是在軟件使用過程中,原來的開發(fā)人員可能因各種原因已經(jīng)離開原來的開發(fā)組織,使得軟件幾乎不可維護(hù)。有資料表明,為維護(hù)軟件支付的費(fèi)用占全部硬件和軟件費(fèi)用的40%~75%。上一頁下一頁返回1.1軟件與軟件危機(jī)

為了克服軟件危機(jī),首先需要分析導(dǎo)致軟件危機(jī)的原因。從軟件危機(jī)的種種表現(xiàn)和軟件作為邏輯產(chǎn)品的特殊性可以發(fā)現(xiàn),產(chǎn)生軟件危機(jī)的原因包括以下幾個(gè)方面。1)用戶需求不明確,致使軟件開發(fā)周期延長、成本增加,甚至導(dǎo)致項(xiàng)目失敗用戶需求是軟件開發(fā)的基礎(chǔ),然而獲取用戶需求又是一件非常困難的任務(wù)。在軟件開發(fā)過程中,用戶需求不明確問題主要體現(xiàn)在:在軟件開發(fā)出來之前,用戶自己也不清楚軟件的具體需求;用戶對軟件需求的描述不精確,可能有遺漏、有二義性,甚至有錯誤;在軟件開發(fā)過程中,用戶還提出修改軟件功能、界面、支撐環(huán)境等方面的要求;由于知識背景的差異、交流方法或描述工具的原因,軟件開發(fā)人員對用戶需求的理解與用戶本來的愿望有差異。上一頁下一頁返回1.1軟件與軟件危機(jī)

2)缺乏正確的理論指導(dǎo),開發(fā)過程不規(guī)范,開發(fā)人員各自為戰(zhàn),缺少整體規(guī)劃缺乏有力的方法學(xué)和工具方面的支持、沒有對軟件進(jìn)行整體規(guī)劃、沒有約束開發(fā)人員的文檔資料、過分地依靠程序設(shè)計(jì)人員在軟件開發(fā)過程中的技巧和創(chuàng)造性,加劇軟件產(chǎn)品的個(gè)性化,也是發(fā)生軟件危機(jī)的一個(gè)重要原因。

3)軟件規(guī)模越來越大隨著軟件應(yīng)用范圍的不斷擴(kuò)大,軟件規(guī)模也越來越大。大型軟件項(xiàng)目需要組織一定的人力共同完成,多數(shù)管理人員缺乏管理方面的經(jīng)驗(yàn),而多數(shù)軟件開發(fā)人員又缺乏開發(fā)大型軟件系統(tǒng)的經(jīng)驗(yàn)。各類人員的信息交流不及時(shí)、不準(zhǔn)確,有時(shí)還會產(chǎn)生誤解,致使軟件開發(fā)活動無法有效進(jìn)行,工期一拖再拖。上一頁下一頁返回1.1軟件與軟件危機(jī)

4)軟件復(fù)雜度越來越高軟件不僅僅是在規(guī)模上快速地發(fā)展擴(kuò)大,其復(fù)雜性也急劇地增加。軟件產(chǎn)品的特殊性和人類智力的局限性,導(dǎo)致人們無力處理復(fù)雜問題。與40年前相比,軟件開發(fā)技術(shù)已經(jīng)取得了長足的進(jìn)步。然而,軟件的規(guī)模和復(fù)雜性也呈現(xiàn)指數(shù)型增長,同時(shí),對軟件的質(zhì)量也提出更高的要求。因此,軟件危機(jī)依然是亟待解決的問題。上一頁返回1.2軟件工程

認(rèn)真研究和分析了軟件危機(jī)背后的真正原因,便開始探索用工程的方法進(jìn)行軟件生產(chǎn)的可能性,即用現(xiàn)代工程的概念、原理、技術(shù)和方法進(jìn)行計(jì)算機(jī)軟件的開發(fā)、管理和維護(hù)。于是,計(jì)算機(jī)科學(xué)技術(shù)的一個(gè)新領(lǐng)域一軟件工程誕生了。下一頁返回1.2軟件工程

1.2.1軟件工程的概念

軟件工程的定義有許多,下面給出兩個(gè)典型的定義。

1968年秋季,北大西洋公約組織舉行的國際會議上首次給出了軟件工程的定義:軟件工程是為了經(jīng)濟(jì)地獲得能夠在實(shí)際機(jī)器上高效運(yùn)行的可靠軟件而建立和使用的一系列好的工程化原則。

1993年《IEEEStandardGlossaryofSoftwareEngineeringTerminology》給出了一個(gè)更全面的定義:軟件工程是,①將系統(tǒng)性的、規(guī)范化的、可定量的方法應(yīng)用于軟件的開發(fā)、運(yùn)行和維護(hù),即將工程化應(yīng)用到軟件上。②對①中所述方法的研究。從軟件工程的定義可以看出,軟件工程不僅強(qiáng)調(diào)軟件開發(fā)技術(shù)的研究,還包括軟件項(xiàng)目管理。統(tǒng)計(jì)數(shù)據(jù)表明,大多數(shù)軟件開發(fā)項(xiàng)目的上一頁下一頁返回1.2軟件工程

失敗,并不是由于軟件開發(fā)技術(shù)方面的原因。它們的失敗是由于不適當(dāng)?shù)墓芾碓斐傻摹_z憾的是,盡管人們對軟件項(xiàng)目管理重要性的認(rèn)識有所提高,但在軟件管理方面的進(jìn)步遠(yuǎn)比在設(shè)計(jì)方法學(xué)和實(shí)現(xiàn)方法學(xué)上的進(jìn)步小。

此外,軟件工程是將工程的思想應(yīng)用于軟件領(lǐng)域。與一切工程領(lǐng)域一樣,軟件工程師也需要不斷積累經(jīng)驗(yàn),從已有的理論、方法和工具中選擇最適宜的,同時(shí)還要不斷探索新的理論、方法和工具。上一頁下一頁返回1.2軟件工程

1.2.2軟件工程的目標(biāo)

軟件工程的目標(biāo)就是運(yùn)用最先進(jìn)的技術(shù)和經(jīng)過時(shí)間檢驗(yàn)證明正確的管理方法來提高軟件的質(zhì)量和生產(chǎn)率,也就是在給定成本、進(jìn)度的前提下,開發(fā)出高質(zhì)量的軟件產(chǎn)品,最終實(shí)現(xiàn)軟件生產(chǎn)自動化。通常質(zhì)量和生產(chǎn)率是一對矛盾,但這兩者又都是軟件開發(fā)追求的目標(biāo)。因此,好的軟件工程方法要能同時(shí)提高軟件質(zhì)量和生產(chǎn)率。概括地說,軟件工程就是要解決軟件危機(jī)問題,具體到當(dāng)前軟件工程主要面臨如下問題。

1.遺留系統(tǒng)帶來的挑戰(zhàn)現(xiàn)在使用的許多大型系統(tǒng)都是幾年前,甚至十幾年前開發(fā)的。這些系統(tǒng)在使用過程中不斷地被修改,因此不斷地退化,但同時(shí)這些系統(tǒng)上一頁下一頁返回1.2軟件工程

也不斷地被注入大量的業(yè)務(wù)知識、規(guī)程。現(xiàn)在面臨的問題是這些系統(tǒng)維護(hù)起來的成本很高,但徹底淘汰的代價(jià)也無法承受。如何以合理的成本維護(hù)和更新系統(tǒng),同時(shí)又要不斷交付基本的業(yè)務(wù)服務(wù)是帶給軟件工程的一大難題。

2.軟件開發(fā)方式和運(yùn)行環(huán)境多樣性的挑戰(zhàn)隨著網(wǎng)絡(luò)時(shí)代的來臨,軟件的開發(fā)由過去集中在專門的機(jī)構(gòu)中封閉實(shí)施,轉(zhuǎn)變?yōu)樵诰W(wǎng)絡(luò)環(huán)境下基于開放源碼的方式由許多開發(fā)者協(xié)作完成。同時(shí),系統(tǒng)也越來越要求像基于網(wǎng)絡(luò)的分布式系統(tǒng)一樣運(yùn)行,但這些網(wǎng)絡(luò)中包含各種不同類型的軟硬件平臺。因此,必須開發(fā)出新的技術(shù)來制作可靠的、靈活的軟件來應(yīng)對網(wǎng)絡(luò)化的挑戰(zhàn)。

3.軟件交付上的挑戰(zhàn)傳統(tǒng)的軟件工程技術(shù)開發(fā)高質(zhì)量軟件需要消耗大量時(shí)間,而今天的軟件必須具有快速制作、快速響應(yīng)變化的特點(diǎn)。因此,必須找到上一頁下一頁返回1.2軟件工程

新一代軟件開發(fā)技術(shù),在不損害軟件質(zhì)量的前提下快速開發(fā)大型的、復(fù)雜的系統(tǒng)。

1.高可信軟件帶來的挑戰(zhàn)隨著軟件在國民經(jīng)濟(jì)和人們生活中的廣泛使用,人們更加關(guān)注軟件的質(zhì)量問題,尤其當(dāng)軟件是通過遠(yuǎn)程方式獲取時(shí)。除了軟件的正確性和性能外,軟件的可靠性、安全性和保密性等可信性質(zhì)是人們關(guān)注的焦點(diǎn)。傳統(tǒng)的軟件工程技術(shù)通過測試來檢查軟件中存在的問題,但無法驗(yàn)證軟件的可信性。目前,基于嚴(yán)格數(shù)學(xué)模型的形式化開發(fā)方法為高可信軟件的開發(fā)提供了一種解決思路。雖然人類徹底解決軟件危機(jī)的目標(biāo)尚待時(shí)日,但軟件工程的研究與應(yīng)用已經(jīng)取得很大成就,它在軟件開發(fā)方法、工具、管理等方面的應(yīng)用極大地緩解了軟件危機(jī)造成的被動局面。上一頁返回1.3軟件生命周期

概括地說,軟件生命周期是由軟件規(guī)格描述、軟件開發(fā)、軟件確認(rèn)和軟件演進(jìn)4個(gè)基本活動組成的,每個(gè)基本活動又進(jìn)一步劃分成若干個(gè)階段。軟件規(guī)格描述的主要任務(wù)是解決“做什么”的問題,即確定工程必須完成的總目標(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é)完成。軟件規(guī)格描述通常進(jìn)一步劃分成3個(gè)階段,即問題定義、可行性研究和需求分析。軟件開發(fā)的主要任務(wù)是解決“如何做”的問題,即具體設(shè)計(jì)和實(shí)現(xiàn)在前一個(gè)時(shí)期定義的軟件,它通常由下述3個(gè)階段組成:總體設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼實(shí)現(xiàn)。下一頁返回1.3軟件生命周期

軟件確認(rèn)的主要任務(wù)是“確認(rèn)實(shí)現(xiàn)的系統(tǒng)滿足用戶的要求”,即依據(jù)規(guī)格說明來測試所實(shí)現(xiàn)的軟件。軟件測試包括單元測試、集成測試、系統(tǒng)測試等。通常單元測試合并在編碼實(shí)現(xiàn)階段進(jìn)行。軟件演進(jìn)又稱為軟件維護(hù),通常有4類維護(hù)活動:改正性維護(hù),當(dāng)軟件在使用過程中發(fā)現(xiàn)錯誤時(shí)應(yīng)該加以改正;適應(yīng)性維護(hù),當(dāng)環(huán)境改變時(shí)應(yīng)該修改軟件以適應(yīng)新的環(huán)境;完善性維護(hù),當(dāng)用戶有新要求時(shí)應(yīng)該及時(shí)改進(jìn)軟件以滿足用戶的新需要;預(yù)防性維護(hù),即修改軟件為將來的維護(hù)活動做準(zhǔn)備。下面簡單介紹軟件生命周期每個(gè)階段的基本任務(wù)。1.問題定義問題定義階段必須明確要解決的問題是什么。盡管確切地定義問題的必要性是十分明顯的,但是在實(shí)踐中它卻可能是最容易被忽視的一個(gè)步驟。通過問題定義階段的工作,系統(tǒng)分析員應(yīng)該提出關(guān)于問題性上一頁下一頁返回1.3軟件生命周期

質(zhì)、工程目標(biāo)和規(guī)模的書面報(bào)告。通過對系統(tǒng)的實(shí)際用戶和使用部門負(fù)責(zé)人的訪問調(diào)查,分析員扼要地寫出他對問題的理解,并在用戶和使用部門負(fù)責(zé)人的會議上認(rèn)真討論這份書面報(bào)告,澄清含糊不清的地方,改正理解不正確的地方,最后得出一份雙方都滿意的文檔。問題定義階段是軟件生命周期中最簡短的階段,一般只需要1天甚至更少的時(shí)間。

2.可行性研究這個(gè)階段要明確在成本和時(shí)間的限制條件下,上一個(gè)階段所確定的問題是否有行得通的解決辦法。為此,系統(tǒng)分析員需要在較抽象的高層次上進(jìn)行一次系統(tǒng)分析和設(shè)計(jì)過程。在用戶的配合下,由分析員提出解決問題的候選方案,然后對每個(gè)方案從技術(shù)、經(jīng)濟(jì)、法律和操作等方面進(jìn)行可行性研究。上一頁下一頁返回1.3軟件生命周期

可行性研究的結(jié)果將為使用部門做出最終是否開發(fā)軟件項(xiàng)目的決定提供重要依據(jù)。可行性研究有助于盡早發(fā)現(xiàn)那些不值得投資的工程項(xiàng)目,避免了后期更大的浪費(fèi)。

3.需求分析這個(gè)階段的任務(wù)主要是明確為了解決這個(gè)問題,目標(biāo)系統(tǒng)必須做什么。為此,分析員要通過各種途徑與用戶溝通,獲取他們的真實(shí)需求,并通過建模技術(shù)來表達(dá)這些需求。通常需要從功能、數(shù)據(jù)、行為等方面描述系統(tǒng)的靜態(tài)和動態(tài)特性。在需求分析階段確定的系統(tǒng)邏輯模型是以后設(shè)計(jì)和實(shí)現(xiàn)目標(biāo)系統(tǒng)的基礎(chǔ),必須準(zhǔn)確完整地體現(xiàn)用戶的要求。系統(tǒng)分析員通常都是計(jì)算機(jī)軟件專家,技術(shù)專家一般都喜歡很快著手進(jìn)行具體設(shè)計(jì),然而,一旦分析員開始談?wù)摮绦蛟O(shè)計(jì)的細(xì)節(jié),就會脫離用戶,使他們不能繼續(xù)提出他們的要求和建議。因此,分析人員必須和用戶共同討論決定哪些需求是必須的,然后編寫出需求規(guī)格說明書和系統(tǒng)用戶手冊,在用戶確認(rèn)之后才能進(jìn)入下一個(gè)階段。上一頁下一頁返回1.3軟件生命周期

4.總體設(shè)計(jì)又稱為概要設(shè)計(jì),這個(gè)階段的主要任務(wù)是確定系統(tǒng)的架構(gòu),即給出軟件的體系結(jié)構(gòu)。首先,架構(gòu)設(shè)計(jì)師必須制訂幾種可能的設(shè)計(jì)方案。例如,目標(biāo)系統(tǒng)的一些主要功能是用計(jì)算機(jī)自動完成還是用人工完成;如果使用計(jì)算機(jī),那么是使用批處理方式還是人機(jī)交互方式;信息存儲使用傳統(tǒng)的文件系統(tǒng)還是數(shù)據(jù)庫等。選擇最佳的方案,把上一階段確定的需求映射成相應(yīng)的軟件體系結(jié)構(gòu)。軟件體系結(jié)構(gòu)明確了系統(tǒng)由哪些子系統(tǒng)構(gòu)成、子系統(tǒng)之間的關(guān)系、每個(gè)子系統(tǒng)由哪些模塊組成、模塊之間的關(guān)系,并將這樣一種設(shè)計(jì)結(jié)果用適當(dāng)?shù)哪P捅硎境鰜怼I弦豁撓乱豁摲祷?.3軟件生命周期

5.詳細(xì)設(shè)計(jì)也稱為模塊設(shè)計(jì),這個(gè)階段的主要任務(wù)是進(jìn)一步確定如何實(shí)現(xiàn)這個(gè)系統(tǒng),即設(shè)計(jì)總體設(shè)計(jì)階段所給出的每個(gè)模塊的內(nèi)部算法流程和數(shù)據(jù)結(jié)構(gòu)。這個(gè)階段不是要編寫每個(gè)模塊的代碼,而是運(yùn)用適當(dāng)?shù)哪P蛠砜坍嬡浖O(shè)計(jì)人員對模塊算法的構(gòu)思。

6.編碼和單元側(cè)試這個(gè)階段的任務(wù)就是實(shí)現(xiàn)已做的設(shè)計(jì),即寫出正確的、容易理解和維護(hù)的程序代碼。程序員應(yīng)該選取一種適合的編程語言,把軟件的設(shè)計(jì)結(jié)果轉(zhuǎn)換成在機(jī)器上可以運(yùn)行的程序代碼。此外,在轉(zhuǎn)換過程中,對每個(gè)設(shè)計(jì)模塊要進(jìn)行單元測試,并通過調(diào)試排除測試中發(fā)現(xiàn)的錯誤。上一頁下一頁返回1.3軟件生命周期

7.集成和系統(tǒng)側(cè)試這個(gè)階段就是通過各種類型的測試來提高軟件質(zhì)量,使軟件達(dá)到預(yù)定的要求。本階段主要做兩類測試:集成測試和系統(tǒng)測試。

集成測試又稱為組裝測試,即把經(jīng)過單元測試的模塊按設(shè)計(jì)規(guī)定的某種策略組裝起來,在組裝過程中對程序進(jìn)行必要的測試,重點(diǎn)測試模塊接口部分的正確性。系統(tǒng)測試又稱為驗(yàn)收測試,是根據(jù)軟件需求規(guī)格說明書的要求,對各項(xiàng)需求逐一進(jìn)行測試。系統(tǒng)測試是在用戶的參與下對目標(biāo)系統(tǒng)進(jìn)行的驗(yàn)收。

8.軟件維護(hù)軟件維護(hù)發(fā)生在軟件已經(jīng)正式交付使用之后,維護(hù)的主要目標(biāo)是使系統(tǒng)持久地滿足用戶的需要。軟件維護(hù)的任務(wù)包括:提出維護(hù)要求,分析維護(hù)要求,提出維護(hù)方案,審批維護(hù)方案,確定維護(hù)計(jì)劃,修改軟件設(shè)計(jì),修改程序,測試程序,復(fù)查驗(yàn)收等一系列步驟。上一頁下一頁返回1.3軟件生命周期

軟件維護(hù)發(fā)生在軟件運(yùn)行后退役前,每一次維護(hù)都經(jīng)歷了一次壓縮和簡化了的軟件定義和開發(fā)的全過程,所以軟件維護(hù)的工作量很大,應(yīng)該在開發(fā)過程中就考慮將來的維護(hù),使軟件具有盡可能好的可維護(hù)性。上一頁返回1.4軟件工程方法學(xué)

軟件工程方法學(xué)是指用在軟件生命周期全過程中的一整套技術(shù)方法的集合。軟件工程方法學(xué)包括3個(gè)要素。

(1)過程,獲取高質(zhì)量軟件所需要的一系列任務(wù)框架,它規(guī)定了任務(wù)完成的順序,以及任務(wù)完成的交付物等。過程為軟件開發(fā)明確了做什么的問題。

(2)方法,為完成過程中規(guī)定的各項(xiàng)任務(wù)提供的技術(shù)集合,解決軟件如何做的問題。軟件工程的方法覆蓋面很廣,包括需求分析、設(shè)計(jì)、編碼、測試和維護(hù)等各個(gè)階段的技術(shù),它經(jīng)歷了4個(gè)階段的發(fā)展,每個(gè)階段都是某種解決軟件危機(jī)的思想在具體技術(shù)上的體現(xiàn)。目前較為常用的是傳統(tǒng)方法(結(jié)構(gòu)化方法)和面向?qū)ο蠓椒ā?/p>

(3)工具。軟件工具是為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。下一頁返回1.4軟件工程方法學(xué)

1.4.1結(jié)構(gòu)化方法學(xué)

20世紀(jì)60年代末到20世紀(jì)70年代,為了克服軟件危機(jī)提出了“軟件工程”一詞,將軟件的開發(fā)納入了工程化的軌道,基本形成了軟件工程的概念、框架、技術(shù)和方法,稱為結(jié)構(gòu)化方法學(xué),又稱為傳統(tǒng)方法學(xué)或生命周期方法學(xué)。人類解決復(fù)雜問題時(shí)普遍采用的一個(gè)策略就是“各個(gè)擊破”,也就是對問題進(jìn)行分解然后再分別解決各個(gè)子問題的策略。在分解問題時(shí)應(yīng)該遵循的一條基本原則就是使各個(gè)子問題的任務(wù)彼此間盡可能相對獨(dú)立,同一子問題的各項(xiàng)任務(wù)性質(zhì)盡可能相同,從而降低每個(gè)子問題的復(fù)雜程度,簡化不同子問題之間的聯(lián)系,有利于整個(gè)問題的解決。結(jié)構(gòu)化方法學(xué)就是將人類的這種結(jié)構(gòu)化劃分思想應(yīng)用到軟件的分析、設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)中,也就是從時(shí)間角度對軟件開發(fā)和維護(hù)的復(fù)雜上一頁下一頁返回1.4軟件工程方法學(xué)

問題進(jìn)行分解,把軟件生存的漫長周期依次劃分為若干個(gè)階段,然后逐步完成每個(gè)階段的任務(wù)。對于任何兩個(gè)相鄰的階段而言,前一個(gè)階段的結(jié)束標(biāo)注是后一個(gè)階段的開始標(biāo)準(zhǔn)。

結(jié)構(gòu)化軟件工程方法學(xué)劃分的每個(gè)階段有相對獨(dú)立的任務(wù),在每個(gè)階段都采用科學(xué)的管理技術(shù)和良好的技術(shù)方法,而且在每個(gè)階段結(jié)束之前都從技術(shù)和管理兩個(gè)角度進(jìn)行嚴(yán)格的審查,合格之后才開始下一階段的工作,這就使軟件開發(fā)工程的全過程以一種有條不紊的方式進(jìn)行,保證了軟件的質(zhì)量,特別是提高了軟件的可維護(hù)性。結(jié)構(gòu)化方法學(xué)是歷史最悠久的

溫馨提示

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

最新文檔

評論

0/150

提交評論