[全程建模]軟體開發方法論綜述

qingrun發表於2010-03-02

本文選擇《軟體工程指全程建模實現》第二版書稿內容,因為這段文字中部分內容來源於網路並經過本人整理,部分內容為本人獨立撰寫完成,因為書稿目前還沒有完成,為了表示對朋友們的歉意,現釋出部分內容給大家分享。

注:以下內容沒有釋出關聯圖片,請海涵。


軟體開發方法論

60年代中期開始爆發了眾所周知的軟體危機。為了克服這一危機,在19681969年連續召開的兩次著名的NATO會議上提出了軟體工程這一術語,並在以後不斷髮展、完善。與此同時,國外大的軟體公司和機構的軟體研究人員也在不斷探索新的軟體開發方法。迄今為止已經提出了很多實際的開發方法,諸如:Parnas方法、結構化法、生命週期法、原型法、物件導向法等等。下面介紹幾種流行的開發方法:

1Parnas方法

最早的軟體開發方法是由D.Parnas1972年提出的。由於當時軟體在可維護性和可靠性方面存在著嚴重問題,因此Parnas提出的方法是針對這兩個問題的。首先,Parnas提 出了資訊隱蔽原則:在概要設計時列出將來可能發生變化的因素,並在模組劃分時將這些因素放到個別模組的內部。這樣,在將來由於這些因素變化而需修改軟體 時,只需修改這些個別的模組,其它模組不受影響。資訊隱蔽技術不僅提高了軟體的可維護性,而且也避免了錯誤的蔓延,改善了軟體的可靠性。現在資訊隱蔽原則 已成為軟體工程學中的一條重要原則。

Parnas提出的第二條原則是在軟體設計時應對可能發生的種種意外故障採取措施。軟體是很脆弱的,很可能因為一個微小的錯誤而引發嚴重的事故,所以必須加強防範。如在分配使用裝置前,應該取裝置狀態字,檢查裝置是否正常。此外,模組之間也要加強檢查,防止錯誤蔓延。

Parnas對軟體開發提出了深刻的見解。遺憾的是,他沒有給出明確的工作流程。所以這一方法不能獨立使用,只能作為其它方法的補充。

 

2、結構化方法[1]

1978年,E. YourdonL. L. Constantine提出了結構化方法,即SASD方法,也可稱為面向功能的軟體開發方法或面向資料流的軟體開發方法。1979Tom DeMarco對此方法作了進一步的完善。

Yourdon方法是80年代使用最廣泛的軟體開發方法。它首先用結構化分析(SA)對軟體進行需求分析,然後用結構化設計(SD)方法進行總體設計,最後是結構化程式設計(SP)。這一方法不僅開發步驟明確,SASDSP相輔相成,一氣呵成,而且給出了兩類典型的軟體結構(變換型和事務型),便於參照,使軟體開發的成功率大大提高,從而深受軟體開發人員的青睞。

 

3、面向資料結構的軟體開發方法

Jackson方法是最典型的面向資料結構的軟體開發方法,1975年,M. A. Jackson提 出了一類至今仍廣泛使用的軟體開發方法。這一方法從目標系統的輸入、輸出資料結構入手,匯出程式框架結構,再補充其它細節,就可得到完整的程式結構圖。這 一方法對輸入、輸出資料結構明確的中小型系統特別有效,如商業應用中的檔案表格處理。該方法也可與其它方法結合,用於模組的詳細設計。

Jackson方 法把問題分解為可由三種基本結構形式表示的各部分的層次結構。三種基本的結構形式就是順序、選擇和重複。三種資料結構可以進行組合,形成複雜的結構體系。 這一方法從目標系統的輸入、輸出資料結構入手,匯出程式框架結構,再補充其它細節,就可得到完整的程式結構圖。這一方法對輸入、輸出資料結構明確的中小型 系統特別有效,如商業應用中的檔案表格處理。該方法也可與其它方法結合,用於模組的詳細設計。

1974年,J. D. Warnier提出的軟體開發方法與Jackson方法類似。

差別有三點:一是它們使用的圖形工具不同,分別使用Warnier圖和Jackson圖;另一個差別是使用的偽碼不同;最主要的差別是在構造程式框架時,Warnier方法僅考慮輸入資料結構,而Jackson方法不僅考慮輸入資料結構,而且還考慮輸出資料結構。

 

4、面向問題的分析法

