《軟件測試技術(shù)》-第二章_第1頁
《軟件測試技術(shù)》-第二章_第2頁
《軟件測試技術(shù)》-第二章_第3頁
《軟件測試技術(shù)》-第二章_第4頁
《軟件測試技術(shù)》-第二章_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2.1軟件工程的發(fā)展歷史軟件工程(SoftwareEngineering)是在處理20世紀(jì)60年代末所出現(xiàn)的“軟件危機”的過程中逐漸形成與發(fā)展的.在計算機發(fā)展的早期(20世紀(jì)60年代中期以前).通用硬件相當(dāng)普遍.而軟件卻是為每一個具體應(yīng)用專門開發(fā)的.這時的軟件通常是規(guī)模較小的程序.編寫者和使用者往往是同一個人或同一組人.這種個體化的軟件環(huán)境.使得軟件設(shè)計通常是在人們頭腦中進(jìn)行的一個隱含過程.除了代碼之外.沒有其他文檔資料保存下來.軟件工程是一門研究如何用系統(tǒng)化、規(guī)范化、數(shù)量化等工程原則和方法進(jìn)行軟件開發(fā)和維護(hù)的學(xué)科.軟件工程包括兩方面內(nèi)容:軟件開軟件開發(fā)方法學(xué)、軟件工具和軟件工程環(huán)境.軟件項目管理包括軟件度量、項目估算、進(jìn)度控制、人員組織、配置管理、項目計劃等.下一頁返回2.1軟件工程的發(fā)展歷史

為了迎接軟件危機的挑戰(zhàn).人們進(jìn)行了不懈的努力.這些努力大致上是沿著兩個方向同時進(jìn)行的.一是從管理的角度出發(fā).希望實現(xiàn)軟件開發(fā)過程的工程化.這方面最為著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型.也稱為傳統(tǒng)的軟件開發(fā)模式.它是在20世紀(jì)60年代末“軟件危機”后出現(xiàn)的第一個生命周期模型.“瀑布式”軟件開發(fā)的模式大體分為以下幾個階段:需求分析、設(shè)計、編碼、測試、維護(hù).后來.又有人針對該模型的不足.提出了快速原型法、螺旋模型、噴泉模型等對“瀑布式”生命周期模型進(jìn)行補充.上一頁下一頁返回2.1軟件工程的發(fā)展歷史

這方面的努力還使人們認(rèn)識到了文檔的標(biāo)準(zhǔn)以及開發(fā)者之間、開發(fā)者與用戶之間的交流方式的重要性.一些重要文檔格式的標(biāo)準(zhǔn)被確定下來.包括變量、符號的命名規(guī)則以及源代碼的規(guī)范式.軟件工程發(fā)展的第二個方向.側(cè)重于對軟件開發(fā)過程中分析、設(shè)計的方法的研究.這方面的重要成果就是在20世紀(jì)70年代風(fēng)靡一時的結(jié)構(gòu)化開發(fā)方法.即PO(面向過程的開發(fā)或結(jié)構(gòu)化方法)以及結(jié)構(gòu)化的分析、設(shè)計和相應(yīng)的測試方法.軟件工程的目標(biāo)是研制、開發(fā)與生產(chǎn)具有良好的質(zhì)量和費用合算的軟件產(chǎn)品.費用合算是指軟件開發(fā)運行的整個開銷能滿足用戶要求的程度.軟件質(zhì)量是指該軟件滿足明確的和隱含的需求的能力的有關(guān)特征和特性的綜合.軟件質(zhì)量可用六個特性來評價.即功能性、可靠性、易用性、高效性、維護(hù)性、易移植性.上一頁返回2.2現(xiàn)代軟件工程的定義早期的軟件開發(fā)僅考慮人的因素.傳統(tǒng)的軟件工程強調(diào)物性的規(guī)律.現(xiàn)代軟件工程最根本的因素就是人跟物的關(guān)系.即人和機器(工具、自動化)在不同層次的不斷循環(huán)發(fā)展的關(guān)系.面向?qū)ο蠓治?OOA)、面向?qū)ο笤O(shè)計(OOD)的出現(xiàn)使傳統(tǒng)開發(fā)方法發(fā)生了翻天覆地的變化.隨之而來的是面向?qū)ο蟮慕UZ言(以UML為代表)、軟件復(fù)用、基于組件的軟件開發(fā)等新方法和新領(lǐng)域.軟件工程一直以來都缺乏一個統(tǒng)一的定義.很多學(xué)者、組織機構(gòu)都分別給出了自己的定義.Boehm指出.軟件工程就是運用現(xiàn)代科學(xué)技術(shù)知識來設(shè)計并構(gòu)造計算機程序及開發(fā)、運行和維護(hù)這些程序所必需的相關(guān)文件資料.下一頁返回2.2現(xiàn)代軟件工程的定義

IEEE在軟件工程術(shù)語匯編中將軟件工程定義為:將系統(tǒng)化的、嚴(yán)格約束的、可量化的方法應(yīng)用于軟件的開發(fā)、運行和維護(hù).即將工程化應(yīng)用于軟件.FritzBauer在NATO會議上給出的定義是.建立并使用完善的工程化原則.以經(jīng)濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法.?計算機科學(xué)技術(shù)百科全書?中對軟件工程的定義為:軟件工程是應(yīng)用計算機科學(xué)、數(shù)學(xué)及管理科學(xué)等原理開發(fā)軟件的工程.軟件工程借鑒傳統(tǒng)工程的原則、方法.以提高質(zhì)量、降低成本.其中.計算機科學(xué)、數(shù)學(xué)用于構(gòu)建模型和算法.工程科學(xué)用于制定規(guī)范、設(shè)計范型、評估成本及確定權(quán)衡.管理科學(xué)用于計算、資源、質(zhì)量、成本等的管理.上一頁下一頁返回2.2現(xiàn)代軟件工程的定義

目前比較認(rèn)可的一種定義認(rèn)為:軟件工程是研究和應(yīng)用如何以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護(hù)軟件.以及如何把經(jīng)過實踐考驗而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來.雖然人們對軟件工程的定義不盡相同.但是人們普遍認(rèn)為軟件工程具有以下本職特性:(1)軟件工程關(guān)注大型程序的構(gòu)造.通常把一個人在較短時間內(nèi)寫出的程序稱為小型程序.把多人合作.用時半年以上寫出的程序稱為大型程序.現(xiàn)在的軟件開發(fā)項目的通用構(gòu)造為包含若干個相關(guān)程序的“系統(tǒng)”.上一頁下一頁返回2.2現(xiàn)代軟件工程的定義

(2)軟件工程的中心課題是控制復(fù)雜性.軟件所解決的問題十分復(fù)雜.所以通常把問題分解成若干個可以理解的小部分.而且各部分之間保持簡單的通信關(guān)系.用這種方法雖然不能降低問題的整體復(fù)雜性.但是卻可使它變得易于管理.(3)軟件經(jīng)常變化.為了使軟件不被很快淘汰.必須讓其隨著所模擬的現(xiàn)實世界一起變化.因此.在軟件系統(tǒng)交付使用后仍然需要耗費成本.而且在開發(fā)過程中必須考慮軟件將來可能的變化.(4)開發(fā)軟件的效率非常重要.隨著社會的進(jìn)步.社會對新應(yīng)用系統(tǒng)的需求越來越大.超過了人力資源所能提供的限度.軟件供不應(yīng)求的現(xiàn)象日益嚴(yán)重.因此.提高軟件開發(fā)的效率非常重要.上一頁下一頁返回2.2現(xiàn)代軟件工程的定義

