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

下載本文檔

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

文檔簡介

2022/12/111軟件工程軟件工程2022/12/81軟件工程軟件工程2022/12/112軟件工程介紹

軟件工程(SoftwareEngineering,簡稱為SE)是一門研究用工程化方法構(gòu)建和維護(hù)有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科。它涉及到程序設(shè)計(jì)語言,數(shù)據(jù)庫,軟件開發(fā)工具,系統(tǒng)平臺,標(biāo)準(zhǔn),設(shè)計(jì)模式等方面。在現(xiàn)代社會中,軟件應(yīng)用于多個(gè)方面。典型的軟件比如有電子郵件,嵌入式系統(tǒng),人機(jī)界面,辦公套件,操作系統(tǒng),編譯器,數(shù)據(jù)庫,游戲等。同時(shí),各個(gè)行業(yè)幾乎都有計(jì)算機(jī)軟件的應(yīng)用,比如工業(yè),農(nóng)業(yè),銀行,航空,政府部門等。這些應(yīng)用促進(jìn)了經(jīng)濟(jì)和社會的發(fā)展,使得人們的工作更加高效,同時(shí)提高了生活質(zhì)量。

軟件工程師是對應(yīng)用軟件創(chuàng)造軟件的人們的統(tǒng)稱,軟件工程師按照所處的領(lǐng)域不同可以分為系統(tǒng)分析員,軟件設(shè)計(jì)師,系統(tǒng)架構(gòu)師,程序員,測試員等等。人們也常常用程序員來泛指各種軟件工程師。2022/12/82軟件工程介紹軟件工程(S2022/12/113軟件工程(SoftWareEngineering)的框架可概括為:目標(biāo)、過程和原則。

(1)軟件工程目標(biāo):生產(chǎn)具有正確性、可用性以及開銷合宜的產(chǎn)品。正確性指軟件產(chǎn)品達(dá)到預(yù)期功能的程度??捎眯灾杠浖窘Y(jié)構(gòu)、實(shí)現(xiàn)及文檔為用戶可用的程度。開銷合宜是指軟件開發(fā)、運(yùn)行的整個(gè)開銷滿足用戶要求的程度。這些目標(biāo)的實(shí)現(xiàn)不論在理論上還是在實(shí)踐中均存在很多待解決的問題,它們形成了對過程、過程模型及工程方法選取的約束。

(2)軟件工程過程:生產(chǎn)一個(gè)最終能滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟。軟件工程過程主要包括開發(fā)過程、運(yùn)作過程、維護(hù)過程。它們覆蓋了需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及維護(hù)等活動。需求活動包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規(guī)約。需求分析生成功能規(guī)約。設(shè)計(jì)活動一般包括概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)建立整個(gè)軟件系統(tǒng)結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊的接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說明及加工描述。實(shí)現(xiàn)活動把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動貫穿于整個(gè)開發(fā)過程,實(shí)現(xiàn)完成后的確認(rèn),保證最終產(chǎn)品滿足用戶的要求。維護(hù)活動包括使用過程中的擴(kuò)充、修改與完善。伴隨以上過程,還有管理過程、支持過程、培訓(xùn)過程等。

(3)軟件工程的原則是指圍繞工程設(shè)計(jì)、工程支持以及工程管理在軟件開發(fā)過程中必須遵循的原則。2022/12/83軟件工程(SoftWareEngine2022/12/114一、軟件工程概述

軟件工程是一類工程。工程是將理論和知識應(yīng)用于實(shí)踐的科學(xué)。就軟件工程而言,它借鑒了傳統(tǒng)工程的原則和方法,以求高效地開發(fā)高質(zhì)量軟件。其中應(yīng)用了計(jì)算機(jī)科學(xué)、數(shù)學(xué)和管理科學(xué)。計(jì)算機(jī)科學(xué)和數(shù)學(xué)用于構(gòu)造模型與算法,工程科學(xué)用于制定規(guī)范、設(shè)計(jì)范型、評估成本及確定權(quán)衡,管理科學(xué)用于計(jì)劃、資源、質(zhì)量和成本的管理。

軟件工程這一概念,主要是針對20世紀(jì)60年代“軟件危機(jī)”而提出的。它首次出現(xiàn)在1968年NATO(北大西洋公約組織)會議上。自這一概念提出以來,圍繞軟件項(xiàng)目,開展了有關(guān)開發(fā)模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,開發(fā)了一些結(jié)構(gòu)化程序設(shè)計(jì)語言(例如PASCAL語言,Ada語言)、結(jié)構(gòu)化方法等。并且圍繞項(xiàng)目管理提出了費(fèi)用估算、文檔復(fù)審等方法和工具。綜觀60年代末至80年代初,其主要特征是,前期著重研究系統(tǒng)實(shí)現(xiàn)技術(shù),后期開始強(qiáng)調(diào)開發(fā)管理和軟件質(zhì)量。

70年代初,自“軟件工廠”這一概念提出以來,主要圍繞軟件過程以及軟件復(fù)用,開展了有關(guān)軟件生產(chǎn)技術(shù)和軟件生產(chǎn)管理的研究與實(shí)踐。其主要成果有:提出了應(yīng)用廣泛的面向?qū)ο笳Z言以及相關(guān)的面向?qū)ο蠓椒ǎ罅﹂_展了計(jì)算機(jī)輔助軟件工程的研究與實(shí)踐。尤其是近幾年來,針對軟件復(fù)用及軟件生產(chǎn),軟件構(gòu)件技術(shù)以及軟件質(zhì)量控制技術(shù)、質(zhì)量保證技術(shù)得到了廣泛的應(yīng)用。目前各個(gè)軟件企業(yè)都十分重視資質(zhì)認(rèn)證,并想通過這些工作進(jìn)行企業(yè)管理和技術(shù)的提升。軟件工程所涉及的要素可概括如下:2022/12/84一、軟件工程概述2022/12/115

根據(jù)這一框架,可以看出:軟件工程涉及了軟件工程的目標(biāo)、軟件工程原則和軟件工程活動。

目標(biāo):我的眼里只有“產(chǎn)品”

軟件工程的主要目標(biāo)是:生產(chǎn)具有正確性、可用性以及開銷合宜的產(chǎn)品。正確性意指軟件產(chǎn)品達(dá)到預(yù)期功能的程度。可用性指軟件基本結(jié)構(gòu)、實(shí)現(xiàn)及文檔為用戶可用的程度。開銷合宜性是指軟件開發(fā)、運(yùn)行的整個(gè)開銷滿足用戶要求的程度。這些目標(biāo)的實(shí)現(xiàn)不論在理論上還是在實(shí)踐中均存在很多問題有待解決,它們形成了對過程、過程模型及工程方法選取的約束。

軟件工程活動是“生產(chǎn)一個(gè)最終滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟”。主要包括需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)以及支持等活動。需求活動包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規(guī)約。需求分析生成功能規(guī)約。設(shè)計(jì)活動一般包括概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)建立整個(gè)軟件體系結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊接口定義。詳細(xì)設(shè)計(jì)產(chǎn)生程序員可用的模塊說明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說明及加工描述。實(shí)現(xiàn)活動把設(shè)計(jì)結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動貫穿于整個(gè)開發(fā)過程,實(shí)現(xiàn)完成后的確認(rèn),保證最終產(chǎn)品滿足用戶的要求。支持活動包括修改和完善。伴隨以上活動,還有管理過程、支持過程、培訓(xùn)過程等。2022/12/85根據(jù)這一框架,可以看出:軟件2022/12/116框架:四項(xiàng)基本原則是基石

軟件工程圍繞工程設(shè)計(jì)、工程支持以及工程管理,提出了以下四項(xiàng)基本原則:

第一,選取適宜開發(fā)范型。該原則與系統(tǒng)設(shè)計(jì)有關(guān)。在系統(tǒng)設(shè)計(jì)中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經(jīng)常需要權(quán)衡。因此,必須認(rèn)識需求定義的易變性,采用適宜的開發(fā)范型予以控制,以保證軟件產(chǎn)品滿足用戶的要求。

第二,采用合適的設(shè)計(jì)方法。在軟件設(shè)計(jì)中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應(yīng)性等特征。合適的設(shè)計(jì)方法有助于這些特征的實(shí)現(xiàn),以達(dá)到軟件工程的目標(biāo)。

第三,提供高質(zhì)量的工程支持。“工欲善其事,必先利其器”。在軟件工程中,軟件工具與環(huán)境對軟件過程的支持頗為重要。軟件工程項(xiàng)目的質(zhì)量與開銷直接取決于對軟件工程所提供的支撐質(zhì)量和效用。

第四,重視開發(fā)過程的管理。軟件工程的管理,直接影響可用資源的有效利用,生產(chǎn)滿足目標(biāo)的軟件產(chǎn)品,提高軟件組織的生產(chǎn)能力等問題。因此,僅當(dāng)軟件過程得以有效管理時(shí),才能實(shí)現(xiàn)有效的軟件工程。

這一軟件工程框架告訴我們,軟件工程的目標(biāo)是可用性、正確性和合算性;實(shí)施一個(gè)軟件工程要選取適宜的開發(fā)范型,要采用合適的設(shè)計(jì)方法,要提供高質(zhì)量的工程支撐,要實(shí)行開發(fā)過程的有效管理;軟件工程活動主要包括需求、設(shè)計(jì)、實(shí)現(xiàn)、確認(rèn)和支持等活動,每一活動可根據(jù)特定的軟件工程,采用合適的開發(fā)范型、設(shè)計(jì)方法、支持過程以及過程管理。根據(jù)軟件工程這一框架,軟件工程學(xué)科的研究內(nèi)容主要包括:軟件開發(fā)范型、軟件開發(fā)方法、軟件過程、軟件工具、軟件開發(fā)環(huán)境、計(jì)算機(jī)輔助軟件工程(CASE)及軟件經(jīng)濟(jì)學(xué)等。2022/12/86框架:四項(xiàng)基本原則是基石2022/12/117二、軟件工程的七條基本原理

自從1968年提出“軟件工程”這一術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或信條。美國著名的軟件工程專家Boehm綜合這些專家的意見,并總結(jié)了TRW公司多年的開發(fā)軟件的經(jīng)驗(yàn),于1983年提出了軟件工程的七條基本原理。

Boehm認(rèn)為,著七條原理是確保軟件產(chǎn)品質(zhì)量和開發(fā)效率的原理的最小集合。