PAMProblem Analysis Method)是80年代末由日立公司提出的一種軟體開發方法。它的基本思想是考慮到輸入、輸出資料結構,指導系統的分解,在系統分析指導下逐步綜合。

這一方法的具體步驟是:從輸入、輸出資料結構匯出基本處理框;分析這些處理框之間的先後關係;按先後關係逐步綜合處理框,直到畫出整個系統的PAD圖。

這一方法本質上是綜合的自底向上的方法,但在逐步綜合之前已進行了有目的的分解,這個目的就是充分考慮系統的輸入、輸出資料結構。PAM方法的另一個優點是使用PAD圖。這是一種二維樹形結構圖,是到目前為止最好的詳細設計表示方法之一。當然由於在輸入、輸出資料結構與整個系統之間同樣存在著鴻溝,這一方法仍只適用於中小型問題。

 

5、原型化方法

原型法(Prototyping)是20世紀80年代隨著計算機軟體技術的發展,特別是在關聯式資料庫系統(Relational Data Base SystemRDBS)、第四代程式生成語言(4th Generation Language4GL)和各種系統開發生成環境產生的基礎上,提出的一種從設計思想、工具、手段都全新的系統開發方法。它揚棄了那種一步步周密細緻地調查分析,然後逐步整理出文字檔案,最後才能讓使用者看到結果的繁瑣作法。

產生原型化方法的原因很多,主要隨著我們系統開發經驗的增多,我們也發現並非所有的需求都能夠預先定義而且反覆修改是不可避免的。當然能夠採用原型化方法是因為開發工具的快速發展,比如用VBDELPHI等工具我們可以迅速的開發出一個可以讓使用者看得見、摸得著的系統框架,這樣,對於計算機不是很熟悉的使用者就可以根據這個樣板提出自己的需求。

開發原型化系統一般由以下幾個階段:

1)確定使用者需求

2)開發原始模型

3)徵求使用者對初始原型的改進意見

4)修改原型。

原型化開發比較適合於使用者需求不清、業務理論不確定、需求經常變化的情況。當系統規模不是很大也不太複雜時採用該方法是比較好的。

原型法隨著時代的變遷不斷被豐富,目前常用的原型法又分為:快速原型法、實用性原型法、拋棄性原型、演進原型法、實驗原型法等。

快速原型法就是最初的原型法,通過原型引導使用者需求的方法。

實用性原型法是每次重新構建原型後將使用者認可的部分記錄彙總後形成終端使用者系統的方法。

拋棄性原型法是每次構建原型後著重記錄使用者不認可的資訊,經過多次反覆後將使用者不認可的部分全部排除後形成終端使用者系統的方法。

演進原型法又稱增長原型法,通常是先開發執行一個子系統或分子系統,再擴充其功能或者開發另一個相關的子系統或分子系統,並歸併整合,這樣自底向上地逐步得到一個較完整的系統。

實驗原型法是(Expriment PrototypingEP),它是通過建立真實系統的模型,由區域性模型不斷實驗改進,最後得到整個系統的模型。

實用性原型法和拋棄性原型法屬於快速需求獲取的原型法,其產生的結果是使用者的需求資訊和不需要的資訊,卻不是直接形成可交付系統本身。而演進原型法和實驗原型法產生的結果是最終可交付系統的一部分,需要使用者方有人能夠全程跟進或者參與評審提出意見。

 

6、物件導向的軟體開發方法

當前計算機業界最流行的幾個單詞就是分散式、並行和麵向物件這幾個術語。由此可以看到物件導向這個概念在當前計算機業界的地位。比如當前流行的兩大物件導向技術DCOMCORBA就是例子。當然我們實際用到的還是物件導向的程式語言,比如C++。不可否認,物件導向技術是軟體技術的一次革命,在軟體開發史上具有里程碑的意義。

隨著OOP(物件導向程式設計)向OOD(物件導向設計)和OOA(物件導向分析)的發展,最終形成物件導向的軟體開發方法OMTObject Modeling Technique)。這是一種自底向上和自頂向下相結合的方法,而且它以物件建模為基礎,從而不僅考慮了輸入、輸出資料結構,實際上也包含了所有物件的資料結構。所以OMT徹底實現了PAM沒有完全實現的目標。不僅如此,OO技術在需求分析、可維護性和可靠性這三個軟體開發的關鍵環節和質量指標上有了實質性的突破,基本地解決了在這些方面存在的嚴重問題。

