摘要:介紹了軟件過(guò)程與軟件建模技術(shù)的發(fā)展,以及軟件過(guò)程、建模語(yǔ)言和統(tǒng)一軟件開(kāi)發(fā)過(guò)程的概念和原理,并重點(diǎn)討論了統(tǒng)一過(guò)程中構(gòu)架、用例驅(qū)動(dòng)、迭代與增量的涵義。掌握這些方法,研究與之對(duì)應(yīng)的軟件環(huán)境與工具,對(duì)于軟件產(chǎn)業(yè)和軟件工程學(xué)科有著重大的意義。
關(guān)鍵詞:軟件過(guò)程;統(tǒng)一建模語(yǔ)言;統(tǒng)一軟件過(guò)程;用例驅(qū)動(dòng);迭代與增量
隨著計(jì)算機(jī)的飛速發(fā)展,軟件的復(fù)雜度不斷提高,源代碼規(guī)模越來(lái)越大,軟件項(xiàng)目失敗的可能性也相應(yīng)增加,這就需要掌握先進(jìn)的方法與技術(shù)來(lái)解決。軟件工程正是指導(dǎo)軟件開(kāi)發(fā)的工程學(xué)科。任何一個(gè)軟件項(xiàng)目都是一個(gè)復(fù)雜的系統(tǒng)工程,是一個(gè)知識(shí)密集型勞動(dòng)。在過(guò)去30多年,為了解決軟件產(chǎn)業(yè)的危機(jī)現(xiàn)象,人們將重點(diǎn)放在研究軟件開(kāi)發(fā)方法、軟件質(zhì)量評(píng)價(jià)、項(xiàng)目管理等軟件工程活動(dòng)的各個(gè)方面。先后提出以結(jié)構(gòu)化方法、面向?qū)ο蠓椒ǖ葹榧夹g(shù)特征的多種開(kāi)發(fā)方法。但在方法的使用上,又有許多變化,以至于軟件開(kāi)發(fā)過(guò)程缺乏統(tǒng)一性,建模描述多樣性,軟件文檔難以規(guī)范化和標(biāo)準(zhǔn)化。這些嚴(yán)重影響了軟件工程活動(dòng)的質(zhì)量和軟件本身的質(zhì)量。
從上世紀(jì)90年代開(kāi)始,人們開(kāi)始認(rèn)識(shí)到統(tǒng)一軟件過(guò)程和統(tǒng)一建模語(yǔ)言的重要性。面向?qū)ο蠹夹g(shù)的三大流派開(kāi)始進(jìn)行建模整合,提出了統(tǒng)一建模語(yǔ)言UML和統(tǒng)一建模過(guò)程RUP。雖然對(duì)此專(zhuān)家還有爭(zhēng)議,但統(tǒng)一軟件過(guò)程和統(tǒng)一建模語(yǔ)言給軟件產(chǎn)業(yè)帶來(lái)的好處,卻日益顯現(xiàn)。
一、軟件過(guò)程
1 軟件過(guò)程的定義
軟件過(guò)程(Software Process)是指一套關(guān)于項(xiàng)目的階段、狀態(tài)、方法、技術(shù)和開(kāi)發(fā)、維護(hù)軟件的人員以及相關(guān)Artifacts(計(jì)劃、文檔、模型、編碼、測(cè)試、手冊(cè)等)組成。簡(jiǎn)而言之,軟件過(guò)程是軟件生存周期內(nèi)為獲得高質(zhì)量軟件產(chǎn)品而必須實(shí)施的一系列相關(guān)過(guò)程的集合。
2 軟件過(guò)程模型
所謂模型就是一種開(kāi)發(fā)策略,使工程的進(jìn)展達(dá)到預(yù)期的目的。對(duì)一個(gè)軟件的開(kāi)發(fā)無(wú)論其大小,我們都需要選擇一個(gè)合適的軟件過(guò)程模型,這種選擇基于項(xiàng)目和應(yīng)用的性質(zhì)、采用的方法、需要的控制,以及要交付的產(chǎn)品的特點(diǎn)。
(1)線性順序過(guò)程模型。也稱(chēng)為傳統(tǒng)生存周期模型或瀑布模型。它提出了軟件開(kāi)發(fā)的系統(tǒng)化的、順序的方法。其流程從系統(tǒng)開(kāi)始,隨后是需求分析、設(shè)計(jì)、編碼、測(cè)試、支持。這種模型是最早也是應(yīng)用最廣泛的軟件過(guò)程模型。但實(shí)際的項(xiàng)目大部分情況難以按照該模型給出的順序進(jìn)行,很容易由微小的變化而造成大的混亂。
(2)原型實(shí)現(xiàn)過(guò)程模型。從需求收集開(kāi)始,開(kāi)發(fā)者和客戶(hù)共同參與定義軟件的總體目標(biāo),標(biāo)識(shí)已知的需求并且規(guī)劃出需要進(jìn)一步定義的區(qū)域。然后是“快速設(shè)計(jì)”,它集中于軟件中那些對(duì)客戶(hù)可見(jiàn)的部分的表示,并由客戶(hù)評(píng)估、進(jìn)一步精化待開(kāi)發(fā)軟件的需求。逐步調(diào)整原型使其滿(mǎn)足客戶(hù)的需求,這個(gè)過(guò)程是迭代的。
(3)快速應(yīng)用(RAD)過(guò)程模型。這是一個(gè)增量型的軟件開(kāi)發(fā)過(guò)程模型,強(qiáng)調(diào)極短的開(kāi)發(fā)周期,它是線性模型的一個(gè)“高速”變種,通過(guò)使用構(gòu)件的建造方法贏得了快速開(kāi)發(fā)。其流程從業(yè)務(wù)建模開(kāi)始,隨后是數(shù)據(jù)建模、過(guò)程建模、應(yīng)用生成、測(cè)試及反復(fù)。RAD過(guò)程強(qiáng)調(diào)的是復(fù)用,復(fù)用已有的或開(kāi)發(fā)可復(fù)用的構(gòu)件。
(4)演化軟件過(guò)程模型。軟件產(chǎn)品是經(jīng)過(guò)多次過(guò)程而演化成品,這是一個(gè)迭代的過(guò)程。通過(guò)不同版本的改進(jìn)、完善而形成。它包括增量過(guò)程模型、螺旋過(guò)程模型、并發(fā)任務(wù)過(guò)程模型等。增量過(guò)程模型融合了線性順序模型的基本成份和原型實(shí)現(xiàn)模型的迭代特征。每一次迭代產(chǎn)生軟件的一個(gè)可發(fā)布的“增量”產(chǎn)品。螺旋過(guò)程模型是一個(gè)演化軟件過(guò)程模型,它將原型實(shí)現(xiàn)的迭代特征和線性順序模型中控制的系統(tǒng)化方面結(jié)合起來(lái)。并發(fā)任務(wù)過(guò)程模型這種模型關(guān)注于多個(gè)任務(wù)的并發(fā)執(zhí)行,表示為一系列的主要技術(shù)活動(dòng)、任務(wù)及它們的相關(guān)狀態(tài)。
(5)基于構(gòu)件的開(kāi)發(fā)過(guò)程模型。面向?qū)ο竽P蛷?qiáng)調(diào)了類(lèi)的創(chuàng)建、類(lèi)的封裝了的數(shù)據(jù)、操縱該數(shù)據(jù)的算法。經(jīng)過(guò)合適的設(shè)計(jì)和實(shí)現(xiàn),面向?qū)ο蟮念?lèi)可以在不同的應(yīng)用及基于計(jì)算機(jī)的系統(tǒng)的體系結(jié)構(gòu)中復(fù)用。基于構(gòu)件的開(kāi)發(fā)模型融合了螺旋模型的許多特征,它本質(zhì)上是演化型的,要求軟件創(chuàng)建的迭代方法。然而基于構(gòu)件的開(kāi)發(fā)模型是利用預(yù)先包裝好的軟件構(gòu)件(有時(shí)成為類(lèi))來(lái)構(gòu)造應(yīng)用。
(6)形式化方法模型。形式化方法模型包含了一組活動(dòng),他們導(dǎo)致了計(jì)算機(jī)軟件的數(shù)學(xué)規(guī)約。形式化方法使得軟件工程師們能夠通過(guò)應(yīng)用一個(gè)嚴(yán)格數(shù)學(xué)符號(hào)體系來(lái)規(guī)約、開(kāi)發(fā)和驗(yàn)證基于計(jì)算機(jī)的系統(tǒng)。
二、軟件建模技術(shù)
模型形成的過(guò)程也就是軟件建模的過(guò)程。眾所周知,面向?qū)ο蠹夹g(shù)是軟件工程領(lǐng)域中的重要技術(shù)。面向?qū)ο蠹夹g(shù)不僅是一種程序設(shè)計(jì)方法,更重要的是對(duì)真實(shí)世界的抽象思維方式。面向?qū)ο蠓治龊驮O(shè)計(jì)應(yīng)該從建模開(kāi)始,建模語(yǔ)言一直是面向?qū)ο蠹夹g(shù)的研究重點(diǎn)。
統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)是著名的面向?qū)ο蠹夹g(shù)專(zhuān)家Grady Booch,Jim Rumbaugh和Ivar Jacobson發(fā)起,在著名的Booch方法、OMT方法和OOSE方法的基礎(chǔ)上,經(jīng)過(guò)整合而成。UML是一種建模語(yǔ)言,而不是一種方法。建模語(yǔ)言提供的是方法中用于表示設(shè)計(jì)的符號(hào)(通常是圖形符號(hào)),建模過(guò)程則描述進(jìn)行設(shè)計(jì)所要遵循的步驟。UML統(tǒng)一了面向?qū)ο蠼5幕靖拍睢⑿g(shù)語(yǔ)及其圖形符號(hào),為人們建立了便于交流的共同語(yǔ)言。
客觀世界是一個(gè)復(fù)雜的系統(tǒng),需要從不同角度考察,才能真正理解這個(gè)系統(tǒng),為此UML定義了5種類(lèi)圖。
1 用例圖
它從用戶(hù)角度描述系統(tǒng)的功能,并指出各功能的操作者。
2 靜態(tài)圖
包括類(lèi)圖、對(duì)象圖和包圖。類(lèi)圖用于定義系統(tǒng)中的類(lèi),包括描述類(lèi)之間的聯(lián)系以及類(lèi)的內(nèi)部結(jié)構(gòu)。它描述的是一種靜態(tài)關(guān)系。對(duì)象圖只是顯示類(lèi)的對(duì)象實(shí)例,—個(gè)對(duì)象圖就是一個(gè)實(shí)例。包圖由包或類(lèi)組成,主要表示包之間、或包與類(lèi)之間的關(guān)系,用于描述系統(tǒng)的分層結(jié)構(gòu)。
3 行為圖
描述系統(tǒng)的動(dòng)態(tài)模型和組成對(duì)象間的交互關(guān)系。一種是狀態(tài)圖,它描述一類(lèi)對(duì)象的所有可能的狀態(tài)以及事件發(fā)生時(shí)狀態(tài)的轉(zhuǎn)移條件。另一種是活動(dòng)圖,它描述滿(mǎn)足用例要求所進(jìn)行的活動(dòng)以及活動(dòng)問(wèn)的約束關(guān)系。
4 交互圖
描述對(duì)象間的交互關(guān)系。一種順序圖,用以顯示對(duì)象之間的動(dòng)態(tài)合作關(guān)系。它強(qiáng)調(diào)對(duì)象之間的消息發(fā)送順序,同時(shí)也顯示對(duì)象之間的交互過(guò)程。另一種是合作圖,它著重描述對(duì)象之間的協(xié)作關(guān)系。順序圖強(qiáng)調(diào)時(shí)間和順序,合作圖強(qiáng)調(diào)通信關(guān)系。
5 實(shí)現(xiàn)圖
包括構(gòu)件圖和配置圖。構(gòu)件圖描述代碼構(gòu)件的物理結(jié)構(gòu)以及各部件之間的依賴(lài)關(guān)系。構(gòu)件圖有助于分析和理解部件之間的相互影響程度。配置圖定義系統(tǒng)中軟硬件的物理體系結(jié)構(gòu),可以顯示實(shí)際計(jì)算機(jī)和設(shè)備以及她們之間的連接關(guān)系。
統(tǒng)一建模語(yǔ)言提供上述5類(lèi)圖,為系統(tǒng)的繁細(xì)、開(kāi)發(fā)提供了多種圖形表示。用例圖、對(duì)象圖、構(gòu)件圖和配置圖構(gòu)成了UML的靜態(tài)建模機(jī)制,狀態(tài)圖、活動(dòng)圖、順序圖和合作圖構(gòu)成了UML的動(dòng)態(tài)建模機(jī)制。因此UML的主要內(nèi)容也可歸納為靜態(tài)建模機(jī)制和動(dòng)態(tài)建模機(jī)制兩大類(lèi)。
UML采用了一整套成熟的建模技術(shù),廣泛適用于各種應(yīng)用領(lǐng)域。它得到了工業(yè)界的廣泛支持,在軟件工程領(lǐng)域,UML已成為軟件行業(yè)廣泛接受的一種標(biāo)準(zhǔn)的建模語(yǔ)言。
三、統(tǒng)一軟件過(guò)程
UML是一種建模語(yǔ)言,是獨(dú)立于過(guò)程的,可用于不同的軟件過(guò)程。面向?qū)ο蠹夹g(shù)專(zhuān)家Grady Booch, Jim Rumbaugh和Ivar Jacobson又提出了以UML為建模語(yǔ)言進(jìn)行軟件開(kāi)發(fā)的統(tǒng)一軟件開(kāi)發(fā)過(guò)程(Rational Unified Process,RUP)。
1 統(tǒng)一過(guò)程概述
統(tǒng)一軟件過(guò)程也是一個(gè)軟件開(kāi)發(fā)過(guò)程,軟件開(kāi)發(fā)過(guò)程是一個(gè)將用戶(hù)需求轉(zhuǎn)化為軟件系統(tǒng)所需要的活動(dòng)的集合,是一個(gè)面向?qū)ο笄一诰W(wǎng)絡(luò)的程序開(kāi)發(fā)方法論。統(tǒng)一過(guò)程是基于構(gòu)件的,既所構(gòu)建的軟件系統(tǒng)是由軟件構(gòu)件通過(guò)明確定義的接口相互連接所建造起來(lái)的。統(tǒng)一過(guò)程使用統(tǒng)一建模語(yǔ)言來(lái)制定軟件系統(tǒng)的所有藍(lán)圖。統(tǒng)一過(guò)程突出的特點(diǎn)就是用況驅(qū)動(dòng)、以構(gòu)架為中心、迭代和增量的。
2 統(tǒng)一過(guò)程的特點(diǎn)
RUP是一個(gè)通用的軟件開(kāi)發(fā)過(guò)程框架,它可通過(guò)裁剪和擴(kuò)充應(yīng)用于各種不同類(lèi)型的軟件系統(tǒng)、各種不同的應(yīng)用領(lǐng)域、各種不同的組織和各種不同的項(xiàng)目規(guī)模。RUP具有以下三個(gè)重要特點(diǎn):用例驅(qū)動(dòng).以構(gòu)架為中心、迭代和增量開(kāi)發(fā)。
(1)用例驅(qū)動(dòng)的過(guò)程。用例驅(qū)動(dòng)過(guò)程就是在需求工作流期間,開(kāi)發(fā)人員可以將需求表示為用例,項(xiàng)目經(jīng)理便可以根據(jù)用例規(guī)劃項(xiàng)目。在分析設(shè)計(jì)期間,開(kāi)發(fā)人員按照類(lèi)或子系統(tǒng)來(lái)創(chuàng)建用例實(shí)現(xiàn)。然后開(kāi)發(fā)人員實(shí)現(xiàn)構(gòu)件,并將構(gòu)件集成到每次實(shí)現(xiàn)用況集合的增量中。在測(cè)試工作流期間,根據(jù)用例的功能描述編寫(xiě)測(cè)試用例,驗(yàn)證系統(tǒng)是否實(shí)現(xiàn)了用例的功能。因此,用例將各個(gè)工作流整合成一個(gè)流——確定用例、分析用例、設(shè)計(jì)用例、實(shí)現(xiàn)用例、根據(jù)用例編寫(xiě)測(cè)試用例來(lái)驗(yàn)證系統(tǒng)設(shè)計(jì)。
(2)以構(gòu)架為中心的過(guò)程。軟件系統(tǒng)的構(gòu)架是指系統(tǒng)重要組件的組織或結(jié)構(gòu),這些重要組件通過(guò)接口與那些由不斷減小的組件與接口所構(gòu)成的組件進(jìn)行交互。構(gòu)架具有以下作用:理解系統(tǒng),RUP使用UML可視化建模系統(tǒng)的構(gòu)架,并以構(gòu)架為中心進(jìn)行開(kāi)發(fā),這使得開(kāi)發(fā)人員、管理人員及其他相關(guān)人員能夠詳細(xì)理解所需要做的工作,以利于他們參與系統(tǒng)的開(kāi)發(fā);組織開(kāi)發(fā),構(gòu)架設(shè)計(jì)師通過(guò)將系統(tǒng)劃分為帶有明確定義接口的子系統(tǒng),并讓開(kāi)發(fā)小組負(fù)責(zé)每個(gè)子系統(tǒng),可以減少開(kāi)發(fā)組之間交流的工作量,而且接口雙方的軟件可獨(dú)立地進(jìn)化;鼓勵(lì)重用,好的構(gòu)架為開(kāi)發(fā)人員提供了可以在其上開(kāi)展工作的穩(wěn)定的骨架,它有助于開(kāi)發(fā)人員知道在哪里能有效地找到可重用的元素以及發(fā)現(xiàn)合適的可重用的組件。進(jìn)化系統(tǒng),一個(gè)具有穩(wěn)定的構(gòu)架的系統(tǒng)在分析和設(shè)計(jì)時(shí)就考慮到系統(tǒng)進(jìn)化的需求,從而具有一定的容變能力,系統(tǒng)可以適度地進(jìn)化。
(3)迭代和增量開(kāi)發(fā)。迭代是指帶有已建立基準(zhǔn)的計(jì)劃和評(píng)估準(zhǔn)則的獨(dú)特活動(dòng)序列,迭代生成系統(tǒng)的內(nèi)部或外部發(fā)布版。增量是指在后續(xù)迭代結(jié)束后,兩個(gè)發(fā)布版本之間存在的差異(差值)。在RUP中,軟件的生命周期是由一系列迭代組成的,這些迭代都是由軟件項(xiàng)目分解成的許多袖珍項(xiàng)目。
每個(gè)迭代都產(chǎn)生以?xún)?nèi)部版本形式交付的實(shí)際結(jié)果,其中每個(gè)內(nèi)部版本會(huì)增加一個(gè)增量并表明所關(guān)注的風(fēng)險(xiǎn)得以降低。這些版本可以展示給客戶(hù),從而獲得有價(jià)值的反饋以確認(rèn)工作成果。早期階段的迭代主要是關(guān)注確定項(xiàng)目的范圍,消除關(guān)鍵風(fēng)險(xiǎn)和建立系統(tǒng)構(gòu)架基準(zhǔn)。后期迭代則不斷增加增量結(jié)果,直至得到一個(gè)可對(duì)外發(fā)布的產(chǎn)品。迭代有助于管理層規(guī)劃、組織、監(jiān)控和控制項(xiàng)目。迭代和增量開(kāi)發(fā)具有以下的一些優(yōu)點(diǎn):允許變更需求;允許持續(xù)的集成;及早降低風(fēng)險(xiǎn);有助于組織學(xué)習(xí)和提高;提高復(fù)用性;生成性能更強(qiáng)壯的產(chǎn)品。
四、統(tǒng)一建模的支持工具
為了有效地利用UML,我們需要首先獲得一個(gè)UML工具軟件。
當(dāng)前,業(yè)界使用最廣泛的UM建模工具為Rational Rose。Rational Rose中可實(shí)現(xiàn)正向(為模型產(chǎn)生相應(yīng)的代碼)、逆向(從用戶(hù)原來(lái)的軟件系統(tǒng)導(dǎo)出該系統(tǒng)的模型)和雙向工程(實(shí)現(xiàn)模型和代碼之間的循環(huán)工程),從而保證模型與代碼的高度一致。Rational Rose支持C++、Visual C++、Java、Smalltalk、Ada、Visual Basic、 PowerBuilder等語(yǔ)言和開(kāi)發(fā)工具,并能為CORBA應(yīng)用生成接口定義語(yǔ)言(IDL),為數(shù)據(jù)庫(kù)應(yīng)用生成數(shù)據(jù)庫(kù)描述語(yǔ)言(DDL)等。另外,Rational Rose為團(tuán)隊(duì)開(kāi)發(fā)和規(guī)范的開(kāi)發(fā)過(guò)程管理提供了良好的支持。
對(duì)于小規(guī)模應(yīng)用,我們可以使用微軟公司Office套件中的Visio,其中提供了對(duì)UML各種圖的繪制支持。
目前有專(zhuān)家提出,建立軟件建模與軟件過(guò)程的自動(dòng)化的目標(biāo),還有待于我們軟件工作學(xué)者們進(jìn)一步研究和探討。建模支持工具的發(fā)展還應(yīng)進(jìn)一步加強(qiáng)。