(5)開發(fā)團(tuán)隊和諧地合作是軟件開發(fā)的關(guān)鍵.軟件處理的問題十分龐大.必須多人協(xié)同工作才能解決這類問題.因此.只有開發(fā)團(tuán)隊同心協(xié)力、和諧地合作才能開發(fā)出優(yōu)質(zhì)的軟件.(6)軟件必須有效地支持它的用戶.開發(fā)軟件的目的是支持用戶的工作.所以一個軟件能否滿足用戶的要求是檢驗軟件合格與否的標(biāo)準(zhǔn).(7)在軟件工程領(lǐng)域中是由一種文化背景的人替另一文化背景的人創(chuàng)造產(chǎn)品.創(chuàng)造產(chǎn)品這個特性與前兩個特性緊密相關(guān).缺乏應(yīng)用領(lǐng)域的相關(guān)知識.是軟件開發(fā)項目出現(xiàn)問題的常見原因.軟件工程師往往缺乏應(yīng)用領(lǐng)域的實際知識以及該領(lǐng)域的文化知識.上一頁返回2.3現(xiàn)代軟件工程的基本原理自從1968年提出“軟件工程”這一術(shù)語以來.研究軟件工程的專家學(xué)者們陸續(xù)提出了一百多條關(guān)于軟件工程的準(zhǔn)則或信條.美國著名的軟件工程專家Boehm綜合這些專家的意見.并總結(jié)了TRW公司多年軟件開發(fā)的經(jīng)驗.于1983年提出軟件工程的7條基本原理.Boehm認(rèn)為.這7條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合.它們是相互獨立的.是缺一不可的最小集合.同時.它們又是相當(dāng)完備的.下面簡要介紹軟件工程的7條基本原理:(1)原理1:用分階段的生命周期計劃嚴(yán)格管理.這條原理是在吸取前人教訓(xùn)的基礎(chǔ)上提出來的.統(tǒng)計表明.50%以上的失敗項目是計劃不周所造成的.下一頁返回2.3現(xiàn)代軟件工程的基本原理在軟件開發(fā)與維護(hù)的漫長生命周期中.需要完成許多性質(zhì)各異的工作.這條原理意味著.應(yīng)該把軟件生命周期分成若干階段.并相應(yīng)制定出切實可行的計劃.然后嚴(yán)格按照計劃對軟件的開發(fā)和維護(hù)進(jìn)行管理.Boehm認(rèn)為.在整個軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行6類計劃:項目概要計劃、里程碑計劃、項目控制計劃、產(chǎn)品控制計劃、驗證計劃、運行維護(hù)計劃.(2)原理2:堅持進(jìn)行階段評審.統(tǒng)計結(jié)果顯示:大部分錯誤是在編碼之前出現(xiàn)的.大約占63%.錯誤發(fā)現(xiàn)得越晚.改正它需要付出的代價就越大.相差2~3個數(shù)量級.因此.軟件的質(zhì)量保證工作不能等到編碼結(jié)束之后再進(jìn)行.應(yīng)堅持進(jìn)行嚴(yán)格的階段評審.以便盡早發(fā)現(xiàn)錯誤.上一頁下一頁返回2.3現(xiàn)代軟件工程的基本原理(3)原理3:實行嚴(yán)格的產(chǎn)品控制.開發(fā)人員最難處理的事情之一就是需求變更.但是在實際的項目開發(fā)過程中.需求的改動往往是不可避免的.這就要求人們采用科學(xué)的產(chǎn)品控制技術(shù)來滿足這個要求.通常采用變動控制.又叫基準(zhǔn)配置管理.當(dāng)需求變動時.其他各個階段的文檔或代碼隨之作相應(yīng)變動.以保證軟件的一致性.(4)原理4:采納現(xiàn)代程序設(shè)計技術(shù).從20世紀(jì)六七十年代的結(jié)構(gòu)化軟件開發(fā)技術(shù).到最近的面向?qū)ο蠹夹g(shù).從第一、第二代語言.到第四代語言.人們已經(jīng)充分認(rèn)識到.采用先進(jìn)的技術(shù)既可以提高軟件開發(fā)的效率.又可以降低軟件維護(hù)的成本.上一頁下一頁返回2.3現(xiàn)代軟件工程的基本原理(5)原理5:結(jié)果應(yīng)該能清楚地審查.軟件是一種看不見、摸不著的邏輯產(chǎn)品.軟件開發(fā)小組的工作進(jìn)展情況可見性差.難以評價和管理.為了有效管理.應(yīng)根據(jù)軟件開發(fā)的總目標(biāo)及完成期限.盡量明確地規(guī)定開發(fā)小組的責(zé)任和產(chǎn)品標(biāo)準(zhǔn).從而使所得到的標(biāo)準(zhǔn)能夠清楚地審查.(6)原理6:開發(fā)小組人員應(yīng)少而精.開發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素.應(yīng)該少而精.這條原理基于兩點原因:高素質(zhì)開發(fā)人員的效率比低素質(zhì)開發(fā)人員的效率要高幾倍到幾十倍.在開發(fā)工作中犯的錯誤也要少得多.當(dāng)開發(fā)小組有N人時.可能的通信信道為N(N-1)/2.可見隨著人數(shù)N的增大.通信開銷將急速增大.上一頁下一頁返回2.3現(xiàn)代軟件工程的基本原理(7)原理7:承認(rèn)不斷改進(jìn)軟件工程實踐的必要性.遵從前面的6條基本原理.就能夠較好地實現(xiàn)軟件的工程化生產(chǎn).但是.它們只是對現(xiàn)有經(jīng)驗的總結(jié)和歸納.并不能保證趕上技術(shù)不斷發(fā)展的步伐.因此.Boehm提出.應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實踐的必要性作為軟件工程的第7條原理.根據(jù)這條原理.不僅要積極采納新的軟件開發(fā)技術(shù).還要注意不斷總結(jié)經(jīng)驗.收集進(jìn)度和消耗等數(shù)據(jù).進(jìn)行出錯類型和問題報告統(tǒng)計.這些數(shù)據(jù)既可以用來評估新的軟件技術(shù)的效果.也可以用來指明必須著重注意的問題和應(yīng)該優(yōu)先進(jìn)行的工具和技術(shù).上一頁返回2.4現(xiàn)代軟件工程框架軟件工程的框架可概括為軟件工程目標(biāo)、軟件工程過程和軟件工程原則.軟件工程目標(biāo)指生產(chǎn)具有正確性、可用性以及代價合宜的產(chǎn)品.正確性指軟件產(chǎn)品達(dá)到預(yù)期功能的程度.可用性指軟件基本結(jié)構(gòu)、實現(xiàn)及文檔為用戶可用的程度.代價合宜指軟件開發(fā)、運行和整個代價開銷滿足用戶要求的程度.這些目標(biāo)的實現(xiàn)不論在理論上還是在實踐中均存在很多待解決的問題.它們形成了選取過程、過程模型及工程方法的約束.軟件工程過程指生產(chǎn)一個最終能滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟.軟件工程過程主要包括開發(fā)過程、運作過程、維護(hù)過程.它們覆蓋了需求、設(shè)計、實現(xiàn)、確認(rèn)以及維護(hù)等活動.下一頁返回2.4現(xiàn)代軟件工程框架

