軟件工程課件:現(xiàn)代軟件工程_第1頁(yè)
軟件工程課件:現(xiàn)代軟件工程_第2頁(yè)
軟件工程課件:現(xiàn)代軟件工程_第3頁(yè)
軟件工程課件:現(xiàn)代軟件工程_第4頁(yè)
軟件工程課件:現(xiàn)代軟件工程_第5頁(yè)
已閱讀5頁(yè),還剩133頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

現(xiàn)代軟件工程14.1現(xiàn)代軟件工程發(fā)展的主要技術(shù)特點(diǎn)14.2開(kāi)源軟件運(yùn)動(dòng)14.3領(lǐng)域工程14.4敏捷軟件開(kāi)發(fā)過(guò)程及實(shí)踐14.5測(cè)試驅(qū)動(dòng)開(kāi)發(fā)14.6現(xiàn)代軟件工程其他新方法習(xí)題14

知識(shí)點(diǎn)

現(xiàn)代軟件工程,軟件開(kāi)發(fā)新方法和技術(shù)。

難點(diǎn)

軟件工程領(lǐng)域新的方法和技術(shù)。

基于工作過(guò)程的教學(xué)任務(wù)

通過(guò)本章的學(xué)習(xí),了解現(xiàn)代軟件工程發(fā)展的主要技術(shù)特點(diǎn);了解開(kāi)源軟件、領(lǐng)域工程、敏捷軟件開(kāi)發(fā)過(guò)程及實(shí)踐、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、模型驅(qū)動(dòng)軟件開(kāi)發(fā)等軟件工程新方法和技術(shù)。與傳統(tǒng)軟件工程方法相比較,這些方法和技術(shù)為現(xiàn)代軟件工程實(shí)踐提供了新的思路,已在許多軟件工程實(shí)踐中取得了積極的效果。

14.1現(xiàn)代軟件工程發(fā)展的主要技術(shù)特點(diǎn)

在現(xiàn)代軟件工程中,工程與管理技術(shù)和方法與軟件開(kāi)發(fā)方法具有同等重要的位置,并且要求保持相互聯(lián)系、相互銜接、相互支持和協(xié)調(diào)工作。前者可以比擬為制造技術(shù)中的生產(chǎn)技術(shù),后者是工藝技術(shù)、質(zhì)量控制技術(shù)、管理技術(shù)。因此,在籠統(tǒng)地談到技術(shù)和方法的時(shí)候,有時(shí)并不區(qū)分是需求分析技術(shù)還是配置管理方法等,而統(tǒng)稱為“開(kāi)發(fā)技術(shù)和方法”。

為了比較清楚地說(shuō)明現(xiàn)代軟件工程的發(fā)展現(xiàn)狀,綜合各有關(guān)資料,可把現(xiàn)代軟件工程內(nèi)涵分為四個(gè)關(guān)鍵領(lǐng)域或四個(gè)過(guò)程,即開(kāi)發(fā)過(guò)程、支持過(guò)程、工程過(guò)程和管理過(guò)程。

現(xiàn)代軟件工程依然采用生命周期模型,甚至包括瀑布模型。所不同的是,現(xiàn)代軟件工程的生命周期模型不僅僅反映的是軟件生產(chǎn)的前后工序,更是提供了一個(gè)過(guò)程管理的公共框架,即公共的認(rèn)知、協(xié)同和控制的框架。

那么,現(xiàn)代軟件工程發(fā)展了哪些新技術(shù)和新方法呢?

1.開(kāi)發(fā)過(guò)程的新方法與新技術(shù)

開(kāi)發(fā)過(guò)程包括需求分析、系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)與維護(hù)等軟件開(kāi)發(fā)的基本過(guò)程,是“傳統(tǒng)軟件工程的基本過(guò)程”。過(guò)程本身沒(méi)有發(fā)生根本的變化,但技術(shù)方法有了很大的發(fā)展。

根據(jù)統(tǒng)一軟件開(kāi)發(fā)過(guò)程(RationalUnifiedProcess,RUP)的劃分,在需求獲取階段,現(xiàn)代軟件工程普遍采用了面向?qū)ο蠼5乃枷牒蚒ML建模技術(shù)與方法,通過(guò)業(yè)務(wù)建模和系統(tǒng)建模,為用戶和開(kāi)發(fā)團(tuán)隊(duì)描述了一個(gè)能夠共同理解的希望開(kāi)發(fā)的系統(tǒng)的構(gòu)想和場(chǎng)景,并基于該構(gòu)想和場(chǎng)景,在業(yè)務(wù)用例模型和業(yè)務(wù)對(duì)象模型中定義項(xiàng)目的目標(biāo)和范圍,定義系統(tǒng)與組織的過(guò)程、角色和責(zé)任。

需求獲取技術(shù)和方法的改進(jìn),使得對(duì)系統(tǒng)應(yīng)該做什么、如何使開(kāi)發(fā)人員和用戶就某一問(wèn)題描述達(dá)成共識(shí),而變得較為容易求解。因而,該技術(shù)和方法更能適應(yīng)用戶與開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行溝通和達(dá)成共識(shí),更能適應(yīng)需求的變更和管理。

在分析和設(shè)計(jì)階段,面向?qū)ο蟮姆治雠c設(shè)計(jì)模式、基于構(gòu)件的系統(tǒng)構(gòu)架方法和系統(tǒng)開(kāi)發(fā)技術(shù),為把需求轉(zhuǎn)變?yōu)槲磥?lái)的系統(tǒng),建立了一個(gè)健壯的框架基礎(chǔ)?,F(xiàn)代軟件工程更強(qiáng)調(diào)系統(tǒng)結(jié)構(gòu)的靈活性、可擴(kuò)展性和可重用性。該要求被基于構(gòu)件的系統(tǒng)構(gòu)架分析、設(shè)計(jì)與開(kāi)發(fā)所支持,而這個(gè)階段的主要技術(shù)特點(diǎn)是面向?qū)ο蟮哪J健?gòu)件、框架的研究。

在實(shí)現(xiàn)階段,有一些技術(shù)方法(如中間件、構(gòu)件/組件技術(shù)等)支持可重用軟件系統(tǒng)的搭建。開(kāi)發(fā)者首先會(huì)考慮重用構(gòu)件庫(kù)已有的構(gòu)件產(chǎn)品。系統(tǒng)構(gòu)建的活動(dòng)是在層次化的子系統(tǒng)形勢(shì)下,按定義代碼的組織結(jié)構(gòu),以構(gòu)件/組件的形式(源文件、二進(jìn)制文件、可執(zhí)行文件)實(shí)現(xiàn)類和對(duì)象的。最后,將開(kāi)發(fā)出的組件作為單元進(jìn)行測(cè)試以及集成由單個(gè)開(kāi)發(fā)者(或小組)所產(chǎn)生的結(jié)果,使其成為可執(zhí)行的系統(tǒng)。

所以,在開(kāi)發(fā)過(guò)程中,現(xiàn)代軟件工程比較注重的技術(shù)和方法是:統(tǒng)一建模語(yǔ)言UML、構(gòu)架與構(gòu)件技術(shù)、基于軟件復(fù)用性的系統(tǒng)實(shí)現(xiàn),以及統(tǒng)一的開(kāi)發(fā)過(guò)程(UP)。

2.支持過(guò)程的工具和環(huán)境

支持過(guò)程包括一般意義上的開(kāi)發(fā)工具與環(huán)境?,F(xiàn)在,開(kāi)發(fā)工具和環(huán)境的改進(jìn)非常明顯。但現(xiàn)代軟件工程把注意力和關(guān)注點(diǎn)更多地放在發(fā)展整個(gè)開(kāi)發(fā)過(guò)程的綜合支持與支撐環(huán)境上。如全過(guò)程的文檔支持,配置管理支持,質(zhì)量保證支持,測(cè)試、分析、量化度量與控制支持等。

現(xiàn)代軟件工程的過(guò)程是非常復(fù)雜的,所有的技術(shù)和方法都離不開(kāi)具體實(shí)現(xiàn)的環(huán)境與工具。而現(xiàn)代軟件工程思想的實(shí)現(xiàn),如果沒(méi)有工具的支持,也是不可能的。

按不同的工具分類方法,軟件工程的工具可分為:

(1)軟件開(kāi)發(fā)工具:需求分析、設(shè)計(jì)、測(cè)試工具等;

(2)軟件維護(hù)工具:版本控制、文檔分析、逆向工程、再工程等;

(3)軟件管理與支持工具:項(xiàng)目管理、開(kāi)發(fā)資源庫(kù)、配置管理、軟件評(píng)審等。

按解決的問(wèn)題,軟件工程的環(huán)境可分為程序設(shè)計(jì)、系統(tǒng)集成、項(xiàng)目管理等。

按現(xiàn)有的軟件開(kāi)發(fā)環(huán)境的演變趨向,軟件工程的環(huán)境可分為以語(yǔ)言為中心、面向結(jié)構(gòu)、工具箱和基于方法的環(huán)境等。

軟件工程環(huán)境提供了一個(gè)平臺(tái),基于該平臺(tái)可以充分發(fā)揮各個(gè)工具的作用,并實(shí)現(xiàn)工具之間、各技術(shù)和方法之間的繼承和協(xié)同支持。例如,計(jì)算機(jī)輔助軟件工程(ComputerAidedSoftwareEngineering,CASE)就是這樣一個(gè)平臺(tái)。

CASE的集成機(jī)制包括以下內(nèi)容:

(1)數(shù)據(jù)集成:工具間可交換數(shù)據(jù);

(2)界面集成:工具具有相同的界面風(fēng)格和交互方式;

(3)控制集成:工具激活后能控制其他工具的操作;

(4)過(guò)程集成:系統(tǒng)嵌入了有關(guān)軟件過(guò)程的知識(shí),根據(jù)軟件過(guò)程模型,輔助用戶啟動(dòng)各種軟件開(kāi)發(fā)活動(dòng)。

(5)平臺(tái)集成:工具運(yùn)行在相同的硬件/軟件操作系統(tǒng)下。

3.工程過(guò)程的過(guò)程和模型

工程過(guò)程包括各種生命周期模型、組織過(guò)程定義、組織培訓(xùn)、組織過(guò)程性能優(yōu)化與改進(jìn)、組織革新與部署等。

在工程過(guò)程中,現(xiàn)代軟件工程新技術(shù)和新方法的核心出發(fā)點(diǎn)是:建立面向軟件開(kāi)發(fā)全過(guò)程、面向軟件開(kāi)發(fā)全組織的軟件開(kāi)發(fā)環(huán)境,包括過(guò)程規(guī)范和相應(yīng)的控制機(jī)制。

過(guò)程規(guī)范包括生命周期模型的選擇、組織過(guò)程的定義、培訓(xùn)、度量評(píng)價(jià)、優(yōu)化改進(jìn)等。

控制機(jī)制包括建立和組織軟件開(kāi)發(fā)項(xiàng)目過(guò)程相配套的支持和支撐機(jī)制、建立控制和監(jiān)管軟件項(xiàng)目進(jìn)度的工具以及建立管理軟件項(xiàng)目質(zhì)量的機(jī)制。這些機(jī)制應(yīng)能做到:配置和變更管理工具,實(shí)現(xiàn)如何在多個(gè)成員組成的項(xiàng)目中控制大量的制品(工件)、管理演化系統(tǒng)中的多個(gè)變體、跟蹤軟件創(chuàng)建過(guò)程中的不同版本的變更以及發(fā)布。軟件項(xiàng)目管理機(jī)制平衡各種可能產(chǎn)生沖突的目標(biāo)、管理風(fēng)險(xiǎn),克服各種約束并成功交付使用戶滿意的產(chǎn)品等。

4.管理過(guò)程的標(biāo)準(zhǔn)和規(guī)范

管理過(guò)程包括一系列的標(biāo)準(zhǔn)、規(guī)范、評(píng)審標(biāo)準(zhǔn)等,其中包含針對(duì)軟件開(kāi)發(fā)的需求管理、配置管理、項(xiàng)目管理、質(zhì)量管理等。

軟件工程技術(shù)和工程管理如同現(xiàn)實(shí)世界中熱戀的情侶,如果他們各自真正認(rèn)為在這個(gè)世界上找到了自己的另一半,那么他們的結(jié)合,既是自然的,也是全方位的,絕不是簡(jiǎn)單的幾套體系的合并。而現(xiàn)代軟件企業(yè)最困難或者也是現(xiàn)代軟件工程實(shí)踐最成功的地方,就是這些體系的有機(jī)無(wú)縫的銜接。

