計算機導(dǎo)論 第8章 軟件工程與開發(fā)方法_第1頁
計算機導(dǎo)論 第8章 軟件工程與開發(fā)方法_第2頁
計算機導(dǎo)論 第8章 軟件工程與開發(fā)方法_第3頁
計算機導(dǎo)論 第8章 軟件工程與開發(fā)方法_第4頁
計算機導(dǎo)論 第8章 軟件工程與開發(fā)方法_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機導(dǎo)論教師:第8章軟件工程與開發(fā)方法88.1軟件危機8.3軟件生命周期模型8.5設(shè)計階段8.7維護階段目錄CONTENTS8.2軟件工程8.4分析階段8.6實現(xiàn)階段本章學(xué)習(xí)目標了解軟件危機產(chǎn)生的原因掌握軟件工程的定義、本質(zhì)特性和基本原理理解軟件生命周期和各階段的開發(fā)方法本章學(xué)習(xí)目標軟件危機是指在計算機軟件的開發(fā)和維護過程中所遇到的一系列嚴重問題。這些問題絕不僅是“不能正常運行的”軟件才具有的,實際上幾乎所有軟件都會不同程度地存在這些問題。概括地說,軟件危機包含下述兩方面的問題:如何開發(fā)軟件,怎樣滿足對軟件的日益增長的需求;如何維護數(shù)量不斷膨脹的已有軟件。8.1軟件危機(1)對軟件開發(fā)成本和進度的估計很不準確。(2)用戶對“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生。(3)軟件產(chǎn)品的質(zhì)量往往靠不住。(4)軟件常常是不可維護的。(5)軟件通常沒有適當?shù)奈臋n資料。(6)軟件成本在計算機系統(tǒng)總成本中所占的比例逐年上升。(7)軟件開發(fā)生產(chǎn)率提高的速度,遠遠跟不上計算機應(yīng)用迅速普及深入的趨勢。

軟件危機的表現(xiàn)在軟件開發(fā)與維護的過程中存在這么多嚴重問題,一方面與軟件本身的特點有關(guān),另一方面也和軟件開發(fā)與維護的方法不正確有關(guān)。軟件不同于硬件,它是計算機系統(tǒng)中的邏輯部件而不是物理部件。軟件缺乏可見性,在寫出程序代碼并在計算機上試運行之前,軟件開發(fā)過程的進展情況較難衡量,軟件開發(fā)的質(zhì)量也較難評價。軟件在運行過程中不會因為使用時間過長而被“用壞”,如果運行中發(fā)現(xiàn)錯誤,則很可能是遇到了一個在開發(fā)時期引入的在測試階段沒能檢測出來的故障。因此,軟件維護通常意味著改正或修改原來的設(shè)計,這在客觀上使軟件較難維護。軟件不同于一般程序,它的一個顯著特點是規(guī)模龐大,而且程序復(fù)雜性將隨著程序規(guī)模的增加而呈指數(shù)上升。目前相當多的軟件專業(yè)人員對軟件開發(fā)和維護還有不少糊涂觀念,在實踐過程中或多或少地采用了錯誤的方法和技術(shù),這可能是使軟件問題發(fā)展成軟件危機的主要原因。對用戶需求沒有完整、準確的認識就匆忙著手編寫程序是許多軟件開發(fā)工程失敗的主要原因之一。軟件危機產(chǎn)生的原因為了消除軟件危機,首先應(yīng)該對計算機軟件有一個正確的認識,應(yīng)該徹底消除在計算機系統(tǒng)早期發(fā)展階段形成的“軟件就是程序”的錯誤概念。一個軟件必須由一個完整的配置組成,事實上,軟件是程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其中,程序是能夠完成預(yù)定功能和性能的可執(zhí)行的指令序列;數(shù)據(jù)是使程序能夠適當?shù)靥幚硇畔⒌臄?shù)據(jù)結(jié)構(gòu);文檔則能描述和規(guī)定軟件設(shè)計和實現(xiàn)細節(jié),通常以書面形式表達,其還能在軟件維護遇到問題時使用,如需求和功能可以根據(jù)軟件文檔的描述進行更快速的修改。軟件開發(fā)不是某種個體勞動的神秘技巧,而是一種組織良好、管理嚴密、各類人員協(xié)同配合、共同完成的工程項目。我們必須充分吸取和借鑒人類長期以來從事各種工程項目所積累的行之有效的原理、概念、技術(shù)和方法,特別要吸取幾十年來人類從事計算機硬件研究和開發(fā)的經(jīng)驗教訓(xùn)。我們應(yīng)該推廣、使用在實踐中總結(jié)出來的開發(fā)軟件的成功的技術(shù)和方法,并且研究、探索更有效的技術(shù)和方法,盡快消除在計算機系統(tǒng)早期發(fā)展階段形成的一些錯誤概念和做法,并應(yīng)該開發(fā)和使用更好的軟件工具。正如機械工具可以“放大”人類的體力一樣,軟件工具可以“放大”人類的智力。