它們是相互獨(dú)立的,是缺一不可的最小集合;同時(shí),它們又是相當(dāng)完備的。人們當(dāng)然不能用數(shù)學(xué)方法嚴(yán)格證明它們是一個(gè)完備的集合,但是可以證明,在此之前已經(jīng)提出的100多條軟件工程準(zhǔn)則都可以有這七條原理的任意組合蘊(yùn)含或派生。下面簡要介紹軟件工程的七條原理:1用分階段的生命周期計(jì)劃嚴(yán)格管理

這一條是吸取前人的教訓(xùn)而提出來的。統(tǒng)計(jì)表明,50%以上的失敗項(xiàng)目是由于計(jì)劃不周而造成的。在軟件開發(fā)與維護(hù)的漫長生命周期中,需要完成許多性質(zhì)各異的工作。這條原理意味著,應(yīng)該把軟件生命周期分成若干階段,并相應(yīng)制定出切實(shí)可行的計(jì)劃,然后嚴(yán)格按照計(jì)劃對軟件的開發(fā)和維護(hù)進(jìn)行管理。Boehm認(rèn)為,在整個(gè)軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行6類計(jì)劃:項(xiàng)目概要計(jì)劃、里程碑計(jì)劃、項(xiàng)目控制計(jì)劃、產(chǎn)品控制計(jì)劃、驗(yàn)證計(jì)劃、運(yùn)行維護(hù)計(jì)劃。2022/12/87二、軟件工程的七條基本原理2022/12/1182堅(jiān)持進(jìn)行階段評審

統(tǒng)計(jì)結(jié)果顯示:大部分錯(cuò)誤是在編碼之前造成的,大約占63%;<2>錯(cuò)誤發(fā)現(xiàn)的越晚,改正它要付出的代價(jià)就越大,要差2到3個(gè)數(shù)量級。因此,軟件的質(zhì)量保證工作不能等到編碼結(jié)束之后再進(jìn)行,應(yīng)堅(jiān)持進(jìn)行嚴(yán)格的階段評審,以便盡早發(fā)現(xiàn)錯(cuò)誤。3實(shí)行嚴(yán)格的產(chǎn)品控制

開發(fā)人員最痛恨的事情之一就是改動需求。但是實(shí)踐告訴我們,需求的改動往往是不可避免的。這就要求我們要采用科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求。也就是要采用變動控制,又叫基準(zhǔn)配置管理。當(dāng)需求變動時(shí),其它各個(gè)階段的文檔或代碼隨之相應(yīng)變動,以保證軟件的一致性。4采納現(xiàn)代程序設(shè)計(jì)技術(shù)

從六、七時(shí)年代的結(jié)構(gòu)化軟件開發(fā)技術(shù),到最近的面向?qū)ο蠹夹g(shù),從第一、第二代語言,到第四代語言,人們已經(jīng)充分認(rèn)識到:方法大似氣力。采用先進(jìn)的技術(shù)即可以提高軟件開發(fā)的效率,又可以減少軟件維護(hù)的成本。5結(jié)果應(yīng)能清楚地審查

軟件是一種看不見、摸不著的邏輯產(chǎn)品。軟件開發(fā)小組的工作進(jìn)展情況可見性差,難于評價(jià)和管理。為更好地進(jìn)行管理,應(yīng)根據(jù)軟件開發(fā)的總目標(biāo)及完成期限,盡量明確地規(guī)定開發(fā)小組的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使所得到的標(biāo)準(zhǔn)能清楚地審查。

2022/12/882堅(jiān)持進(jìn)行階段評審

統(tǒng)計(jì)結(jié)果顯示:2022/12/1196開發(fā)小組的人員應(yīng)少而精

開發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素,應(yīng)該少而精。

這一條基于兩點(diǎn)原因:高素質(zhì)開發(fā)人員的效率比低素質(zhì)開發(fā)人員的效率要高幾倍到幾十倍,開發(fā)工作中犯的錯(cuò)誤也要少的多;當(dāng)開發(fā)小組為N人時(shí),可能的通訊信道為N(N-1)/2,可見隨著人數(shù)N的增大,通訊開銷將急劇增大。7承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性

遵從上述六條基本原理,就能夠較好地實(shí)現(xiàn)軟件的工程化生產(chǎn)。但是,它們只是對現(xiàn)有的經(jīng)驗(yàn)的總結(jié)和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第七條原理。根據(jù)這條原理,不僅要積極采納新的軟件開發(fā)技術(shù),還要注意不斷總結(jié)經(jīng)驗(yàn),收集進(jìn)度和消耗等數(shù)據(jù),進(jìn)行出錯(cuò)類型和問題報(bào)告統(tǒng)計(jì)。這些數(shù)據(jù)既可以用來評估新的軟件技術(shù)的效果,也可以用來指明必須著重注意的問題和應(yīng)該優(yōu)先進(jìn)行研究的工具和技術(shù)。

面向方面的編程(AspectOrientedProgramming,簡稱AOP)被認(rèn)為是近年來軟件工程的另外一個(gè)重要發(fā)展。這里的方面指的是完成一個(gè)功能的對象和函數(shù)的集合。在這一方面相關(guān)的內(nèi)容有泛型編程(GenericProgramming)和模板。2022/12/896開發(fā)小組的人員應(yīng)少而精

開發(fā)人員的2022/12/1110三、怎樣培養(yǎng)軟件工程的思維與方法

作為軟件開發(fā)人員的一個(gè)通病是在項(xiàng)目初期的時(shí)候,就喜歡談?wù)搶?shí)現(xiàn)的細(xì)節(jié),并且樂此不疲。我們更喜歡討論如何用靈活而簡短的代碼來實(shí)現(xiàn)一個(gè)特定的功能,而忽略了對整個(gè)系統(tǒng)架構(gòu)的考慮。所以作為一個(gè)開發(fā)人員,尤其是一個(gè)有經(jīng)驗(yàn)的開發(fā)人員,應(yīng)該把自己從代碼中解脫出來,更多的時(shí)候在我們的腦子里甚至?xí)簳r(shí)要放棄去考慮如何實(shí)現(xiàn)的問題,而從項(xiàng)目或產(chǎn)品的總體去考慮一個(gè)軟件產(chǎn)品。以下是我個(gè)人的一些經(jīng)驗(yàn):

1.考慮整個(gè)項(xiàng)目或者產(chǎn)品的市場前景。作為一個(gè)真正的系統(tǒng)分析人員,不僅要從技術(shù)的角度來考慮問題,而且還要從市場的角度去考慮問題。也就是說我們同時(shí)需要考慮我們產(chǎn)品的用戶群是誰,當(dāng)我們產(chǎn)品投放到市場上的時(shí)候,是否具有生命力。比如即使我們采用最好的技術(shù)實(shí)現(xiàn)了一個(gè)單進(jìn)程的操作系統(tǒng),其市場前景也一定是不容樂觀的。

2.從用戶的角度來考慮問題。比如一些操作對于開發(fā)人員來講是非常顯而易見的問題。但是對于一般的用戶來說可能就非常難于掌握,也就是說,有時(shí)候,我們不得不在靈活性和易用性方面進(jìn)行折中。另外,在功能實(shí)現(xiàn)上,我們也需要進(jìn)行綜合考慮,盡管一些功能十分強(qiáng)大,但是如果用戶幾乎不怎么使用它的話,就不一定在產(chǎn)品的第一版的時(shí)候就推出。從用戶的角度考慮,也就是說用戶認(rèn)可的才是好的,并不是開發(fā)人員覺的好才好。

3.從技術(shù)的角度考慮問題。雖然技術(shù)絕對不是唯一重要的,但是技術(shù)一定是非常重要的,是成功的必要環(huán)節(jié)。在產(chǎn)品設(shè)計(jì)的時(shí)候,必須考慮采用先進(jìn)的技術(shù)和先進(jìn)的體系結(jié)構(gòu)。比如,如果可以采用多線程進(jìn)行程序中各個(gè)部分并行處理的話,就最好采用多線程處理。在Windows下開發(fā)的時(shí)候,能夠把功能封裝成一個(gè)單獨(dú)的COM構(gòu)件就不作成一個(gè)簡單的DLL或者是以源代碼存在的函數(shù)庫或者是對象。比如能夠在B/S結(jié)構(gòu)下運(yùn)行并且不影響系統(tǒng)功能的話就不一定要在C/S下實(shí)現(xiàn)。2022/12/810三、怎樣培養(yǎng)軟件工程的思維與方法2022/12/11114.合理進(jìn)行模塊的分割。從多層模型角度來講,一般系統(tǒng)可以分成用戶層、業(yè)務(wù)層和數(shù)據(jù)庫層三部分。當(dāng)然每以部分都還可以進(jìn)行細(xì)分。所以在系統(tǒng)實(shí)現(xiàn)設(shè)計(jì)的時(shí)候,盡量進(jìn)行各個(gè)部分的分割并建立各個(gè)部分之間進(jìn)行交互的標(biāo)準(zhǔn)。并且在實(shí)際開發(fā)的時(shí)候,確實(shí)有需要的話再進(jìn)行重新調(diào)整。這樣就可以保證各個(gè)部分齊頭并進(jìn),開發(fā)人員也可以各施其職。

5.人員的組織和調(diào)度。這里很重要的一點(diǎn)是到考慮人員的特長,有的人喜歡做界面,有的人喜歡做核心。如果有可能要根據(jù)人員的具體的情況進(jìn)行具體的配置。同時(shí)要保證每一個(gè)開發(fā)人員在開發(fā)的時(shí)候首先完成需要和其他人員進(jìn)行交互的部分,并且對自己的項(xiàng)目進(jìn)度以及其他開發(fā)人員的進(jìn)度有一個(gè)清晰的了解,保證不同部分的開發(fā)人員能夠經(jīng)常進(jìn)行交流。

6.開發(fā)過程中文檔的編寫。在開發(fā)過程中會碰到各種各樣的問題和困難,當(dāng)然還有各種各樣的創(chuàng)意和新的思路。應(yīng)該把這些東西都記錄下來并進(jìn)行及時(shí)整理,對于困難和問題,如果不能短時(shí)間解決的,可以考慮采用其他的技術(shù)替代,并在事后做專門的研究。對于各種創(chuàng)意,可以根據(jù)進(jìn)度計(jì)劃安排考慮是在本版本中實(shí)現(xiàn)還是在下一版本中實(shí)現(xiàn)。