例如:需求工程中軟件需求的獲取、分析、處理和驗(yàn)證過(guò)程,與項(xiàng)目管理的范圍定義和控制、時(shí)間管理的WBS分解和基線,與配置管理的配置項(xiàng)識(shí)別、選擇和確認(rèn),需求轉(zhuǎn)化為配置項(xiàng)的狀態(tài)變化和控制/報(bào)告/基線度量,與測(cè)試設(shè)計(jì)和測(cè)試組織實(shí)施、與質(zhì)量管理的需求評(píng)審等過(guò)程,都是緊密聯(lián)系、相互銜接、協(xié)同工作的。

如何從技術(shù)和工具層次上打通這些過(guò)程之間的信息通道,如何在變更和基線控制層次上,建立這些過(guò)程之間統(tǒng)一的、相互銜接和認(rèn)同的度量標(biāo)準(zhǔn),如何在總體和各個(gè)控制環(huán)節(jié)上,從不同管理要求的角度,實(shí)現(xiàn)對(duì)軟件開(kāi)發(fā)過(guò)程的可度量、有基準(zhǔn)、全方位綜合的整體管理,是現(xiàn)代軟件工程、特別是管理過(guò)程的關(guān)鍵。

14.2

開(kāi)源軟件運(yùn)動(dòng)

在討論現(xiàn)代軟件工程的時(shí)候,特別是在大量的中、小軟件企業(yè)的開(kāi)發(fā)活動(dòng)中,不能不談到開(kāi)源軟件。

14.2.1開(kāi)源軟件的定義與由來(lái)

開(kāi)放源碼軟件(Open-source-software,Oss)是一個(gè)新名詞,它被定義為描述其源碼可以被公眾使用的軟件,并且此軟件的使用、修改和分發(fā)也不受許可證的限制。開(kāi)源軟件促進(jìn)會(huì)(OSI)是通過(guò)對(duì)開(kāi)源許可證的官方認(rèn)可來(lái)確定軟件的開(kāi)源屬性的。該文件共有10項(xiàng)標(biāo)準(zhǔn),每項(xiàng)標(biāo)準(zhǔn)的主要意思分別為:

(1)確保軟件再發(fā)布(redistribute)的自由;

(2)軟件發(fā)布必須提供源代碼;

(3)保障軟件使用者對(duì)軟件修改并形成衍生版本(DerivedWorks)的權(quán)利;

(4)保證軟件作者源代碼的完整性以維護(hù)其信譽(yù);

(5)許可證不得歧視任何個(gè)人及組織,禁止將某些人排除在軟件使用之外;

(6)軟件許可證不得限制軟件的使用領(lǐng)域;

(7)程序再發(fā)布除現(xiàn)許可證外不得有額外要求;

(8)適用于軟件整體的許可證也應(yīng)適用于該軟件的部分;

(9)許可證不得限制與該軟件一起發(fā)布的其他軟件;

(10)許可證應(yīng)保持技術(shù)中立,以便許可證能在不同的技術(shù)條件下達(dá)成。

Oss運(yùn)動(dòng)起源于自由軟件運(yùn)動(dòng)。在國(guó)外,早期開(kāi)發(fā)軟件的有識(shí)之士在1984年提出了一個(gè)自由軟件運(yùn)動(dòng)的計(jì)劃:軟件程序員要把他的產(chǎn)品——軟件及其代碼開(kāi)放出來(lái),讓大家可以自由地使用、復(fù)制分發(fā)、研究學(xué)習(xí)。

因?yàn)椴粷M當(dāng)時(shí)大量的軟件肆意地添加版權(quán)保護(hù)從而與金錢掛鉤的現(xiàn)象,理查德·馬修·斯托曼(RichardMatthewStallman,簡(jiǎn)稱Stallman)首先發(fā)起了自由軟件運(yùn)動(dòng)。自由軟件運(yùn)動(dòng)的主要項(xiàng)目就是著名的GNU項(xiàng)目。

在這個(gè)計(jì)劃之初,沒(méi)人肯來(lái)幫助他,Stallman就自己先花費(fèi)了近一年的時(shí)間完成了一個(gè)GNU軟件—GNUEMACS(一個(gè)編輯器,類似于一種集成開(kāi)發(fā)環(huán)境)。EMACS功能很強(qiáng)大,可以自由地分發(fā)拷貝。很快,EMACS就到處流傳,并且開(kāi)始有人幫助EMACS來(lái)添加些新功能、修補(bǔ)錯(cuò)誤。

1985年,Stallman成立了一個(gè)基金會(huì):FSF(FreeSoftwareFoundation,自由軟件基金會(huì),網(wǎng)址為),以籌集資金幫助開(kāi)發(fā)GNU項(xiàng)目。

FSF創(chuàng)立以后,不斷接到很多廠商的捐款與贊助,Stallman開(kāi)始以較低的工資雇用有理想的軟件工程師編寫GNU項(xiàng)目中的自由軟件,他自己是不支薪的。

1985年9月,Stallman正式發(fā)表了GNU宣言,并對(duì)GNU計(jì)劃作了更詳細(xì)的闡述。

1989年,Stallman與一群律師起草了廣為使用的GNUGPL(GNUGeneralPublicLicense,GNU通用公共協(xié)議證書),創(chuàng)造性地提出了“反版權(quán)”或“版權(quán)屬左(CopyLeft)”的概念。同時(shí),GNU中的GCC(GNUCCompiler,GNU的C編譯器)由于其優(yōu)越的性能和自由的特點(diǎn),也獲得了巨大的成功。

1990年,所有GNU計(jì)劃的重要組件均已基本找到或編寫,就剩下了操作系統(tǒng)的內(nèi)核。

1991年,芬蘭大學(xué)生LinusBenedictTorvalds(林納斯·本納第克特·托瓦茲,簡(jiǎn)稱

Linus)在GNUGPL條例下發(fā)布了自己編寫的操作系統(tǒng)內(nèi)核,并命名為GNU/Linux或簡(jiǎn)稱Linux。該計(jì)劃得到了全世界的眾多開(kāi)發(fā)者的參與支持,且做到了過(guò)去商業(yè)軟件認(rèn)為自由軟件不可能做到的事—用分散的開(kāi)發(fā)者、沒(méi)有嚴(yán)格管理與計(jì)劃的團(tuán)隊(duì)通過(guò)互聯(lián)網(wǎng),開(kāi)發(fā)像內(nèi)核系統(tǒng)這么復(fù)雜的軟件。

14.2.2Oss項(xiàng)目的優(yōu)勢(shì)與開(kāi)發(fā)經(jīng)驗(yàn)

1.?Oss項(xiàng)目的優(yōu)勢(shì)

總的來(lái)說(shuō),Oss的最大優(yōu)勢(shì)是軟件信息的共享,有助于整個(gè)軟件產(chǎn)業(yè)的快速發(fā)展,這也是Oss能擁有無(wú)數(shù)的擁護(hù)者與巨大動(dòng)力的根源。但是,在軟件業(yè)現(xiàn)存的還有閉源軟件,也就是傳統(tǒng)的軟件開(kāi)發(fā)模式,而且閉源軟件的開(kāi)發(fā)可以說(shuō)仍是當(dāng)今的主導(dǎo)。所以這里具體討論相對(duì)于閉源軟件項(xiàng)目,Oss有什么樣的優(yōu)勢(shì)。

(1)降低風(fēng)險(xiǎn)。軟件公司的產(chǎn)品一向是封閉源代碼的。試想一下,若軟件公司在一夜之間突然人間蒸發(fā),運(yùn)行的系統(tǒng)就無(wú)人維護(hù),隨時(shí)可能面臨更換系統(tǒng)的境地。如果選擇開(kāi)源軟件,可以將這種風(fēng)險(xiǎn)降到最低,活躍的開(kāi)源軟件通常會(huì)有源源不斷的貢獻(xiàn)者維護(hù)和更新,而且自己可以獲取源代碼,完全可以按照自己的意愿進(jìn)行修改,無(wú)需擔(dān)心某一天突然找不到依靠。

(2)產(chǎn)品質(zhì)量更可靠。閉源軟件質(zhì)量通常與軟件公司的開(kāi)發(fā)人員水平息息相關(guān),開(kāi)發(fā)人員的水平通常參差不齊;因此閉源軟件的質(zhì)量通常也是參差不齊,而開(kāi)源軟件通常是由社區(qū)中的技術(shù)高手在維護(hù),有時(shí)用戶自身也可以參與維護(hù),并且開(kāi)源軟件的用戶較多,軟件存在的bug一般都會(huì)被及時(shí)發(fā)現(xiàn)和修補(bǔ),產(chǎn)品質(zhì)量更加可靠。

(3)付出少、回報(bào)多。削減成本是商業(yè)成功至關(guān)重要的因素,bug修復(fù)、開(kāi)發(fā)功能和編寫文檔都會(huì)消耗大量的人力、物力和財(cái)力,如果選擇開(kāi)源軟件,這些事情都有人在默默奉獻(xiàn),不需要你付出什么,但卻可以享用別人的勞動(dòng)成果。

(4)降低開(kāi)發(fā)成本—不花冤枉錢。使用開(kāi)源軟件開(kāi)發(fā)一個(gè)產(chǎn)品是值得投資的,可以降低開(kāi)發(fā)成本,并可以快速推出自己的產(chǎn)品,然而,許多團(tuán)隊(duì)都希望投放到生產(chǎn)環(huán)境中的產(chǎn)品能得到支持,于是誕生了許多提供企業(yè)級(jí)開(kāi)源產(chǎn)品支持服務(wù)的專業(yè)型公司,開(kāi)發(fā)團(tuán)隊(duì)可以根據(jù)自身的情況,有選擇性地購(gòu)買需要的服務(wù)。如果選擇閉源產(chǎn)品,通常會(huì)多花錢,買到自己可能用不上的產(chǎn)品和服務(wù)。

(5)招攬優(yōu)秀人才。開(kāi)源社區(qū)中充滿了大量的優(yōu)秀人才,他們富有激情,才華橫溢,樂(lè)意為開(kāi)源軟件奉獻(xiàn)。試想一下,對(duì)開(kāi)源軟件有濃厚興趣的人加入到你的開(kāi)發(fā)團(tuán)隊(duì),想不提高生產(chǎn)力都難。

(6)行業(yè)適應(yīng)能力更強(qiáng)。因開(kāi)源軟件大多免費(fèi)的緣故,在中、小型開(kāi)發(fā)團(tuán)隊(duì)中迅速得到了廣泛使用,這些使用開(kāi)源軟件的開(kāi)發(fā)團(tuán)隊(duì)可能來(lái)自各行各業(yè),經(jīng)過(guò)長(zhǎng)時(shí)間的使用,開(kāi)源軟件的適應(yīng)能力更強(qiáng),因此無(wú)論開(kāi)發(fā)團(tuán)隊(duì)屬于何種類型,都可放心使用。

(7)產(chǎn)品更透明。由于開(kāi)源軟件是由社區(qū)在推動(dòng),其透明度很好,bug的發(fā)現(xiàn)、新功能的提出都是在一個(gè)公開(kāi)的論壇中進(jìn)行的,參與者可以隨時(shí)獲取到最新信息,還可以參與進(jìn)去。開(kāi)源軟件會(huì)根據(jù)使用者需求不斷演變,而不是受限于一家公司的意愿,因此參與者可以了解開(kāi)源軟件的未來(lái)發(fā)展規(guī)劃和方向,其透明度比閉源軟件高出許多,開(kāi)發(fā)團(tuán)隊(duì)可以做到心中有數(shù)。

(8)可值得借鑒的軟件開(kāi)發(fā)經(jīng)驗(yàn)。發(fā)展開(kāi)源軟件只是作為商業(yè)軟件的一種補(bǔ)充,為用戶提供多一種選擇。連微軟都表示,要接受開(kāi)源軟件與商業(yè)軟件“共存”的事實(shí)和前景。微軟的一位主管認(rèn)為:應(yīng)向開(kāi)源軟件學(xué)習(xí)如何控制并降低軟件模塊化或集成成本的激增,如何學(xué)習(xí)社區(qū)開(kāi)發(fā)機(jī)制的有益經(jīng)驗(yàn),如何增加軟件的透明度以贏得用戶信任度的增加等。