如何應(yīng)對軟件危機軟件工程的定義1968年在第一屆NATO會議上將軟件工程這個術(shù)語定義為“軟件工程就是為了經(jīng)濟地獲得可靠的而且能在實際機器上有效地運行的軟件,而建立和使用完善的工程原理”。1993年IEEE更全面更具體的定義:“軟件工程是:①把系統(tǒng)的、規(guī)范的、可度量的途徑應(yīng)用于軟件開發(fā)、運行和維護過程,也就是把工程應(yīng)用于軟件;②研究①中提到的途徑”??傊?,軟件工程是指導(dǎo)計算機軟件開發(fā)和維護的一門工程學(xué)科,采用工程的概念、原理、技術(shù)和方法來開發(fā)與維護軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來,經(jīng)濟地開發(fā)高質(zhì)量的軟件并有效地維護它,這就是軟件工程。8.2軟件工程軟件工程的本質(zhì)特性1.軟件工程關(guān)注大型程序的構(gòu)造2.軟件工程的中心課題是控制復(fù)雜性3.軟件經(jīng)常變化4.開發(fā)軟件的效率非常重要5.和諧合作是開發(fā)軟件的關(guān)鍵6.軟件必須有效地支持它的用戶7.在軟件工程領(lǐng)域中由具有一種文化背景的人替具有另一種文化背景的人創(chuàng)造產(chǎn)品8.2軟件工程軟件工程的基本原理著名的軟件工程專家B.W.Boehm綜合了這些學(xué)者的意見并總結(jié)了TRW公司多年來開發(fā)軟件的經(jīng)驗,于1983年在一篇論文中提出了軟件工程的7條基本原理。他認為這7條基本原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合。這7條基本原理是互相獨立的,其中任意6條基本原理的組合也不能代替另一條原理。然而這7條基本原理又是相當完備的,人們雖然不能用數(shù)學(xué)方法嚴格地證明它們是一個完備的集合,但是可以證明在此之前已經(jīng)提出的100多條軟件工程原理都可以由這7條基本原理的任意組合包含或派生。8.2軟件工程軟件工程的基本原理1.用分階段的生命周期計劃嚴格管理2.堅持進行階段評審3.實行嚴格的產(chǎn)品控制4.采用現(xiàn)代程序設(shè)計技術(shù)5.結(jié)果應(yīng)能清楚地被審查6.軟件開發(fā)小組成員應(yīng)該少而精7.承認不斷改進軟件工程實踐的必要性8.2軟件工程軟件工程方法學(xué)通常把在軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為軟件工程方法學(xué),也稱為“范型”。在軟件工程領(lǐng)域,這兩個術(shù)語的含義基本相同。軟件工程方法學(xué)包括3個要素:方法、工具和過程。方法:完成軟件開發(fā)的各項任務(wù)的技術(shù)方法。工具:運用方法提供的自動的或半自動的軟件工程支撐環(huán)境。過程:為了獲得高質(zhì)量的軟件所要完成的一系列任務(wù)框架,規(guī)定了完成各項任務(wù)的工作步驟。目前使用較廣泛的軟件工程方法學(xué)分別是傳統(tǒng)方法學(xué)和面向?qū)ο蠓椒▽W(xué)。8.2軟件工程軟件工程方法學(xué)1.傳統(tǒng)方法學(xué)傳統(tǒng)方法學(xué)又稱生命周期方法學(xué)或結(jié)構(gòu)化范型。軟件工程采用的生命周期方法學(xué)就是先從時間角度對軟件開發(fā)和維護的復(fù)雜問題進行分解,把軟件生命的很長周期依次劃分為若干個階段,每個階段都有相對獨立的任務(wù);然后逐步完成每個階段的任務(wù)。對于任何兩個相鄰的階段而言,前一階段的結(jié)束標準就是后一階段的開始標準。在每個階段結(jié)束之前都必須進行正式、嚴格的技術(shù)審查和管理復(fù)審,從技術(shù)和管理兩方面對這個階段的開發(fā)成果進行檢查,通過之后這個階段才算結(jié)束。8.2軟件工程軟件工程方法學(xué)2.面向?qū)ο蠓椒▽W(xué)面向?qū)ο蠓椒▽W(xué)是一種以數(shù)據(jù)為主線,把數(shù)據(jù)和對數(shù)據(jù)的操作緊密地結(jié)合起來的方法。面向?qū)ο蠓椒▽W(xué)具有下述4個要點。(1)把對象作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構(gòu)件。(2)把所有對象都劃分成類。(3)按照父類與子類的關(guān)系,把若干個相關(guān)類組成一個層次結(jié)構(gòu)的系統(tǒng)。(4)對象彼此間僅能通過發(fā)送消息互相聯(lián)系。8.2軟件工程軟件生命周期一般來說,軟件生命周期由軟件定義、軟件開發(fā)和軟件維護3個時期組成,每個時期又進一步劃分成若干個階段。軟件定義時期通常進一步劃分成3個階段,即問題定義、可行性研究和需求分析。軟件開發(fā)時期具體設(shè)計和實現(xiàn)在前一個時期定義的軟件,它通常由下述4個階段組成:總體設(shè)計、詳細設(shè)計、編碼和單元測試、綜合測試。其中前兩個階段稱為系統(tǒng)設(shè)計,后兩個階段稱為系統(tǒng)實現(xiàn)。軟件維護時期的主要任務(wù)是使軟件持久地滿足用戶的需要。具體地說,當軟件在使用過程中發(fā)現(xiàn)錯誤時應(yīng)該加以改正;當環(huán)境改變時應(yīng)該修改軟件以適應(yīng)新的環(huán)境;當用戶有新要求時應(yīng)該及時改進軟件以滿足用戶的新需要。8.3軟件生命周期及其模型軟件生命周期的各個階段1.問題定義2.可行性研究3.需求分析4.總體設(shè)計5.詳細設(shè)計6.編碼和單元測試7.綜合測試8.軟件維護8.3軟件生命周期及其模型軟件生存周期的每個階段都會產(chǎn)生一定規(guī)格的軟件文件(文檔)移交給下一階段,使下一階段在此基礎(chǔ)上繼續(xù)開展工作。軟件生存周期過程中階段的劃分,有助于軟件研制管理人員借用傳統(tǒng)工程的管理方法提高軟件質(zhì)量、降低成本、合理使用人才,進而提高軟件開發(fā)的勞動生產(chǎn)率。這種看法把軟件開發(fā)之前和軟件交付使用之后的一些活動都包括在軟件生命周期之內(nèi)。應(yīng)當注意的是,軟件系統(tǒng)的實際開發(fā)工作不可能直線地通過分析、設(shè)計、編程和測試等階段,出現(xiàn)各階段間的回溯是不可避免的。下面介紹最具代表性的軟件生命周期模型之一——瀑布模型。瀑布模型是1970年由W.Royce提出的最早的軟件開發(fā)模型,它將軟件開發(fā)過程中的各項活動規(guī)定為依固定順序連接的若干階段工作,形如瀑布流水,如圖8.1所示,最終得到軟件系統(tǒng)或軟件產(chǎn)品。換句話說,它將軟件開發(fā)過程劃分成若干個互相區(qū)別而又彼此聯(lián)系的階段,每個階段中的工作都以上個階段工作的結(jié)果為依據(jù),同時為下個階段的工作提供前提。

