摘要:簡(jiǎn)要介紹了Rational統(tǒng)一過(guò)程(RUP)、極限編程(XP)和模式,并就模式在RUP和XP中的應(yīng)用進(jìn)行了分析和比較
關(guān)鍵詞:軟件過(guò)程:模式:RUP XP
0 引言
軟件過(guò)程是軟件工程的基礎(chǔ)。軟件過(guò)程是由一系列的項(xiàng)目的階段、方法、技術(shù)和實(shí)踐組成,人們利用它們來(lái)開(kāi)發(fā)、維護(hù)軟件和相關(guān)的產(chǎn)物(artifacts)。一個(gè)有效的軟件過(guò)程能夠增強(qiáng)一個(gè)組織的軟件生產(chǎn)力。在當(dāng)今眾多的軟件過(guò)程中,RUP和XP最為流行,且使用越來(lái)越廣泛。在面向?qū)ο笙到y(tǒng)的設(shè)計(jì)中,經(jīng)常會(huì)發(fā)現(xiàn)類和通信對(duì)象重復(fù)出現(xiàn)的模式。這些模式解決特定的設(shè)計(jì)問(wèn)題,并使得面向?qū)ο笤O(shè)計(jì)更靈活、優(yōu)美和最終可復(fù)用,如果在面向?qū)ο笙到y(tǒng)的設(shè)計(jì)過(guò)程中,將過(guò)程和模式的優(yōu)點(diǎn)結(jié)合,會(huì)使兩者相得益彰。本文就當(dāng)今最流行的兩個(gè)軟件過(guò)程(RUP和XP)中模式的應(yīng)用進(jìn)行分析與比較。

1 相關(guān)介紹
1.1 Rational統(tǒng)一過(guò)程
RUP(Rational Unified Process)是一個(gè)面向?qū)ο筌浖こ痰耐ㄓ脴I(yè)務(wù)流程。它描述了一系列相關(guān)的軟件工程流程,使之具有相同的結(jié)構(gòu),即相同的流程構(gòu)架。RUP為在開(kāi)發(fā)組織中分配任務(wù)和職責(zé)提供一種規(guī)范方法。任何一個(gè)RUP的開(kāi)發(fā)周期都是可以迭代的。
RUP的三大特點(diǎn)是:用例驅(qū)動(dòng)、以構(gòu)架為中心、迭代和增量開(kāi)發(fā)。RUP的生命周期,由四個(gè)順序的階段和九個(gè)核心的工作流組成。四個(gè)階段分別是:初始階段(Inception)、細(xì)化階段(Elaboration)、構(gòu)造階段(Construction)和交付階段(Transition)。九個(gè)核心工作流又分為六個(gè)核心過(guò)程工作流:業(yè)務(wù)建模、需求、分析和設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、部署和三個(gè)核心支持工作流:配置和變更管理、項(xiàng)目管理、環(huán)境。圖1勾畫(huà)了RUP的完整的生命周期。
1.2極限編程
極限編程XP(eXtreme Programming)是敏捷方法中頗具代表的一種、1996年,Kent將XP新概念用于項(xiàng)目ChryslerComprehensive Compensation system的開(kāi)發(fā)中,取得了顯著的效果,XP提供了一個(gè)全局的、價(jià)值驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程視圖,體現(xiàn)了四個(gè)價(jià)值目標(biāo):溝通、簡(jiǎn)化、反饋和勇氣。XP的生命周期包括四個(gè)基本活動(dòng):編碼、測(cè)試、聆聽(tīng)和設(shè)計(jì)。XP非常注重測(cè)試,要求先寫(xiě)測(cè)試后編碼,因此,它的基本活動(dòng)的次序是:聆聽(tīng)、測(cè)試、編碼、設(shè)計(jì)。先聽(tīng)取需要做什么;然后編寫(xiě)測(cè)試,如果通過(guò)了,則證明交付了需要做的東西;下一步,編寫(xiě)那些通過(guò)測(cè)試的任務(wù)代碼;最后,調(diào)整代碼的設(shè)計(jì)使其更簡(jiǎn)單、更有效,同時(shí)仍能夠通過(guò)測(cè)試。XP有十二條慣例:規(guī)劃策略、小型發(fā)行版、系統(tǒng)隱喻、測(cè)試、正確的設(shè)計(jì)、重構(gòu)、成對(duì)編程、集體代碼所有權(quán)、持續(xù)集成、每周四十小時(shí)工作制、現(xiàn)場(chǎng)客戶、編碼標(biāo)準(zhǔn)。XP的革新在于把所有的慣例放在一起,以便它們互相支持,讓一些慣例的優(yōu)勢(shì)彌補(bǔ)其它慣例的缺點(diǎn)。XP已經(jīng)經(jīng)歷了很多實(shí)踐考驗(yàn),而且已經(jīng)被成功應(yīng)用在許多大型的公司,如:Bayerische Landesbank,Credit Suiss Life。XP適用于需求不確定、變化快,項(xiàng)目歷時(shí)不超過(guò)半年,而人數(shù)不超過(guò)十個(gè)、在同一地點(diǎn)工作的中小型團(tuán)隊(duì),也被用于構(gòu)造中小型復(fù)雜的系統(tǒng)。方案。一個(gè)模式有四個(gè)必要部分:模式適用的上下文陳述;模式提出的問(wèn)題;形成解決方案過(guò)程中的約束;對(duì)這些約束的解決方案。
模式主要有分析模式、設(shè)計(jì)模式、組織模式、過(guò)程模式等。分析模式是用于系統(tǒng)領(lǐng)域建模的模式,是針對(duì)某種常見(jiàn)的應(yīng)用領(lǐng)域問(wèn)題的建模。設(shè)計(jì)模式則是關(guān)于如何保持設(shè)計(jì)的靈活性的,它們?cè)谲浖暮芏嗟胤蕉加袘?yīng)用。在《Design Patterns》中設(shè)計(jì)模式被分為創(chuàng)建型(creational)、結(jié)構(gòu)型(Structural)、行為型(Behavioral)三種。而在《POSA Volume 1:A System ofPatterns》中模式分為體系結(jié)構(gòu)模式(architecural pattern)、設(shè)計(jì)模式(design pattern)和慣用法(idiom)。
2 模式在RUP和XP應(yīng)用及比較
2.1模式在RUP中的應(yīng)用

