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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

70年代初,自“軟件工廠”這一概念提出以來,主要圍繞軟件過程以及軟件復用,開展了有關軟件生產技術和軟件生產管理的研究與實踐。其主要成果有:提出了應用廣泛的面向對象語言以及相關的面向對象方法,大力開展了計算機輔助軟件工程的研究與實踐。尤其是近幾年來,針對軟件復用及軟件生產,軟件構件技術以及軟件質量控制技術、質量保證技術得到了廣泛的應用。目前各個軟件企業(yè)都十分重視資質認證,并想通過這些工作進行企業(yè)管理和技術的提升。軟件工程所涉及的要素可概括如下:2022/12/84一、軟件工程概述2022/12/115

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

目標:我的眼里只有“產品”

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

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

軟件工程圍繞工程設計、工程支持以及工程管理,提出了以下四項基本原則:

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

第二,采用合適的設計方法。在軟件設計中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應性等特征。合適的設計方法有助于這些特征的實現,以達到軟件工程的目標。

第三,提供高質量的工程支持?!肮び破涫拢叵壤淦鳌?。在軟件工程中,軟件工具與環(huán)境對軟件過程的支持頗為重要。軟件工程項目的質量與開銷直接取決于對軟件工程所提供的支撐質量和效用。

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

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

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

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

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

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

統計結果顯示:大部分錯誤是在編碼之前造成的,大約占63%;<2>錯誤發(fā)現的越晚,改正它要付出的代價就越大,要差2到3個數量級。因此,軟件的質量保證工作不能等到編碼結束之后再進行,應堅持進行嚴格的階段評審,以便盡早發(fā)現錯誤。3實行嚴格的產品控制

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

從六、七時年代的結構化軟件開發(fā)技術,到最近的面向對象技術,從第一、第二代語言,到第四代語言,人們已經充分認識到:方法大似氣力。采用先進的技術即可以提高軟件開發(fā)的效率,又可以減少軟件維護的成本。5結果應能清楚地審查

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

2022/12/882堅持進行階段評審

統計結果顯示:2022/12/1196開發(fā)小組的人員應少而精

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

“敏捷開發(fā)”(AgileDevelopment)被認為是軟件工程的一個重要的發(fā)展。它強調軟件開發(fā)應當是能夠對未來可能出現的變化和不確定性作出全面反應的。

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

軟件生存期模型1.5軟件開發(fā)工具1.4軟件開發(fā)方法2022/12/823第一章軟件工程概述11.12022/12/11241.1軟件工程的產生和發(fā)展目錄11.1.2軟件危機1.1.3軟件工程的定義1.1.1軟件工程的發(fā)展過程1.1.4軟件工程研究的內容1.1軟件工程的產生和發(fā)展2022/12/8241.1軟件工程的產生和發(fā)展目錄11.2022/12/11251.2軟件與軟件生存期目錄11.2.1軟件的概念和特點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面向數據結構的開發(fā)方法1.4.1結構化開發(fā)方法1.4.3原型化開發(fā)方法1.4.4面向對象的開發(fā)方法1.4軟件開發(fā)方法2022/12/8271.4軟件開發(fā)方法目錄11.4.22022/12/11281.5軟件開發(fā)工具目錄11.5.2軟件工程環(huán)境1.5.1計算機輔助軟件工程1.5軟件開發(fā)工具2022/12/8281.5軟件開發(fā)工具目錄11.5.22022/12/11291.1軟件工程的產生和發(fā)展1.1軟件工程的產生和發(fā)展軟件工程(SoftwareEngineering)是在克服20世紀60年代末所出現的“軟件危機”的過程中逐漸形成與發(fā)展的。在不到40年的時間里,在軟件工程的理論和實踐兩方面都取得了長足的進步。由于軟件工程是一門指導計算機軟件系統開發(fā)和維護的工程學科,是一門新興的邊緣學科,涉及到計算機科學、工程科學、管理科學、數學等多學科,研究的范圍廣,主要研究如何應用軟件開發(fā)的科學理論和工程技術來指導大型軟件系統的開發(fā)。例如現代操作系統的開發(fā),如果不采用軟件工程的方法是不可能的。在我國加入WTO后,大力推廣、應用軟件工程的開發(fā)技術及管理技術,提高軟件工程的應用水平,對促進我國軟件產業(yè)與國際接軌,推動我國軟件產業(yè)的迅速發(fā)展起著十分重要的關鍵作用。2022/12/8291.1軟件工程的產生和發(fā)展1.1軟2022/12/11301.1.1軟件工程的發(fā)展過程1.1.1軟件工程的產生和發(fā)展自從第一臺計算機誕生以來,就開始了軟件的生產,到目前為止,軟件發(fā)展經歷了三個階段:

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

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

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

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

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

1967年8月23日,原蘇聯”結盟一號”載人宇宙飛船也因軟件錯誤燒毀。

“軟件危機”主要表現在兩個方面:

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

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

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

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

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

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

多、快、好、省1.1.4軟件工程研究的內容2.軟件工程的基本目標

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

軟件是“程序以及開發(fā)使用維護程序所需的所有文檔”,由應用程序、系統程序、面向用戶的文檔及面向開發(fā)者的文檔4部分構成。二、軟件的特點

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

2.軟件產品的生產主要是研制。

3.軟件具有“復雜性”,其開發(fā)和運行常受到計算機系統的限制。

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