需求活動包括問題分析和需求分析.問題分析獲取需求定義.又稱軟件需求規(guī)約.需求分析生成功能規(guī)約.設(shè)計活動一般包括概要設(shè)計和詳細(xì)設(shè)計.概要設(shè)計監(jiān)理整個軟件系統(tǒng)結(jié)構(gòu).包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊的接口定義.詳細(xì)設(shè)計產(chǎn)生程序員可用的模塊說明.包括每一模塊中的數(shù)據(jù)結(jié)構(gòu)說明及加工描述.實現(xiàn)活動把設(shè)計結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼.維護(hù)活動包括使用過程中的擴充、修改與完善.伴隨以上過程.還有管理過程、支持過程、培訓(xùn)過程等.軟件工程的原則指圍繞工程設(shè)計、工程支持以及工程管理在軟件開發(fā)過程中必須遵循的原則.上一頁返回2.5現(xiàn)代軟件工程方法學(xué)通常把軟件生命周期全過程中使用的一整套技術(shù)方法的集合稱為方法學(xué).也稱為范型(Paradigm).在軟件工程領(lǐng)域中.這兩個術(shù)語的含義基本相同.軟件工程方法學(xué)包含三個要素:方法、工具和過程.其中.方法是完成軟件開發(fā)的各項任務(wù)的技術(shù)方法.工具是為運用方法而提供的自動的或半自動的軟件工程支撐環(huán)境.過程是為了獲得高質(zhì)量的軟件所需要完成的一系列任務(wù)的框架.它規(guī)定了完成各項任務(wù)的工作步驟.下面簡單介紹幾種使用最廣泛的軟件工程方法學(xué).下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

1.結(jié)構(gòu)化方法學(xué)結(jié)構(gòu)化方法學(xué)也稱為傳統(tǒng)方法學(xué).它采用結(jié)構(gòu)化技術(shù)(結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計和結(jié)構(gòu)化實現(xiàn))來完成軟件開發(fā)的各項任務(wù).并使用適當(dāng)?shù)能浖ぞ呋蜍浖こ汰h(huán)境來支持結(jié)構(gòu)化技術(shù)的運用.這種方法學(xué)把軟件生命周期的全過程依次劃分為若干個階段.然后順序地完成每個階段的任務(wù).采用這種方法學(xué)開發(fā)軟件的時候.從對問題的抽象邏輯分析開始.一個階段一個階段地進(jìn)行開發(fā).前一個階段任務(wù)的完成是進(jìn)行后一個階段工作的前提和基礎(chǔ).而后一階段任務(wù)的完成通常是使前一階段提出的解法進(jìn)一步具體化.加進(jìn)了更多實現(xiàn)細(xì)節(jié).每一個階段的開始和結(jié)束都有嚴(yán)格標(biāo)準(zhǔn).對于任何兩個相鄰的階段而言.前一階段的結(jié)束標(biāo)準(zhǔn)就是后一階段的開始標(biāo)準(zhǔn).上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

在每一個階段結(jié)束之前都必須進(jìn)行正式嚴(yán)格的技術(shù)審查和管理復(fù)審.從技術(shù)和管理兩方面對這個階段的開發(fā)成果進(jìn)行檢查.通過之后這個階段才算結(jié)束.如果沒有通過檢查.則必須進(jìn)行必要的返工.而且返工后還要再進(jìn)行審查.審查的一條主要標(biāo)準(zhǔn)就是每個階段都應(yīng)該交出“最新式的”(即和所開發(fā)的軟件完全一致的)高質(zhì)量的文檔資料.從而保證在軟件開發(fā)工程結(jié)束時.有一個完整準(zhǔn)確的軟件配置交付使用.文檔是通信的工具.它們清楚準(zhǔn)確地說明了到目前為止.關(guān)于該項工程已經(jīng)知道了什么.同時奠定了下一步工作的基礎(chǔ).此外.文檔也起到備忘錄的作用.如果文檔不完整.那么一定是某些工作忘記做了.在進(jìn)入生命周期的下一個階段之前.必須補足這些遺漏的細(xì)節(jié).上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

結(jié)構(gòu)化方法學(xué)中的程序設(shè)計采用的是結(jié)構(gòu)化程序設(shè)計(StructureProgramming.SP).它是20世紀(jì)80年代主要的程序設(shè)計方法.其核心是模塊化.SP方法主張使用順序、選擇、循環(huán)三種基本結(jié)構(gòu)來嵌套鏈接成具有復(fù)雜層次的“結(jié)構(gòu)化程序”.SP的要點是“自頂而下.逐步求精”的設(shè)計思想.“獨立功能、單出、入口”的模塊僅用三種基本控制結(jié)構(gòu)(順序、選擇、循環(huán))的編碼原則.自頂向下的出發(fā)點是從問題的總體目標(biāo)開始.抽象底層的細(xì)節(jié).先專心構(gòu)造高層的結(jié)構(gòu).然后再一層一層地分解和細(xì)化.這種方法使復(fù)雜的設(shè)計過程變得簡單明了.過程的結(jié)果也容易做到正確可靠.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

目前.結(jié)構(gòu)化方法學(xué)仍然是人們開發(fā)軟件時使用得十分廣泛的軟件工程方法學(xué).這種方法學(xué)歷史悠久.為廣大軟件工程師所熟悉.而且在開發(fā)某些類型的軟件時也比較有效.因此.在相當(dāng)長的一段時間內(nèi).這種方法學(xué)還會有生命力.2.面向?qū)ο蠓椒▽W(xué)面向?qū)ο蠓椒▽W(xué)的出發(fā)點和基本原則.是盡量模擬人類習(xí)慣的思維方式.使開發(fā)軟件的方法與過程盡可能接近人類認(rèn)識世界.解決問題的方法與過程.從而使描述問題的問題空間(也稱問題域)與實現(xiàn)解法的解空間(也稱求解域)在結(jié)構(gòu)上盡可能一致.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

面向?qū)ο蟮幕舅枷肱c結(jié)構(gòu)化設(shè)計思想完全不同.面向?qū)ο蟮姆椒▽W(xué)認(rèn)為世界由各種對象組成.任何事物都是對象.是某個對象的實例.復(fù)雜的對象可由較簡單的對象以某種方式組成.對象是數(shù)據(jù)及對這些數(shù)據(jù)施加的操作組合在一起所構(gòu)成的獨立實體的總稱.類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的描述.面向?qū)ο蟮幕緳C制是方法和消息.方法是對象所能執(zhí)行的操作.它是類中所定義的函數(shù).描述對象執(zhí)行某個操作的算法.每個對象類都定義了一組方法.消息是要求某個對象執(zhí)行類中某個操作的規(guī)格說明.面向?qū)ο蠓椒▽W(xué)具有下述4個要點:上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