瀑布模型圖8-1瀑布模型(1)階段間具有順序性和依賴性。這個特點有兩重含義;第一,必須等前一階段的工作完成之后,才能開始后一階段的工作;第二,前一階段的輸出文檔就是后一階段的輸入文檔,因此只有前一階段的輸出文檔正確,后一階段的工作才能獲得正確的結(jié)果。(2)推遲實現(xiàn)的觀點。實踐表明,對于規(guī)模較大的軟件項目來說,往往編碼開始得越早最終完成開發(fā)工作所需要的時間越長。瀑布模型在編碼之前設(shè)置了系統(tǒng)分析與系統(tǒng)設(shè)計的各個階段,系統(tǒng)分析與系統(tǒng)設(shè)計階段的基本任務(wù)規(guī)定,這兩個階段主要考慮目標系統(tǒng)的邏輯模型,不涉及軟件的物理實現(xiàn)。清楚地區(qū)分邏輯設(shè)計與物理設(shè)計,盡可能推遲程序的物理實現(xiàn),是按照瀑布模型開發(fā)軟件的一條重要的指導(dǎo)思想。

瀑布模型的特點(3)質(zhì)量保證的觀點。軟件工程的基本目標是優(yōu)質(zhì)、高產(chǎn)。在瀑布模型的每個階段都應(yīng)堅持兩個重要做法。第一,每個階段都必須完成規(guī)定的文檔,沒有交出合格的文檔就是沒有完成該階段的任務(wù)。完整、準確的合格文檔不僅是軟件開發(fā)時期各類人員之間相互通信的媒介,也是運行時期對軟件進行維護的重要依據(jù)。第二,每個階段結(jié)束前都要對所完成的文檔進行評審,以便盡早發(fā)現(xiàn)問題、改正錯誤。事實上,越是早期階段犯下的錯誤,暴露出來的時間就越晚,排除故障、改正錯誤所需付出的代價也就越高。因此及時審查是保證軟件質(zhì)量、降低軟件成本的重要措施。瀑布模型的成功在很大程度上是因為它基本上是一種文檔驅(qū)動模型。