2.開(kāi)源軟件開(kāi)發(fā)的經(jīng)驗(yàn)

(1)早發(fā)布、常發(fā)布、聽(tīng)取用戶的建議,把用戶當(dāng)作協(xié)作開(kāi)發(fā)者和測(cè)試人員;

(2)精妙的數(shù)據(jù)結(jié)構(gòu)和笨拙的代碼所構(gòu)成的組合好于笨拙的數(shù)據(jù)結(jié)構(gòu)和精妙的代碼;

(3)最好的設(shè)計(jì)是最精簡(jiǎn)的設(shè)計(jì);

(4)好的程序員知道如何寫代碼,有經(jīng)驗(yàn)的程序員知道如何重用或重構(gòu)代碼。

3.常見(jiàn)的Oss項(xiàng)目

2000年至今開(kāi)放源代碼運(yùn)動(dòng)一直在快速發(fā)展,已經(jīng)有很多好的項(xiàng)目涌現(xiàn)出來(lái)。例如日常所用的有以下幾個(gè)軟件:

(1)

Linux:著名的操作系統(tǒng)內(nèi)核程序。網(wǎng)址:/。

(2)

Apache:開(kāi)源界最著名的產(chǎn)品之一,Web服務(wù)器,推動(dòng)了Linux與開(kāi)源產(chǎn)品在服務(wù)器領(lǐng)域的應(yīng)用。網(wǎng)址:/。

(3)

QT:一種跨平臺(tái)的C++編程平臺(tái)。由Trolltech公司發(fā)布,分為商業(yè)版與Opensource版。QT跨平臺(tái)能力十分優(yōu)越,一個(gè)程序只需很少量的改動(dòng)就可以在各個(gè)平臺(tái)編譯運(yùn)行。網(wǎng)址:/products/qt/index.html。

(4)

GTK:一個(gè)跨平臺(tái)的C語(yǔ)言圖形用戶界面工具包。網(wǎng)址:。

(5)

OpenOffice:著名的開(kāi)源Office辦公軟件,基本可以和微軟的Office系統(tǒng)匹敵。網(wǎng)址:/。

(6)

Firefox:著名的Web瀏覽器。對(duì)IE構(gòu)成了一定的威脅。網(wǎng)址:/products/firefox/。

(7)

Mplayer:一個(gè)著名的多媒體播放器,在底層對(duì)于各種系統(tǒng)均作了優(yōu)化,播放性能十分出眾,號(hào)稱可以播放現(xiàn)存的任何格式的多媒體數(shù)據(jù)。網(wǎng)址:http://www.mplayerhq.hu/。

(8)

Gimp:一個(gè)圖形圖像編輯軟件,類似于Photoshop。網(wǎng)址:。

14.2.3如何看待開(kāi)源軟件

Oss的出發(fā)點(diǎn)是讓盡可能多的程序設(shè)計(jì)人員能夠閱讀、分發(fā)和修改軟件代碼,從而使軟件的錯(cuò)誤可以得到迅速糾正,增強(qiáng)軟件功能,使軟件開(kāi)發(fā)從公司行為變?yōu)樯鐣?huì)行為。

具體來(lái)說(shuō),可以從以下幾個(gè)角度來(lái)看待開(kāi)源軟件。

1.從用戶的角度看

從用戶角度來(lái)看開(kāi)源軟件的成本,從軟件的整體與長(zhǎng)期觀點(diǎn)而言,開(kāi)源軟件可能需要用戶付出更高的成本,這是因?yàn)椋?/p>

更高的產(chǎn)品安裝與導(dǎo)入成本、“再”教育訓(xùn)練成本、系統(tǒng)維護(hù)成本和開(kāi)發(fā)成本;

程序的開(kāi)發(fā)也許可以靠群體的熱情,但吃力不討好的技術(shù)支持就得由用戶自己來(lái)承擔(dān),因?yàn)檎w成本≠購(gòu)買成本,整體成本=購(gòu)買成本+軟件部署+教育培訓(xùn)+技術(shù)支持+系統(tǒng)未來(lái)升級(jí)維護(hù)+數(shù)據(jù)轉(zhuǎn)換。

開(kāi)放源代碼的軟件擁有更佳的穩(wěn)定性嗎?一般人都以Unix產(chǎn)品的穩(wěn)定性來(lái)想象Linux的穩(wěn)定,實(shí)施的真相可能如下:

開(kāi)源軟件缺少相關(guān)的驅(qū)動(dòng)程序的認(rèn)證,系統(tǒng)文檔的保護(hù)與內(nèi)核模式的仿寫功能難以保證有關(guān)軟件的穩(wěn)定性。

你的用戶將會(huì)因此被迫犧牲更好的系統(tǒng)效能,硬件的驅(qū)動(dòng)程序要去哪里找?

你的用戶需要“即插即用”功能的支持嗎?你的用戶需要簡(jiǎn)易的安裝與部署嗎?

你的用戶需要軟件自動(dòng)下載更新的功能嗎?

你的用戶需要容易上手的安裝設(shè)置界面嗎?還是可以忍受用手工的方式來(lái)設(shè)定所有的系統(tǒng)功能?

2.從軟件產(chǎn)品開(kāi)發(fā)看

任何系統(tǒng)的開(kāi)發(fā)、維護(hù)和技術(shù)支持都需要成本。

RedHat已不再提供“免費(fèi)”的Linux版本,否則無(wú)法維持龐大的成本。

沒(méi)有健康的業(yè)務(wù)模式,使得軟件開(kāi)發(fā)廠商無(wú)法長(zhǎng)期投入經(jīng)費(fèi)進(jìn)行創(chuàng)新研發(fā)。

3.從創(chuàng)新的角度看

創(chuàng)新是IT科技進(jìn)步與IT產(chǎn)業(yè)興旺發(fā)展的源動(dòng)力。

微軟每年投入68億美元從事軟件的創(chuàng)新與研發(fā),拉動(dòng)了整個(gè)軟件產(chǎn)業(yè)的發(fā)展。

自由/開(kāi)源軟件的發(fā)展,搞活了全球的軟件產(chǎn)業(yè),對(duì)重組軟件產(chǎn)業(yè)提出了挑戰(zhàn)。

以業(yè)務(wù)軟件模式帶動(dòng)IT產(chǎn)業(yè)的成長(zhǎng)。

14.3領(lǐng)域工程

領(lǐng)域是領(lǐng)域工程中的一個(gè)最基本的專業(yè)術(shù)語(yǔ),是指共享某種功能性(Functionality)的系統(tǒng)或應(yīng)用程序的集合。領(lǐng)域含義中包含了領(lǐng)域工程中的很多屬性和方法。在領(lǐng)域工程中,軟件開(kāi)發(fā)人員在整個(gè)開(kāi)發(fā)過(guò)程中要時(shí)刻保持與“領(lǐng)域?qū)<摇边M(jìn)行溝通、討論。領(lǐng)域?qū)<也粌H需要懂得計(jì)算機(jī)系統(tǒng),而且需懂得現(xiàn)實(shí)領(lǐng)域知識(shí)。

14.3.1基于領(lǐng)域工程的軟件開(kāi)發(fā)概述

大多數(shù)軟件系統(tǒng)可以根據(jù)業(yè)務(wù)領(lǐng)域和它們支持的人物類型來(lái)劃分類別,例如定期航班預(yù)定系統(tǒng)、醫(yī)學(xué)記錄系統(tǒng)、證券管理系統(tǒng)、訂單處理系統(tǒng)、庫(kù)存管理系統(tǒng)等。因此,可把根據(jù)系統(tǒng)類別而組織的領(lǐng)域稱為縱向領(lǐng)域(VerticalDomain)。類似地,也可以根據(jù)軟件系統(tǒng)部件的功能把它們分類,例如數(shù)據(jù)庫(kù)系統(tǒng)、容器庫(kù)、工作流系統(tǒng)、GUI庫(kù)、數(shù)值代碼庫(kù)等。因此,可把根據(jù)軟件部件的類別組織的領(lǐng)域稱為橫向領(lǐng)域(HorizontalDomain)。

領(lǐng)域工程是目前可復(fù)用資產(chǎn)基礎(chǔ)設(shè)施建設(shè)的主要技術(shù)手段,包含領(lǐng)域分析、領(lǐng)域設(shè)計(jì)、領(lǐng)域?qū)崿F(xiàn)三個(gè)重要的活動(dòng)?;陬I(lǐng)域工程的軟件開(kāi)發(fā)過(guò)程如圖14-1所示。

如圖14-1所示,1)領(lǐng)域分析:在對(duì)領(lǐng)域中若干典型成員系統(tǒng)的需求進(jìn)行分析的基礎(chǔ)上,考慮預(yù)期的需求變化、技術(shù)演化、限制條件等因素,確定恰當(dāng)?shù)念I(lǐng)域范圍,識(shí)別領(lǐng)域的共性特征和變化特征,獲取一組具有足夠可復(fù)用性的領(lǐng)域需求,并對(duì)其抽象形成領(lǐng)域模型;2)領(lǐng)域設(shè)計(jì):以領(lǐng)域需求模型為基礎(chǔ),考慮成員系統(tǒng)可能具有的質(zhì)量屬性要求和外部環(huán)境約束,建立符合領(lǐng)域需求、適應(yīng)領(lǐng)域變化性的軟件體系結(jié)構(gòu);3)領(lǐng)域?qū)崿F(xiàn):以領(lǐng)域模型和軟件體系結(jié)構(gòu)為基礎(chǔ),進(jìn)行可復(fù)用構(gòu)件的識(shí)別、生產(chǎn)和管理。

圖14-1基于領(lǐng)域工程的軟件開(kāi)發(fā)過(guò)程

學(xué)術(shù)界對(duì)領(lǐng)域工程的系統(tǒng)化研究開(kāi)始于20世紀(jì)80年代初期。目前對(duì)于領(lǐng)域工程具有代表性的研究和實(shí)踐工作包括:卡耐基梅隆大學(xué)軟件工程研究所早期提出的面向特征的領(lǐng)域分析方法和現(xiàn)階段的軟件產(chǎn)品線方法,喬治梅森大學(xué)提出的演化的領(lǐng)域生命周期模型,貝爾實(shí)驗(yàn)室提出的面向家族的抽象、規(guī)約和翻譯的領(lǐng)域工程方法,韓國(guó)浦項(xiàng)科學(xué)與技術(shù)大學(xué)在FODA方法基礎(chǔ)上提出的面向特征的復(fù)用方法,惠普實(shí)驗(yàn)室綜合FODA方法和RSEB方法提出的FeatuRSEB方法,德國(guó)FraunhoferInstituteforExperimentalSoftwareEngineering的產(chǎn)品線軟件工程方法,以及北京大學(xué)提出的青鳥面向?qū)ο蟮念I(lǐng)域工程方法等。

14.3.2基于構(gòu)件的軟件工程

基于構(gòu)件的軟件工程(Component-BasedSoftwareEngineering,CBSE)和基于構(gòu)件的開(kāi)發(fā)(Component-BasedDevelopment,CBD)是一種軟件開(kāi)發(fā)的新范型,它是在一定構(gòu)建模型的支持下,復(fù)用構(gòu)件庫(kù)中的一個(gè)或多個(gè)軟件構(gòu)件,通過(guò)組合手段高效率、高質(zhì)量地構(gòu)造應(yīng)用軟件系統(tǒng)的過(guò)程。

CBSE/CBD的工程學(xué)目標(biāo)包括降低費(fèi)用、方便裝配、提高復(fù)用性、提高可定制性和適應(yīng)性、提高可維護(hù)性。CBSE/CBD的技術(shù)目標(biāo)是降低構(gòu)件之間的耦合度,提高構(gòu)件內(nèi)諸元素之間的內(nèi)聚,控制構(gòu)件的規(guī)模。

CBSE強(qiáng)調(diào)使用可復(fù)用的軟構(gòu)件來(lái)設(shè)計(jì)和改造基于計(jì)算機(jī)的系統(tǒng)。構(gòu)件復(fù)用是指充分利用過(guò)去軟件開(kāi)發(fā)過(guò)程中基類的成果、知識(shí)與經(jīng)驗(yàn),去開(kāi)發(fā)新的軟件系統(tǒng),使人們?cè)谛孪到y(tǒng)的開(kāi)發(fā)中著重于解決出現(xiàn)的新問(wèn)題、滿足新需求,從而避免或減少軟件開(kāi)發(fā)中的重復(fù)勞動(dòng)。圖14-2給出了一個(gè)典型的CBSE過(guò)程模型。