(1)把對象(Object)作為融合了數(shù)據(jù)及在數(shù)據(jù)上的操作行為的統(tǒng)一的軟件構(gòu)件.(2)把所有對象都劃分成類.(3)按照父類與子類的關(guān)系.把若干個相關(guān)類組成一個層次結(jié)構(gòu)的系統(tǒng).(4)對象彼此間僅能通過發(fā)送消息互相聯(lián)系.隨著面向?qū)ο缶幊?OOP)向面向?qū)ο笤O(shè)計(OOD)和面向?qū)ο蠓治?OOA)的發(fā)展.最終形成了對象建模技術(shù)(ObjectModelingTechnique.OMT).這是一種自底向上和自頂向下相結(jié)合的方法.而且它以對象建模為基礎(chǔ).上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

從而不僅考慮了輸入/輸出數(shù)據(jù)結(jié)構(gòu).實際上也包含所有對象的數(shù)據(jù)結(jié)構(gòu).不僅如此.面向?qū)ο蠹夹g(shù)在需求分析、可維護(hù)性和可靠性這三個軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實質(zhì)性的突破.基本解決了在這些方面存在的嚴(yán)重問題.當(dāng)前軟件行業(yè)關(guān)于面向?qū)ο蠼5臉?biāo)準(zhǔn)是統(tǒng)一建模語言(UnifiedModelingLanguage.UML).3.敏捷開發(fā)方法敏捷開發(fā)方法以用戶的需求進(jìn)化為核心.采用迭代、循序漸進(jìn)的方法進(jìn)行軟件開發(fā).敏捷開發(fā)方法也稱作輕量級開發(fā)方法.該方法在無過程和過于煩瑣的過程中達(dá)到了一種平衡.使得能以不多的步驟過程獲取較滿意的結(jié)果.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

敏捷開發(fā)方法是“面向人”的.而非“面向過程”的.敏捷開發(fā)方法認(rèn)為沒有任何過程能代替開發(fā)組的技能.過程所起的作用是對開發(fā)組的工作提供支持.敏捷開發(fā)方法強調(diào):①注重個人及互動勝于過程和工具.②注重可用的軟件勝于詳盡的文檔.③注重客戶協(xié)作勝于合同談判.④注重響應(yīng)變化勝于恪守計劃.敏捷開發(fā)方法是針對傳統(tǒng)瀑布開發(fā)模式的弊端而產(chǎn)生的一種新的開發(fā)模式.體現(xiàn)了一種面臨迅速變化的需求快速開發(fā)軟件的能力.其目標(biāo)是提高開發(fā)效率和響應(yīng)能力.為了達(dá)到該目標(biāo).敏捷開發(fā)方法定義了12條原則:上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

(1)最優(yōu)先做的是通過盡早地、可持續(xù)地交付有價值的軟件來使客戶滿意.(2)即使到了開發(fā)的后期.也歡迎改變需求.敏捷過程通過變化來為客戶創(chuàng)造競爭優(yōu)勢.(3)經(jīng)常性地交付可以工作的軟件.交付的時間可以為幾周到幾個月.交付的時間間隔越短越好.(4)在整個項目開發(fā)期間.業(yè)務(wù)人員和開發(fā)人員必須天天在一起工作.(5)圍繞被激勵起來的個人來構(gòu)建項目.給他們提供所需要的環(huán)境和支持.并且信任他們能完成工作.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

(6)在團(tuán)隊內(nèi)部.最具有效果并且效率最高的傳遞信息的方法.就是面對面地交談.(7)工作的軟件是首要的進(jìn)度度量標(biāo)準(zhǔn).(8)敏捷過程提倡可持續(xù)的開發(fā)速度.責(zé)任人、開發(fā)者和用戶應(yīng)該保持一個長期的、恒定的開發(fā)速度.(9)不斷地關(guān)注優(yōu)秀的技能和好的設(shè)計會增強敏捷能力.(10)盡量簡化所要做的工作.(11)最好的架構(gòu)、需求和設(shè)計出于自組織的團(tuán)隊.(12)每隔一定時間.團(tuán)隊會在如何才能更有效地工作方面反省.然后相應(yīng)調(diào)整自己的行為.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

敏捷開發(fā)方法有很多具體的內(nèi)容.常用的敏捷開發(fā)方法有以下7種.1)XP2)SCRUM3)CrystalMethods4)FDD5)ASD6)DSDM7)輕量型RUP上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

4.面向方面程序設(shè)計面向方面程序設(shè)計(Aspect-OrientedProgramming.AOP)方法最早是由Xerox公司在美國加州硅谷PaloAlto研究中心的首席科學(xué)家、加拿大大不列顛哥倫比亞大學(xué)教授GregorKicgales等在1997年的歐洲面向?qū)ο缶幊檀髸?ECOOP97)上提出的.所謂Aspect.就是AOP提供的一種程序設(shè)計單元.它可以將上面提到的那些傳統(tǒng)程序設(shè)計方法學(xué)中難以清洗地封裝并模塊化實現(xiàn)的設(shè)計決策.封裝實現(xiàn)為獨立的模塊.上一頁下一頁返回2.5現(xiàn)代軟件工程方法學(xué)