7.充分考慮實(shí)施時(shí)可能遇到的問題。開發(fā)是一回事情,用戶真正能夠使用好它又是另外一回事情。比如在MIS系統(tǒng)開發(fā)中,最簡單的一個(gè)問題就是用戶如果數(shù)據(jù)輸入錯(cuò)誤的時(shí)候,如何進(jìn)行操作。在以流程方式工作的時(shí)候,如何讓用戶理解自己在流程中的位置和作用,如何讓用戶真正利用計(jì)算機(jī)進(jìn)行協(xié)作也是成敗的關(guān)鍵。以上是我個(gè)人的一點(diǎn)體會,實(shí)際上,作為一個(gè)軟件開發(fā)人員,我也喜歡看到問題就坐在計(jì)算機(jī)前面直接編碼,但是我確實(shí)認(rèn)為軟件工程對于我們系統(tǒng)開發(fā)的指導(dǎo)作用是巨大的。作為軟件工程的擁戴者,下面我簡單結(jié)合自己的開發(fā)經(jīng)歷介紹基于軟件工程的開發(fā)方法、編程規(guī)范和工具使用等方面的問題。2022/12/8114.合理進(jìn)行模塊的分割。2022/12/1112四、軟件開發(fā)的發(fā)展變化

國外很多項(xiàng)目的開發(fā)都是基于一些圖形化的東西來做的,他們的目的是盡量少寫代碼甚至不寫代碼。代碼能夠通過圖形化的方式自動生成,這樣的一個(gè)好處就是如果用戶的需求變化或者業(yè)務(wù)邏輯發(fā)生變化,我們需要做的就是對圖形表示的調(diào)整,然后重新自動生成代碼,這也就是國外開發(fā)很注重對項(xiàng)目的概念和邏輯分析的原因。他們的重點(diǎn)是把業(yè)務(wù)規(guī)則和需求用圖形化的方式表現(xiàn)出來,然后通過CASE工具自動生成代碼。所以當(dāng)國人還在不停的開發(fā)一個(gè)又一個(gè)的MIS工具的時(shí)候,國外已經(jīng)把很多精力放到了CASE工具的制作上。我們很多公司人員忙著寫具體業(yè)務(wù)過程的相關(guān)代碼,而國外很多都把精力放到對不同應(yīng)用,不同行業(yè)的模型的建立和共性的提取上。所以,他們做出來的東西就相對具有很強(qiáng)的靈活性和擴(kuò)展性,而我們是用戶的需求稍微有一點(diǎn)變化,就要忙著改代碼,甚至改體系結(jié)構(gòu)。另外,因?yàn)樗麄冏⒅啬P偷慕?,所以在建立其他?yīng)用的時(shí)候,能夠借鑒原先的模型,在高層次上做調(diào)整和優(yōu)化,同時(shí)能夠有效的提取原有系統(tǒng)中可以被使用的部分。所以我們應(yīng)該從以代碼為核心的軟件開發(fā)模式轉(zhuǎn)化到以模型為中心的、基于CASE的開發(fā)上來。2022/12/812四、軟件開發(fā)的發(fā)展變化2022/12/1113關(guān)于協(xié)作與個(gè)人英雄主義社會進(jìn)步的一個(gè)很明顯的現(xiàn)象就是社會分工越來越細(xì),軟件的開發(fā)也不例外。為什么在軟件開發(fā)的今天已經(jīng)不能出現(xiàn)象裘伯君這樣的軟件英雄的原因也在這里,單憑個(gè)人之力,我們也許窮盡有生之年也開發(fā)不出象Windows這樣的操作系統(tǒng)。

因?yàn)椋?dāng)前軟件行業(yè)的壁壘無非就是兩個(gè),一個(gè)就是以技術(shù)創(chuàng)新取勝,你模仿的了其中的界面,但是你沒有辦法實(shí)現(xiàn)其中的核心功能。結(jié)果是你只能購買其技術(shù)核心,而你作一些邊角工作。不舉別的例子,比如VB這樣的開發(fā)工具,其核心部分是它和第三方提供的COM控件或者是DLL函數(shù)庫,你所做的就是一個(gè)整合的工作。第二個(gè)就是以細(xì)致取勝,也就是說功能很多而且做的很精致,即使技術(shù)本身不是很復(fù)雜,你真要想做出一個(gè)這樣的東西來沒有一兩年的工夫是不可能的。而真等你做出來了,它的新版本也早已經(jīng)推出。真正能夠在市面上叫得想、經(jīng)得起考驗(yàn)得產(chǎn)品都是具有這兩方面的特點(diǎn)。這兩方面的特點(diǎn)決定了你一個(gè)人絕對是不可能勝任的,也許你可以獨(dú)立的完成技術(shù)創(chuàng)新,但是你絕對不可能一個(gè)人實(shí)現(xiàn)所有這些紛繁復(fù)雜的功能。所以,這個(gè)時(shí)代需要?jiǎng)?chuàng)新的英雄,也更需要人與人之間的協(xié)作。

當(dāng)今的軟件發(fā)展已經(jīng)不是一個(gè)人可以包打天下的年代。軟件開發(fā)的管理、系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)、模塊之間的銜接、核心算法的實(shí)現(xiàn)、靈活界面的制定、軟件再開發(fā)接口的實(shí)現(xiàn)都需要專門的人來做。而把這些有效的集成顯然就需要有效的利用軟件工程的思想和方法。所以,真正的軟件英雄絕對不再是寫著別人看不懂代碼的程序員,而是整個(gè)體系結(jié)構(gòu)的分析、設(shè)計(jì)、標(biāo)準(zhǔn)制定、協(xié)調(diào)人員。2022/12/813關(guān)于協(xié)作與個(gè)人英雄主義2022/12/1114五、我們是否需要軟件工程

有一點(diǎn)大家可以達(dá)成共識的就是,如果一個(gè)象Windows這樣的操作系統(tǒng),不進(jìn)行全面的規(guī)劃,不采用軟件工程的思想和方法,是絕對搞不出來的。

Windows的成功不在于它在進(jìn)程管理和調(diào)度,文件系統(tǒng)、內(nèi)存管理、界面設(shè)計(jì)等方面有多少成功的創(chuàng)新,它的成功最大的一點(diǎn)就是把所有的技術(shù)能夠合理的整合起來,并集中到一個(gè)Window操作系統(tǒng)特有的框架結(jié)構(gòu)中去。更為重要的是,Windows的每一項(xiàng)技術(shù)創(chuàng)新都能夠有效的整合到Windows框架中去,比如COM、XML等技術(shù),通過ActiveX、DCOM等技術(shù)使Windows從桌面操作系統(tǒng)發(fā)展成為一個(gè)基于網(wǎng)絡(luò)的操作系統(tǒng)。

OLE2技術(shù)把整個(gè)Office中相關(guān)的軟件進(jìn)行了有效的整合,顯然,這里我們可以把Office的設(shè)計(jì)和WPS的設(shè)計(jì)進(jìn)行比較,客觀的講,WPS對中國用戶來說實(shí)在也是一個(gè)很好的產(chǎn)品。但是從整個(gè)系統(tǒng)設(shè)計(jì)概念上來講,Office顯然要比WPS高一個(gè)層次,它能夠把WORD,EXCEL,POWERPOINT,ACCESS有效的整合在一起,使我們所有辦公相關(guān)的文檔、圖表、數(shù)據(jù)庫、演示變成了一個(gè)一體化的東西。而且通過宏調(diào)用,用戶可以自己定制用戶界面并編制適當(dāng)?shù)哪0?,單是這個(gè)二次開發(fā)功能就不是WPS現(xiàn)在所能及項(xiàng)背的,當(dāng)然限于當(dāng)前用戶的水平還很少有人使用二次開發(fā)的功能。2022/12/814五、我們是否需要軟件工程2022/12/1115

從微軟產(chǎn)品系列可以看到軟件工程的作用,微軟的所有產(chǎn)品都有一個(gè)整體的框架結(jié)構(gòu),比如Office軟件,通過OLE技術(shù)進(jìn)行有效的通訊和聯(lián)系。比如Visual系列開發(fā)工具,提供了相似的開發(fā)界面使用戶學(xué)會一種開發(fā)工具以后能夠很容易的學(xué)習(xí)其他的開發(fā)工具。比如SQLSERVER和ACCESS,盡管它們適用的范圍不同,但是它們表現(xiàn)給用戶的界面,特別是在查詢和分析上表現(xiàn)了高度的一致性。更值得一提的是,因?yàn)樵O(shè)計(jì)結(jié)構(gòu)的合理性,因?yàn)樵陂_發(fā)前期作了很多分析和調(diào)研,考慮了擴(kuò)展性和伸縮性,微軟的系列產(chǎn)品能夠很快的利用新的技術(shù)并采用統(tǒng)一的結(jié)構(gòu)形式表現(xiàn)出來。比如當(dāng)網(wǎng)絡(luò)成為計(jì)算機(jī)發(fā)展的主流的時(shí)候,幾乎微軟所有的工具都能夠快速的支持基于網(wǎng)絡(luò)的開發(fā)和應(yīng)用。相比之下,我們國內(nèi)很多公司的產(chǎn)品很少具有連續(xù)性,往往是新的一個(gè)產(chǎn)品完全重起爐灶,和老的產(chǎn)品沒有半點(diǎn)關(guān)系。這就是我們在設(shè)計(jì)產(chǎn)品的時(shí)候,沒有很好的進(jìn)行抽象和概念、邏輯設(shè)計(jì),造成的結(jié)果是從舊的產(chǎn)品中提取不出一些有用的、共性的東西為后來的產(chǎn)品所使用。當(dāng)然,很多開發(fā)人員從心里也承認(rèn)一個(gè)大的系統(tǒng)確實(shí)需要軟件工程的依托,但是一個(gè)小的工程項(xiàng)目是否就可以倉促上馬呢?答案是否定的。所謂麻雀碎小,五臟俱全。無論是大項(xiàng)目、還是小項(xiàng)目。它們作為一個(gè)項(xiàng)目,都需要有一個(gè)需求分析、系統(tǒng)結(jié)構(gòu)建立、設(shè)計(jì)、編碼、測試等階段。這是任何一個(gè)項(xiàng)目都不可缺少的。2022/12/815從微軟產(chǎn)品系列可以看到軟2022/12/1116