瀑布模型的特點整個開發(fā)過程始于分析階段,包括可行性研究和需求分析??尚行匝芯靠梢詮囊韵聨讉€方面進行考量。(1)技術(shù)可行性:使用現(xiàn)有的技術(shù)實現(xiàn)這個系統(tǒng)。(2)經(jīng)濟可行性:這個系統(tǒng)的經(jīng)濟效益能否超過開發(fā)成本。(3)操作可行性:系統(tǒng)的操作方式在這個用戶組織內(nèi)是否行得通。必要時還應(yīng)該從法律和社會效益等方面研究每種方式的可行性??尚行匝芯啃枰臅r間長短取決于系統(tǒng)的規(guī)模,可行性研究的成本只是預(yù)期工程總成本的5%~10%。8.4分析階段的開發(fā)方法軟件需求分析的任務(wù)是不僅要確定系統(tǒng)怎樣完成它的工作,而且要確定系統(tǒng)必須完成哪些工作,也就是對目標系統(tǒng)提出完整、準確、清晰、具體的要求。軟件需求分析是一個不斷進行揭示和判斷的過程。需求通常用用戶能理解的術(shù)語來表述。分析階段有4個步驟。(1)定義用戶。軟件可以為一般用戶或特殊用戶而設(shè)計,必須很清楚地劃分軟件的使用者。(2)定義要求。確定用戶以后,系統(tǒng)分析員開始定義要求。在這個階段,最好的答案來自于用戶,用戶或用戶代表要能清楚地定義他們對軟件的期望。(3)定義需求。在用戶要求的基礎(chǔ)上,系統(tǒng)分析員能夠準確地定義系統(tǒng)的需求。例如,假設(shè)一個軟件在月底給每個雇員打印賬單,則需要說明該軟件能實現(xiàn)怎樣的安全和精度等級。(4)定義方法。在清晰定義好需求之后,系統(tǒng)分析員應(yīng)選擇適當?shù)姆椒▉頋M足這些需求。