Aspect是AOP的核心.它超越了子程序和集成.是AOP將貫穿特性局部化和模塊化的實現(xiàn)機制.通過將貫穿特性集中到Aspect中.AOP取得一種單一的結(jié)構(gòu)化行為.該行為在傳統(tǒng)程序中分布于整個代碼中.這樣就使Aspect代碼和系統(tǒng)目標(biāo)都易于理解.5.面向Agent程序設(shè)計隨著軟件系統(tǒng)服務(wù)能力要求的不斷提高.在系統(tǒng)中引入智能因素已經(jīng)成為必然.Agent作為人工智能研究的重要分支.引起了科學(xué)界、工程界、技術(shù)界的高度重視.在計算機科學(xué)主流中.Agent的概念作為一個自包含、并行執(zhí)行的軟件過程.能夠封裝一些狀態(tài)并通過傳遞消息與其他Agent進(jìn)行通信.它被看作面向?qū)ο蟪绦蛟O(shè)計的一個自然發(fā)展.上一頁返回2.6軟件的生命周期軟件工程強調(diào)使用生命周期方法學(xué)和各種結(jié)構(gòu)分析及結(jié)構(gòu)設(shè)計技術(shù).它們是在20世紀(jì)70年代為了應(yīng)對應(yīng)用軟件日益增長的復(fù)雜程度、漫長的開發(fā)周期以及用戶對軟件產(chǎn)品經(jīng)常不滿意的狀況而發(fā)展起來的.一般來說.軟件的生命周期由軟件定義、軟件開發(fā)和軟件維護(hù)三個時期組成.每個時期又進(jìn)一步劃分成若干個階段.軟件定義時期的任務(wù)是確定軟件開發(fā)工程必須完成的總目標(biāo).確定工程的可行性.導(dǎo)出實現(xiàn)工程目標(biāo)應(yīng)該采用的策略及系統(tǒng)必須完成的功能.估計完成該項工程需要的資源和成本.并制定工程進(jìn)度表.下一頁返回2.6軟件的生命周期這個時期的工作通常又稱為系統(tǒng)分析.由系統(tǒng)分析員負(fù)責(zé)完成.軟件定義時期通常進(jìn)一步劃分成三個階段.即問題定義、可行性研究和需求分析.軟件開發(fā)時期具體設(shè)計和實現(xiàn)在軟件定義時期定義的軟件.它通常由4個階段組成:總體設(shè)計、詳細(xì)設(shè)計、編碼和單元測試、綜合測試.軟件維護(hù)時期的主要任務(wù)是使軟件持久地滿足用戶的需要.具體地說.當(dāng)軟件在使用過程中發(fā)現(xiàn)錯誤時應(yīng)該加以改正.當(dāng)環(huán)境改變時應(yīng)該修改軟件以適應(yīng)新的環(huán)境.上一頁下一頁返回2.6軟件的生命周期當(dāng)用戶有新要求時應(yīng)該及時改進(jìn)軟件以滿足用戶的新需要.通常對軟件維護(hù)時期不再進(jìn)一步劃分階段.但是每一次維護(hù)活動本質(zhì)上都是一次壓縮和簡化了的軟件定義和軟件開發(fā)過程.下面簡要介紹軟件生命周期每個階段的基本任務(wù)和結(jié)束標(biāo)準(zhǔn).1.問題定義問題定義階段必須回答的關(guān)鍵問題是“要解決的問題是什么”.如果不知道問題是什么就試圖解決這個問題.顯然是盲目的.只會白白浪費時間和金錢.最終得出的結(jié)果很可能是毫無意義的.盡管確切地定義問題的必要性是十分明顯的.但是在實踐中它卻可能是最容易被忽視的一個步驟.上一頁下一頁返回2.6軟件的生命周期通過問題定義階段的工作.系統(tǒng)分析員應(yīng)該提出關(guān)于問題性質(zhì)、工程目標(biāo)和規(guī)模的書面報告.通過對系統(tǒng)的實際用戶和使用部門負(fù)責(zé)人的訪問調(diào)查.分析員扼要地寫出其對問題的理解.并在用戶和使用部門負(fù)責(zé)人的會議上認(rèn)真討論這份書面報告.澄清含混不清的地方.改正理解不正確的地方.最后得出一份雙方都滿意的文檔.2.可行性研究這個階段要回答的關(guān)鍵問題是“對于上一個階段所確定的問題有行得通的解決方案嗎”.為了回答這個問題.系統(tǒng)分析員需要進(jìn)行一次大的壓縮和簡化的系統(tǒng)分析和設(shè)計過程.即在較抽象的高層次上進(jìn)行分析和設(shè)計的過程.上一頁下一頁返回2.6軟件的生命周期可行性研究的時間應(yīng)該比較短.這個階段的任務(wù)不是具體地解決問題.而是研究問題的范圍.探索這個問題是否值得去解決.是否有可行的解決辦法.在問題定義階段提出的對工程目標(biāo)和規(guī)模的報告通常比較含糊.在可行性研究階段應(yīng)該導(dǎo)出系統(tǒng)的高層邏輯模型(通常用數(shù)據(jù)流圖表示).并且在此基礎(chǔ)上更準(zhǔn)確、更具體地確定工程規(guī)模和目標(biāo).然后分析員更準(zhǔn)確地估計系統(tǒng)的成本和效益.對建議的系統(tǒng)進(jìn)行仔細(xì)的成本/效益分析是這個階段的主要任務(wù)之一.可行性研究的結(jié)果是使用部門負(fù)責(zé)人做出是否繼續(xù)進(jìn)行這項工程的決定的重要依據(jù).可行性研究以后的那些階段將需要投入更多的人力、物力.及時中止不值得投資的工程項目.可以避免更大的浪費.上一頁下一頁返回2.6軟件的生命周期3.需求分析這個階段的任務(wù)仍然不是具體地解決問題.而是準(zhǔn)確地確定“為了解決這個問題.目標(biāo)系統(tǒng)必須做什么”.主要是確定目標(biāo)系統(tǒng)必須具備哪些功能.用戶了解他們所面對的問題.知道必須做什么.但是通常不能完整準(zhǔn)確地表達(dá)出他們的要求.更不知道怎樣利用計算機解決他們的問題.軟件開發(fā)人員知道怎樣使用軟件實現(xiàn)人們的要求.但是對特定用戶的具體要求并不完全清楚.因此.系統(tǒng)分析員在需求分析階段必須和用戶密切配合.充分交流.以得出經(jīng)過用戶確認(rèn)的系統(tǒng)邏輯模型.通常用數(shù)據(jù)流圖、數(shù)據(jù)字典和簡要的算法描述表示系統(tǒng)的邏輯模型.上一頁下一頁返回2.6軟件的生命周期在需求分析階段確定的系統(tǒng)邏輯模型是以后設(shè)計和實現(xiàn)目標(biāo)系統(tǒng)的基礎(chǔ).因此必須準(zhǔn)確完整地體現(xiàn)用戶的要求.系統(tǒng)分析員通常都是計算機軟件專家.技術(shù)專家一般都喜歡很快著手進(jìn)行具體設(shè)計.然而.一旦分析員開始談?wù)摮绦蛟O(shè)計的細(xì)節(jié).就會脫離用戶.使他們不能繼續(xù)提出他們的要求和建議.軟件工程中在使用結(jié)構(gòu)分析設(shè)計和方法時.為每個階段都規(guī)定了特定的結(jié)束標(biāo)準(zhǔn).需求分析階段必須提供完整準(zhǔn)確的系統(tǒng)邏輯模型.經(jīng)過用戶確認(rèn)之后才能進(jìn)入下一個階段.這可以有效地防止和克服急于著手進(jìn)行具體設(shè)計的傾向.上一頁下一頁返回2.6軟件的生命周期4.總體設(shè)計這個階段必須回答的關(guān)鍵問題是“概括地說.應(yīng)該如何解決這個問題”.首先.應(yīng)該考慮幾種可能的解決方案.例如.目標(biāo)系統(tǒng)的一些主要功能是用計算機自動完成還是用人工完成.如果使用計算機.那么是使用批處理方式還是人機交互方式.信息存儲是用傳統(tǒng)的文件系統(tǒng)還是數(shù)據(jù)庫等.通常至少應(yīng)該考慮下述幾類可能的方案:低成本的解決方案、中等成本的解決方案和高成本的解決方案.上一頁下一頁返回2.6軟件的生命周期系統(tǒng)分析員應(yīng)該使用系統(tǒng)流程圖或其他工具描述每種可能的方案.估計每種方案的成本和效益.還應(yīng)該在充分權(quán)衡各種方案的利弊的基礎(chǔ)上.推薦一個較好的系統(tǒng)(最佳方案).并且制定實現(xiàn)所推薦的系統(tǒng)的詳細(xì)計劃.如果用戶接受系統(tǒng)分析員推薦的方案.則可以著手完成本階段的另一項主要工作.上面的工作確定了解決問題的策略以及目標(biāo)系統(tǒng)需要哪些程序.但是.怎樣設(shè)計這些程序呢?結(jié)構(gòu)設(shè)計的一條基本原理就是程序應(yīng)該模塊化.也就是一個大程序應(yīng)該由許多規(guī)模適中的模塊按合理的層次結(jié)構(gòu)組織而成.總體設(shè)計階段的第二項主要任務(wù)就是設(shè)計軟件的結(jié)構(gòu).也就是確定程序由哪些模塊組成以及模塊間的關(guān)系.通常用次圖或結(jié)構(gòu)圖描繪軟件的結(jié)構(gòu).上一頁下一頁返回2.6軟件的生命周期5.詳細(xì)設(shè)計總體設(shè)計階段以比較抽象概括的方式提出了解決問題的辦法.詳細(xì)設(shè)計階段的任務(wù)就是把解法具體化.也就是回答下面這個關(guān)鍵問題:應(yīng)該怎樣具體地實現(xiàn)這個系統(tǒng)呢?這個階段的任務(wù)不是編寫程序.而是設(shè)計出程序的詳細(xì)規(guī)格說明.這種規(guī)格說明的作用非常類似于其他工程領(lǐng)域中工程師經(jīng)常使用的工程藍(lán)圖.它們應(yīng)該包含必要的細(xì)節(jié).程序員可以根據(jù)它們寫出實際的程序代碼.通常用HIPO圖(層次/輸入/處理/輸出圖)或PDL(過程描述語言)描述詳細(xì)設(shè)計的結(jié)果.上一頁下一頁返回2.6軟件的生命周期6.編碼和單元測試這個階段的關(guān)鍵任務(wù)是寫出正確的、容易理解的、容易維護(hù)的程序模塊.程序員應(yīng)該根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實際環(huán)境.選取一種適當(dāng)?shù)母呒壋绦蛟O(shè)計語言(必要時用匯編語言).把詳細(xì)設(shè)計的結(jié)果翻譯成用選定的語言書寫的程序.并且仔細(xì)測試編寫出的每一個模塊.7.綜合測試這個階段的關(guān)鍵任務(wù)是通過各種類型的測試(及相應(yīng)的調(diào)試)使軟件達(dá)到預(yù)定的要求.最基本的測試是集成測試和驗收測試.所謂集成測試是根據(jù)設(shè)計的軟件結(jié)構(gòu).把經(jīng)過單元測試檢驗的模塊按照某種選定的策略裝配起來.在裝配過程中對程序進(jìn)行必要的測試.上一頁下一頁返回2.6軟件的生命周期所謂驗收測試則是按照規(guī)格說明書的規(guī)定(通常在需求分析階段確定).由用戶(或在用戶的積極參與下)對目標(biāo)系統(tǒng)進(jìn)行驗收.必要時還可以通過現(xiàn)場測試或平行運行等方法對目標(biāo)系統(tǒng)進(jìn)行進(jìn)一步的測試檢驗.為了使用戶能夠積極參加驗收測試.并且在系統(tǒng)投入生產(chǎn)性運行以后能夠正確有效地使用這個系統(tǒng).通常需要以正式的或非正式的方式對用戶進(jìn)行培訓(xùn).通過對軟件測試結(jié)果的分析可以預(yù)測軟件的可靠性.反之.根據(jù)對軟件可靠性的要求也可以決定測試和調(diào)試過程何時可以結(jié)束.測試計劃、詳細(xì)測試方案以及實際測試結(jié)果應(yīng)該以文檔形式保存下來.作為軟件配置的一個組成部分.上一頁下一頁返回2.6軟件的生命周期8.軟件維護(hù)軟件維護(hù)階段的關(guān)鍵任務(wù)是通過各種必要的維護(hù)活動使系統(tǒng)持久地滿足用戶的需要.通常有4類維護(hù)活動:改正性維護(hù).也就是診斷和改正在使用過程中發(fā)現(xiàn)的軟件缺陷.適應(yīng)性維護(hù).即修改軟件以適應(yīng)環(huán)境的變化.完善性維護(hù).即根據(jù)用戶的要求改進(jìn)或擴充軟件.使它更完善.預(yù)防性維護(hù).即修改軟件.為將來的維護(hù)活動預(yù)先做準(zhǔn)備.雖然沒有把維護(hù)階段進(jìn)一步劃分成更小的階段.但是實際上每一項維護(hù)活動都應(yīng)該經(jīng)過提出維護(hù)要求(或報告問題)、分析維護(hù)要求、提出維護(hù)方案等步驟.因此實質(zhì)上是經(jīng)歷了一次壓縮和簡化了軟件定義和開發(fā)的全過程.上一頁下一頁返回2.6軟件的生命周期軟件生命周期的各階段有不同的劃分.軟件的規(guī)模、種類、開發(fā)模式、開發(fā)環(huán)境和開發(fā)方法都影響軟件生命周期的劃分.在劃分軟件生命周期的階段時.應(yīng)遵循以下規(guī)則:各階段的任務(wù)應(yīng)盡可能相對獨立.同一階段各項任務(wù)的性質(zhì)應(yīng)盡可能相同.從而降低每個階段任務(wù)的復(fù)雜程度.簡化不同階段之間的聯(lián)系.這有利于軟件項目開發(fā)的組織和管理.上一頁返回2.7軟件生命周期模型通常使用生命周期模型簡潔地描述軟件過程.生命周期模型規(guī)定了把生命周期劃分成哪些階段及各個階段的執(zhí)行順序.因此.它也稱為過程模型.軟件生命周期模型是從軟件項目需求定義直至軟件經(jīng)使用后廢棄為止.跨越整個生命周期的系統(tǒng)開發(fā)、運作和維護(hù)所實施的全部過程、活動和任務(wù)的結(jié)構(gòu)框架.下面介紹幾種常見的軟件生命周期模型.1.瀑布模型在20世紀(jì)80年代之前.瀑布模型一直是唯一被廣泛采用的生命周期模型.現(xiàn)在它仍然是軟件工程中應(yīng)用得最廣泛的過程模型.布模型來描述.下一頁返回2.7軟件生命周期模型