RUP在不同的核心過(guò)程工作流中可能會(huì)用到不同的軟件模式。
在分析設(shè)計(jì)工作流中,定義備選構(gòu)架的活動(dòng)之一是構(gòu)架分析。構(gòu)架分析要定義系統(tǒng)構(gòu)架模式、核心機(jī)制和建模約定。在構(gòu)架設(shè)計(jì)中應(yīng)用構(gòu)架模式可以增強(qiáng)構(gòu)架的穩(wěn)定性。這里的構(gòu)架模式就是POSA中的體系結(jié)構(gòu)模式,表示軟件系統(tǒng)的基本結(jié)構(gòu)化組織圖式。RUP作了進(jìn)一步的解釋:構(gòu)架模式是一個(gè)特定范圍的模式(即解決方案模板),并且也是具體軟件構(gòu)架的模板。它涉及整個(gè)系統(tǒng)范圍內(nèi)的特征,并且通常涉及子系統(tǒng)范圍內(nèi)(而非類級(jí)別)的關(guān)系。對(duì)于交互系統(tǒng),使用MVC(模型一視圖一控制器)模式。比如,在網(wǎng)上商店中,MVC模式用于提供不同的人員與系統(tǒng)之間進(jìn)行交互的界面視圖,如圖2所示。在定義構(gòu)架時(shí),RUP中應(yīng)用到了分析機(jī)制的概念。分析機(jī)制代表常見(jiàn)問(wèn)題的常用解決模式,它們可能表示結(jié)構(gòu)模式或行為模式,也可能同時(shí)表示這兩者。分析機(jī)制通常實(shí)例化一個(gè)或多個(gè)構(gòu)架模式或分析模式。而RUP的分析模式把Fowler的分析模式擴(kuò)展到了業(yè)務(wù)領(lǐng)域之外的其他領(lǐng)域。而且,RUP主張?jiān)跇?gòu)架設(shè)計(jì)中利用分析機(jī)制代表構(gòu)架中的中低層的復(fù)雜技術(shù)來(lái)避免細(xì)節(jié)分散構(gòu)架的重點(diǎn)。比如,“永久性”分析機(jī)制使得在對(duì)象生存期用例、進(jìn)程生存期或系統(tǒng)關(guān)閉和啟動(dòng)等方面在確定對(duì)象永久性方面的需要時(shí),不必考慮永久性機(jī)制的確切功能或工作方式。
在對(duì)構(gòu)架進(jìn)行改進(jìn)時(shí),初期的重點(diǎn)活動(dòng)之一是確定設(shè)計(jì)機(jī)制。設(shè)計(jì)機(jī)制是對(duì)相應(yīng)分析機(jī)制的改進(jìn),設(shè)計(jì)機(jī)制為概念上的分析機(jī)制添加具體的細(xì)節(jié),但又并不具體到所需的技術(shù)。跟分析機(jī)制類似,設(shè)計(jì)機(jī)制可以實(shí)例化一種或多種構(gòu)架模式或設(shè)計(jì)模式。設(shè)計(jì)模式為改進(jìn)軟件系統(tǒng)的子系統(tǒng)、構(gòu)件或其間的關(guān)系提供了方案。設(shè)計(jì)模式規(guī)模比構(gòu)架模式較小,通常獨(dú)立于編程語(yǔ)言。當(dāng)設(shè)計(jì)模式的范圍界定之后,它將形成一部分具體的設(shè)計(jì)模型。設(shè)計(jì)模式還可用在構(gòu)件的設(shè)計(jì)及類的設(shè)計(jì)中。
在確定設(shè)計(jì)機(jī)制的活動(dòng)中,有一步是將設(shè)計(jì)機(jī)制映射到實(shí)施機(jī)制。實(shí)施機(jī)制是使用特定的編程語(yǔ)言及其他實(shí)施技術(shù)對(duì)相應(yīng)設(shè)計(jì)機(jī)制的改進(jìn)。一個(gè)實(shí)施機(jī)制可以實(shí)例化一個(gè)或多個(gè)代碼模式或?qū)嵤┠J剑谄錁?gòu)建過(guò)程中很可能運(yùn)用多種實(shí)施模式(代碼模式)。實(shí)施模式也就是POSA中的慣用法,是一種編程語(yǔ)言專用的低級(jí)模式,說(shuō)明如何利用給定語(yǔ)言的特性來(lái)實(shí)施構(gòu)件的某些特定方面或?qū)嵤?gòu)件之間的關(guān)系。比如,記數(shù)指針使C++的動(dòng)態(tài)分配共享對(duì)象的內(nèi)存管理更容易。
RUP最大的特點(diǎn)之一就是以構(gòu)架為中心,在整個(gè)生命周期中,各個(gè)階段的工作始終圍繞構(gòu)架展開(kāi)。在構(gòu)架的定義、確定、改進(jìn)過(guò)程中,充分利用了各層次的模式。
2.2模式在XP中的應(yīng)用
XP強(qiáng)調(diào)即時(shí)實(shí)現(xiàn),沒(méi)有明確的分析和設(shè)計(jì)階段。XP的四個(gè)活動(dòng)中,編碼和設(shè)計(jì)是同時(shí)進(jìn)行的,編碼和設(shè)計(jì)活動(dòng)便融為一體,這樣就弱化了構(gòu)架的概念,這是它與強(qiáng)調(diào)以構(gòu)架設(shè)計(jì)為中心的RUP的最大不同。XP看似沒(méi)有構(gòu)架設(shè)計(jì),但實(shí)際上構(gòu)架設(shè)計(jì)還是存在的。XP提倡使用一些簡(jiǎn)單的圖例、比喻等方式來(lái)表達(dá)軟件的構(gòu)架,而這種構(gòu)架設(shè)計(jì)是無(wú)時(shí)無(wú)刻不在進(jìn)行的,即XP用系統(tǒng)隱喻代替了RUP的形式上的架構(gòu)。系統(tǒng)隱喻是表示系統(tǒng)如何工作的一個(gè)簡(jiǎn)單的分配事例。這個(gè)事例包含一些類和模式,正是這些類和模式形成了將要建立系統(tǒng)的核心內(nèi)容。通過(guò)與已經(jīng)熟悉的情況的類比,這些模式幫助我們理解新的和不熟悉的事情。因而XP可針對(duì)需求的特點(diǎn),采用相應(yīng)的模式來(lái)設(shè)計(jì)構(gòu)架。同時(shí),XP的文檔較少,模式通過(guò)代碼共享、結(jié)對(duì)編程起到了溝通的作用。
但XP中常強(qiáng)調(diào)重構(gòu),而很少提到模式。對(duì)此經(jīng)常有一種看法是:模式鼓勵(lì)過(guò)分設(shè)計(jì),重構(gòu)保持簡(jiǎn)單、輕量級(jí)。模式導(dǎo)致的過(guò)分設(shè)計(jì)是因?yàn)樵O(shè)計(jì)人員不恰當(dāng)?shù)厥褂媚J健?shí)際上發(fā)現(xiàn)問(wèn)題時(shí),應(yīng)該使用可以解決問(wèn)題的模式的最簡(jiǎn)單的實(shí)現(xiàn),才不至于使解決方案復(fù)雜化。GOF在《設(shè)計(jì)模式》一書(shū)中提出“設(shè)計(jì)模式為重構(gòu)提供了目標(biāo)”。在XP中可以通過(guò)重構(gòu)來(lái)得到模式,達(dá)到去除重復(fù)代碼,保持簡(jiǎn)單,提高軟件復(fù)用的目的。為了在XP中正確恰當(dāng)?shù)厥褂媚J剑瑧?yīng)該避免在一開(kāi)始使用模式,而是在設(shè)計(jì)演進(jìn)中重構(gòu)得到模式,要從簡(jiǎn)單開(kāi)始,考慮模式但將它們放在次要地位,小規(guī)模重構(gòu),只在真正需要模式的時(shí)候才把重構(gòu)轉(zhuǎn)移為模式。又由于在早期設(shè)計(jì)中使用模式可以防止以后的重構(gòu),所以,如果在早期設(shè)計(jì)確實(shí)需要引入模式,那么該按照模式原始的樣子來(lái)實(shí)現(xiàn)它。這樣,在后面的變更中,模式才易于被替換或升級(jí)。
在XP中也可以使用適合的構(gòu)架模式、設(shè)計(jì)模式等。或者在早期設(shè)計(jì)需要時(shí)使用模式,或者在后來(lái)的迭代中,重構(gòu)引入模式。模式的引入需要為某些部分的設(shè)計(jì)增添靈活性來(lái)滿足需求。
2,3 RUP與XP中模式應(yīng)用的比較
在RUP和XP中都可以應(yīng)用于模式,但它們?cè)谀J降膽?yīng)用上不完全相同。
首先,從模式使用的階段看:RUP圍繞構(gòu)架這個(gè)中心,階段和工作流都相對(duì)更為明確。RUP中應(yīng)用模式進(jìn)行分析、設(shè)計(jì)和編碼等在相應(yīng)的核心工作流中進(jìn)行。而XP不同,XP的分析、設(shè)計(jì)階段不明顯,模式在適宜的時(shí)候被引入,因此模式的應(yīng)用階段性不強(qiáng)。其次,從模式使用的時(shí)間看,RUP非常適宜于開(kāi)發(fā)復(fù)雜、技術(shù)難度大、需求多變、高風(fēng)險(xiǎn)的項(xiàng)目,因此在RUP中,模式的應(yīng)用往往比較早。而XP并不鼓勵(lì)太早的使用模式,主張推遲模式的引入,以免因過(guò)早的使用模式引起過(guò)分設(shè)計(jì)而失去簡(jiǎn)單化。第三,從模式使用的人員看,RUP中人員角色分工相對(duì)明確,因而在不同的流程活動(dòng)中的模式的使用由相應(yīng)的人員決定,比如,由構(gòu)架設(shè)計(jì)師在構(gòu)架分析活動(dòng)中確定分析機(jī)制定義構(gòu)架模式。在XP中,要求人員同時(shí)懂得多種技術(shù),使用模式的角色分工不明確。因?yàn)閄P的代碼共享,當(dāng)某個(gè)成員發(fā)現(xiàn)代碼混亂、太多重復(fù)的時(shí)候,就可利用重構(gòu)和模式讓系統(tǒng)保持簡(jiǎn)單。在重構(gòu)當(dāng)中引入模式,這就使得模式的使用人員不確定。
模式和不同的軟件過(guò)程結(jié)合在一起,會(huì)產(chǎn)生不同的效果。RUP包括了軟件開(kāi)發(fā)的各個(gè)方面,適用于大型軟件項(xiàng)目的開(kāi)發(fā)。XP屬于輕量級(jí)的過(guò)程,主要關(guān)注于代碼和技術(shù),適用于小型項(xiàng)目的開(kāi)發(fā)。大多數(shù)大型的軟件系統(tǒng)都是由幾個(gè)子系統(tǒng)(A、B、C等)組成,子系統(tǒng)又可能由幾個(gè)模塊組成,在實(shí)際的開(kāi)發(fā)中,我們可以結(jié)合RUP和XP,在起始和細(xì)化階段采用RUP結(jié)合模式方法完成需求分析和構(gòu)架設(shè)計(jì),在構(gòu)造和移交階段采用XP結(jié)合模式的方法來(lái)實(shí)現(xiàn)部分子系統(tǒng)或模塊。
3 結(jié)束語(yǔ)
模式為軟件設(shè)計(jì)與開(kāi)發(fā)提供了巨大的幫助。根據(jù)軟件的開(kāi)發(fā)環(huán)境,選取合適的軟件開(kāi)發(fā)過(guò)程,靈活應(yīng)用模式,可以高效率地開(kāi)發(fā)出一個(gè)高質(zhì)量的軟件產(chǎn)品。