需求分析與用戶溝通獲取需求的方法訪談是最早開始使用的獲取用戶需求的技術(shù)之一,也是迄今為止仍然廣泛使用的需求分析技術(shù)。訪談有兩種基本形式,分別是正式訪談和非正式訪談。訪談結(jié)構(gòu)化分析方法就是面向數(shù)據(jù)流自頂向下逐步求精進行需求分析的方法。通過可行性研究已經(jīng)得出目標系統(tǒng)的高層數(shù)據(jù)流圖,需求分析的目標之一就是把數(shù)據(jù)流和數(shù)據(jù)存儲定義到元素級。面向數(shù)據(jù)流自頂向下求精面向團隊的需求收集法,稱為簡易的應(yīng)用規(guī)格說明技術(shù)。這種方法提倡用戶與開發(fā)者密切合作、共同標識問題、提出解決方案要素、商討不同方案并指定基本需求。目前,簡易的應(yīng)用規(guī)格說明技術(shù)已經(jīng)成為信息系統(tǒng)領(lǐng)域使用的主流技術(shù)。簡易的應(yīng)用規(guī)格說明技術(shù)快速建立軟件原型是最準確、最有效、最強大的需求分析技術(shù)之一??焖俳⑵鹧菔灸繕讼到y(tǒng)主要功能的可運行的程序。構(gòu)建原型的要點是,它應(yīng)能實現(xiàn)用戶看得見的功能,如屏幕顯示或打印報表等??焖俳④浖涂焖僭湍P蛻?yīng)該具備的第一個特性是“快速”,目的是盡快向用戶提供一個可在計算機上運行的目標系統(tǒng)的模型。因此,原型的某些缺陷是可以忽略的,只要這些缺陷不嚴重損害原型的功能,不會使用戶對產(chǎn)品的行為產(chǎn)生誤解即可??焖俳④浖蛻?yīng)該具備的第二個特性是“容易修改”。在實際開發(fā)軟件產(chǎn)品時,原型的“修改-試用-反饋”過程可能會重復(fù)多遍,如果修改耗時過多,則勢必會延誤軟件開發(fā)時間。圖8.2展示了利用快速建立軟件原型模型進行軟件開發(fā)的過程。

快速原型模型圖8.2快速建立軟件原型模型1.分析建模所謂模型,就是為了理解事物而對事物做出的一種抽象,是對事物的一種無歧義的書面描述。通常模型由一組圖形符號和組織這些符號的規(guī)則組成。結(jié)構(gòu)化分析實質(zhì)上是一種創(chuàng)建模型的活動。為了開發(fā)出復(fù)雜的軟件系統(tǒng),系統(tǒng)分析員應(yīng)該從不同角度抽象目標系統(tǒng)的特性,并在設(shè)計過程中逐漸把和實現(xiàn)有關(guān)的細節(jié)加進模型中,直至最終用程序?qū)崿F(xiàn)模型。2.模型與工具根據(jù)結(jié)構(gòu)化分析準則,分析階段應(yīng)該建立3種模型,它們分別是數(shù)據(jù)模型、功能模型和行為模型。(1)數(shù)據(jù)模型:可以采用實體—聯(lián)系圖描述。(2)功能模型:可以采用數(shù)據(jù)流圖描述。(3)行為模型:可以采用狀態(tài)轉(zhuǎn)換圖描述。

分析建模與規(guī)格說明3.軟件需求規(guī)格說明除了分析階段產(chǎn)生的模型,還應(yīng)該寫出軟件需求規(guī)格說明書,它是需求分析階段得出的最主要的文檔之一。通常要能用自然語言完整、準確、具體地描述系統(tǒng)的數(shù)據(jù)要求、功能需求、性能需求、可靠性和可用性要求、出錯處理需求、接口需求、約束、逆向需求及將來可能提出的要求。自然語言的規(guī)格說明具有容易書寫、容易理解的優(yōu)點,被大多數(shù)人所歡迎和采用。