圖2-2所示為傳統(tǒng)的瀑布模型.按照傳統(tǒng)的瀑布模型開發(fā)軟件.有如下述特點:階段性具有順序性和依賴性.這個特點有兩重含義:必須等前一階段的工作完成之后.才能開始后一階段的工作.前一階段的輸出文檔就是后一階段的輸入文檔.1)推遲實現(xiàn)的觀點對于規(guī)模較大的軟件項目來說.往往編碼開始得越早.最終完成開發(fā)工作所需要的時間反而越長.這是因為.前面階段的工作沒做或做得不扎實.過早地考慮進(jìn)行程序?qū)崿F(xiàn).往往導(dǎo)致大量返工.有時甚至發(fā)生無法彌補的問題.帶來災(zāi)難性后果.上一頁下一頁返回2.7軟件生命周期模型

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

傳統(tǒng)的瀑布模型過于理想化.事實上.人們在工作過程中不可能不犯錯誤.在設(shè)計階段可能發(fā)現(xiàn)規(guī)格說明文檔中的錯誤.而設(shè)計上的缺陷或錯誤可能在實現(xiàn)過程中顯現(xiàn)出來.在綜合測試階段也會發(fā)現(xiàn)需求分析、設(shè)計或編碼階段的錯誤.因此.實際的瀑布模型是帶“反饋環(huán)”的.如圖2-3所示(圖中實線表示開發(fā)過程.虛線表示維護(hù)過程).當(dāng)在后面階段發(fā)現(xiàn)前面階段的錯誤時.需要沿圖中左側(cè)的反饋線返回前面的階段.修正前面階段的產(chǎn)品之后再回來繼續(xù)完成后面階段的任務(wù).但是.“瀑布模型是由文檔驅(qū)動的”這個事實也是它的一個主要缺點.由于瀑布模型幾乎完全依賴書面的規(guī)格說明.這很可能導(dǎo)致最終開發(fā)出的軟件產(chǎn)品不能真正滿足用戶的需要.上一頁下一頁返回2.7軟件生命周期模型