往往可以看到很多大公司的IT部門的人員都在不停的作各種各樣的報(bào)表,當(dāng)各個(gè)部門提出一種新類型的報(bào)表的時(shí)候,就從數(shù)據(jù)庫中提取相應(yīng)的數(shù)據(jù)并畫出業(yè)務(wù)人員所需要的樣式結(jié)構(gòu),很少是提供了一個(gè)通用的模板,當(dāng)然提供高層API接口進(jìn)行這種操作的就更少了。這樣不可避免的使開發(fā)人員陷入一些瑣碎的報(bào)表編制工作。而造成這個(gè)局面的很重要的一個(gè)原因就是沒有在系統(tǒng)開發(fā)的前期進(jìn)行很好的調(diào)研、需求分析和系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)。這里就一些小型軟件項(xiàng)目來談一些開發(fā)的總結(jié)和體會,一般來說,小型軟件項(xiàng)目功能比較單一,而且模塊與模塊之間的銜接不是很多,同時(shí)對開發(fā)周期要求比較短。小項(xiàng)目雖然看起來比較簡單,所以很多開發(fā)人員容易犯一些錯(cuò)誤,記得我們在開發(fā)一個(gè)基于Internet的有償服務(wù)系統(tǒng)的時(shí)候,有三個(gè)開發(fā)人員:一個(gè)負(fù)責(zé)前端界面的編寫,一個(gè)負(fù)責(zé)數(shù)據(jù)通訊協(xié)議和實(shí)現(xiàn)(基于TCP基礎(chǔ)上的應(yīng)用協(xié)議),一個(gè)負(fù)責(zé)對數(shù)據(jù)庫數(shù)據(jù)的查詢、整理和提取。我們在開發(fā)的時(shí)候沒有認(rèn)真地進(jìn)行項(xiàng)目實(shí)際前途和工作量的估計(jì)。沒有認(rèn)真地估計(jì)項(xiàng)目難度,比如對于通訊中多用戶并發(fā)訪問時(shí)的多線程問題和緩存處理問題,用戶批量請求處理的實(shí)現(xiàn)復(fù)雜度問題等等。三個(gè)人之間的接口也是在開發(fā)中休息的時(shí)候,口頭定義一下。結(jié)果發(fā)現(xiàn)有不嚴(yán)密的地方(比如在通訊服務(wù)器端是用VC編寫的,開發(fā)人員是通過stream來傳送數(shù)據(jù)的,客戶端是用Delphi編寫,在接收數(shù)據(jù)的時(shí)候發(fā)現(xiàn)數(shù)據(jù)不準(zhǔn)確,后來研究發(fā)現(xiàn)VC利用CSocket在傳送數(shù)據(jù)流的時(shí)候?qū)?shù)據(jù)進(jìn)行了自己定義的格式化,結(jié)果服務(wù)器端數(shù)據(jù)發(fā)送模塊只好重寫),而且其中關(guān)于一個(gè)接口雙方的理解不同,然后又返工重新修改。最后到系統(tǒng)基本完成的時(shí)候沒有一份較正式的文檔。然后因?yàn)橛腥水厴I(yè)離開這個(gè)項(xiàng)目,然后他編寫的模塊需要升級,新的接收的人不得不花很多時(shí)間去閱讀他的源代碼。2022/12/816往往可以看到很多大公司2022/12/1117

所以在開發(fā)小項(xiàng)目的時(shí)候也必須要建立合理的模式:而所謂合理的模式就是軟件工程告訴我們的在開發(fā)一個(gè)項(xiàng)目的時(shí)候所需要的五步曲:獲取需求、需求分析、設(shè)計(jì)、編碼、測試。

1.理解用戶真正的需求。在進(jìn)入正式開發(fā)之前,必須先從用戶處獲取準(zhǔn)確的需求。在這上面花費(fèi)相當(dāng)時(shí)間是很必要的。我們軟件項(xiàng)目可以大致分為專用軟件和通用軟件兩大類。對于專用軟件,一般用戶對于軟件要完成哪些功能已經(jīng)有了一個(gè)比較清楚的輪廓,而且往往在開發(fā)合同中已經(jīng)大致地規(guī)定了。但是,開發(fā)合同上規(guī)定的只是一個(gè)大概的框架,在進(jìn)入開發(fā)之前必須與用戶進(jìn)行比較具體的交流和討論,了解清楚用戶心目中的產(chǎn)品究竟是什么樣子,這里最好就采用原型化的方法作出一個(gè)簡單的框架給用戶看。對于通用軟件,在開發(fā)之前必須做一定的市場調(diào)查工作,一方面是從經(jīng)濟(jì)效益考慮,調(diào)查產(chǎn)品的潛在市場有多大,一方面是從技術(shù)的角度,了解清楚潛在用戶對軟件的各種技術(shù)上的要求,另一方面是確定我們軟件的定位,即我們軟件具體是為哪一些用戶群體服務(wù)的。然后對該群體用戶現(xiàn)有硬件配置,軟件配置,網(wǎng)絡(luò)使用情況,數(shù)據(jù)庫使用情況,計(jì)算機(jī)熟悉程度做一定的調(diào)研,根據(jù)調(diào)查的統(tǒng)計(jì)結(jié)果決定即將開發(fā)的軟件的一些技術(shù)指標(biāo)。

2022/12/817所以在開發(fā)小項(xiàng)目的時(shí)候也2022/12/11182.需求分析。需求分析需要做的事情有:高層構(gòu)思、確立系統(tǒng)目標(biāo)、劃分業(yè)務(wù)領(lǐng)域、現(xiàn)行業(yè)務(wù)分析、建立業(yè)務(wù)模型(EnterpriseModel)、信息需求分析、用戶視圖規(guī)范化、數(shù)據(jù)元素標(biāo)準(zhǔn)化與一致性控制。在了解用戶的需求之后,將需求用一種模型來表示,就是需求分析,一般我們可以面向?qū)ο蟮姆椒?,通過分析用戶需求,用類、類之間的各種關(guān)系來表示整個(gè)系統(tǒng)。為了討論軟件運(yùn)行的流程,可以采用UML的UseCase圖。在系統(tǒng)分析的時(shí)候需要明確應(yīng)用域(applicationdomain)的范圍,然后明確我們系統(tǒng)需要做什么。同時(shí)我們需要決定用什么方法來完成需求的獲取,這在很大程度上影響了需求分析的做法。例如可以采用UseCase來表示用戶需求,那么從各種序列圖中選出相互交互的各個(gè)實(shí)體,就是一個(gè)個(gè)類。另外分析需要與設(shè)計(jì)過程相銜接。分析過程的內(nèi)容是用對象和對象之間的關(guān)系來表示整個(gè)系統(tǒng)和系統(tǒng)的流程的,并不設(shè)計(jì)具體實(shí)現(xiàn),如采用什么編程語言,在什么操作系統(tǒng)平臺上運(yùn)行等等。這些具體實(shí)現(xiàn)是在設(shè)計(jì)階段來完成的。面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)是分析、設(shè)計(jì)、編碼過程表示法統(tǒng)一,能比較好的銜接?,F(xiàn)在很多CASE工具并不區(qū)分分析和設(shè)計(jì)的階段。但是,這并不意味著開發(fā)就可以對分析和設(shè)計(jì)不加區(qū)分,如何用好輔助設(shè)計(jì)(case)工具還是開發(fā)人員的事情。2022/12/8182.需求分析。需求分析2022/12/11193.設(shè)計(jì)過程。設(shè)計(jì)階段的工作包括對分析模型進(jìn)行必要的修改,同時(shí)可能需要對某些類結(jié)構(gòu)做一些修改,確定用戶表示層(也就是通俗所說的界面定義)、用戶服務(wù)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫服務(wù)層和具體數(shù)據(jù)庫所需要做的工作。同時(shí)需要確定使用的體系結(jié)構(gòu)(比如B/S還是C/S)和開發(fā)工具(如VB,VC,VI,C++Builder,DELPHI,PowerBuiler等等)

4.編碼。進(jìn)入編碼工作之后,依然可能會發(fā)現(xiàn)前面分析或設(shè)計(jì)階段的某些錯(cuò)誤,這時(shí)應(yīng)返回到前面的階段進(jìn)行必要的修改。同時(shí)在編碼前規(guī)定編碼的風(fēng)格并在開發(fā)過程中保持一致的風(fēng)格。

5.測試。測試是系統(tǒng)投入使用前最關(guān)鍵的一個(gè)步驟。即使是小項(xiàng)目也應(yīng)該嚴(yán)格地進(jìn)行測試。就實(shí)際上就是一個(gè)把錯(cuò)誤留給自己還是留給客戶的問題。2022/12/8193.設(shè)計(jì)過程。設(shè)計(jì)階段的2022/12/1120最后,我們知道軟件項(xiàng)目主要是由開發(fā)人員完成的,所以對人員的合理安排和配置也很重要,一般在開發(fā)過程中,需要有一位項(xiàng)目負(fù)責(zé)人,負(fù)責(zé)分析、設(shè)計(jì)和協(xié)調(diào)的工作。另外需要幾個(gè)程序員完成不同層的代碼(比如用戶服務(wù)層、業(yè)務(wù)邏輯層、數(shù)據(jù)庫服務(wù)層等等)。同時(shí)需要有一個(gè)文檔整理人員隨時(shí)整理系統(tǒng)開發(fā)過程中相關(guān)的文檔。如果條件可能的話,要配置一個(gè)測試工程師,專門進(jìn)行代碼的測試工作,當(dāng)然如果條件不允許的話,也可以由開發(fā)人員交叉測試。這里需要注意的是,對于項(xiàng)目負(fù)責(zé)人而言,協(xié)調(diào)幾個(gè)人的工作比自己完成一段編碼更重要。由于協(xié)調(diào)上出了漏洞,可能導(dǎo)致很大的問題,所以項(xiàng)目負(fù)責(zé)人必須隨時(shí)監(jiān)控各開發(fā)人員的工作,包括內(nèi)容是否與要求發(fā)生偏差,進(jìn)度是否滯后等等。同時(shí)必須給每個(gè)開發(fā)人員明確的任務(wù)書。具體開發(fā)時(shí)每個(gè)開發(fā)人員必須非常明確自己的任務(wù),這些任務(wù)應(yīng)該采用明確的文檔來表示。每個(gè)開發(fā)人員需要清楚自己所做的工作在整個(gè)系統(tǒng)中處于什么地位,這樣就有可能會發(fā)現(xiàn)設(shè)計(jì)模型中的漏洞,避免了各人的代碼編寫完畢之后又要修改的后果。2022/12/820最后,我們知道軟件項(xiàng)目主要是由開發(fā)2022/12/1121六、軟件工程的發(fā)展方向

“敏捷開發(fā)”(AgileDevelopment)被認(rèn)為是軟件工程的一個(gè)重要的發(fā)展。它強(qiáng)調(diào)軟件開發(fā)應(yīng)當(dāng)是能夠?qū)ξ磥砜赡艹霈F(xiàn)的變化和不確定性作出全面反應(yīng)的。