其中,領(lǐng)域工程的目的是標(biāo)識(shí)、構(gòu)造、分類和傳播一些軟件構(gòu)件,這些構(gòu)件將適用于某特定領(lǐng)域中現(xiàn)有的和未來(lái)的軟件系統(tǒng)。

領(lǐng)域工程的總體目標(biāo)是建立相應(yīng)的機(jī)制,使得軟件工程師在開(kāi)發(fā)新系統(tǒng)或改造老系統(tǒng)時(shí)可以共享這些構(gòu)件,即復(fù)用它們。領(lǐng)域工程包括三個(gè)主要活動(dòng):分析、構(gòu)造和傳播?;跇?gòu)件的開(kāi)發(fā)CBD是一個(gè)與領(lǐng)域活動(dòng)并行的CBSE活動(dòng)。一旦建立了體系結(jié)構(gòu),就必須向其中增加構(gòu)件,這些構(gòu)件可從復(fù)用庫(kù)中獲得,或者根據(jù)特定需要開(kāi)發(fā)。因此,CBD的任務(wù)流有兩條路徑:當(dāng)可復(fù)用構(gòu)件有可能被集成到體系結(jié)構(gòu)中時(shí),必須對(duì)它們進(jìn)行合格性檢驗(yàn)和適應(yīng)性修改;當(dāng)需要新的構(gòu)件時(shí),則必須重新開(kāi)發(fā)。構(gòu)件組裝的任務(wù)是將經(jīng)過(guò)合格性檢驗(yàn)的、適應(yīng)性修改的以及新開(kāi)發(fā)的構(gòu)件組裝到為應(yīng)用建立的體系結(jié)構(gòu)中,最后再進(jìn)行全面的測(cè)試。圖14-2一個(gè)典型的CBSE過(guò)程模型

14.3.3領(lǐng)域工程建模過(guò)程

1.領(lǐng)域模型(DomainModel)

領(lǐng)域模型是對(duì)領(lǐng)域內(nèi)的概念類或現(xiàn)實(shí)世界中對(duì)象的可視化表示,又稱概念模型、領(lǐng)域?qū)ο竽P?、分析?duì)象模型。領(lǐng)域系統(tǒng)開(kāi)發(fā)人員通過(guò)分析整個(gè)領(lǐng)域中所有系統(tǒng)之間的共同特征和可變特征,同時(shí)對(duì)刻畫這些特征的對(duì)象和操作進(jìn)行研究、分析,從中抽象出領(lǐng)域系統(tǒng)的需求和操作,從而形成領(lǐng)域模型。領(lǐng)域系統(tǒng)開(kāi)發(fā)人員依據(jù)領(lǐng)域模型產(chǎn)生出領(lǐng)域中共同具有的DSSA(特定領(lǐng)域的軟件構(gòu)架),并進(jìn)行可重用構(gòu)件的抽取和開(kāi)發(fā)。構(gòu)建領(lǐng)域模型是領(lǐng)域工程中的核心環(huán)節(jié),也是領(lǐng)域系統(tǒng)需求分析的關(guān)鍵步驟。

領(lǐng)域模型設(shè)計(jì)的步驟如下:

(1)從領(lǐng)域中所有相關(guān)環(huán)節(jié)的描述中提取領(lǐng)域字典,并對(duì)領(lǐng)域字典進(jìn)行分類;

(2)從領(lǐng)域中提取領(lǐng)域?qū)ο螅纬刹僮鲗?duì)象集;

(3)從領(lǐng)域?qū)ο蠹谐橄髽I(yè)務(wù)模型,建立問(wèn)題域的概念;

(4)用UML提供的方法和圖例進(jìn)行領(lǐng)域模型設(shè)計(jì)、確定模型之間的關(guān)系。

2.領(lǐng)域構(gòu)件的抽取

領(lǐng)域構(gòu)件的抽取主要是從領(lǐng)域工程中的三個(gè)階段中抽取。

(1)領(lǐng)域分析階段的構(gòu)件獲?。侯I(lǐng)域分析是領(lǐng)域工程的重要組成部分。此階段主要是收集、分析、組織、描述領(lǐng)域中的所有相關(guān)信息,并在定義領(lǐng)域邊界、明確分析對(duì)象、識(shí)別信息源等基礎(chǔ)上,確定哪些資源可被領(lǐng)域系統(tǒng)共享,從而抽取相應(yīng)的構(gòu)件。此階段抽取的構(gòu)件主要包含文檔說(shuō)明構(gòu)件、領(lǐng)域?qū)ο髽?gòu)件等。

(2)領(lǐng)域設(shè)計(jì)階段的構(gòu)件獲?。侯I(lǐng)域設(shè)計(jì)階段主要是獲得領(lǐng)域系統(tǒng)構(gòu)架DSSA。領(lǐng)域設(shè)計(jì)是一個(gè)高層次的設(shè)計(jì),該設(shè)計(jì)必須適應(yīng)領(lǐng)域中的所有應(yīng)用系統(tǒng)需求和領(lǐng)域構(gòu)件劃分。此階段抽取的構(gòu)件主要包含各種框架設(shè)計(jì)構(gòu)件。

(3)領(lǐng)域?qū)崿F(xiàn)階段的構(gòu)件獲?。捍穗A段主要是對(duì)以上兩個(gè)階段中獲取的領(lǐng)域構(gòu)件進(jìn)行實(shí)現(xiàn)以及管理。構(gòu)件的實(shí)現(xiàn)可以通過(guò)現(xiàn)有的系統(tǒng)中提取得到,也可以通過(guò)自行編碼開(kāi)發(fā)得到。此階段抽取的構(gòu)件主要包含領(lǐng)域框構(gòu)架件、領(lǐng)域描述構(gòu)件(用特定的語(yǔ)言描述)和代碼構(gòu)件等。

經(jīng)過(guò)以上三個(gè)階段后,當(dāng)需要開(kāi)發(fā)一個(gè)領(lǐng)域的新應(yīng)用系統(tǒng)時(shí),就可以像組裝產(chǎn)品一樣,根據(jù)具體的需求,將需要的構(gòu)件按照應(yīng)用系統(tǒng)設(shè)計(jì)去組裝形成,而無(wú)需從零開(kāi)始。

3.參與人員

與對(duì)應(yīng)用工程的研究類似,參與領(lǐng)域工程的人員可以劃分為四種角色:領(lǐng)域?qū)<摇㈩I(lǐng)域分析員、領(lǐng)域設(shè)計(jì)員和領(lǐng)域?qū)崿F(xiàn)員。以下將對(duì)這四種角色分別通過(guò)回答三個(gè)問(wèn)題進(jìn)行介紹:這種角色由什么人員來(lái)充當(dāng)?他們?cè)陬I(lǐng)域工程中承擔(dān)什么任務(wù)?他們需要具有哪些技能?

(1)領(lǐng)域?qū)<野ㄔ擃I(lǐng)域中系統(tǒng)的有經(jīng)驗(yàn)的用戶、從事該領(lǐng)域中系統(tǒng)的需求分析設(shè)計(jì)、實(shí)現(xiàn)以及項(xiàng)日管理的有經(jīng)驗(yàn)的軟件工程師等。主要任務(wù)包括提供關(guān)于領(lǐng)域中系統(tǒng)的需求規(guī)約和實(shí)現(xiàn)的知識(shí),幫助組織規(guī)范的、一致的領(lǐng)域字典,幫助選擇樣本系統(tǒng)作為領(lǐng)域工程的依據(jù),復(fù)審領(lǐng)域模型、DSSA等領(lǐng)域工程產(chǎn)品等。

(2)領(lǐng)域分析員應(yīng)由具有知識(shí)工程背景的有經(jīng)驗(yàn)的系統(tǒng)分析員來(lái)?yè)?dān)任。主要任務(wù)包括控制整個(gè)領(lǐng)域分析過(guò)程,進(jìn)行知識(shí)獲取,將獲取的知識(shí)組織到領(lǐng)域模型中,根據(jù)現(xiàn)有系統(tǒng)、標(biāo)準(zhǔn)規(guī)范等驗(yàn)證領(lǐng)域模型的準(zhǔn)確性和一致性,維護(hù)領(lǐng)域模型。

(3)領(lǐng)域設(shè)計(jì)員應(yīng)由有經(jīng)驗(yàn)的軟件設(shè)計(jì)人員來(lái)?yè)?dān)任。主要任務(wù)包括控制整個(gè)領(lǐng)域設(shè)計(jì)過(guò)程,根據(jù)領(lǐng)域模型和現(xiàn)有的系統(tǒng)開(kāi)發(fā)DSSA,對(duì)DSSA的準(zhǔn)確性和一致性進(jìn)行驗(yàn)證,建立領(lǐng)域模型和DSSA之間的聯(lián)系。

(4)領(lǐng)域?qū)崿F(xiàn)員應(yīng)由有經(jīng)驗(yàn)的程序設(shè)計(jì)人員來(lái)?yè)?dān)任。主要任務(wù)包括根據(jù)領(lǐng)域模型和DSSA,或者從頭開(kāi)發(fā)可復(fù)用構(gòu)件,或者利用再工程的技術(shù)從現(xiàn)有系統(tǒng)中提取出可復(fù)用構(gòu)件,對(duì)可復(fù)用構(gòu)件進(jìn)行驗(yàn)證,建立DSSA與可復(fù)用構(gòu)件間的聯(lián)系。領(lǐng)域?qū)崿F(xiàn)員應(yīng)熟悉軟件復(fù)用、領(lǐng)域?qū)崿F(xiàn)及軟件再工程技術(shù),熟悉程序設(shè)計(jì),并具有一定的該領(lǐng)域的經(jīng)驗(yàn)。

14.4敏捷軟件開(kāi)發(fā)過(guò)程及實(shí)踐

敏捷一詞有輕巧、機(jī)敏、迅捷、靈活、活力、高效等含義。2001年,17位軟件開(kāi)發(fā)方法學(xué)家齊聚一堂,將各自的開(kāi)發(fā)方法進(jìn)行了匯總,并共同定義了術(shù)語(yǔ)敏捷(Agile)。會(huì)議最終制定了敏捷軟件開(kāi)發(fā)宣言(ManifestoforAgileSoftwareDevelopment),并確立了一系列敏捷開(kāi)發(fā)方法的價(jià)值觀念和實(shí)用原則。敏捷軟件開(kāi)發(fā)涵蓋了眾多的開(kāi)發(fā)方法,其中包括極限編程XP、自適應(yīng)軟件開(kāi)發(fā)ASD、水晶方法族CrystalMethods、動(dòng)態(tài)系統(tǒng)開(kāi)發(fā)方法DSDM、特征驅(qū)動(dòng)的開(kāi)發(fā)FDD以及SCRUM方法等。

14.4.1敏捷思想與實(shí)踐原則

現(xiàn)有的軟件開(kāi)發(fā)方法大致可分為兩類:重型和輕型軟件開(kāi)發(fā)方法。重型軟件開(kāi)發(fā)方法一般具有嚴(yán)格和詳盡的軟件開(kāi)發(fā)過(guò)程,軟件開(kāi)發(fā)需產(chǎn)生大量的文檔;而輕型軟件開(kāi)發(fā)方法則強(qiáng)調(diào)軟件開(kāi)發(fā)過(guò)程的簡(jiǎn)潔性和靈活性,軟件開(kāi)發(fā)只需編寫少量的文檔。

敏捷軟件開(kāi)發(fā)是一類輕型的軟件開(kāi)發(fā)方法,它提供了一組思想和策略來(lái)指導(dǎo)軟件系統(tǒng)的快速開(kāi)發(fā)并響應(yīng)用戶需求的變化。不同于已有的其他軟件開(kāi)發(fā)方法,該方法對(duì)軟件開(kāi)發(fā)具有以下四個(gè)方面的基本認(rèn)識(shí):

(1)較之于過(guò)程和工具,應(yīng)更加重視人和交互的價(jià)值。優(yōu)秀的軟件開(kāi)發(fā)團(tuán)隊(duì)離不開(kāi)人員之間良好的溝通與合作,相比較而言,團(tuán)隊(duì)的合作與溝通能力比單純的編程能力更為重要,改善人員之間的交流與合作將有助于提升團(tuán)隊(duì)的軟件開(kāi)發(fā)水平。