2.漸增模型漸增模型也稱為增量模型或演化模型.如圖2-4所示.軟件在該模型中是“逐漸”開發(fā)出來的.開發(fā)出一部分.可以讓用戶及早看到部分軟件.及早發(fā)現(xiàn)問題.或者先開發(fā)一個“原型”軟件.完成部分主要功能.展示給用戶并征求意見.然后逐步完善.最終獲得令用戶滿意的軟件產(chǎn)品.這個過程是一個迭代的過程.該模型具有較大的靈活性.適合軟件需求不明確、設(shè)計方案有一定風(fēng)險的軟件項目.上一頁下一頁返回2.7軟件生命周期模型

使用漸增模型開發(fā)軟件時.把軟件產(chǎn)品作為一系列的增量構(gòu)件來設(shè)計、編碼、集成和測試.每個構(gòu)件由多個相互作用的模塊構(gòu)成.并且能夠完成特定的功能.把軟件產(chǎn)品分解成增量構(gòu)件時.應(yīng)該使構(gòu)件的規(guī)模適中.規(guī)模過大或過小都不好.最佳分解方法因軟件產(chǎn)品的特點和開發(fā)人員的習(xí)慣而異.分解時唯一必須遵守的約束條件是.當(dāng)把新構(gòu)件集成到現(xiàn)有軟件中時.所形成的產(chǎn)品必須是可測試的.采用瀑布模型開發(fā)軟件時.目標(biāo)是一次就把一個滿足所有需求的產(chǎn)品提交給用戶.漸增模型則與之相反.它分批地逐步向用戶提交產(chǎn)品.從第一個構(gòu)建交付之日起.用戶就能做一些有用的工作.顯然.能在較短時間內(nèi)向用戶提交可完成部分工作的產(chǎn)品.是漸增模型的一個優(yōu)點.上一頁下一頁返回2.7軟件生命周期模型

漸增模型的另一個優(yōu)點是.逐步增加產(chǎn)品功能.可以使用戶有較充裕的時間學(xué)習(xí)和適應(yīng)新產(chǎn)品.從而減少一個全新的軟件可能給用戶組織帶來的沖擊.從某種意義上說.漸增模型本身是自相矛盾的.它一方面要求開發(fā)人員把軟件看作一個整體.另一方面又要求開發(fā)人員把軟件看作構(gòu)件序列.每個構(gòu)件本質(zhì)上都獨立于其他構(gòu)件.除非開發(fā)人員有足夠的技術(shù)能力協(xié)調(diào)好這一明顯的矛盾.否則用漸增模型開發(fā)出的產(chǎn)品可能并不令人滿意.上一頁下一頁返回2.7軟件生命周期模型

3.快速原型模型所謂快速原型.是快速建立起來的可以在計算機上運行的程序.它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個子集.如圖2-5所示(圖中實線表示開發(fā)過程.虛線表示維護(hù)過程).快速原型模型的第一步是快速建立一個能反映用戶主要需求的原型系統(tǒng).讓用戶在計算機上試用它.通過實踐來了解目標(biāo)系統(tǒng)的概貌.通常.用戶試用原型系統(tǒng)之后會提出許多修改意見.開發(fā)人員按照用戶的意見快速地修改原型系統(tǒng).然后再次請用戶試用.一旦用戶認(rèn)為這個原型系統(tǒng)確實能完成他們所需要的工作.開發(fā)人員便可據(jù)此編寫規(guī)格說明文檔.根據(jù)這份文檔開發(fā)出的軟件可以滿足用戶的真實需求.上一頁下一頁返回2.7軟件生命周期模型

從圖2-5可以看出.快速原型模型是不帶反饋環(huán)的.這正是這種過程模型的主要優(yōu)點:軟件產(chǎn)品的開發(fā)基本上是線性順序進(jìn)行的.快速原型模型能做到基本上線性順序開發(fā)的主要原因如下:原型系統(tǒng)已經(jīng)通過與用戶交互而得到驗證.據(jù)此產(chǎn)生的規(guī)格說明文檔正確地描述了用戶需求.因此.在開發(fā)過程的后續(xù)階段不會因為發(fā)現(xiàn)了規(guī)格說明文檔的錯誤而進(jìn)行較大的返工.開發(fā)人員通過建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西(至少知道了“系統(tǒng)不應(yīng)該做什么.以及怎樣不去做不該做的事情”).因此.在設(shè)計和編碼階段發(fā)生錯誤的可能性也比較小.這自然減少了在后續(xù)階段需要改正前面階段所犯錯誤的可能性.上一頁下一頁返回2.7軟件生命周期模型

軟件產(chǎn)品一旦交付用戶使用.維護(hù)便開始了.根據(jù)所需完成的維護(hù)工作種類的不同.可能需要返回到需求分析、規(guī)格說明、設(shè)計或編碼等不同階段.如圖2-5中虛線箭頭所示.快速原型的本質(zhì)是“快速”.開發(fā)人員應(yīng)該盡可能快地建造出原型系統(tǒng).以加速軟件開發(fā)過程.節(jié)約軟件開發(fā)成本.原型的用途是獲知用戶的真正需求.一旦需求確定.原型將被拋棄.因此.原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要.重要的是.必須迅速地構(gòu)建原型.然后根據(jù)用戶意見迅速地修改原型.UNIXShell和超文本都是廣泛使用的快速原型語言.最近的趨勢是廣泛地使用第四代語言構(gòu)建快速原型.上一頁下一頁返回2.7軟件生命周期模型