分析建模與規(guī)格說明設(shè)計的基本原理1.模塊化模塊是由邊界元素限定的相鄰程序元素(如數(shù)據(jù)說明、可執(zhí)行的語句)的序列,而且有一個總體標識符代表它。像Pascal或Ada這樣的塊結(jié)構(gòu)語言中的Begin…End對,或者C語言、C++語言和Java中的{...}對,都是邊界元素的例子。按照模塊的定義,過程、函數(shù)、子程序和宏等,都可作為模塊。面向?qū)ο蠓椒▽W(xué)中的對象是模塊,對象內(nèi)的方法(或稱服務(wù))也是模塊。模塊是構(gòu)成程序的基本構(gòu)件。模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊能完成一個子功能,把這些模塊集成起來構(gòu)成一個整體,可以完成指定的功能以滿足用戶的需求。

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理2.抽象人們在認識復(fù)雜現(xiàn)象的過程中使用的較強有力的思維工具是抽象。人們在實踐中認識到,在現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象?;蛘哒f抽象就是抽出事物的本質(zhì)特性而暫時不考慮它們的細節(jié)。由于人類思維能力的限制,如果每次面臨的因素太多,是不可能做出精確思維的。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個復(fù)雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構(gòu)造和理解,這些高級概念又可以用一些較低級的概念構(gòu)造和理解,如此進行下去,直至最低層次的具體元素。

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理3.逐步求精逐步求精是人類解決復(fù)雜問題時采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ),可以把逐步求精定義為“為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮”。逐步求精之所以如此重要,是因為人類的認知過程遵守Miller法則:一個人在任何時候都只能把注意力集中在(7±2)個知識塊上。逐步求精和模塊化的概念與抽象是緊密相關(guān)的。隨著軟件開發(fā)工程的進展,軟件結(jié)構(gòu)每層中的模塊都表示了對軟件抽象層次的一次精化。事實上,軟件結(jié)構(gòu)頂層的模塊,控制了系統(tǒng)的主要功能并且影響了全局;在軟件結(jié)構(gòu)底層的模塊,能完成對數(shù)據(jù)的一個具體處理,用自頂向下由抽象到具體的方式分配控制,簡化了軟件的設(shè)計和實現(xiàn),提高了軟件的可理解性和可測試性,并且使軟件更容易維護。

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理3.逐步求精逐步求精最初是由NiklausWirth提出的一種自頂向下的設(shè)計策略。按照這種設(shè)計策略,程序的體系結(jié)構(gòu)是通過逐步精化處理過程的層次而設(shè)計出來的。通過逐步分解對功能的宏觀陳述而開發(fā)出層次結(jié)構(gòu),直至最終得出用程序設(shè)計語言表達的程序。NiklausWirth本人對逐步求精策略曾做過如下的概括說明。“我們對付復(fù)雜問題的最重要的辦法是抽象,因此,對一個復(fù)雜的問題不應(yīng)該立刻用計算機指令、數(shù)字和邏輯符號來表示,而應(yīng)該用較自然的抽象語句來表示,從而得出抽象程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)進行某些特定的運算并用某些合適的記號(可能是自然語言)來表示。對抽象程序做進一步的分解,并進入下一個抽象層次,這樣的精細化過程一直進行下去,直到程序能被計算機接受為止。這時的程序可能是用某種高級語言或機器指令書寫的?!?/p>

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理4.信息隱蔽和局部化信息隱藏原理指出:應(yīng)該這樣設(shè)計和確定模塊,使一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的。局部化概念和信息隱藏概念是密切相關(guān)的。所謂局部化是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。在模塊中使用局部數(shù)據(jù)元素是局部化的一個例子。顯然,局部化有助于實現(xiàn)信息隱藏。實際上,應(yīng)該隱藏的不是有關(guān)模塊的一切信息,而是模塊的實現(xiàn)細節(jié)。因此,有人主張把這條原理稱為“細節(jié)隱藏”?!半[藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現(xiàn),這些獨立的模塊彼此間僅交換那些為了完成系統(tǒng)功能而必須交換的信息。

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理5.模塊獨立模塊獨立的概念是模塊化、抽象、信息隱藏和局部化概念的直接結(jié)果。開發(fā)具有獨立功能且和其他模塊之間沒有過多的相互作用的模塊,就可以做到模塊獨立。換句話說,希望這樣設(shè)計軟件結(jié)構(gòu),使每個模塊都能完成一個相對獨立的特定子功能,并且和其他模塊之間的關(guān)系很簡單。模塊獨立程度可以由兩個定性標準度量,這兩個標準分別稱為內(nèi)聚和耦合。耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度;內(nèi)聚衡量一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度。

8.5設(shè)計階段的開發(fā)方法設(shè)計的基本原理5.模塊獨立為什么模塊的獨立性很重要呢?主要有兩條理由:第一,有效的模塊化(具有獨立的模塊)的軟件比較容易開發(fā)出來。這是由于其能夠分割功能而且接口可以簡化,當許多人分工合作開發(fā)同一個軟件時,這個優(yōu)點尤其重要。第二,獨立的模塊比較容易測試和維護。這是因為相對說來,修改設(shè)計和程序需要的工作量比較小,錯誤傳播范圍小,需要擴充功能時能夠“插入”模塊。總之,模塊獨立是好設(shè)計的關(guān)鍵,而設(shè)計又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)。

8.5設(shè)計階段的開發(fā)方法設(shè)計的啟發(fā)式規(guī)則1.改進軟件結(jié)構(gòu)提高模塊獨立性2.模塊規(guī)模應(yīng)該適中3.深度、寬度、扇出和扇入都應(yīng)適當4.模塊的作用域應(yīng)該在控制域之內(nèi)5.力爭降低模塊接口的復(fù)雜程度6.設(shè)計單入口單出口的模塊7.模塊功能應(yīng)該可以預(yù)測