(2)較之于面面俱到的文檔,應(yīng)更加重視可運(yùn)行軟件的價(jià)值。編制過(guò)多的文檔不僅會(huì)耗費(fèi)大量時(shí)間和精力,而且當(dāng)用戶需求變化時(shí)難以實(shí)現(xiàn)文檔與代碼的同步。敏捷軟件開(kāi)發(fā)方法提倡在軟件開(kāi)發(fā)過(guò)程中只編寫少量短小精煉的文檔。

(3)較之于合同談判,應(yīng)更加重視客戶合作的價(jià)值。成功的軟件開(kāi)發(fā)不應(yīng)單純依賴于合同條款和工作說(shuō)明,而應(yīng)將用戶和軟件開(kāi)發(fā)團(tuán)隊(duì)緊密地結(jié)合在一起,讓用戶積極參與軟件開(kāi)發(fā)并提供持續(xù)不斷、頻繁的反饋信息。

(4)較之于遵循計(jì)劃,應(yīng)更加重視響應(yīng)用戶需求變化的價(jià)值。為了適應(yīng)用戶需求的變化,敏捷軟件開(kāi)發(fā)認(rèn)為軟件開(kāi)發(fā)計(jì)劃不應(yīng)考慮得太遠(yuǎn),不要進(jìn)行過(guò)于周密、詳細(xì)的計(jì)劃,只應(yīng)覆蓋短期的工作任務(wù),對(duì)于中長(zhǎng)期的任務(wù)只需有一個(gè)粗略的規(guī)劃即可,并根據(jù)需求的變化適時(shí)地調(diào)整計(jì)劃。

在上述思想的指導(dǎo)下,敏捷軟件開(kāi)發(fā)提出了以下十二條原則來(lái)指導(dǎo)軟件系統(tǒng)的開(kāi)發(fā):

(1)盡早和持續(xù)地交付有價(jià)值的軟件,以使用戶滿意。敏捷軟件開(kāi)發(fā)最關(guān)心的是軟件系統(tǒng)的交付。該原則主張迭代性的軟件開(kāi)發(fā),但迭代周期不宜太長(zhǎng)。每次迭代結(jié)束以后,就向用戶交付一個(gè)可運(yùn)行的、實(shí)現(xiàn)部分需求的軟件產(chǎn)品。

(2)即使到了軟件開(kāi)發(fā)后期,也歡迎用戶需求的變更。敏捷軟件開(kāi)發(fā)主張采用模式、迭代和重構(gòu)等技術(shù),以適應(yīng)用戶需求的變更,獲得軟件結(jié)構(gòu)的靈活性。

(3)不斷交付可運(yùn)行的軟件系統(tǒng),交付周期可以從幾周到幾個(gè)月。敏捷軟件開(kāi)發(fā)主張軟件開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)經(jīng)常性地向用戶交付可運(yùn)行的軟件系統(tǒng),而不是大量的文檔或者計(jì)劃。交付的周期要適宜,太長(zhǎng)易使用戶失去耐性,軟件開(kāi)發(fā)團(tuán)隊(duì)也無(wú)法從用戶處及時(shí)獲得反饋信息;過(guò)短會(huì)使用戶難以接受持續(xù)不斷的軟件產(chǎn)品版本。

(4)在整個(gè)軟件項(xiàng)目開(kāi)發(fā)期間,用戶和開(kāi)發(fā)人員最好能每天一起工作,及時(shí)獲得反饋。

(5)由積極主動(dòng)的人來(lái)承擔(dān)項(xiàng)目開(kāi)發(fā),給他們提供所需環(huán)境和支持,信任他們的能力。

(6)團(tuán)隊(duì)內(nèi)部最有效的信息傳遞方式是面對(duì)面的交談。敏捷軟件開(kāi)發(fā)主張軟件開(kāi)發(fā)團(tuán)隊(duì)人員之間采用面對(duì)面交談的方式來(lái)進(jìn)行溝通,文檔不作為人員之間交流的默認(rèn)方式,只有在萬(wàn)不得已的情況下,才去編寫文檔。

(7)將可運(yùn)行的軟件作為衡量軟件開(kāi)發(fā)進(jìn)度的首要衡量標(biāo)準(zhǔn)。

(8)可持續(xù)性的開(kāi)發(fā),出資方、開(kāi)發(fā)方和用戶方應(yīng)當(dāng)保持長(zhǎng)期、恒定的開(kāi)發(fā)速度。不應(yīng)盲目追求高速,軟件開(kāi)發(fā)速度過(guò)快可能使軟件開(kāi)發(fā)人員陷入疲憊狀態(tài),可能會(huì)出現(xiàn)一些短期行為,導(dǎo)致給軟件項(xiàng)目留下隱患。

(9)關(guān)注優(yōu)秀的技能和良好的設(shè)計(jì)會(huì)增強(qiáng)敏捷性。敏捷的一個(gè)重要體現(xiàn)是響應(yīng)變化的能力。良好的設(shè)計(jì)是提高軟件系統(tǒng)應(yīng)變能力的關(guān)鍵。

(10)簡(jiǎn)單化。軟件開(kāi)發(fā)工作應(yīng)著眼于當(dāng)前欲解決的問(wèn)題,不要把問(wèn)題想得太復(fù)雜(如去預(yù)測(cè)將來(lái)可能出現(xiàn)的問(wèn)題),并采用最為簡(jiǎn)單的方法去解決它,不要試圖去構(gòu)建那些華而不實(shí)的系統(tǒng)。

(11)最好的構(gòu)架、需求和設(shè)計(jì)出自于自組織的團(tuán)隊(duì)。

敏捷團(tuán)隊(duì)?wèi)?yīng)當(dāng)是自組織的,以適應(yīng)需求的變化。軟件開(kāi)發(fā)任務(wù)不是從外部直接分配到團(tuán)隊(duì)成員,而是交給軟件開(kāi)發(fā)團(tuán)隊(duì),然后再由團(tuán)隊(duì)自行決定任務(wù)應(yīng)當(dāng)怎樣完成。敏捷團(tuán)隊(duì)所有成員對(duì)于軟件項(xiàng)目的所有部分都有權(quán)參與。

(12)軟件開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)定期就如何提高工作效率的問(wèn)題進(jìn)行反思,并進(jìn)行相應(yīng)的調(diào)整。

根據(jù)上述敏捷思想與實(shí)踐原則,敏捷軟件開(kāi)發(fā)應(yīng)更加適合于小規(guī)模軟件開(kāi)發(fā)團(tuán)隊(duì),因?yàn)檫^(guò)多的軟件開(kāi)發(fā)人員勢(shì)必會(huì)使得軟件開(kāi)發(fā)人員之間的交流變得非常復(fù)雜;同時(shí)也使它更加適合于需求易變的軟件系統(tǒng)的開(kāi)發(fā),從而充分發(fā)揮該方法的技術(shù)優(yōu)勢(shì)。

14.4.2支持敏捷軟件開(kāi)發(fā)的技術(shù)和管理手段

從技術(shù)的角度來(lái)看—敏捷思想和實(shí)踐原則對(duì)軟件系統(tǒng)的開(kāi)發(fā)提出了以下一組要求:盡快開(kāi)發(fā)出可運(yùn)行的軟件系統(tǒng);當(dāng)用戶需求改變時(shí)應(yīng)迅速地響應(yīng)變化;獲得良好的軟件設(shè)計(jì),以便當(dāng)需求變化時(shí)對(duì)軟件設(shè)計(jì)進(jìn)行不斷的調(diào)整和優(yōu)化;保證軟件系統(tǒng)的質(zhì)量;提高敏捷軟件開(kāi)發(fā)的效率等?,F(xiàn)階段軟件工程領(lǐng)域有以下一組技術(shù)可以有效地滿足上述要求,支持敏捷軟件開(kāi)發(fā)。

1.測(cè)試驅(qū)動(dòng)開(kāi)發(fā)

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)要求軟件開(kāi)發(fā)人員在編寫程序代碼之前,先確定和編寫好測(cè)試。或者說(shuō),軟件開(kāi)發(fā)人員首先要思考如何對(duì)某個(gè)功能進(jìn)行測(cè)試,設(shè)計(jì)好相應(yīng)的測(cè)試用例,編寫好相關(guān)的測(cè)試代碼,然后編寫相應(yīng)的程序代碼以通過(guò)軟件測(cè)試。該技術(shù)支持軟件系統(tǒng)功能的逐步實(shí)現(xiàn),有助于保證任何程序代碼都是可測(cè)試的,從而確保軟件系統(tǒng)的質(zhì)量。見(jiàn)本章14.5節(jié)。

2.敏捷設(shè)計(jì)

敏捷軟件開(kāi)發(fā)對(duì)軟件系統(tǒng)的設(shè)計(jì)提出了更高的要求。為了支持用戶需求的動(dòng)態(tài)變化以及由此而引發(fā)的對(duì)軟件設(shè)計(jì)的持續(xù)調(diào)整和優(yōu)化,軟件系統(tǒng)的設(shè)計(jì)應(yīng)易于改動(dòng)和調(diào)整,具有穩(wěn)固性、可理解性、簡(jiǎn)單性、干凈性和簡(jiǎn)潔性等特點(diǎn)。

針對(duì)這一要求,RobertC.Martin提出一組支持敏捷軟件開(kāi)發(fā)的設(shè)計(jì)原則,包括:①單一職責(zé)原則,每個(gè)模塊只具有一個(gè)職責(zé),主要體現(xiàn)模塊的內(nèi)聚度;②開(kāi)放封閉原則,擴(kuò)展時(shí)無(wú)需更改模塊的源代碼和可執(zhí)行代碼,要盡可能利用抽象類,以體現(xiàn)軟件設(shè)計(jì)的靈活性和可重用性;③依賴倒置原則,抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)依賴于抽象;④接口隔離原則,使用多個(gè)專門的接口比使用單一的總接口要好,因?yàn)檫@樣會(huì)職責(zé)分離、分工明確。

3.模式運(yùn)用

充分利用各種成熟模式,包括體系結(jié)構(gòu)模式和設(shè)計(jì)模式來(lái)進(jìn)行軟件系統(tǒng)的設(shè)計(jì),以支持軟件系統(tǒng)的可重用性和應(yīng)對(duì)用戶需求的變化。

4.快速原型技術(shù)

快速原型技術(shù)有助于迅速生成軟件系統(tǒng)的原型,并以此為媒介支持軟件開(kāi)發(fā)人員和用戶之間的交流和溝通,促使軟件開(kāi)發(fā)人員關(guān)注于用戶的需求,適應(yīng)用戶需求的動(dòng)態(tài)變化,幫助軟件開(kāi)發(fā)人員盡快從用戶處及時(shí)獲得反饋信息。

5.模型驅(qū)動(dòng)軟件開(kāi)發(fā)技術(shù)—MDA技術(shù)

MDA強(qiáng)調(diào)將軟件系統(tǒng)的功能規(guī)約與實(shí)現(xiàn)這些功能的技術(shù)和平臺(tái)相分離,它區(qū)分兩類不同的軟件系統(tǒng)模型:平臺(tái)無(wú)關(guān)的模型和平臺(tái)相關(guān)的模型,并通過(guò)模型映射在不同模型之間建立橋梁,從而有助于保護(hù)用戶的業(yè)務(wù)模型,促進(jìn)軟件系統(tǒng)的快速開(kāi)發(fā)和部署。

6.計(jì)算機(jī)輔助軟件工程(CASE)工具

目前已有許多支持敏捷軟件開(kāi)發(fā)的軟件工具,包括由Microtool公司研發(fā)的ActifExetreme,它支持敏捷過(guò)程管理;由Ideogramic公司開(kāi)發(fā)的IdeogramicUML,它支持針對(duì)敏捷過(guò)程的UML建模;由Borland公司開(kāi)發(fā)的TogetherToolSet,它支持敏捷開(kāi)發(fā)和極限編程中的諸多活動(dòng)等。