敏捷開發(fā)被認(rèn)為是一種“輕量級”的方法。在輕量級方法中最負(fù)盛名的應(yīng)該是“極限編程”(ExtremeProgramming,簡稱為XP)。而與輕量級方法相對應(yīng)的是“重量級方法”的存在。重量級方法強(qiáng)調(diào)以開發(fā)過程為中心,而不是以人為中心。重量級方法的例子比如CMM/PSP/TSP。2022/12/821六、軟件工程的發(fā)展方向2022/12/1122軟件工程概述1第一章2022/12/822軟件工程概述1第一章2022/12/1123第一章軟件工程概述11.1軟件工程的產(chǎn)生和發(fā)展1.2軟件與軟件生存期1.3

軟件生存期模型1.5軟件開發(fā)工具1.4軟件開發(fā)方法2022/12/823第一章軟件工程概述11.12022/12/11241.1軟件工程的產(chǎn)生和發(fā)展目錄11.1.2軟件危機(jī)1.1.3軟件工程的定義1.1.1軟件工程的發(fā)展過程1.1.4軟件工程研究的內(nèi)容1.1軟件工程的產(chǎn)生和發(fā)展2022/12/8241.1軟件工程的產(chǎn)生和發(fā)展目錄11.2022/12/11251.2軟件與軟件生存期目錄11.2.1軟件的概念和特點(diǎn)1.2.2軟件工程過程1.2.3軟件生存期1.2軟件與軟件生存期2022/12/8251.2軟件與軟件生存期目錄11.22022/12/11261.3軟件生存期模型目錄11.3.3增量模型1.3.1瀑布模型1.3.2循環(huán)模型1.3.4螺旋模型1.3.5噴泉模型1.3.6智能模型1.3軟件生存期模型2022/12/8261.3軟件生存期模型目錄11.3.2022/12/11271.4軟件開發(fā)方法目錄11.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法1.4.1結(jié)構(gòu)化開發(fā)方法1.4.3原型化開發(fā)方法1.4.4面向?qū)ο蟮拈_發(fā)方法1.4軟件開發(fā)方法2022/12/8271.4軟件開發(fā)方法目錄11.4.22022/12/11281.5軟件開發(fā)工具目錄11.5.2軟件工程環(huán)境1.5.1計(jì)算機(jī)輔助軟件工程1.5軟件開發(fā)工具2022/12/8281.5軟件開發(fā)工具目錄11.5.22022/12/11291.1軟件工程的產(chǎn)生和發(fā)展1.1軟件工程的產(chǎn)生和發(fā)展軟件工程(SoftwareEngineering)是在克服20世紀(jì)60年代末所出現(xiàn)的“軟件危機(jī)”的過程中逐漸形成與發(fā)展的。在不到40年的時(shí)間里,在軟件工程的理論和實(shí)踐兩方面都取得了長足的進(jìn)步。由于軟件工程是一門指導(dǎo)計(jì)算機(jī)軟件系統(tǒng)開發(fā)和維護(hù)的工程學(xué)科,是一門新興的邊緣學(xué)科,涉及到計(jì)算機(jī)科學(xué)、工程科學(xué)、管理科學(xué)、數(shù)學(xué)等多學(xué)科,研究的范圍廣,主要研究如何應(yīng)用軟件開發(fā)的科學(xué)理論和工程技術(shù)來指導(dǎo)大型軟件系統(tǒng)的開發(fā)。例如現(xiàn)代操作系統(tǒng)的開發(fā),如果不采用軟件工程的方法是不可能的。在我國加入WTO后,大力推廣、應(yīng)用軟件工程的開發(fā)技術(shù)及管理技術(shù),提高軟件工程的應(yīng)用水平,對促進(jìn)我國軟件產(chǎn)業(yè)與國際接軌,推動我國軟件產(chǎn)業(yè)的迅速發(fā)展起著十分重要的關(guān)鍵作用。2022/12/8291.1軟件工程的產(chǎn)生和發(fā)展1.1軟2022/12/11301.1.1軟件工程的發(fā)展過程1.1.1軟件工程的產(chǎn)生和發(fā)展自從第一臺計(jì)算機(jī)誕生以來,就開始了軟件的生產(chǎn),到目前為止,軟件發(fā)展經(jīng)歷了三個(gè)階段:

1.程序設(shè)計(jì)時(shí)代(1946-1956年)采用“個(gè)體生產(chǎn)方式”,即軟件開發(fā)完全依賴于程序員個(gè)人的能力水平。

2.程序系統(tǒng)時(shí)代(1956-1968年)由于軟件應(yīng)用范圍及規(guī)模的不斷擴(kuò)大,個(gè)體生產(chǎn)已經(jīng)不能夠滿足軟件生產(chǎn)的需要,一個(gè)軟件需要由幾個(gè)人協(xié)同完成,采用“生產(chǎn)作坊方式”。該階段的后期,隨著軟件需求量、規(guī)模及復(fù)雜度的增大,生產(chǎn)作坊的方式已經(jīng)不能夠適應(yīng)軟件生產(chǎn)的需要,出現(xiàn)所謂“軟件危機(jī)”。

3.軟件工程時(shí)代(1968年至今)這階段的主要任務(wù)是為了克服軟件危機(jī),適應(yīng)軟件發(fā)展的需要,而采用“工程化的生產(chǎn)”方式。軟件工程的產(chǎn)生和發(fā)展是與軟件的發(fā)展緊密相關(guān)的。2022/12/8301.1.1軟件工程的發(fā)展過程1.1.2022/12/11311.1.2軟件危機(jī)

“軟件危機(jī)”(Softwarecrisis)的出現(xiàn)是由于軟件的規(guī)模越來越大,復(fù)雜度不斷增加,軟件需求量增大。而軟件開發(fā)過程是一種高密集度的腦力勞動,軟件開發(fā)的模式及技術(shù)不能適應(yīng)軟件發(fā)展的需要。致使大量質(zhì)量低劣的軟件涌向市場,有的花費(fèi)大量人力財(cái)力,而在開發(fā)過程中就夭折。例如:

IBM公司的OS/360,共約100萬條指令,花費(fèi)了5000個(gè)人年;經(jīng)費(fèi)達(dá)數(shù)億美元,而結(jié)果卻令人沮喪,錯(cuò)誤多達(dá)2000個(gè)以上,系統(tǒng)根本無法正常運(yùn)行。OS/360系統(tǒng)的負(fù)責(zé)人Brooks這樣描述開發(fā)過程的困難和混亂:“…像巨獸在泥潭中作垂死掙扎,掙扎得越猛,泥漿就沾得越多,最后沒有一個(gè)野獸能夠逃脫淹沒在泥潭中的命運(yùn)?!?963年,美國飛往火星的火箭因?yàn)橐粋€(gè)軟件錯(cuò)誤而爆炸。

1967年8月23日,原蘇聯(lián)”結(jié)盟一號”載人宇宙飛船也因軟件錯(cuò)誤燒毀。

“軟件危機(jī)”主要表現(xiàn)在兩個(gè)方面:

(1)軟件產(chǎn)品質(zhì)量低劣,甚至開發(fā)過程就夭折。

(2)軟件生產(chǎn)率低,不能滿足需要。1.1.2軟件危機(jī)2022/12/8311.1.2軟件危機(jī)“軟件危機(jī)”2022/12/11321.1.3軟件工程的定義1.1.3軟件工程的定義

自從1968年提出軟件工程這個(gè)術(shù)語,對于軟件工程就有了各種各樣的定義,但是它們的基本思想都是強(qiáng)調(diào)在軟件開發(fā)過程中應(yīng)用工程化原則的重要性。

Boehm定義:“運(yùn)用現(xiàn)代科學(xué)技術(shù)知識時(shí)間并構(gòu)造計(jì)算機(jī)程序及為開發(fā)、運(yùn)行和維護(hù)這些程序所必需的相關(guān)文件資料。”。IEEE(國際電氣與電子工程師協(xié)會)的定義是:軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法?!?988年IEEE又將定義更改為:對軟件開發(fā)、運(yùn)作、維護(hù)的系統(tǒng)化的、有規(guī)范的、可定量的方法之應(yīng)用,即是對軟件的工程化應(yīng)用?!?990年軟件工程三要素:方法、工具和過程軟件工程方法:研究軟件開發(fā)“如何做”的技術(shù)。軟件工具:研究支撐軟件開發(fā)方法的工具、軟件工具的集成環(huán)境—計(jì)算機(jī)輔助軟件工程CASE。軟件工程過程:將軟件工程方法與軟件工具相結(jié)合實(shí)現(xiàn)合理、及時(shí)地進(jìn)行軟件開發(fā)的目的。2022/12/8321.1.3軟件工程的定義1.1.32022/12/11331.1.4軟件工程研究的內(nèi)容

1.研究內(nèi)容軟件工程是一門新興的邊緣學(xué)科,涉及的學(xué)科多,研究的范圍廣。歸結(jié)起來軟件工程研究的主要內(nèi)容有以下幾方面:}軟件開發(fā)軟件開發(fā)方法、技術(shù)軟件開發(fā)工具及環(huán)境軟件管理技術(shù)軟件規(guī)范(國際規(guī)范)}軟件管理(1)軟件開發(fā)技術(shù)(軟件結(jié)構(gòu)、開發(fā)方法、工具與軟件工程環(huán)境、軟件工程標(biāo)準(zhǔn)化)

(2)軟件工程管理(質(zhì)量管理,軟件工程經(jīng)濟(jì)學(xué):成本估算,計(jì)劃安排)軟件工程研究的目標(biāo)是“以較少的投資獲取較高質(zhì)量的軟件”。1.1.4軟件工程研究的內(nèi)容本課程主要討論:2022/12/8331.1.4軟件工程研究的內(nèi)容2022/12/1134軟件工程項(xiàng)目具有多目標(biāo)特性,其基本目標(biāo)如圖所示:低開發(fā)成本易于維護(hù)高可靠性高性能按時(shí)交付互斥互補(bǔ)可見,軟件工程所追求的目標(biāo)是:

多、快、好、省1.1.4軟件工程研究的內(nèi)容2.軟件工程的基本目標(biāo)

