軟體工程模式的研究和開發是軟體工程的一項重要課題。2023年,美國rational software公司的jacobson、booch和rumbaugh三人提出了統一的軟體開發過程(the united software development process),這是三人繼uml之後推出的又一傑作。
uml是一種基於oo方法的統一的視覺化圖形建模語言,而不是統一的建模(軟體開發)過程。儘管語言和過程不可分割,但語言與過程所關心的重點畢竟不盡相同。因此,在開發uml之後,再開發乙個統一的建模(軟體開發)過程是十分適時的。這樣統一的建模語言與統一的軟體開發過程和工具就可以組成一種完整的基於oo技術的軟體工程模式。
一、軟體工程模式的演化
1.瀑布模型(wate***ll model)
這是從硬體工程學來的一種分階段的、系統的和順序的軟體開發方法,它由系統需求分析開始,接著是軟體的設計、編碼、測試和維護。
這種傳統的生存期模型是當時使用最廣泛的軟體工程模式。但是這種模式的實質是面向階段的和線性的,除了確認和驗證,其他所有階段都是線性執行的。也就是說,每個階段都只有當其前一階段工作完成以後才能開始,而且,它的好壞一直要等到測試時才能知道。這種模式在硬體生產中使用效果很好,但用於軟體開發時爭議卻越來越大。因為使用者很可能提出非常模糊的需求,而這種模糊的需求又可能被開發者隨意解釋;經驗表明,一旦使用者使用乙個計算機系統,他們對目標系統的理解可能又會發生許多變化,因此開發者隨意附和使用者需求的方式往往是一種冒險;更為嚴重的事實是乙個規模龐大的軟體專案往往要用幾年時間才能完成,在這期間使用者的需求和環境都有可能發生很大的變化,從而使系統最終不能使用。
某些領域,如科學數值計算、嵌入式軟體和實時控制系統,最合適採用瀑布模型,也是控制這類專案複雜性的最好途徑。但是,對更多的其他應用領域,特別是商業資料處理,這一方法存在著許多嚴重的不容忽視的缺陷,是不適用的。
2.原型開發模型
原型開發也是從了解使用者需求開始。開發人員和使用者一起來定義所有目標,確定哪些需求已經清楚,哪些還需要進一步定義;接著是快速設計,主要集中在使用者能夠看得見的一些軟體表示方面(如輸入方法、輸出形式等),使用者有了原型就可對其進行評價,然後修改需求,重複上述各步驟,直到該原型能夠滿足使用者需求為止。
從理論上說,原型開發能夠緩解使用者需求的不確定性和變化所帶來的風險,但實際上也存在許多缺陷。因為開發單位給出的原型一定要是可執行的,這就有週期和經費的問題。為了又快又省地開發出原型,因此又把原型分為三類:拋棄式,目的達到即被拋棄,原型不作為最終產品;演化式,系統的形成和發展是逐步完成的,它是高度動態迭代和高度動態的,每次迭代都要對系統重新進行規格說明、重新設計、重新實現和重新評價,所以是對付變化最為有效的方法,這也是與瀑布開發的主要不同點;增量式,系統是一次一段地增量構造,與演化式原型的最大區別在於增量式開發是在軟體總體設計基礎上進行的。很顯然,其對付變化比演化式差。
3.螺旋開發模型
螺旋開發模型綜合了傳統的生存期模型和原型開發模型的優點,同時增加了乙個新的元素(風險分析),用來彌補兩者的不足。螺旋開發定義了四項主要活動:計畫、風險分析、工程和使用者評價。螺旋開發就是圍繞這四步一圈、二圈、三圈等重複進行。根據每一圈風險分析的結果,做出繼續還是停止的決擇。如果風險太大,專案只能終止。但在大多數情況下,沿著螺旋的路徑就可以建立起完整的系統,而最終成為執行系統。這種開發模型是當前大型系統或軟體開發最現實的和經常使用的方法。
4.四代技術
四代技術(4gl)擁有一組工具(如資料查詢、報表生成、資料處理、螢幕定義、**生成、高層圖形功能及電子**等),每個工具都能使開發人員在高層次上定義軟體的某些特性,並把開發人員定義的這些軟體自動地生成為源**。這種方法需要四代語言(4gl)的支援。4gl不同於三代語言,其主要特徵是使用者介面極端友好,即使沒有受過訓練的非專業程式設計師,也能用它編寫程式;它是一種宣告式、互動式和非過程性程式語言。4gl還具有高效的程式**、智慧型預設假設、完備的資料庫和應用程式生成器。目前市場上流行的4gl(如foxpro等)都不同程度地具有上述特徵。但4gl目前主要限於事務資訊系統的中、小型應用程式的開發。
5.過程開發模型
過程開發模型又叫混合模型(hybrid model),或元模型(meta-model)。
為了克服瀑布模型的缺陷,人們已經提出了原型等多種開發模式。這些可選的開發模式看起來十分嚴謹,但整個專案的開發仍被限制在按定義所確定的階段性的系統方向上。實際上任何乙個專案的開發都取決於許多因素,如軟體的應用領域、規模大小、重用構件的大小和多少、軟體實現的硬體及軟體環境、開始和交付規定、週期和成本限制,以及開發人員的素質等。其中任何乙個因素的改變都會影響開發的程序。使用者的需求從第一天開始就在變化,一直到該軟體被廢棄為止。
最早提出這個問題的是美國國防部軟體工程研究所(dodsei)和卡內其·梅隆大學的一些研究人員。解決這個問題的方法之一就是把幾種不同模型組合成一種混合模型,它允許乙個專案能沿著最有效的路徑發展,這就是過程開發模型(或混合模型)提出的背景。實際上,一些軟體開發單位都是使用幾種不同的開發方法組成他們自己的混合模型。
過程開發模型的研究成果最初只是用來代表美國dod調查各軟體開發機構開發過程的成熟程度,最有代表性的就是2023年dodsei公布的cmm(the capability maturity model),現在cmm已作為評估開發機構能力成熟程度的標準。
6.物件導向(oo)生存期模型
隨著oo技術的逐漸成熟,人們又提出了oo軟體工程生存期開發模型。
oo開發與傳統的結構化生存期比較,具有更多的增量和迭代性質,生存期的各個階段可以相互重疊和多次反覆,而且在專案的整個生存期中還可以嵌入子生存期。所以有人稱oo生存期模型為噴泉模型(fountain model),就像水噴上去又可以落下來,可以落在中間,也可以落在最底部。
實際應用中大多把oo技術與傳統的結構化技術攙和或搭配起來,創造出多種混合開發生存期,這是考慮到當前在傳統的結構化技術上大量投資、經驗很多、人員比較熟悉而oo技術還不盡完善的現實。
7.基於構件的軟體開發
基於構件的軟體開發(cbd)方法是在軟體重用技術和oo技術基礎上發展起來的。前述六種開發模式都是面向過程的,而cbd則是第乙個面向產品結構的。
二、 統一的軟體開發過程
統一過程是基於構件的,它使用新的視覺化建模標準和統一的建模語言(uml),並依靠3個關鍵思想——使用用例驅動(use-case driver),以體系結構為中心(architecture-centric)和迭代與增量(iterative and incremental)開發。為了按這些思想工作,就要求構建多種過程,人們要考慮週期(cycles)、階段(phases)、工作流程(work flows)、風險緩解(risk mitigation)、質量控制(quality control)、專案管理(project management)以及配置管理(configuration control)等各個專案。這樣統一過程構造的框架才能把上述所有的不同方面整合起來。
這種框架的所有工作如同一張保護傘,在它的下面,工具商和開發者能夠創造出各種不同的工具,以支援過程的自動化,支援各個工作流,建立所有不同的模型,並圍繞生存期和所有模型一體化的工作。
1.使用用例驅動
使用用例驅動是ivar jacobson在他2023年出版的《object-oriented software engineering》一書中首先提出來的,這其中主要有三個理由:
能夠提供乙個系統和直覺捕捉功能需求的方法。也就是說可以捕捉有價值的使用者需求,解決「做什麼」,並成為弄清需求使用者目標和系統互動功能的起點。引入使用用例的概念是oo技術進入第二代的標誌。
能驅動整個開發過程。因為許多活動(如分析、設計和測試)的完成都是從使用用例開始,也就是說使用用例可以匯出過程,乙個開發專案是從使用用例中一系列的工作流著手的。使用用例可以幫助開發者找到類和開發出使用者介面。
可以幫助開發者完成迭代開發。乙個專案的每次迭代都是通過使用用例的工作流作為驅動的,在一次增量中完成從需求、設計到測試的一系列工作;另一方面,在每次迭代中一定數量的使用用例是不可缺少的。
另外,使用用例還可以幫助設計體系結構、書寫使用者手冊等。
2.以體系結構為中心
這是在統一的軟體開發過程的生存期模型中第一次提出來的,是過去所有生存期模型所沒有的。那麼,為什麼要以體系結構為中心呢?
乙個軟體系統的開發只憑想像是困難的,因為它並不存在於人的三維世界中,是沒有前例的或在一些方面是異乎尋常的。經常使用沒有被驗證過的方法或一種新提出的混合方法,有時雖可以擴充套件現有技術,但也是非常有限的,此外還必須建立乙個能適應可進一步修改的龐大的類。由此可以看出,結構的設計問題已遠遠超出了計算的演算法和資料結構,而定義和設計整個系統的體系結構將成為乙個新的課題。
此外,通常現有的一些系統一般都完成了「建議系統」的某些功能,顯示出系統能夠做哪些工作,但只有很少的文件,甚至沒有文件,所以開發者可以重用的僅僅是傳統的**,所有這些都將增加開發的複雜性。因此,開發乙個軟體系統,特別是乙個龐大的和複雜的軟體系統,需要乙個體繫結構,這樣開發者才能朝著共同的目標去工作。這樣做的目的是:懂得系統、組織開發、促進重用、發展系統。
3.迭代和增量開發
早期致命的和重大的風險能得到控制。
得到乙個健壯(robust)的體系結構,以指導軟體開發。
提供乙個框架,能較好地控制不可避免的需求和其他修改。
構建乙個系統,多次增量接近比一次完成所帶來的各種開銷少,而且***。
提供乙個開發過程,讓技術人員工作更為有效。
讓開發人員能獲得早期學習的機會。
統一的軟體開發過程是軟體生存期模型發展迄今為止的里程碑,它集中了所有生存期模型的優點。當然,要把這種方法實施還需要開發大量的相應工具和環境,如果沒有工具和環境的支援,只能說是紙上談兵。
軟體開發過程
軟體工程是由硬體工程派生出來的,它包含四個關鍵元素:方法,提供了構造軟體的技術;語言,用以支援軟體的分析、設計和實現;工具,為方法和語言提供自動化或半自動化的支援;軟體工程的過程,是粘結劑(glue),把方法、語言和工具結合在一起,它能使軟體開發理性化和適時化。過程定義了方法使用的順序、可交付產品(文件、報告和格式等)的要求、確保質量和修改的控制,並使軟體管理人員能對它們的進展進行評價。
軟體工程由一系列的方法、語言、工具和過程的步驟所組成,這些步驟通常叫做軟體工程模式(paradigms),有的叫做軟體生存期模型(life cycle model),也有的叫做軟體開發過程(development process)。
UML RUP統一軟體開發過程
軟體危機的出現,主要在軟體生命中週期 成本 軟體質量等三個方面,主要表現在定位需求 模組難整合 最後才發現問題 軟體質量差 負載時效能差 團隊問題 不斷修改 發布問題等。在以上各個方面的產生下,rup統一軟體開發過程應運而生。rup rational unified process,統一軟體開發過程...
軟體開發過程
1.程式設計師寫出自認為沒有bug的 2.軟體測試,發現了20個bug。3.程式設計師修改了10個bug,並告訴測試組另外10個不是bug。4.測試組發現其中5個改動根本無法工作,同時又發現了15個新bug。5.重複3次步驟3和步驟4。6.鑑於市場方面的壓力,為了配合當初制定的過分樂觀的發布時間表,...
軟體開發過程
1.程式設計師寫出自認為沒有bug的 2.軟體測試,發現了20個bug。3.程式設計師修改了10個bug,並告訴測試組另外10個不是bug。4.測試組發現其中5個改動根本無法工作,同時又發現了15個新bug。5.重複3次步驟3和步驟4。6.鑑於市場方面的壓力,為了配合當初制定的過分樂觀的發布時間表,...