從管理的角度來(lái)看,敏捷思想和實(shí)踐原則對(duì)軟件系統(tǒng)的開(kāi)發(fā)提出了以下一組要求:管理好用戶的需求;確保軟件過(guò)程支持持續(xù)性的交付軟件系統(tǒng);管理好軟件開(kāi)發(fā)團(tuán)隊(duì);支持軟件開(kāi)發(fā)人員和用戶之間的交流、合作以及問(wèn)題的及時(shí)反饋;以人為本,充分發(fā)揮人的積極性和主動(dòng)性;保證軟件開(kāi)發(fā)速度的穩(wěn)定性和持續(xù)性;不斷改進(jìn)和優(yōu)化軟件開(kāi)發(fā)團(tuán)隊(duì)等。為了應(yīng)對(duì)這些要求,基于敏捷軟件開(kāi)發(fā)方法的軟件項(xiàng)目應(yīng)遵循以下管理方法。

(1)軟件過(guò)程模型的選擇?;诿艚蒈浖_(kāi)發(fā)方法的軟件項(xiàng)目組應(yīng)選擇那些支持漸進(jìn)、迭代開(kāi)發(fā)的軟件過(guò)程模型,如迭代模型、螺旋模型、RUP和快速原型等。

(2)團(tuán)隊(duì)建設(shè)?;诿艚蒈浖_(kāi)發(fā)方法的軟件項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)充分發(fā)揮人的主體作用,將用戶作為軟件開(kāi)發(fā)團(tuán)隊(duì)中的成員,并與軟件開(kāi)發(fā)人員一起工作和交流;支持團(tuán)隊(duì)成員,尤其是開(kāi)發(fā)人員和用戶之間的雙向交流和溝通。

(3)需求管理。盡管用戶需求在整個(gè)軟件開(kāi)發(fā)過(guò)程中是動(dòng)態(tài)變化的,但是每次迭代欲實(shí)現(xiàn)的用戶需求應(yīng)該是穩(wěn)定的,所生成的需求文檔應(yīng)處于受控狀態(tài),與項(xiàng)目計(jì)劃、產(chǎn)品和活動(dòng)相一致,并作為開(kāi)展軟件開(kāi)發(fā)工作的基礎(chǔ)。軟件開(kāi)發(fā)人員通過(guò)和用戶的充分和持續(xù)性交流,支持需求確認(rèn)和評(píng)審。

(4)軟件項(xiàng)目計(jì)劃。軟件開(kāi)發(fā)人員和用戶一起參與計(jì)劃的制定,包括估算規(guī)模和進(jìn)度、確定人員分工。軟件項(xiàng)目計(jì)劃不應(yīng)過(guò)細(xì),應(yīng)保留一定的靈活性。多個(gè)迭代欲實(shí)現(xiàn)的系統(tǒng)功能和迭代周期要大致相當(dāng),防止軟件開(kāi)發(fā)周期的劇烈變化,支持穩(wěn)定和可持續(xù)的軟件開(kāi)發(fā)。此外,每次迭代的軟件開(kāi)發(fā)周期要適中,不宜過(guò)長(zhǎng),否則用戶會(huì)失去耐心,無(wú)法及時(shí)得到反饋;也不宜過(guò)短,否則用戶難以消化,同樣影響反饋。

(5)跟蹤監(jiān)督。在對(duì)敏捷軟件開(kāi)發(fā)項(xiàng)目的跟蹤和監(jiān)督過(guò)程中,軟件項(xiàng)目管理人員要特別關(guān)注以下軟件風(fēng)險(xiǎn):①對(duì)規(guī)模和工作量的估算過(guò)于樂(lè)觀,該軟件風(fēng)險(xiǎn)將影響項(xiàng)目的周期性迭代;②軟件開(kāi)發(fā)人員和用戶之間的溝通不善,該軟件風(fēng)險(xiǎn)將可能導(dǎo)致軟件需求得不到用戶的認(rèn)可和確認(rèn);③需求定義不清晰和不明確,該軟件風(fēng)險(xiǎn)將可能導(dǎo)致需求不清,所開(kāi)發(fā)的軟件系統(tǒng)和用戶要求不一致;④項(xiàng)目組成員不能有效地在一起工作,該軟件風(fēng)險(xiǎn)將可能導(dǎo)致軟件開(kāi)發(fā)效率和軟件項(xiàng)目組敏捷度的下降;⑤任務(wù)的分配和人員的技能不匹配,該軟件風(fēng)險(xiǎn)將導(dǎo)致軟件開(kāi)發(fā)不能做到以人為本;⑥軟件設(shè)計(jì)低劣,該軟件風(fēng)險(xiǎn)將可能導(dǎo)致所開(kāi)發(fā)的軟件系統(tǒng)無(wú)法適應(yīng)用戶需求的不斷變化和調(diào)整等。

14.4.3極限編程

極限編程(ExtremeProgramming,XP)是由KentBeck在1996年提出的一種特殊的敏捷軟件開(kāi)發(fā)方法,它提出了更加具體和實(shí)際的指導(dǎo)方法以支持軟件系統(tǒng)的敏捷開(kāi)發(fā)。極限編程將其價(jià)值觀歸結(jié)為四條:①交流,側(cè)重于基于口頭(而不是文檔、報(bào)表和計(jì)劃)的交流;②反饋,主張通過(guò)持續(xù)、明確的反饋來(lái)獲得軟件的狀態(tài);③簡(jiǎn)單,主張用最簡(jiǎn)單的技術(shù)來(lái)解決當(dāng)前的問(wèn)題;④勇氣,強(qiáng)調(diào)快速開(kāi)發(fā)并在必要時(shí)具有重新進(jìn)行開(kāi)發(fā)的信心。

在此基礎(chǔ)上,極限編程定義了五條指導(dǎo)原則和十二條必須遵循的核心準(zhǔn)則。按照極限編程創(chuàng)始人KentBeck的觀點(diǎn),極限編程并沒(méi)有引入任何新的概念,它的創(chuàng)新之處在于:將經(jīng)過(guò)數(shù)十年檢驗(yàn)的準(zhǔn)則結(jié)合在一起,確保這些準(zhǔn)則相互支持并能夠得到有效執(zhí)行。

1.指導(dǎo)原則

極限編程的四條價(jià)值觀構(gòu)成了整個(gè)方法學(xué)的基礎(chǔ),在此基礎(chǔ)上極限編程引出了五條原則作為行為與實(shí)踐的指南。

(1)快速反饋。極限編程要求軟件開(kāi)發(fā)人員從用戶那里快速得到有關(guān)軟件系統(tǒng)的反饋情況,比如軟件開(kāi)發(fā)人員通過(guò)小步迭代迅速了解用戶的反應(yīng),以確認(rèn)當(dāng)前所做的開(kāi)發(fā)工作是否滿足用戶的需求,通過(guò)經(jīng)常性的自動(dòng)化測(cè)試和集成迅速了解軟件系統(tǒng)的運(yùn)行狀況。

(2)簡(jiǎn)單性假設(shè)。極限編程要求軟件開(kāi)發(fā)人員只考慮當(dāng)前迭代所面臨的問(wèn)題,無(wú)需考慮將來(lái)(如下一次迭代)所面臨的問(wèn)題,并且用簡(jiǎn)單的方法和技術(shù)來(lái)解決問(wèn)題。

(3)逐步更改。極限編程要求通過(guò)一系列細(xì)微的修改來(lái)逐步解決問(wèn)題和完善系統(tǒng),不要期望一次迭代就開(kāi)發(fā)出一個(gè)完整的軟件系統(tǒng)。

(4)支持變化。極限編程要求在軟件開(kāi)發(fā)過(guò)程歡迎用戶改變需求,支持用戶需求的動(dòng)態(tài)變化。

(5)高質(zhì)量的工作。極限編程要求采用諸如測(cè)試驅(qū)動(dòng)開(kāi)發(fā)等技術(shù)高質(zhì)量地開(kāi)展工作,確保所開(kāi)發(fā)軟件系統(tǒng)的質(zhì)量。

2.核心準(zhǔn)則

極限編程總結(jié)出的十二條核心準(zhǔn)則在日常的軟件開(kāi)發(fā)中已大多為人們所采用,然而單獨(dú)采用某些準(zhǔn)則卻有可能會(huì)導(dǎo)致混亂,極限編程的獨(dú)特之處在于將這些核心準(zhǔn)則有機(jī)結(jié)合在一起達(dá)到最佳效用。

(1)計(jì)劃游戲(PlanningGame)。旨在幫助軟件開(kāi)發(fā)團(tuán)隊(duì)快速制定下一次迭代的軟件開(kāi)發(fā)計(jì)劃。參與計(jì)劃游戲的人員包括軟件開(kāi)發(fā)人員和業(yè)務(wù)人員。

(2)隱喻(Metaphor)。是指使用一組與業(yè)務(wù)相關(guān)的術(shù)語(yǔ)來(lái)描述用戶需求,促使軟件開(kāi)發(fā)人員和業(yè)務(wù)人員對(duì)系統(tǒng)達(dá)成共同和一致的理解,該準(zhǔn)則有助于加強(qiáng)他們之間的溝通和合作,及時(shí)從用戶處獲得反饋并支持用戶更好地參與到軟件項(xiàng)目之中。

(3)小型發(fā)布。經(jīng)常性地給用戶發(fā)布能給他帶來(lái)業(yè)務(wù)價(jià)值的可運(yùn)行軟件系統(tǒng),每次發(fā)布的軟件系統(tǒng)僅提供少量的功能。小型發(fā)布不僅有助于縮短軟件開(kāi)發(fā)周期,提高軟件開(kāi)發(fā)小組對(duì)軟件開(kāi)發(fā)進(jìn)度的估算能力和精度,也有助于從用戶處獲得對(duì)軟件系統(tǒng)使用情況的真實(shí)反饋信息。

(4)簡(jiǎn)單設(shè)計(jì)。是指程序代碼能夠運(yùn)行所有的測(cè)試、沒(méi)有重復(fù)的邏輯、清晰地反映程序的意圖、包含盡可能少的類和方法。與大多數(shù)傳統(tǒng)軟件開(kāi)發(fā)方法不同的是,極限編程要求只為當(dāng)前的需求做設(shè)計(jì),而不必考慮將來(lái)可能的需求。過(guò)多考慮將會(huì)增加不必要的成本和開(kāi)銷。

(5)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。極限編程要求測(cè)試應(yīng)在編寫代碼之前進(jìn)行,而不是等到開(kāi)發(fā)結(jié)束后再安排一個(gè)專門的階段對(duì)軟件系統(tǒng)進(jìn)行測(cè)試。實(shí)踐表明,采用極限編程的這種測(cè)試方法能使軟件系統(tǒng)的質(zhì)量不斷得到提高。見(jiàn)本章14.5節(jié)。

(6)重構(gòu)—重整和優(yōu)化(Refactoring)。是指在不改變程序代碼功能的前提下,改進(jìn)程序代碼的設(shè)計(jì),使程序代碼更加簡(jiǎn)單,更易于擴(kuò)展。極限編程通過(guò)重構(gòu)使軟件系統(tǒng)具有靈活的結(jié)構(gòu),易于接受變化。

(7)結(jié)對(duì)編程。是指兩名程序員同時(shí)在一臺(tái)計(jì)算機(jī)上共同開(kāi)展編程工作。其優(yōu)勢(shì)在于:

①軟件開(kāi)發(fā)過(guò)程中的每一項(xiàng)決定都至少由兩個(gè)人來(lái)共同完成,對(duì)系統(tǒng)的每一部分至少有兩個(gè)人熟悉,這可以降低人員流動(dòng)帶來(lái)的軟件風(fēng)險(xiǎn);

②在進(jìn)行結(jié)對(duì)編程過(guò)程中,一人著眼于實(shí)現(xiàn)細(xì)節(jié),而另一人則可以從全局的角度進(jìn)行考慮,可以有效地分離關(guān)注視點(diǎn),有助于對(duì)軟件系統(tǒng)的開(kāi)發(fā)進(jìn)行全面的考慮;

③有助于在編碼的同時(shí)進(jìn)行代碼復(fù)審,有助于提高程序代碼的質(zhì)量;

④參與結(jié)對(duì)編程的程序員之間相互討論,可以強(qiáng)化知識(shí)共享。

(8)代碼集體擁有。是指開(kāi)發(fā)小組的任何成員都可以查看并修改任何部分的代碼。代碼集體擁有與結(jié)對(duì)編程、編碼標(biāo)準(zhǔn)等極限編程準(zhǔn)則是相輔相成的,如果沒(méi)有這些準(zhǔn)則的支持而單獨(dú)采用代碼集體擁有,將使軟件項(xiàng)目陷入混亂。