8.5設(shè)計階段的開發(fā)方法程序設(shè)計語言的選擇程序設(shè)計語言是人和計算機通信的最基本的工具之一,它的特點是:影響人的思維和解題方式;影響人和計算機通信的方式和質(zhì)量;影響其他人閱讀和理解程序的難易程度。因此,編碼之前的一項重要工作就是選擇一種適當?shù)某绦蛟O(shè)計語言。使用匯編語言編碼需要把軟件設(shè)計翻譯成機器操作的序列,由于這兩種表示方法很不相同,因此匯編程序設(shè)計既困難又容易出差錯。一般來說,高級語言的源程序語句和匯編代碼指令之間有一句對多句的對應(yīng)關(guān)系。統(tǒng)計資料表明,程序員在相同時間內(nèi)可以寫出的高級語言語句數(shù)和匯編語言指令數(shù)大體相同,因此用高級語言寫程序比用匯編語言寫程序生產(chǎn)率可以提高好幾倍。高級語言一般都容許用戶給程序變量和子程序賦予含義鮮明的名字,通過名字可以很容易地把程序?qū)ο蠛退鼈兯淼膶嶓w聯(lián)系起來;此外,高級語言使用的符號和概念更符合人的習(xí)慣。因此用高級語言寫的程序容易閱讀、容易測試、容易調(diào)試、容易維護。

8.6

實現(xiàn)階段的開發(fā)方法軟件測試的相關(guān)技術(shù)軟件測試在軟件生命周期中橫跨兩個階段。通常在編寫每個模塊之后要對它做必要的測試(稱為單元測試),模塊的編寫者和測試者是同一個人,編碼和單元測試屬于軟件生命周期的同一個階段。在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進行各種綜合測試,這是軟件生命周期中的另一個獨立階段,通常由專門的測試人員承擔(dān)這項工作。大量統(tǒng)計資料表明,軟件測試的工作量往往占軟件開發(fā)總工作量的40%以上,在極端情況下,測試關(guān)系人的生命安全的軟件所花費的成本,可能相當于軟件工程其他開發(fā)步驟總成本的3倍到5倍。因此必須高度重視軟件測試工作,絕不能認為寫出程序之后軟件開發(fā)工作就完成了,實際上,大約還有同樣多的開發(fā)工作量需要完成。僅就軟件測試而言,它的目標是發(fā)現(xiàn)軟件中的錯誤,但是發(fā)現(xiàn)錯誤并不是最終目的。軟件工程的根本目的是開發(fā)出高質(zhì)量的完全符合用戶需要的軟件,因此通過軟件測試發(fā)現(xiàn)錯誤之后還必須診斷并改正錯誤,這就是調(diào)試的目的。調(diào)試是軟件測試階段較困難的工作。

8.6

實現(xiàn)階段的開發(fā)方法軟件測試的相關(guān)技術(shù)測試的主要類型有兩種:黑盒測試和白盒測試。1.黑盒測試黑盒測試即在不知道程序內(nèi)部構(gòu)造也不知道程序是怎樣工作的情況下測試程序。換言之,程序就像看不見內(nèi)部的黑盒。簡單地說,黑盒測試計劃是從需求說明發(fā)展起來的。這就是為什么有一組好的需求說明如此重要的原因之一。2.白盒測試白盒測試與黑盒測試假設(shè)對程序代碼的一無所知相反,白盒測試假設(shè)你知道有關(guān)程序的一切。在這種情況下,程序就像玻璃房子,其中的一切都是可見的。白盒測試主要是程序員的責(zé)任,他們準確地知道程序內(nèi)部發(fā)生了什么。他們必須確保每條指令和每種可能情況都已經(jīng)被測試過。這不是一個簡單的工作。

8.6