4.螺旋模型對于復(fù)雜的大型軟件.開發(fā)一個原型往往達(dá)不到要求.螺旋模型將瀑布模型與漸增模型結(jié)合起來.并且加入兩種模型均忽略的風(fēng)險分析.所謂“軟件風(fēng)險”.是普遍存在于任何軟件開發(fā)項目中的實際問題.對于不同的項目.其差別只是風(fēng)險有大有小而已.在制訂軟件開發(fā)計劃時.系統(tǒng)分析員必須回答:項目的需求是什么、需要投入多少資源以及如何安排開發(fā)進(jìn)度等一系列問題.然而.要他們當(dāng)即給出準(zhǔn)確無誤的回答是不容易的.甚至是不可能的.但系統(tǒng)分析員又不可能完全回避這一問題.憑經(jīng)驗的估計并給出初步的設(shè)想便難免帶來一定的風(fēng)險.實踐表明.上一頁下一頁返回2.7軟件生命周期模型

項目規(guī)模越大.問題越復(fù)雜.資源、成本、進(jìn)度等因素的不確定性越大.承擔(dān)項目所冒的風(fēng)險也越大.因此.風(fēng)險是軟件開發(fā)不可忽視的潛在不利因素.它可能在不同程度上損害軟件開發(fā)過程或軟件產(chǎn)品的質(zhì)量.軟件風(fēng)險控制的目標(biāo)是在造成危害之前.及時對風(fēng)險進(jìn)行識別、分析.采取對策.進(jìn)而消除或減少風(fēng)險的損害.螺旋模型沿著螺線旋轉(zhuǎn).如圖2-6所示.在笛卡兒坐標(biāo)的4個象限上分別表達(dá)了4個方面的活動:(1)制訂計劃———確定軟件目標(biāo).選定實施方案.明確項目開發(fā)的限制條件.(2)風(fēng)險分析———分析所選方案.考慮如何識別和消除風(fēng)險.上一頁下一頁返回2.7軟件生命周期模型

(3)實施工程———實施軟件開發(fā).(4)用戶評估———評價開發(fā)工作.提出修正建議.沿螺線自內(nèi)向外.每旋轉(zhuǎn)一圈便開發(fā)出更為完善的一個新的軟件版本.例如.在第一圈.確定了初步的目標(biāo)、方案和限制條件以后.轉(zhuǎn)入右上象限.對風(fēng)險進(jìn)行識別和分析.如果風(fēng)險分析表明需求有不確定性.那么在右下的工程象限內(nèi).所建的原型會幫助開發(fā)人員和用戶.考慮其他開發(fā)模型.并對需求作進(jìn)一步的修正.用戶對工程成果作出評價之后.給出修正建議.在此基礎(chǔ)上.需再次計劃.并進(jìn)行風(fēng)險分析.在每一圈螺線上風(fēng)險分析的終點作出是否繼續(xù)下去的判斷.上一頁下一頁返回2.7軟件生命周期模型

假如風(fēng)險過大.開發(fā)者和用戶無法承受.項目可能終止.多數(shù)情況下沿螺線的活動會繼續(xù)下去.自內(nèi)向外.逐步延伸.最終得到所期望的系統(tǒng).5.噴泉模型噴泉模型對軟件復(fù)用和生命周期中多項開發(fā)活動的集成提供了支持.主要支持面向?qū)ο蟮拈_發(fā)方法.“噴泉”一詞本身體現(xiàn)了迭代和無間隙特性.系統(tǒng)某個部分常常重復(fù)工作多次.相關(guān)功能在每次迭代中隨之加入演進(jìn)的系統(tǒng).所謂無間隙是指在開發(fā)活動.即分析、設(shè)計和編碼之間不存在明顯邊界.噴泉模型如圖2-7所示.上一頁下一頁返回2.7軟件生命周期模型6.變換模型變換模型是一種基于形式化規(guī)格說明語言及程序變換的軟件開發(fā)模型.它采用形式化的軟件開發(fā)方法.對形式化的軟件規(guī)格說明進(jìn)行一系列自動的或半自動的程序變化.最終映射成為計算機系統(tǒng)能夠接受的程序系統(tǒng).變換模型如圖2-8所示.軟件需求確定以后.可用某種形式化的需求規(guī)格說明語言(如VDM的META-IV、CSP和Z)描述軟件需求規(guī)格說明.生成形式化的設(shè)計說明.為了確認(rèn)形式化規(guī)格說明與軟件需求的一致性.往往以形式化設(shè)計說明為基礎(chǔ)開發(fā)一個軟件原型.上一頁下一頁返回2.7軟件生命周期模型

用戶可以從人機界面、系統(tǒng)主要功能、性能等幾個方面對原型進(jìn)行評審.必要時.可以對軟件需求、形式化設(shè)計說明和原型進(jìn)行修改.直到原型被確認(rèn)為止.這時軟件開發(fā)人員就可以對形式化的規(guī)格說明進(jìn)行一系列的程序變換.直到生成計算機可以接受的目標(biāo)代碼.多步程序變換過程的一個重要性質(zhì)是每一步變換對相關(guān)的模型描述是“封閉的”.即每一步程序變換的正確性僅與該步變換所依據(jù)的規(guī)范Mi.以及對變換后的假設(shè)Mi-1有關(guān).在此意義上.每個變換步驟獨立于其他變換步驟.這稱為變換的獨立性.若沒有這種獨立性.就不能控制錯誤的蔓延.上一頁下一頁返回2.7軟件生命周期模型

理論上.一個正確的、能夠滿足用戶要求的形式化規(guī)格說明.經(jīng)過一系列正確的程序變換后.應(yīng)當(dāng)能夠生成正確的、計算機系統(tǒng)能夠接受的程序代碼.但是.目前形式化開發(fā)方法在理論、實踐和人員培訓(xùn)方面的工程應(yīng)用還有一定的距離.7.智能模型智能模型是基于知識的軟件開發(fā)模型.它把瀑布模型和專家系統(tǒng)綜合在一起.該模型在開發(fā)的各個階段都利用了相應(yīng)的專家系統(tǒng)來幫助軟件人員完成開發(fā)工作.使維護(hù)能在系統(tǒng)需求說明一級上進(jìn)行.為此.人們建立了各個階段的知識庫.將模型、相應(yīng)領(lǐng)域的知識和軟件工程知識分別存入數(shù)據(jù)庫.以軟件工程知識為基礎(chǔ)的生成規(guī)則將專家系統(tǒng)與包含應(yīng)用領(lǐng)域知識規(guī)則的其他專家系統(tǒng)相結(jié)合.上一頁下一頁返回2.7軟件生命周期模型

構(gòu)成該應(yīng)用領(lǐng)域的開發(fā)系統(tǒng).基于知識的智能模型如圖2-9所示.該模型基于瀑布模型.在各個階段都有相應(yīng)的專家系統(tǒng)支持.(1)支持需求活動的專家系統(tǒng)用于幫助減少需求活動中的具有二義性的、不精確的、沖突或易變的需求.這需要使用應(yīng)用領(lǐng)域的知識和應(yīng)用系統(tǒng)的規(guī)則.從而建立應(yīng)用領(lǐng)域的專家系統(tǒng)以支持需求活動.(2)支持設(shè)計活動的專家系統(tǒng)用于支持設(shè)計功能的CASE工具和文檔.它要用到軟件開發(fā)的知識.(3)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論