(9)漸進(jìn)式持續(xù)集成。不要等到所有軟件模塊完成之后再進(jìn)行軟件系統(tǒng)的集成,而是應(yīng)經(jīng)常性地進(jìn)行集成。集成的周期應(yīng)當(dāng)盡可能短,可能是幾個(gè)小時(shí)或者幾天(而不是幾周或幾個(gè)月)集成一次。

(10)每周工作40小時(shí)。極限編程倡導(dǎo)質(zhì)量?jī)?yōu)先,不主張為了追求開(kāi)發(fā)速度而片面延長(zhǎng)工作時(shí)間,即使程序員自愿,也不提倡加班。

(11)把現(xiàn)場(chǎng)用戶作為開(kāi)發(fā)團(tuán)隊(duì)成員。極限編程要求用戶代表在現(xiàn)場(chǎng)辦公,參與軟件開(kāi)發(fā)的全過(guò)程,確保軟件開(kāi)發(fā)人員能夠及時(shí)得到交流與反饋信息。

(12)編碼標(biāo)準(zhǔn)與規(guī)范。在軟件開(kāi)發(fā)過(guò)程中,程序員遵循統(tǒng)一的編碼標(biāo)準(zhǔn),這有助于提高軟件系統(tǒng)的可理解性和可維護(hù)性。例如,代碼集體擁有允許每個(gè)軟件開(kāi)發(fā)人員都可修改每個(gè)模塊的程序代碼,如果沒(méi)有統(tǒng)一的編碼標(biāo)準(zhǔn),這種修改必將導(dǎo)致混亂。

綜上所述,XP很像一個(gè)由很多小塊拼起來(lái)的智力拼圖,單獨(dú)看每一小塊都沒(méi)有什么意義,但拼裝好后,一幅美麗的圖畫就會(huì)呈現(xiàn)在你面前。

14.4.4其他敏捷軟件開(kāi)發(fā)方法

1.自適應(yīng)軟件開(kāi)發(fā)(AdaptiveSoftwareDevelopment,ASD)

ASD由JimHighsmith在1999年正式提出。其思想主要來(lái)源于復(fù)雜系統(tǒng)的混沌理論。ASD自適應(yīng)軟件開(kāi)發(fā)過(guò)程的生命周期包括三個(gè)階段:思考(自適應(yīng)循環(huán)策劃及發(fā)布時(shí)間計(jì)劃)、協(xié)作(需求獲取及規(guī)格說(shuō)明)、學(xué)習(xí)(構(gòu)件實(shí)現(xiàn)、測(cè)試及事后剖析)。

2.水晶方法族(CrystalMethods,CM)

CM由AlistairCockburn在20世紀(jì)90年代末提出。其核心思想是:不同類型的項(xiàng)目需要不同的方法,它們包含具有共性的核心元素,每一個(gè)都含有獨(dú)特的角色、過(guò)程模式、工作產(chǎn)品和實(shí)踐。雖然水晶系列不如極限編程XP有那樣好的生產(chǎn)效率,但會(huì)有更多的人接受并遵循它的過(guò)程原則。

3.動(dòng)態(tài)系統(tǒng)開(kāi)發(fā)方法(DynamicSystemDevelopmentMethod,DSDM)

DSDM倡導(dǎo)以業(yè)務(wù)為核心,快速而有效地進(jìn)行系統(tǒng)開(kāi)發(fā)。實(shí)踐證明:DSDM是成功的敏捷開(kāi)發(fā)方法之一。DSDM不但遵循了敏捷方法的原理,而且也適合于那些堅(jiān)持成熟的傳統(tǒng)開(kāi)發(fā)方法又具有堅(jiān)實(shí)基礎(chǔ)的軟件開(kāi)發(fā)團(tuán)隊(duì)。DSDM的生命周期包括:可行性研究、業(yè)務(wù)建模、功能模型迭代、設(shè)計(jì)和構(gòu)建迭代、實(shí)現(xiàn)迭代。

4.特征驅(qū)動(dòng)的開(kāi)發(fā)(FeatureDrivenDevelopment,FDD)

FDD由PeterCoad、JeffdeLuca、EricLefebvre共同提出,是一套針對(duì)中、小型軟件開(kāi)發(fā)項(xiàng)目的開(kāi)發(fā)模式。此外,F(xiàn)DD是一個(gè)模型驅(qū)動(dòng)的快速迭代開(kāi)發(fā)過(guò)程,它強(qiáng)調(diào)的是簡(jiǎn)化、實(shí)用。FDD易于被開(kāi)發(fā)團(tuán)隊(duì)接受,適用于需求經(jīng)常變動(dòng)的項(xiàng)目。FDD方法定義了五個(gè)過(guò)程活動(dòng):全局模型開(kāi)發(fā)、特征列表改造、特征計(jì)劃編制、特征設(shè)計(jì)與特征構(gòu)建。

5.?SCRUM方法

SCRUM是一種迭代式增量化軟件開(kāi)發(fā)過(guò)程,通常用于敏捷軟件開(kāi)發(fā)。SCRUM在英語(yǔ)的意思是“橄欖球的爭(zhēng)球”,該方法由KenSchwaber和JeffSutherland提出,旨在尋求充分發(fā)揮面向?qū)ο蠛蜆?gòu)件技術(shù)的開(kāi)發(fā)方法,是對(duì)迭代式面向?qū)ο蠓椒ǖ母倪M(jìn)。它是一個(gè)包括了一系列實(shí)踐和預(yù)定義角色的經(jīng)驗(yàn)化過(guò)程骨架,產(chǎn)品負(fù)責(zé)人代表利益所有者,開(kāi)發(fā)團(tuán)隊(duì)包括了所有開(kāi)發(fā)人員,它使得團(tuán)隊(duì)成員能夠獨(dú)立地、集中地在創(chuàng)造性的環(huán)境下工作。SCRUM過(guò)程流包括:產(chǎn)品待定項(xiàng)、沖刺待定項(xiàng)、待定項(xiàng)的展開(kāi)與執(zhí)行、每日15分鐘例會(huì)、沖刺結(jié)束時(shí)對(duì)新功能的演示。

相較傳統(tǒng)的軟件開(kāi)發(fā)模型(瀑布模型),Scrum的優(yōu)勢(shì)在于:

(1)采用迭代式開(kāi)發(fā),有效降低軟件開(kāi)發(fā)的風(fēng)險(xiǎn);

(2)靈活應(yīng)付軟件開(kāi)發(fā)中的變更,注重團(tuán)隊(duì)成員之間的溝通;

(3)明確的產(chǎn)出物,相較于傳統(tǒng)的開(kāi)發(fā)模型,敏捷模型能夠減輕開(kāi)發(fā)人員的負(fù)擔(dān);

(4)每階段的目標(biāo)明確,有能夠被認(rèn)同的產(chǎn)出物,提升團(tuán)隊(duì)對(duì)產(chǎn)品的認(rèn)知與成就感。

14.5測(cè)試驅(qū)動(dòng)開(kāi)發(fā)

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)方式能夠編寫出更加簡(jiǎn)單、更易于理解和維護(hù)的程序代碼,有助于提高程序代碼的質(zhì)量,而且當(dāng)它與敏捷軟件開(kāi)發(fā)方法、極限編程和重構(gòu)技術(shù)等相結(jié)合時(shí),有助于獲得簡(jiǎn)單和健壯的軟件設(shè)計(jì)。.

14.5.1測(cè)試驅(qū)動(dòng)開(kāi)發(fā)思想

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是指在編寫程序代碼之前,首先確定和設(shè)計(jì)好測(cè)試(在明確要開(kāi)發(fā)某個(gè)軟件功能后,程序員首先要思考如何對(duì)這個(gè)功能進(jìn)行測(cè)試,設(shè)計(jì)好相應(yīng)的測(cè)試用例并編寫好相關(guān)的測(cè)試代碼),然后再編寫與該軟件功能相對(duì)應(yīng)的程序代碼,以運(yùn)行測(cè)試程序來(lái)對(duì)程序代碼進(jìn)行測(cè)試。如此循環(huán)反復(fù),直至實(shí)現(xiàn)軟件系統(tǒng)的全部功能。

傳統(tǒng)的軟件測(cè)試方法往往會(huì)存在以下幾個(gè)方面的問(wèn)題:

(1)當(dāng)程序員編寫完代碼后,由于趕進(jìn)度,經(jīng)常沒(méi)有足夠的時(shí)間對(duì)代碼進(jìn)行詳盡和充分的測(cè)試。如果測(cè)試不夠充分,那么代碼中就會(huì)遺留許多未知的軟件故障和bug等。

(2)如果測(cè)試人員是基于相關(guān)的文檔(而不是代碼)來(lái)設(shè)計(jì)測(cè)試用例和編寫測(cè)試代碼的,那么當(dāng)這些文檔與代碼不一致時(shí),對(duì)代碼進(jìn)行的測(cè)試就會(huì)存在諸多問(wèn)題,如設(shè)計(jì)的測(cè)試用例不正確、與代碼不一致等。

(3)測(cè)試通常是在代碼編寫完后才進(jìn)行的,無(wú)法保證編寫程序和軟件測(cè)試同步進(jìn)行。

(4)對(duì)于許多程序員而言,更愿意編寫程序代碼,而不愿測(cè)試程序。因?yàn)榫帉懗绦蚴且粋€(gè)創(chuàng)造和生產(chǎn)的過(guò)程,讓他們覺(jué)得有成就感;而測(cè)試通常被視為是一件乏味的工作。

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的精髓在于:將軟件測(cè)試方案的設(shè)計(jì)工作提前到編寫程序代碼之前;從測(cè)試的角度來(lái)驗(yàn)證、分析和指導(dǎo)設(shè)計(jì);同時(shí)將測(cè)試方案當(dāng)作程序編碼的準(zhǔn)繩,有效地利用它來(lái)檢驗(yàn)程序編碼的每一個(gè)步驟,及時(shí)發(fā)現(xiàn)其中的問(wèn)題,實(shí)現(xiàn)軟件開(kāi)發(fā)的“小步快走”。因此,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)具有以下特點(diǎn):

(1)根據(jù)測(cè)試來(lái)編寫代碼。

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)強(qiáng)調(diào):首先編寫出用于測(cè)試某項(xiàng)功能是否符合要求的測(cè)試項(xiàng)(包括測(cè)試代碼和測(cè)試用例等),然后再去編寫相應(yīng)的程序代碼來(lái)實(shí)現(xiàn)這一功能。因此,它體現(xiàn)了一種由測(cè)試來(lái)驅(qū)動(dòng)軟件開(kāi)發(fā)的思想。

(2)程序員設(shè)計(jì)并維護(hù)一組測(cè)試,編寫測(cè)試的目的不僅僅是為了測(cè)試程序代碼能否正常工作,而且被用于定義程序代碼的內(nèi)涵。

例如,假設(shè)要編寫一個(gè)列表類List。傳統(tǒng)的做法是先編寫完列表類的所有程序代碼(包括其所有的屬性和方法),然后設(shè)計(jì)測(cè)試用例和編寫測(cè)試代碼對(duì)它進(jìn)行測(cè)試。在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)中,其過(guò)程正好相反。程序員首先要確定和設(shè)計(jì)一個(gè)測(cè)試,如空列表的長(zhǎng)度應(yīng)該為0,并編寫以下的測(cè)試代碼。

PublicvoidtestEmptyList(){

ListemptyList=newList();

assertEquals(“Thesizeofemptylistshouldbe0”,0,emptyList.size());

}

程序員然后將測(cè)試作為列表類的一種行為規(guī)約來(lái)指導(dǎo)列表類程序代碼的編寫。根據(jù)上述測(cè)試用例和測(cè)試代碼的描述,程序員首先要實(shí)現(xiàn)和編寫List類的方法size(),對(duì)于任何空列表而言,該方法的返回值均為0。

(3)確保任何程序代碼都是可測(cè)試的。

由于在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)中,程序員首先考慮的是如何測(cè)試軟件系統(tǒng)的功能(即確定和編寫測(cè)試),然后再考慮如何實(shí)現(xiàn)系統(tǒng)的功能(即編寫程序代碼),因此,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)可以確保所有的程序代碼都是根據(jù)程序員所設(shè)計(jì)的測(cè)試集來(lái)編寫的,所編寫的任何程序代碼都是可測(cè)試的。這有助于有效地發(fā)現(xiàn)程序代碼中的故障、提高軟件系統(tǒng)的質(zhì)量。

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)應(yīng)遵循的原則:

①測(cè)試隔離。不同代碼的測(cè)試應(yīng)該相互隔離。對(duì)某一代碼的測(cè)試只考慮此代碼本身,不要考慮其他的代碼細(xì)節(jié)。

②任務(wù)聚焦。在測(cè)試驅(qū)動(dòng)開(kāi)發(fā)過(guò)程中,程序員往往需要實(shí)施多種不同形式的工作并進(jìn)行多次的迭代,比如設(shè)計(jì)測(cè)試用例、編寫測(cè)試代碼、編寫程序代碼、對(duì)代碼進(jìn)行重構(gòu)、運(yùn)行測(cè)試等。在此情況下,程序員應(yīng)將注意力集中在當(dāng)前工作(即當(dāng)前欲完成的軟件功能),而不要考慮其他方面的內(nèi)容,無(wú)謂地增加工作的復(fù)雜度。

③循序漸進(jìn)。一個(gè)軟件模塊的功能很多,程序員應(yīng)該針對(duì)軟件模塊的功能,設(shè)計(jì)相應(yīng)的測(cè)試,并形成測(cè)試列表。然后根據(jù)測(cè)試列表不斷地完成相應(yīng)的測(cè)試用例、測(cè)試代碼和功能代碼,逐步完成整個(gè)軟件模塊的功能。這種循序漸進(jìn)的做法可以防止疏漏,避免干擾其他工作。

④測(cè)試驅(qū)動(dòng)。要實(shí)現(xiàn)某個(gè)功能、編寫某個(gè)類,程序員首先應(yīng)編寫相應(yīng)的測(cè)試代碼和設(shè)計(jì)相應(yīng)的測(cè)試用例,然后在此基礎(chǔ)上編寫程序代碼。

⑤先寫斷言。在編寫測(cè)試代碼時(shí),程序員應(yīng)首先編寫對(duì)功能代碼進(jìn)行判斷的斷言語(yǔ)句,然后再編寫相應(yīng)的輔助語(yǔ)句。

⑥及時(shí)重構(gòu)。程序員在編碼和測(cè)試過(guò)程中應(yīng)對(duì)那些結(jié)構(gòu)不合理、重復(fù)的程序代碼進(jìn)行重構(gòu),以獲得更好的軟件結(jié)構(gòu),消除冗余代碼。

與傳統(tǒng)的軟件編碼和測(cè)試方式相比較,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)具有以下優(yōu)點(diǎn):①編碼完成后即完工。在程序代碼編寫完成并通過(guò)測(cè)試之后,意味著編碼任務(wù)的完成。而在傳統(tǒng)的方式中,由于編碼完成之后需要進(jìn)行單元測(cè)試,因而很難知道什么時(shí)候編碼任務(wù)結(jié)束。②易于維護(hù)。軟件系統(tǒng)與詳盡的測(cè)試集一起發(fā)布,有助于將來(lái)對(duì)程序進(jìn)行修改和擴(kuò)展,并在開(kāi)發(fā)過(guò)程中及時(shí)對(duì)程序代碼進(jìn)行重構(gòu),提高了軟件系統(tǒng)的可維護(hù)性。③質(zhì)量保證。任何程序代碼都經(jīng)過(guò)了測(cè)試,有助于有效地發(fā)現(xiàn)程序代碼中的錯(cuò)誤,提高軟件系統(tǒng)的質(zhì)量。

14.5.2支持測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的軟件工具

可支持測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的軟件工具包括cppUnit、csUnit、CUnit、DUnit、DBUnit、JUnit、NDbUnit、OUnit、PHPUnit、PyUnit、NUnit、VBUnit等。

JUnit是一個(gè)由ErichGamma和KentBeck二人共同開(kāi)發(fā)的開(kāi)源Java單元測(cè)試框架。JUnit框架提供了一組類來(lái)支持單元測(cè)試。通過(guò)繼承重用這些類,程序員可以方便地編寫測(cè)試程序代碼,運(yùn)行測(cè)試程序以發(fā)現(xiàn)程序代碼中的故障。JUnit的主要類結(jié)構(gòu)如圖14-3所示。

圖14-3JUnit的主要類結(jié)構(gòu)

(1)

Test接口。所有測(cè)試類(包括TestCase和TestSuite)必須實(shí)現(xiàn)該接口。Test提供了兩個(gè)方法:countTestCase方法用于計(jì)算一個(gè)測(cè)試將要運(yùn)行的測(cè)試用例的數(shù)目;run方法用于運(yùn)行一個(gè)測(cè)試并收集它的測(cè)試結(jié)果。

(2)?Assert。該類定義了軟件測(cè)試時(shí)要用到的各種方法。例如assertEquals方法用于判斷程序代碼的運(yùn)行結(jié)果是否等同于預(yù)期結(jié)果;assertNull和assertNotNull方法用于判斷對(duì)象是否為空等等。

(3)

TestCase。TestCase類實(shí)現(xiàn)了Test接口并繼承Assert類,它是程序員在編寫測(cè)試程序時(shí)必須擴(kuò)展的類。通過(guò)繼承,程序員可以方便地利用該類提供的方法對(duì)程序單元進(jìn)行測(cè)試。

(4)

TestSuite。TestSuite類實(shí)現(xiàn)了Test接口并提供了諸多方法來(lái)支持測(cè)試,當(dāng)程序員試圖將多個(gè)測(cè)試集中在一起進(jìn)行測(cè)試時(shí)必須擴(kuò)展該類。

目前,許多軟件開(kāi)發(fā)工具和環(huán)境(如Eclipse)集成了JUnit以支持軟件測(cè)試。JUnit具有以下特點(diǎn):①提供了一組API,支持程序員編寫可重用的測(cè)試代碼;②提供了多種方式(文本或者圖形界面)來(lái)顯示測(cè)試結(jié)果;③提供了單元測(cè)試用例成批運(yùn)行的功能;④超輕量級(jí)而且使用簡(jiǎn)單;⑤整個(gè)框架設(shè)計(jì)良好,易于擴(kuò)展。

14.5.3測(cè)試驅(qū)動(dòng)開(kāi)發(fā)過(guò)程

測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的思想非常樸素和簡(jiǎn)單,就是根據(jù)要實(shí)現(xiàn)的功能編寫測(cè)試,然后根據(jù)測(cè)試來(lái)編寫程序代碼,最后運(yùn)行程序代碼以通過(guò)測(cè)試。測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的過(guò)程如圖14-4所示。

圖14-4測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的過(guò)程

14.6現(xiàn)代軟件工程其他新方法

1.模型驅(qū)動(dòng)體系結(jié)構(gòu)(MDA)軟件開(kāi)發(fā)方法

(1)

MDA方法的提出。復(fù)雜軟件系統(tǒng)的開(kāi)發(fā)面臨著兩方面關(guān)鍵問(wèn)題的解決。首先,當(dāng)業(yè)務(wù)需求發(fā)生變化時(shí),如何關(guān)注于變化了的業(yè)務(wù)需求,并根據(jù)所選擇的技術(shù)和平臺(tái),盡快生成相應(yīng)的軟件系統(tǒng);其次,當(dāng)實(shí)現(xiàn)系統(tǒng)的方法、技術(shù)和平臺(tái)發(fā)生變化時(shí)(如從C++轉(zhuǎn)為EJB/J2EE),如何根據(jù)系統(tǒng)的業(yè)務(wù)需求模型,快速生成基于新方法、新技術(shù)和新平臺(tái)的軟件系統(tǒng)。

由對(duì)象管理組織(ObjectManagementGroup,OMG)提出和倡導(dǎo)的模型驅(qū)動(dòng)體系結(jié)構(gòu)(ModelDrivenArchitecture,MDA)方法通過(guò)將業(yè)務(wù)需求與實(shí)現(xiàn)業(yè)務(wù)需求的技術(shù)相分離,可以有效地促進(jìn)上述兩個(gè)問(wèn)題的解決。

(2)

MDA的思想。該方法強(qiáng)調(diào)將軟件系統(tǒng)的功能規(guī)約與實(shí)現(xiàn)這些功能的技術(shù)和平臺(tái)相分離,并與OMG所推出的各種技術(shù)標(biāo)準(zhǔn)相融合。MDA將軟件系統(tǒng)的模型分為兩類:一類是平臺(tái)無(wú)關(guān)的模型(PlatformIndependentModel,PIM),另一類是平臺(tái)相關(guān)的模型(PlatformSpecificModel,PSM)。這里所指的平臺(tái)是指一系列子系統(tǒng)和技術(shù)的集合,它們通過(guò)各種特定的接口和使用模式為應(yīng)用系統(tǒng)的開(kāi)發(fā)和運(yùn)行提供一組相關(guān)的功能,如J2EE、COBRA、VisualStudioC++、.Net/C#等。

MDA方法實(shí)際上是OMG所提出的(ObjectManagementArchitecture,OMA)技術(shù)的演化,它們都想解決軟件系統(tǒng)的集成和互操作問(wèn)題,并試圖將這一問(wèn)題的解決貫穿于軟件系統(tǒng)的整個(gè)生命周期,包括建模、分析、設(shè)計(jì)、構(gòu)造、組裝、集成、發(fā)布、管理和演化。MDA的上述思想體現(xiàn)了OMG關(guān)于軟件系統(tǒng)開(kāi)發(fā)的四個(gè)基本原則:

①定義良好的系統(tǒng)模型(符號(hào)表示模型)是理解和開(kāi)發(fā)軟件系統(tǒng)的基礎(chǔ);

②軟件系統(tǒng)的開(kāi)發(fā)是一個(gè)建立軟件系統(tǒng)模型、實(shí)現(xiàn)不同系統(tǒng)模型之間相互轉(zhuǎn)換的過(guò)程;

③元模型是描述和分析系統(tǒng)模型的形式化基礎(chǔ),它有助于促進(jìn)系統(tǒng)模型之間的集成和轉(zhuǎn)換,是通過(guò)工具實(shí)現(xiàn)軟件開(kāi)發(fā)自動(dòng)化的基礎(chǔ);

④接受和采納基于模型的軟件開(kāi)發(fā)方法需要工業(yè)界的技術(shù)標(biāo)準(zhǔn),從而為用戶提供開(kāi)放性,促進(jìn)開(kāi)發(fā)商之間的競(jìng)爭(zhēng)。

為了支持上述原則,MDA試圖與現(xiàn)有的各種軟件開(kāi)發(fā)技術(shù)標(biāo)準(zhǔn)相集成。圖14-5描述了MDA與一組軟件開(kāi)發(fā)技術(shù)標(biāo)準(zhǔn)之間的關(guān)系。圖的中心部分描述了支持MDA的三種OMG建模語(yǔ)言:UML,MOF(Meta-ObjectFacility)和CWM(CommonWarehouseMeta-Model),它們通常是建立平臺(tái)無(wú)關(guān)模型的主要表示工具。UML是OMG推出的面向?qū)ο蠼UZ(yǔ)言,它基于對(duì)象技術(shù),提供了一組元概念和可視化的模型,對(duì)不同視點(diǎn)(如結(jié)構(gòu)視點(diǎn)和行為視點(diǎn)等)、不同抽象層次的系統(tǒng)模型進(jìn)行建模。

MOF不僅提供了模型的標(biāo)準(zhǔn)化倉(cāng)庫(kù),而且定義了相應(yīng)的結(jié)構(gòu)來(lái)支持不同軟件開(kāi)發(fā)小組能夠針對(duì)這些模型一起開(kāi)展工作。CWM為數(shù)據(jù)存儲(chǔ)集成提供了工業(yè)標(biāo)準(zhǔn),可用于表示各種數(shù)據(jù)模型(模式)、模式轉(zhuǎn)換、OLAP和數(shù)據(jù)挖掘模型等。圖14-5的中間層部分描述了一組支持MDA的、與目標(biāo)平臺(tái)相關(guān)的技術(shù),包括WebServices、CORBA、Java(包括企業(yè)JavaBeans/J2EE)、C#/.NET、XML/XMI/SOAP等。借助于諸如普適計(jì)算、目錄、安全、事件、事務(wù)等一組服務(wù),MDA方法可用于支持諸如電子商務(wù)、金融、電信、醫(yī)療、交通、制造等應(yīng)用領(lǐng)域的開(kāi)發(fā)。

圖14-5OMG的模型驅(qū)動(dòng)體系結(jié)構(gòu)

MDA的核心是要將商

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論