實現(xiàn)階段的開發(fā)方法大型軟件的測試步驟模塊測試的目的是保證每個模塊作為一個單元能正確運行,所以模塊測試通常又稱單元測試。在這個測試步驟中發(fā)現(xiàn)的往往是編碼和詳細設(shè)計的錯誤。模塊測試子系統(tǒng)測試是把經(jīng)過單元測試的模塊放在一起形成一個子系統(tǒng)來測試。模塊相互間的協(xié)調(diào)和通信是這個測試過程中的主要問題,因此這個步驟著重測試模塊的接口。子系統(tǒng)測試系統(tǒng)測試是把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試。在這個測試步驟中發(fā)現(xiàn)的往往是軟件設(shè)計中的錯誤,也可能發(fā)現(xiàn)需求說明中的錯誤。系統(tǒng)測試驗收測試的目的是驗證系統(tǒng)確實能夠滿足用戶的需要,在這個測試步驟中發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯誤。驗收測試也被稱為確認測試。驗收測試關(guān)系重大的軟件產(chǎn)品在驗收之后往往并不會立即投入生產(chǎn)性運行,而是要經(jīng)過一段平行運行時間的考驗。就是同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng),以便比較新舊兩個系統(tǒng)的處理結(jié)果。平行運行調(diào)試(也稱糾錯)作為成功測試的后果出現(xiàn),也就是說,調(diào)試是在測試發(fā)現(xiàn)錯誤之后排除錯誤的過程。雖然調(diào)試應(yīng)該是一個有序過程,但是目前它在很大程度上仍然是一項技巧。軟件工程師在評估測試結(jié)果時,往往僅面對軟件錯誤的癥狀,也就是說,軟件錯誤的外部表現(xiàn)和它的內(nèi)在原因之間可能并沒有明顯的聯(lián)系。調(diào)試就是把癥狀和原因聯(lián)系起來的尚未被人深入認識的智力過程。

軟件調(diào)試一般來說,有下列3種調(diào)試途徑可以采用。1.蠻干法蠻干法可能是尋找軟件錯誤原因的較低效的方法。僅當所有其他方法都失敗了的情況下,才使用這種方法。按照“讓計算機自己尋找錯誤”的策略,這種方法能印出內(nèi)存的內(nèi)容,激活對運行過程的跟蹤,并在程序中到處都寫上WRITE(輸出)語句,希望在這樣生成的信息海洋的某個地方發(fā)現(xiàn)錯誤原因的線索。雖然所生成的大量信息也可能最終導(dǎo)致調(diào)試成功,但是在更多情況下這樣做只會浪費時間和精力。在使用任何一種調(diào)試方法之前,首先必須進行周密的思考,必須有明確的目的,應(yīng)該盡量減少無關(guān)信息的數(shù)量。

軟件調(diào)試2.回溯法回溯是一種相當常用的調(diào)試方法,當調(diào)試小型程序時這種方法是有效的。具體的做法是,從發(fā)現(xiàn)癥狀的地方開始,人工沿程序的控制流往回追蹤并分析源程序代碼,直到找出錯誤原因為止。3.原因排除法對分查找法、歸納法和演繹法都屬于原因排除法。例如對分查找法的基本思路是,如果已經(jīng)知道每個變量在程序中若干個關(guān)鍵點的正確值,則可以先用賦值語句或輸入語句在程序中點附近“注入”這些變量的正確值,然后運行程序并檢查所得到的輸出。如果輸出結(jié)果是正確的,則錯誤原因在程序的前半部分;反之,錯誤原因在程序的后半部分。對錯誤原因所在的那部分重復(fù)使用這個方法,直到把出錯范圍縮小到容易診斷的程度為止。

軟件調(diào)試在軟件產(chǎn)品被開發(fā)出來并交付用戶使用之后,就進入了軟件的維護階段。這個階段是軟件生命周期的最后一個階段,其基本任務(wù)是保證軟件在一個相當長的時期能夠正常運行。軟件維護需要的工作量很大,平均來說,大型軟件的維護成本高達開發(fā)成本的4倍。目前國外許多軟件開發(fā)組織把60%以上的人力用于維護已有的軟件,而且隨著軟件數(shù)量增多和使用壽命延長,這個百分比還在持續(xù)上升。將來維護工作甚至可能會束縛軟件開發(fā)組織的手腳,使他們沒有余力開發(fā)新的軟件。4項維護活動:改正性維護,即診斷和改正在使用過程中發(fā)現(xiàn)的軟件錯誤;適應(yīng)性維護,即修改軟件以適應(yīng)環(huán)境的變化;完善性維護,即根據(jù)用戶的要求改進或擴充軟件使它更完善;預(yù)防性維護,即修改軟件為將來的維護活動做準備。

8.7維護階段的相關(guān)技術(shù)雖然沒有把維護階段進一步劃分成更小的階段,但是實際上每項維護活動都應(yīng)該經(jīng)過提出維護要求(或報告問題)、分析維護要求、提出維護方案

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論