軟件工程的產(chǎn)生源于克服軟件危機(jī),其最終目標(biāo)是要實(shí)現(xiàn)軟件生產(chǎn)的自動化,也只有那樣,才有可能真正徹底克服軟件危機(jī)。由于軟件開發(fā)的特殊性;軟件開發(fā)過程是高密集性的腦力勞動,使開發(fā)過程的復(fù)雜性難以控制。2022/12/834軟件工程項(xiàng)目具有多目標(biāo)特性,其基本目標(biāo)2022/12/11351.2軟件與軟件生存期1.2軟件與軟件生存期為了克服軟件危機(jī),人們從其他產(chǎn)業(yè)的工業(yè)化生產(chǎn)得到啟示,于是在1968年北大西洋公約的軟件可靠性會議(NATO)上,首次提出了“軟件工程”的概念。提出了在軟件生產(chǎn)中采用工程化的方法,采用一系列科學(xué)的、現(xiàn)代化的方法技術(shù)來開發(fā)軟件。這種工程化的思想貫穿到軟件開發(fā)和維護(hù)的全過程。為了進(jìn)一步學(xué)習(xí)有關(guān)軟件工程的方法、技術(shù),先介紹軟件、軟件生存期及軟件工程過程這幾個(gè)重要的概念。2022/12/8351.2軟件與軟件生存期1.2軟件與2022/12/11361.2.1軟件的概念和特點(diǎn)1.2.1軟件的概念和特點(diǎn)一、軟件要糾正軟件就是程序,開發(fā)軟件就是編寫程序的錯(cuò)誤觀念。

軟件是“程序以及開發(fā)使用維護(hù)程序所需的所有文檔”,由應(yīng)用程序、系統(tǒng)程序、面向用戶的文檔及面向開發(fā)者的文檔4部分構(gòu)成。二、軟件的特點(diǎn)

1.軟件是一種邏輯實(shí)體,不是具體的物理實(shí)體。

2.軟件產(chǎn)品的生產(chǎn)主要是研制。

3.軟件具有“復(fù)雜性”,其開發(fā)和運(yùn)行常受到計(jì)算機(jī)系統(tǒng)的限制。

4.軟件成本昂貴,其開發(fā)方式目前尚未完全擺脫手工生產(chǎn)方式。

5.軟件不存在磨損和老化問題,但存在退化問題。2022/12/8361.2.1軟件的概念和特點(diǎn)1.2.12022/12/1137硬件失效率曲線,是一U型曲線(即浴盆曲線)。軟件失效率曲線,它沒有U型曲線的右半翼。因?yàn)檐浖淮嬖谀p和老化問題,然而存在退化問題。失效率時(shí)間

硬件失效率曲線失效率時(shí)間實(shí)際曲線理想曲線

軟件失效率曲線1.2.1軟件的概念和特點(diǎn)軟、硬件失效情況的對比2022/12/837硬件失效率曲線,是一U型曲線(即浴2022/12/11382.按照軟件規(guī)模劃分類別參加人數(shù)研制期限產(chǎn)品規(guī)模(源代碼行數(shù))微型11–4周500小型11–6月1000–2000中型2-51–2年5–50000大型5-202–3年50–500000甚大型100-10004–5年1000000極大型2000-50005–10年1000000–100000001.2.1軟件的概念和特點(diǎn)軟件分類三、軟件的分類1.按照軟件功能劃分系統(tǒng)軟件

如操作系統(tǒng)、設(shè)備驅(qū)動程序等。支撐軟件(實(shí)用軟件)—

協(xié)助用戶開發(fā)的工具軟件,如編輯程序、程序庫、圖形軟件包等。應(yīng)用軟件

如工程與科學(xué)計(jì)算軟件、CAD/CAM軟件、CAI軟件、信息管理系統(tǒng)等。2022/12/8382.按照軟件規(guī)模劃分類別參加人數(shù)2022/12/11393.按照軟件工作方式劃分實(shí)時(shí)處理軟件 交互式軟件 批處理軟件4.按照軟件服務(wù)對象的范圍劃分項(xiàng)目軟件—

由客戶委托開發(fā)的軟件。產(chǎn)品軟件—

由軟件開發(fā)機(jī)構(gòu)開發(fā),提供給市場的。此外,還可以按照軟件使用的頻度及按照軟件失效的影響進(jìn)行劃分。

1.2.1軟件的概念和特點(diǎn)分類續(xù)2022/12/8393.按照軟件工作方式劃分此外,還可以2022/12/1140軟件工程過程(Softwareengineeringprocess):是指在軟件工具的支持下,所進(jìn)行的一系列軟件工程活動。

通常包括以下四類基本過程:1.軟件規(guī)格說明:規(guī)定軟件的功能及其運(yùn)行環(huán)境。2.軟件開發(fā):產(chǎn)生滿足規(guī)格說明的軟件。3.軟件確認(rèn):確認(rèn)軟件能夠完成客戶提出的要求。4.軟件演進(jìn):為滿足客戶的變更要求,軟件必須在使用的過程中演進(jìn)。

軟件工程過程的特性:

1.可理解性 2.可見性(過程的進(jìn)展和結(jié)果可見)

3.可靠性 4.可支持性(易于使用CASE工具支持)

5.可維護(hù)性 6.可接受性(為軟件工程師接受)

7.開發(fā)效率 8.健壯性(抵御外部意外錯(cuò)誤的能力)1.2.2軟件工程過程1.2.2軟件工程過程2022/12/840軟件工程過程(Softwareeng2022/12/1141軟件生命周期(SDLD)是指從軟件開始開發(fā)到報(bào)廢的全過程,亦稱軟件生存期(lifecycle)。一般用經(jīng)典的瀑布模型來描述。GB8567中規(guī)定,軟件生命周期分為7個(gè)階段:1.可行性研究和項(xiàng)目開發(fā)計(jì)劃2.

需求分析3.概要設(shè)計(jì)4.

詳細(xì)設(shè)計(jì)5.編碼6.

測試7.維護(hù)

在大部分文獻(xiàn)中將生存周期劃分為5個(gè)階段,即需求定義、設(shè)計(jì)、編碼、測試及維護(hù)。其中需求定義階段包括可行性研究和項(xiàng)目開發(fā)計(jì)劃、需求分析,設(shè)計(jì)階段包括概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。 為了描述軟件生存期的活動,提出了多種生存期模型,例如:

瀑布模型、循環(huán)模型、演化模型、螺旋模型等。1.2.3軟件生存期1.2.3軟件生存期2022/12/841軟件生命周期(SDLD)是指從軟2022/12/11421.3軟件生存期模型

軟件生存周期模型是描述軟件開發(fā)過程中各種活動如何執(zhí)行的模型。目前有若干軟件生存期模型,各種模型有其不同的特點(diǎn),并適用于不同的開發(fā)方法。1.3軟件生存期模型瀑布模型(waterfallmodel)循環(huán)模型(loopmodel)增量模型(incrementalmodel)螺旋模型(spiralmodel)噴泉模型(fountainmodel)智能模型(intelligentmodel)2022/12/8421.3軟件生存期模型軟件生2022/12/11431.3.1瀑布模型

瀑布模型是將軟件生存周期各活動規(guī)定為依線性順序聯(lián)接的若干階段的模型。瀑布模型的表示如圖所示。該模型說明整個(gè)軟件開發(fā)過程是按圖中的各個(gè)階段進(jìn)行的,每個(gè)階段的任務(wù)完成之后,產(chǎn)生右邊相應(yīng)的文檔。1.3軟件生存期模型問題定義編程需求分析設(shè)計(jì)可行性研究運(yùn)行與維護(hù)測試開發(fā)時(shí)期運(yùn)行時(shí)期計(jì)劃時(shí)期(目標(biāo)與范圍說明書)(可行性論證報(bào)告)(維護(hù)報(bào)告)(測試報(bào)告)(程序)(設(shè)計(jì)文檔)(需求說明書)

瀑布模型2022/12/8431.3.1瀑布模型瀑布模型是2022/12/11441.3.2循環(huán)模型

為了描述軟件開發(fā)過程中可能的回溯,尤其是維護(hù)階段往往要經(jīng)歷上述各個(gè)階段,采用循環(huán)模型描述。1.3.2循環(huán)模型需求分析設(shè)計(jì)編碼測試運(yùn)行評價(jià)計(jì)劃

循環(huán)模型2022/12/8441.3.2循環(huán)模型為了描述軟2022/12/1145

增量模型是一種非整體開發(fā)的模型。根據(jù)增量的方式和形式的不同,分為基于瀑布模型的漸增模型和基于原型的快速原型模型。該模型具有較大的靈活性,適合于軟件需求不明確、設(shè)計(jì)方案有一定風(fēng)險(xiǎn)的軟件項(xiàng)目。增量模型和瀑布模型之間的本質(zhì)區(qū)別是:瀑布模型屬于整體開發(fā)模型,它規(guī)定在開始下一個(gè)階段的工作之前,必須完成前一階段的所有細(xì)節(jié)。而增量模型屬于非整體開發(fā)模型,它推遲某些階段或所有階段中的細(xì)節(jié),從而較早地產(chǎn)生工作軟件。1.3.3增量模型定義概要需求把需求分配給增量設(shè)計(jì)系統(tǒng)結(jié)構(gòu)開發(fā)系統(tǒng)增量驗(yàn)證增量組裝增量驗(yàn)證系統(tǒng)系統(tǒng)不完全最終系統(tǒng)

增量模型1.3.3增量模型2022/12/845增量模型是一種非整體開發(fā)的模型2022/12/1146

螺旋模型對于大型軟件,只開發(fā)一個(gè)原型往往達(dá)不到要求。螺旋模型將瀑布模型和增量模型結(jié)合起來,并加入了風(fēng)險(xiǎn)分析。1.3.4螺旋模型

螺旋模型將開發(fā)過程分為幾個(gè)螺旋周期,每個(gè)螺旋周期可分為4個(gè)工作步驟:第一,確定目標(biāo)、方案和限制條件;第二,評估方案、標(biāo)識風(fēng)險(xiǎn)和解決風(fēng)險(xiǎn);第三,開發(fā)確認(rèn)產(chǎn)品;第四,計(jì)劃下一周期工作。

螺旋模型2022/12/846螺旋模型對于大型軟件,只開2022/12/1147需求分析設(shè)計(jì)編碼測試運(yùn)行評價(jià)計(jì)劃問題定義編程需求分析設(shè)計(jì)可行性研究運(yùn)行與維護(hù)測試開發(fā)時(shí)期運(yùn)行時(shí)期計(jì)劃時(shí)期(目標(biāo)與范圍說明書)(可行性論證報(bào)告)(維護(hù)報(bào)告)(測試報(bào)告)(程序)(設(shè)計(jì)文檔)(需求說明書)瀑布模型循環(huán)模型螺旋模型幾種模型原型化模型快速分析或修改評價(jià)構(gòu)造運(yùn)行生存期模型2022/12/847需求分析設(shè)計(jì)編碼測試運(yùn)行評價(jià)計(jì)劃問題定2022/12/11481.3.5噴泉模型分析系統(tǒng)設(shè)計(jì)軟件設(shè)計(jì)實(shí)現(xiàn)噴泉模型

該模型是由B.H.Sollers和J.M.Edwards于1990年提出的一種新的開發(fā)模型。主要用于采用對象技術(shù)的軟件開發(fā)項(xiàng)目。它克服了瀑布模型不支持軟件重用和多項(xiàng)開發(fā)活動集成的局限性,噴泉模型使開發(fā)過程具有迭代性和無間隙性。

其特點(diǎn)如下:

1.開發(fā)過程有分析、系統(tǒng)設(shè)計(jì)、軟件設(shè)計(jì)和實(shí)現(xiàn)4個(gè)階段。2.各階段相互重疊,它反映了軟件過程并行性的特點(diǎn)。3.以分析為基礎(chǔ),資源消耗成塔型。4.反映了軟件過程迭代性的自然特性,從高層返回低層無資源消耗。5.強(qiáng)調(diào)增量開發(fā),整個(gè)過程是一個(gè)迭代的逐步提煉的過程。

1.3.5噴泉模型2022/12/8481.3.5噴泉模型分析系統(tǒng)設(shè)2022/12/11491.3.6智能模型

智能模型(intelligentmodel)也稱為基于知識的軟件開發(fā)模型,是知識工程與軟件工程相結(jié)合的軟件開發(fā)模型。其主要特點(diǎn)是必須建立知識庫,并將模型本身、軟件工程知識、特定領(lǐng)域知識放入知識庫。具體描述可以使用形式功能規(guī)約,也可以使用知識處理語言描述等。其模型如圖1.9所示。1.3.6智能模型獲取需求需求分析具體描述優(yōu)化程序調(diào)整驗(yàn)證維護(hù)知識庫專家系統(tǒng)程序智能模型2022/12/8491.3.6智能模型智2022/12/11501.4軟件開發(fā)方法1.4軟件開發(fā)方法軟件開發(fā)的目標(biāo)是要在規(guī)定的投資和時(shí)間內(nèi),開發(fā)出符合用戶的需求,高質(zhì)量的軟件,為此需要有成功的開發(fā)方法。為了克服軟件危機(jī),從20世紀(jì)60年代末開始,一直在進(jìn)行軟件方法的研究與實(shí)踐,提出了多種軟件開發(fā)方法和技術(shù),對軟件產(chǎn)業(yè)的發(fā)展起著不可估量的作用。軟件開發(fā)方法可分為兩大類:面向過程的開發(fā)方法面向?qū)ο蟮拈_發(fā)方法本課程具體討論以下三種方法:結(jié)構(gòu)化開發(fā)方法原型化開發(fā)方法面向?qū)ο蟮拈_發(fā)方法2022/12/8501.4軟件開發(fā)方法1.4軟件開發(fā)2022/12/1151結(jié)構(gòu)化開發(fā)方法(StructuredDevelopingMethod)

