60年代中期開始爆發了衆所周知的軟件危機。爲了克服這一危機,在196八、1969年連續召開的兩次著名的NATO會議上提出了軟件工程這一術語,並在之後不斷髮展、完善。與此同時,國外大的軟件公司和機構的軟件研究人員也在不斷探索新的軟件開發方法。迄今爲止已經提出了不少實際的開發方法,諸如:Parnas方法、結構化法、生命週期法、原型法、面向對象法等等。下面介紹幾種流行的開發方法:數據庫
一、Parnas方法編程
最先的軟件開發方法是由D.Parnas在1972年提出的。因爲當時軟件在可維護性和可靠性方面存在着嚴重問題,所以Parnas提出的方法是針對這兩個問題的。首先,Parnas提 出了信息隱蔽原則:在概要設計時列出未來可能發生變化的因素,並在模塊劃分時將這些因素放到個別模塊的內部。這樣,在未來因爲這些因素變化而需修改軟件 時,只需修改這些個別的模塊,其它模塊不受影響。信息隱蔽技術不只提升了軟件的可維護性,並且也避免了錯誤的蔓延,改善了軟件的可靠性。如今信息隱蔽原則 已成爲軟件工程學中的一條重要原則。設計模式
Parnas提出的第二條原則是在軟件設計時應對可能發生的種種意外故障採起措施。軟件是很脆弱的,極可能由於一個微小的錯誤而引起嚴重的事故,因此必須增強防範。如在分配使用設備前,應該取設備狀態字,檢查設備是否正常。此外,模塊之間也要增強檢查,防止錯誤蔓延。安全
Parnas對軟件開發提出了深入的看法。遺憾的是,他沒有給出明確的工做流程。因此這一方法不能獨立使用,只能做爲其它方法的補充。數據結構
二、結構化方法[1]架構
1978年,E. Yourdon和L. L. Constantine提出告終構化方法,即SASD方法,也可稱爲面向功能的軟件開發方法或面向數據流的軟件開發方法。1979年Tom DeMarco對此方法做了進一步的完善。框架
Yourdon方法是80年代使用最普遍的軟件開發方法。它首先用結構化分析(SA)對軟件進行需求分析,而後用結構化設計(SD)方法進行整體設計,最後是結構化編程(SP)。這一方法不只開發步驟明確,SA、SD、SP相輔相成,一鼓作氣,並且給出了兩類典型的軟件結構(變換型和事務型),便於參照,使軟件開發的成功率大大提升,從而深受軟件開發人員的青睞。編程語言
三、面向數據結構的軟件開發方法分佈式
Jackson方法是最典型的面向數據結構的軟件開發方法,1975年,M. A. Jackson提 出了一類至今仍普遍使用的軟件開發方法。這一方法從目標系統的輸入、輸出數據結構入手,導出程序框架結構,再補充其它細節,就可獲得完整的程序結構圖。這 一方法對輸入、輸出數據結構明確的中小型系統特別有效,如商業應用中的文件表格處理。該方法也可與其它方法結合,用於模塊的詳細設計。工具
Jackson方 法把問題分解爲可由三種基本結構形式表示的各部分的層次結構。三種基本的結構形式就是順序、選擇和重複。三種數據結構能夠進行組合,造成複雜的結構體系。 這一方法從目標系統的輸入、輸出數據結構入手,導出程序框架結構,再補充其它細節,就可獲得完整的程序結構圖。這一方法對輸入、輸出數據結構明確的中小型 系統特別有效,如商業應用中的文件表格處理。該方法也可與其它方法結合,用於模塊的詳細設計。
1974年,J. D. Warnier提出的軟件開發方法與Jackson方法相似。
差異有三點:一是它們使用的圖形工具不一樣,分別使用Warnier圖和Jackson圖;另外一個差異是使用的僞碼不一樣;最主要的差異是在構造程序框架時,Warnier方法僅考慮輸入數據結構,而Jackson方法不只考慮輸入數據結構,並且還考慮輸出數據結構。
四、面向問題的分析法
PAM(Problem Analysis Method)是80年代末由日立公司提出的一種軟件開發方法。它的基本思想是考慮到輸入、輸出數據結構,指導系統的分解,在系統分析指導下逐步綜合。
這一方法的具體步驟是:從輸入、輸出數據結構導出基本處理框;分析這些處理框之間的前後關係;按前後關係逐步綜合處理框,直到畫出整個系統的PAD圖。
這一方法本質上是綜合的自底向上的方法,但在逐步綜合以前已進行了有目的的分解,這個目的就是充分考慮系統的輸入、輸出數據結構。PAM方法的另外一個優勢是使用PAD圖。這是一種二維樹形結構圖,是到目前爲止最好的詳細設計表示方法之一。固然因爲在輸入、輸出數據結構與整個系統之間一樣存在着鴻溝,這一方法仍只適用於中小型問題。
五、原型化方法
原型法(Prototyping)是20世紀80年代隨着計算機軟件技術的發展,特別是在關係數據庫系統(Relational Data Base System,RDBS)、第四代程序生成語言(4th Generation Language,4GL)和各類系統開發生成環境產生的基礎上,提出的一種從設計思想、工具、手段都全新的系統開發方法。它揚棄了那種一步步周密細緻地調查分析,而後逐步整理出文字檔案,最後才能讓用戶看到結果的繁瑣做法。
產生原型化方法的緣由不少,主要隨着咱們系統開發經驗的增多,咱們也發現並不是全部的需求都可以預先定義並且反覆修改是不可避免的。固然可以採用原型化方法是由於開發工具的快速發展,好比用VB,DELPHI等工具咱們能夠迅速的開發出一個可讓用戶看得見、摸得着的系統框架,這樣,對於計算機不是很熟悉的用戶就能夠根據這個樣板提出本身的需求。
開發原型化系統通常由如下幾個階段:
(1)肯定用戶需求
(2)開發原始模型
(3)徵求用戶對初始原型的改進意見
(4)修改原型。
原型化開發比較適合於用戶需求不清、業務理論不肯定、需求常常變化的狀況。當系統規模不是很大也不太複雜時採用該方法是比較好的。
原型法隨着時代的變遷不斷被豐富,目前經常使用的原型法又分爲:快速原型法、實用性原型法、拋棄性原型、演進原型法、實驗原型法等。
快速原型法就是最初的原型法,經過原型引導用戶需求的方法。
實用性原型法是每次從新構建原型後將用戶承認的部分記錄彙總後造成最終用戶系統的方法。
拋棄性原型法是每次構建原型後着重記錄用戶不承認的信息,通過屢次反覆後將用戶不承認的部分所有排除後造成最終用戶系統的方法。
演進原型法又稱增加原型法,一般是先開發運行一個子系統或分子系統,再擴充其功能或者開發另外一個相關的子系統或分子系統,並歸併集成,這樣自底向上地逐步獲得一個較完整的系統。
實驗原型法是(Expriment Prototyping,EP),它是經過創建真實系統的模型,由局部模型不斷實驗改進,最後獲得整個系統的模型。
實用性原型法和拋棄性原型法屬於快速需求獲取的原型法,其產生的結果是用戶的需求信息和不須要的信息,卻不是直接造成可交付系統自己。而演進原型法和實驗原型法產生的結果是最終可交付系統的一部分,須要用戶方有人可以全程跟進或者參與評審提出意見。
六、面向對象的軟件開發方法
當前計算機業界最流行的幾個單詞就是分佈式、並行和麪向對象這幾個術語。由此能夠看到面向對象這個概念在當前計算機業界的地位。好比當前流行的兩大面向對象技術DCOM和CORBA就是例子。固然咱們實際用到的仍是面向對象的編程語言,好比C++。不能否認,面向對象技術是軟件技術的一次革命,在軟件開發史上具備里程碑的意義。
隨着OOP(面向對象編程)向OOD(面向對象設計)和OOA(面向對象分析)的發展,最終造成面向對象的軟件開發方法OMT(Object Modeling Technique)。這是一種自底向上和自頂向下相結合的方法,並且它以對象建模爲基礎,從而不只考慮了輸入、輸出數據結構,實際上也包含了全部對象的數據結構。因此OMT完全實現了PAM沒有徹底實現的目標。不只如此,OO技術在需求分析、可維護性和可靠性這三個軟件開發的關鍵環節和質量指標上有了實質性的突破,基本地解決了在這些方面存在的嚴重問題。
綜上所述,面向對象系統採用了自底向上的概括、自頂向下的分解的方法,它經過對對象模型的創建,可以真正創建基於用戶的需求,並且系統的可維護性大大改善。當前業界關於面向對象建模的標準是UML(Unified Modeling Language)。
這裏咱們須要談一下微軟的MSF(Microsoft Solutions Framework) 的框架,它簡單的把系統設計分紅三個階段:概念設計、邏輯設計和物理設計。概念設計階段就是從用戶的角度出發能夠獲得多少個對象,而且以對象爲主體,畫出 業務框架。邏輯設計階段就是對概念設計階段的對象進行再分析、細分、整合、刪除。並創建各個對象的方法屬性以及對象之間的關係。而物理設計實際上就是要確 定咱們實際須要的組件、服務和採用的框架結構、具體的編程語言等。MCF整個結構比較清楚是基於對象開發的一個比較好的可操做的框架系統。
本書中的開發方法論是OO方法論在UML語言表述下的具體操做方法。
在本書中認爲軟件開發方法論的定義是軟件工程實現過程當中的表達方式,好比採用某種開發語言,某種設計模式,創建什麼架構,細節的具體實現方法等等。
因爲各類IDE工具是把語言的描述工具、編譯工具、調試工具,甚至設計模式、架構等實現方法等融合起來的支持性工具,所以不能算做軟件工程理論的內容,只能算是軟件工程自身對自身製造的一種產品,由於即便沒有IDE工具,採用最基礎的編譯環境也同樣能夠完成整個軟件,只是工做量的增長而已,因此,在本劃分形式中就將其定義爲對語言和其餘的支持性工具,而不單獨和軟件工程體系自己發生直接關係。
七、可視化開發方法
其實可視化開發並不能單獨的做爲一種開發方法,更加貼切的說能夠認爲它是一種輔助工具,好比用過SYBASE的S-Design的人都知道,用這個工具能夠進行顯示的圖形化的數據庫模式的創建,並能夠導入到不一樣的數據庫中去。固然用過S-Design的人不必定不少,但用過VB,DELPHI,C++ Builder等開發工具的人必定很多,實際上你就是在使用可視化開發工具。
固然,不能否認的是,你只是在編程這個環節上用了可視化,而不是在系統分析和系統設計這個高層次上用了可視化的方法。實際上,創建系統分析和系統設計的可視化工具是一個很好的賣點,國外有不少工具都致力於這方面產品的設計。好比Business Object就是一個很是好的數據庫可視化分析工具。
可視化開發使咱們把注意力集中在業務邏輯和業務流程上,用戶界面能夠用可視化工具方便的構成。經過操做界面元素,諸如菜單、按鈕、對話框、編輯框、單選框、複選框、列表框和滾動條等,由可視開發工具自動生成應用軟件。
八、面向方面的軟件開發方法
面向方面編程(Aspect-Oriented Process,AOP)是對軟件工程的一種革新性思考。引入AOP的目的是解決諸如安全性、日誌、持久化、調試、跟蹤、分佈式處理、性能監控以及更有效地處理異常等問題的。與常規的開發技術不一樣的是,常規技術會將這些不一樣的關注點實現於多個類中,而面向方面編程將使它們局部化。
面向方面軟件開發(AOSD)使用這一方法,爲功能需求、非功能需求、平臺特性等創造了更好的模塊性,使你開發出更易於理解的系統,也更易於配置和擴展,以知足和解決涉衆的需求。
面向方面軟件開發 能夠認爲是以面向對象開發爲基礎的一種新型的看待業務系統的思考方法。能夠如此看待這樣的一個變化過程:面向對象爲這個世界的描述提供了大量基礎對象和基 礎對象的組合形態(各類組件),這個時候,咱們若是從對象層面要觀察一個龐大的業務系統就會顯得過於繁複,因而,咱們若是考慮對業務系統總體進行切割,每 一個抽象的切面造成一個完整的業務系統的一個層面,因而,相關的分析與研究就基於這樣的面的考慮,而後下面細化爲對象和組件,上面組合造成爲業務系統。
因此,本書認爲面向方面的軟件開發方法只是基於OO方法的一個較高抽象層面的方法,並非一個徹底嶄新的開發方法論。
原做者:青潤風度