綜上所述,物件導向系統採用了自底向上的歸納、自頂向下的分解的方法,它通過對物件模型的建立,能夠真正建立基於使用者的需求,而且系統的可維護性大大改善。當前業界關於物件導向建模的標準是UMLUnified Modeling Language)。

這裡我們需要談一下微軟的MSFMicrosoft Solutions Framework) 的框架,它簡單的把系統設計分成三個階段:概念設計、邏輯設計和物理設計。概念設計階段就是從使用者的角度出發可以得到多少個物件,並且以物件為主體,畫出 業務框架。邏輯設計階段就是對概念設計階段的物件進行再分析、細分、整合、刪除。並建立各個物件的方法屬性以及物件之間的關係。而物理設計實際上就是要確 定我們實際需要的元件、服務和採用的框架結構、具體的程式語言等。MCF整個結構比較清楚是基於物件開發的一個比較好的可操作的框架系統。

本書中的開發方法論是OO方法論在UML語言表述下的具體操作方法。

在本書中認為軟體開發方法論的定義是軟體工程實現過程中的表達方式,比如採用某種開發語言,某種設計模式,建立什麼架構,細節的具體實現方法等等。

由於各種IDE工具是把語言的描述工具、編譯工具、除錯工具,甚至設計模式、架構等實現方法等融合起來的支援性工具,因此不能算作軟體工程理論的內容,只能算是軟體工程自身對自身製造的一種產品,因為即使沒有IDE工具,採用最基礎的編譯環境也一樣可以完成整個軟體,只是工作量的增加而已,所以,在本劃分形式中就將其定義為對語言和其他的支援性工具,而不單獨和軟體工程體系本身發生直接關係。

 

7、視覺化開發方法

其實視覺化開發並不能單獨的作為一種開發方法,更加貼切的說可以認為它是一種輔助工具,比如用過SYBASES-Design的人都知道,用這個工具可以進行顯示的圖形化的資料庫模式的建立,並可以匯入到不同的資料庫中去。當然用過S-Design的人不一定很多,但用過VBDELPHIC++ Builder等開發工具的人一定不少,實際上你就是在使用視覺化開發工具。

當然,不可否認的是,你只是在程式設計這個環節上用了視覺化,而不是在系統分析和系統設計這個高層次上用了視覺化的方法。實際上,建立系統分析和系統設計的視覺化工具是一個很好的賣點,國外有很多工具都致力於這方面產品的設計。比如Business Object就是一個非常好的資料庫視覺化分析工具。

視覺化開發使我們把注意力集中在業務邏輯和業務流程上,使用者介面可以用視覺化工具方便的構成。通過操作介面元素,諸如選單、按鈕、對話方塊、編輯框、單選框、核取方塊、列表框和滾動條等,由可視開發工具自動生成應用軟體。

 

8、面向方面的軟體開發方法

面向方面程式設計(Aspect-Oriented ProcessAOP)是對軟體工程的一種革新性思考。引入AOP的目的是解決諸如安全性、日誌、持久化、除錯、跟蹤、分散式處理、效能監控以及更有效地處理異常等問題的。與常規的開發技術不同的是,常規技術會將這些不同的關注點實現於多個類中,而面向方面程式設計將使它們區域性化。

面向方面軟體開發(AOSD)使用這一方法,為功能需求、非功能需求、平臺特性等創造了更好的模組性,使你開發出更易於理解的系統,也更易於配置和擴充套件,以滿足和解決涉眾的需求。

面向方面軟體開發 可以認為是以物件導向開發為基礎的一種新型的看待業務系統的思考方法。可以如此看待這樣的一個變化過程:物件導向為這個世界的描述提供了大量基礎物件和基 礎物件的組合形態(各種元件),這個時候,我們如果從物件層面要觀察一個龐大的業務系統就會顯得過於繁複,於是,我們如果考慮對業務系統整體進行切割,每 一個抽象的切面形成一個完整的業務系統的一個層面,於是,相關的分析與研究就基於這樣的面的考慮,然後下面細化為物件和元件,上面組合形成為業務系統。

所以,本書認為面向方面的軟體開發方法只是基於OO方法的一個較高抽象層面的方法,並不是一個完全嶄新的開發方法論。



[1] 《軟體開發方法評述》和胡朝暉博士早年撰寫的《關於軟體工程理論的認識與運用誤區》一文。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/257598/viewspace-628330/,如需轉載,請註明出處,否則將追究法律責任。

相關文章