是現(xiàn)有的軟件開發(fā)方法中最成熟,應(yīng)用最廣泛的方法,主要特點(diǎn)是快速、自然和方便。結(jié)構(gòu)化方法總的指導(dǎo)思想自頂向下、逐步求精。它的基本原則是功能的分解與抽象。一、結(jié)構(gòu)化開發(fā)方法的組成

20世紀(jì)70年代初結(jié)構(gòu)化程序設(shè)計(jì)方法(StructuredProgram,SP)

20世紀(jì)70年代中結(jié)構(gòu)化設(shè)計(jì)方法(StructuredDesign,SD)

20世紀(jì)70年代末結(jié)構(gòu)化分析方法(StructuredAnalysis,SA)

SA,SD,SP法相互銜接,形成了一整套開發(fā)方法。若將SA,SD法結(jié)合起來,又稱為結(jié)構(gòu)化分析與設(shè)計(jì)技術(shù)(SADT技術(shù))。1.4.1結(jié)構(gòu)化開發(fā)方法1.4.1結(jié)構(gòu)化開發(fā)方法2022/12/851結(jié)構(gòu)化開發(fā)方法(Structured2022/12/1152

化方法的工作模型—

瀑布模型(WaterfallModel)但從20世紀(jì)80年代開始,逐漸發(fā)現(xiàn)其不足,軟件開發(fā)過程是個(gè)充滿回朔的過程。而瀑布模型將其分割為獨(dú)立的幾個(gè)階段,不能從本質(zhì)上反映軟件開發(fā)過程本身的規(guī)律。此外,過分強(qiáng)調(diào)復(fù)審,并不能完全避免較為頻繁的變動。盡管如此,瀑布模型仍然是開發(fā)軟件產(chǎn)品的一個(gè)行之有效的工程模型。二、結(jié)構(gòu)化方法的工作模型1.4.1結(jié)構(gòu)化開發(fā)方法問題定義編程需求分析設(shè)計(jì)可行性研究運(yùn)行與維護(hù)測試開發(fā)時(shí)期運(yùn)行時(shí)期計(jì)劃時(shí)期(目標(biāo)與范圍說明書)(可行性論證報(bào)告)(維護(hù)報(bào)告)(測試報(bào)告)(程序)(設(shè)計(jì)文檔)(需求說明書)瀑布模型2022/12/852二、結(jié)構(gòu)化方法的工作模型1.4.1結(jié)2022/12/11531.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法1.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法

結(jié)構(gòu)化開發(fā)方法是面向數(shù)據(jù)流、數(shù)據(jù)封閉性的開發(fā)方法,JACKSON

系統(tǒng)開發(fā)方法則是面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法。其基本思想是先建立輸入輸出的數(shù)據(jù)結(jié)構(gòu),再將其轉(zhuǎn)換為軟件結(jié)構(gòu)。1.JACKSON方法的構(gòu)成

JACKSON方法由JSP(JacksonstructuredProgramming)和JSD(JacksonSystemDevelopment)方法構(gòu)成。

⑴JSP法主要體現(xiàn)程序結(jié)構(gòu)的設(shè)計(jì),不嚴(yán)格區(qū)分軟件概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。⑵

JSD法是對JSP法的擴(kuò)充,針對JSP法的缺陷而提出的解決方案。其主要特點(diǎn)是:用“分而治之”的策略控制系統(tǒng)的復(fù)雜性,解決I/O結(jié)構(gòu)的沖突問題。2022/12/8531.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法1.2022/12/11541.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法2.JACKSON方法的設(shè)計(jì)過程

⑴建立數(shù)據(jù)結(jié)構(gòu)

JACKSON方法中數(shù)據(jù)結(jié)構(gòu)通常表示為樹型結(jié)構(gòu),有順序、選擇和循環(huán)三種基本結(jié)構(gòu)。如圖1.10(a)所示,按照三種基本結(jié)構(gòu)建立的文件數(shù)據(jù)結(jié)構(gòu)。

⑵以數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ),建立相應(yīng)的程序結(jié)構(gòu)圖如圖1.10(b),也稱為JACKSON圖。當(dāng)沒有結(jié)構(gòu)沖突時(shí),轉(zhuǎn)換過程是簡單的。一般情況,數(shù)據(jù)結(jié)構(gòu)與模塊結(jié)構(gòu)是相對應(yīng)的,因此不難從數(shù)據(jù)結(jié)構(gòu)導(dǎo)出程序結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為程序結(jié)構(gòu)文件記錄*項(xiàng)1項(xiàng)2項(xiàng)3(a)處理文件處理記錄*處理項(xiàng)1處理項(xiàng)2處理項(xiàng)3(b)2022/12/8541.4.2面向數(shù)據(jù)結(jié)構(gòu)的開發(fā)方法2.2022/12/1155一、原型化方法(PrototypingMethod)

原型是軟件開發(fā)過程中軟件的一個(gè)早期可運(yùn)行的版本,它反映了最終系統(tǒng)的部分重要特性。原型化方法的基本思想是花費(fèi)少量代價(jià)建立一個(gè)可運(yùn)行的系統(tǒng),使用戶及早獲得學(xué)習(xí)的機(jī)會,原型化方法又稱速成原型法(RapidPrototyping)。強(qiáng)調(diào)的是軟件開發(fā)人員與用戶的不斷交互,通過原型的演進(jìn)不斷適應(yīng)用戶任務(wù)改變的需求。將維護(hù)和修改階段的工作盡早進(jìn)行,使用戶驗(yàn)收提前,從而使軟件產(chǎn)品更加適用。1.4.3原型化開發(fā)方法1.4.3原型化開發(fā)方法2022/12/855一、原型化方法(Prototyping2022/12/1156原型化方法按運(yùn)用原型的目的和方式的不同,分為兩類:1)快速建立需求規(guī)格原型(RSP

法)

RSP(RapidSpecificationPrototyping)法所建立的原型反映了系統(tǒng)的某些特征,讓用戶學(xué)習(xí),有利于獲得更加精確的需求說明書,待需求說明書一旦確定原型被廢棄,后階段的工作仍按照瀑布模型開發(fā)。2)快速建立漸進(jìn)原型(RCP

法)

RCP(RapidCyclicPrototyping)法采用循環(huán)漸進(jìn)的開發(fā)方式,對系統(tǒng)模型作連續(xù)精化,將系統(tǒng)需要具備的性質(zhì)逐步添加上去,直至所有性質(zhì)全部滿足,此時(shí)的原型模型也就是最終的產(chǎn)品。速成原型法適合于開發(fā)“探索型”,“實(shí)驗(yàn)型”與“進(jìn)化型”一類的軟件系統(tǒng)。分類1.4.3原型化開發(fā)方法2022/12/856原型化方法按運(yùn)用原型的目的和方式的不同2022/12/1157速成原型的工作模型是一個(gè)循環(huán)的模型??焖僭头ò匆韵虏襟E循環(huán)執(zhí)行:

1.快速分析快速確定軟件系統(tǒng)的基本要求,確定原型所要體現(xiàn)的特征(界面,總體結(jié)構(gòu),功能,性能)。

2.構(gòu)造原型在快速分析的基礎(chǔ)上,根據(jù)基本規(guī)格說明,忽略細(xì)節(jié),只考慮主要特征,快速構(gòu)造一個(gè)可運(yùn)行的系統(tǒng)。有三類原型:用戶界面原型、功能原型和性能原型。

3.運(yùn)行和評價(jià)原型用戶試用原型并與開發(fā)者之間頻繁交流,發(fā)現(xiàn)問題,目的是驗(yàn)證原型的正確性。