5.軟件不存在磨損和老化問題,但存在退化問題。2022/12/8361.2.1軟件的概念和特點1.2.12022/12/1137硬件失效率曲線,是一U型曲線(即浴盆曲線)。軟件失效率曲線,它沒有U型曲線的右半翼。因為軟件不存在磨損和老化問題,然而存在退化問題。失效率時間

硬件失效率曲線失效率時間實際曲線理想曲線

軟件失效率曲線1.2.1軟件的概念和特點軟、硬件失效情況的對比2022/12/837硬件失效率曲線,是一U型曲線(即浴2022/12/11382.按照軟件規(guī)模劃分類別參加人數研制期限產品規(guī)模(源代碼行數)微型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軟件的概念和特點軟件分類三、軟件的分類1.按照軟件功能劃分系統軟件

如操作系統、設備驅動程序等。支撐軟件(實用軟件)—

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

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

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

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

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

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

軟件工程過程的特性:

1.可理解性 2.可見性(過程的進展和結果可見)

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

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

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

需求分析3.概要設計4.

詳細設計5.編碼6.

測試7.維護

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

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

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

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

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

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

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

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

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

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

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

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

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

其特點如下:

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

1.3.5噴泉模型2022/12/8481.3.5噴泉模型分析系統設2022/12/11491.3.6智能模型

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

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

20世紀70年代初結構化程序設計方法(StructuredProgram,SP)

20世紀70年代中結構化設計方法(StructuredDesign,SD)

20世紀70年代末結構化分析方法(StructuredAnalysis,SA)

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

化方法的工作模型—

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

結構化開發(fā)方法是面向數據流、數據封閉性的開發(fā)方法,JACKSON

系統開發(fā)方法則是面向數據結構的開發(fā)方法。其基本思想是先建立輸入輸出的數據結構,再將其轉換為軟件結構。1.JACKSON方法的構成

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

⑴JSP法主要體現程序結構的設計,不嚴格區(qū)分軟件概要設計和詳細設計。⑵

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

⑴建立數據結構

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

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

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

法)

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

法)

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

1.快速分析快速確定軟件系統的基本要求,確定原型所要體現的特征(界面,總體結構,功能,性能)。

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

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

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

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

細化的快速原型模型圖2細化的快速原型模型2022/12/858構造原型運行/評價原型原型完成否要細部2022/12/1159

OOSD(Object-OrientedSoftwareDevelopment)法是20世紀80年代推出的一種全新的軟件開發(fā)方法。非常實用而強有力,被譽為20世紀90年代軟件的核心技術之一。1.4.4面向對象的開發(fā)方法1.4.4面向對象的開發(fā)方法

其基本思想是:對問題領域進行自然分割,以更接近人類通常思維的方式建立問題領域的模型,以便對客觀的信息實體進行結構和行為的模擬,從而使設計的軟件更直接地表現問題的求解過程。面向對象的開發(fā)方法以對象作為最基本的元素,是分析和解決問題的核心。2022/12/859OOSD(Object-Ori2022/12/11601.4.4面向對象的開發(fā)方法一、面向對象開發(fā)方法的組成

OOSD由三部分組成:

OOA(Object-OrientedAnalysis)面向對象的分析

OOD(Object-OrientedDesign)面向對象的設計

OOP(Object-OrientedProgram)面向對象的程序設計OOAOOA強調的是對一個系統中的對象特征和行為的定義。建立系統的三類模型。OODOODOOD與OOA密切配合,順序實現對現實世界的進一步建模。OOPOOPOOP是面向對象的技術中發(fā)展最快的,使用面向對象的程序設計語言,進行編碼。2022/12/8601.4.4面向對象的開發(fā)方法一、面向2022/12/1161二、OOA法就是要解決“做什么”的問題。OOA

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

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

描述系統內部數據的傳送處理。

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

在需求分析的基礎上,進一步解決“如何做”的問題,OOD法也分為概要設計和詳細設計。

概要設計:細化對象行為,添加新對象,認定類,組類庫,確定外部接口及主要數據結構。

詳細設計:加細對象描述。四、OOP

法使用面向對象的程序設計語言,如C++進行程序設計。

Coad和Yourdon給出一個面向對象的定義:

面向對象=對象+類+繼承+消息如果一個軟件系統是按照這樣四個概念設計和實現的,則可以認為這個軟件系統是面向對象的。三、OOD

法1.4.4面向對象的方法2022/12/862三、OOD法三、OOD法1.4.42022/12/11631.5軟件開發(fā)工具

為支持軟件開發(fā)、維護、管理而研制的計算機程序系統稱為軟件工具。

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

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

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

PSA(ProblemStatementAnalyzer)是問題說明分析器可以對用PSA寫的文本進行分析,產生許多有用的報告。

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

本章介紹了軟件工程的基本概念、性質、研究的主要內容及目標,介紹了結構化、原型化方法、面向對象的方法等基本的軟件開發(fā)方法及其工作模型。為后面各章節(jié)的進一步學習打下了基礎。2022/12/867小結小結軟件工程是一門指導軟件2022/12/1168軟件工程軟件工程2022/12/81軟件工程軟件工程2022/12/1169軟件工程介紹

軟件工程(SoftwareEngineering,簡稱為SE)是一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。它涉及到程序設計語言,數據庫,軟件開發(fā)工具,系統平臺,標準,設計模式等方面。在現代社會中,軟件應用于多個方面。典型的軟件比如

溫馨提示

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

評論

0/150

提交評論