4.修改與改進(jìn)對原型進(jìn)行修改、增刪。原型的工作模型工作模型1.4.3原型化開發(fā)方法評價(jià)

構(gòu)造快速分析或修改運(yùn)行2022/12/857速成原型的工作模型是一個(gè)循環(huán)的模型。原2022/12/1158構(gòu)造原型運(yùn)行/評價(jià)原型原型完成否要細(xì)部說明否嚴(yán)格說明細(xì)部效果滿意否整理原型提供文檔修正改進(jìn)原型YYNN快速分析,確定初步規(guī)格說明YN1.4.3原型化開發(fā)方法

細(xì)化的快速原型模型圖2細(xì)化的快速原型模型2022/12/858構(gòu)造原型運(yùn)行/評價(jià)原型原型完成否要細(xì)部2022/12/1159

OOSD(Object-OrientedSoftwareDevelopment)法是20世紀(jì)80年代推出的一種全新的軟件開發(fā)方法。非常實(shí)用而強(qiáng)有力,被譽(yù)為20世紀(jì)90年代軟件的核心技術(shù)之一。1.4.4面向?qū)ο蟮拈_發(fā)方法1.4.4面向?qū)ο蟮拈_發(fā)方法

其基本思想是:對問題領(lǐng)域進(jìn)行自然分割,以更接近人類通常思維的方式建立問題領(lǐng)域的模型,以便對客觀的信息實(shí)體進(jìn)行結(jié)構(gòu)和行為的模擬,從而使設(shè)計(jì)的軟件更直接地表現(xiàn)問題的求解過程。面向?qū)ο蟮拈_發(fā)方法以對象作為最基本的元素,是分析和解決問題的核心。2022/12/859OOSD(Object-Ori2022/12/11601.4.4面向?qū)ο蟮拈_發(fā)方法一、面向?qū)ο箝_發(fā)方法的組成

OOSD由三部分組成:

OOA(Object-OrientedAnalysis)面向?qū)ο蟮姆治?/p>

OOD(Object-OrientedDesign)面向?qū)ο蟮脑O(shè)計(jì)

OOP(Object-OrientedProgram)面向?qū)ο蟮某绦蛟O(shè)計(jì)OOAOOA強(qiáng)調(diào)的是對一個(gè)系統(tǒng)中的對象特征和行為的定義。建立系統(tǒng)的三類模型。OODOODOOD與OOA密切配合,順序?qū)崿F(xiàn)對現(xiàn)實(shí)世界的進(jìn)一步建模。OOPOOPOOP是面向?qū)ο蟮募夹g(shù)中發(fā)展最快的,使用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,進(jìn)行編碼。2022/12/8601.4.4面向?qū)ο蟮拈_發(fā)方法一、面向2022/12/1161二、OOA法就是要解決“做什么”的問題。OOA

法的基本任務(wù)就是要建立三種模型:狀態(tài)模型(動態(tài)模型)

描述任何時(shí)刻對象的聯(lián)系及其聯(lián)系的改變,即時(shí)序。常用狀態(tài)圖,事件追蹤圖描述。處理模型(函數(shù)模型)

描述系統(tǒng)內(nèi)部數(shù)據(jù)的傳送處理。

顯然,在三大模型中,最重要的是對象模型。如何建立三大模型,我們將在第5章中介紹。對象模型(信息模型)定義構(gòu)成系統(tǒng)的類和對象,它們的屬性與操作。二、OOA法1.4.4面向?qū)ο蟮拈_發(fā)方法2022/12/861二、OOA法狀態(tài)模型(動態(tài)模型)2022/12/1162三、OOD

在需求分析的基礎(chǔ)上,進(jìn)一步解決“如何做”的問題,OOD法也分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。

概要設(shè)計(jì):細(xì)化對象行為,添加新對象,認(rèn)定類,組類庫,確定外部接口及主要數(shù)據(jù)結(jié)構(gòu)。

詳細(xì)設(shè)計(jì):加細(xì)對象描述。四、OOP

法使用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,如C++進(jìn)行程序設(shè)計(jì)。

Coad和Yourdon給出一個(gè)面向?qū)ο蟮亩x:

面向?qū)ο?對象+類+繼承+消息如果一個(gè)軟件系統(tǒng)是按照這樣四個(gè)概念設(shè)計(jì)和實(shí)現(xiàn)的,則可以認(rèn)為這個(gè)軟件系統(tǒng)是面向?qū)ο蟮?。三、OOD

法1.4.4面向?qū)ο蟮姆椒?022/12/862三、OOD法三、OOD法1.4.42022/12/11631.5軟件開發(fā)工具

為支持軟件開發(fā)、維護(hù)、管理而研制的計(jì)算機(jī)程序系統(tǒng)稱為軟件工具。

像程序系統(tǒng)可分為系統(tǒng)和子系統(tǒng)一樣,軟件開發(fā)工具也可具有不同的粒度,稱之為工具或工具片斷。軟件工具通常由工具、工具接口和工具用戶接口3部分構(gòu)成。工具通過工具接口與其他工具、操作系統(tǒng)或網(wǎng)絡(luò)操作系統(tǒng)以及通信接口、環(huán)境信息庫接口等進(jìn)行交互作用,當(dāng)工具需要與用戶進(jìn)行交互作用時(shí),則通過工具的用戶接口來進(jìn)行。軟件工具種類繁多,涉及面廣,如編輯、編譯、正文格式處理,靜態(tài)分析、動態(tài)跟蹤、需求分析、設(shè)計(jì)分析、測試、模擬和圖形交互等。1.5軟件開發(fā)工具2022/12/8631.5軟件開發(fā)工具為支持軟件2022/12/11641.5.1計(jì)算機(jī)輔助軟件工程

在軟件工程活動中,軟件工程師和管理員按照軟件工程的方法和原則,借助于計(jì)算機(jī)及其軟件工具的幫助,開發(fā)、維護(hù)、管理軟件產(chǎn)品的過程,稱為計(jì)算機(jī)輔助軟件工程(Computer-AidedSoftwareEngineering,簡稱CASE)。CASE發(fā)展的兩個(gè)階段:1.依賴與于軟件內(nèi)生命周期各階段的分散工具只能支持軟件開發(fā)某個(gè)階段的工具,而不能支持整個(gè)軟件生命周期。例如:美國密執(zhí)安大學(xué)的ISDOS項(xiàng)目組研制的PSL/PSA系統(tǒng),為分析員提供需求分析文檔的編寫和檢查的工具。

PSL(ProblemStatementLanguage)是問題說明語言,它可以按照一定的語法描述用戶對系統(tǒng)的功能和性能要求。

PSA(ProblemStatementAnalyzer)是問題說明分析器可以對用PSA寫的文本進(jìn)行分析,產(chǎn)生許多有用的報(bào)告。

1.5.1計(jì)算機(jī)輔助軟件工程2022/12/8641.5.1計(jì)算機(jī)輔助軟件工程在軟2022/12/1165計(jì)算機(jī)輔助軟件工程2.軟件開發(fā)環(huán)境(SoftwareDevelopmentEnvironment)也稱為軟件工程環(huán)境(SoftwareEngineeringEnvironment)是包括方法、工具和管理等多種技術(shù)在內(nèi)的綜合系統(tǒng),好的軟件開發(fā)環(huán)境能夠簡化軟件開發(fā)過程,提高軟件開發(fā)質(zhì)量。應(yīng)具備以下特點(diǎn):①緊密性(各種工具緊密配合工作)②堅(jiān)定性(環(huán)境可自我保護(hù),不受用戶和系統(tǒng)影響,可實(shí)現(xiàn)非預(yù)見性的環(huán)境恢復(fù))③可適應(yīng)性(適應(yīng)用戶要求,環(huán)境中的工具可修改、增加、減少)④可移植性(工具可移植)1.5.1計(jì)算機(jī)輔助軟件工程美國Tektronix公司針對SA方法開發(fā)的Tektronix工具箱。美國Hughes飛機(jī)公司開發(fā)的概要設(shè)計(jì)工具AIDES系統(tǒng)(AutomatedInteractiveDesignandEvaluationSystem)。2022/12/865計(jì)算機(jī)輔助軟件工程2.軟件開發(fā)環(huán)境(2022/12/1166典型的軟件工程環(huán)境應(yīng)用級基本級核心級1.5.2軟件工程環(huán)境典型的軟件工程環(huán)境具有三級結(jié)構(gòu):核心級(核心工具組、數(shù)據(jù)庫、通信工具、運(yùn)行支持功能、與硬件無關(guān)的移植接口)基本級(環(huán)境的用戶工具,編譯、編輯程序,作業(yè)控制語言的解釋程序等)應(yīng)用級(應(yīng)用軟件的開發(fā)工具)1.5.2軟件工程環(huán)境2022/12/866典型的軟件工程環(huán)境應(yīng)用級基本級核心級12022/12/1167小結(jié)小結(jié)軟件工程是一門指導(dǎo)軟件開發(fā)的工程學(xué)科,它是在克服軟件危機(jī)的過程中產(chǎn)生和發(fā)展的。為了克服軟件危機(jī),提高軟件開發(fā)的效率和質(zhì)量,提出了在軟件生產(chǎn)中采用工程化的方法,采用一系列科學(xué)的、現(xiàn)代化的方法技術(shù)來開發(fā)軟件,并將這種工程化的思想貫穿到軟件開發(fā)和維護(hù)的全過程。這些軟件開發(fā)的方法和技術(shù),對軟件產(chǎn)業(yè)的發(fā)展起著不可估量的作用。

本章介紹了軟件工程的基本概念、性質(zhì)、研究的主要內(nèi)容及目標(biāo),介紹了結(jié)構(gòu)化、原型化方法、面向?qū)ο蟮姆椒ǖ然镜能浖_發(fā)方法及其工作模型。為后面各章節(jié)的進(jìn)一步學(xué)習(xí)打下了基礎(chǔ)。2022/12/867小結(jié)小結(jié)軟件工程是一門指導(dǎo)軟件2022/12/1168軟件工程軟件工程2022/12/81軟件工程軟件工程2022/12/1169軟件工程介紹

軟件工程(SoftwareEngineering,簡稱為SE)是一門研究用工程化方法構(gòu)建和維護(hù)有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科。它涉及到程序設(shè)計(jì)語言,數(shù)據(jù)庫,軟件開發(fā)工具,系統(tǒng)平臺,標(biāo)準(zhǔn),設(shè)計(jì)模式等方面。在現(xiàn)代社會中,軟件應(yīng)用于多個(gè)方面。典型的軟件比如

溫馨提示

  • 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

提交評論