摘錄地址:
http://www-128.ibm.com/developerworks/cn/java/l-opens-app/index.html
企業(yè)應(yīng)用開(kāi)發(fā)目前面臨的主要問(wèn)題
企業(yè)應(yīng)用是指服務(wù)于商業(yè)目的,處理企業(yè)業(yè)務(wù)信息、數(shù)據(jù)的軟件系統(tǒng)。雖然隨著dot COM熱潮逐漸冷卻,企業(yè)開(kāi)始謹(jǐn)慎考慮自己在應(yīng)用系統(tǒng)開(kāi)發(fā)方面的投入,但是畢竟企業(yè)的業(yè)務(wù)流程需要專(zhuān)門(mén)的信息系統(tǒng)處理,從而提高自動(dòng)化程度、減少中間環(huán)節(jié)、加快信息處理速度。因此,目前國(guó)內(nèi)的企業(yè)應(yīng)用項(xiàng)目開(kāi)發(fā)還是日益火爆,尤其在電子政務(wù)、CRM、SCM等領(lǐng)域更是如此。
但是,不論企業(yè)應(yīng)用開(kāi)發(fā)是采用自行開(kāi)發(fā)或者委托系統(tǒng)集成商進(jìn)行開(kāi)發(fā),都存在著下面一些情況:
-
大部分項(xiàng)目超時(shí)或者超出預(yù)算;
-
項(xiàng)目在部署以后BUG很多,而且修改的周期比較長(zhǎng);
對(duì)于系統(tǒng)集成商來(lái)說(shuō),下面的情況更是比較普遍:
-
沒(méi)有統(tǒng)一的FRAMEWORK,每個(gè)項(xiàng)目都會(huì)重新設(shè)計(jì)ARCHITECTURE;
-
項(xiàng)目開(kāi)發(fā)過(guò)程的自動(dòng)化程度和重復(fù)步驟不是很多,人為引入的BUG很多;
開(kāi)放源碼項(xiàng)目現(xiàn)狀
開(kāi)放源碼運(yùn)動(dòng)在90年代開(kāi)始日益發(fā)展,目前已經(jīng)成為軟件業(yè)內(nèi)不可低估的一股勢(shì)力,比較著名的有Linux,、Apache、Tomcat、MySQL等。目前,開(kāi)放源碼的潮流已經(jīng)超出了操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)和WEB服務(wù)器等系統(tǒng)開(kāi)發(fā)領(lǐng)域,開(kāi)發(fā)在企業(yè)應(yīng)用開(kāi)發(fā)中尋找新的領(lǐng)地。尤其是對(duì)于企業(yè)應(yīng)用開(kāi)發(fā)的框架和CASE工具,開(kāi)放源碼項(xiàng)目都有很優(yōu)秀的解決方案。
國(guó)外開(kāi)放源碼項(xiàng)目的集中地有
www.apache.org
以及
www.sourceforge.net
,其中,前者為大家奉獻(xiàn)了著名的Apache、Tomcat、Struts、Axis;而后者是最著名的開(kāi)源項(xiàng)目中心。同時(shí),國(guó)內(nèi)自90年代末開(kāi)始也有很多人投入到開(kāi)源項(xiàng)目的開(kāi)發(fā),比較集中的網(wǎng)址是 "共創(chuàng)軟件聯(lián)盟"(
www.cosoft.org.cn
) 等等,他們除了提供各種CASE工具以外,還有一些項(xiàng)目是專(zhuān)注于特定領(lǐng)域的解決方案開(kāi)發(fā),如CRM等。
JAVA開(kāi)發(fā)源碼項(xiàng)目與工具的應(yīng)用
對(duì)于目前企業(yè)應(yīng)用開(kāi)發(fā)競(jìng)爭(zhēng)日益激烈,需求變更頻繁,各個(gè)系統(tǒng)集成商都面臨巨大的生存壓力。其中有兩個(gè)方面表現(xiàn)尤其突出:
-
沒(méi)有統(tǒng)一的軟件開(kāi)發(fā)過(guò)程或者照搬重量級(jí)的軟件開(kāi)發(fā)過(guò)程,例如RUP等,但是往往由于時(shí)間等壓力的影響,并不能切實(shí)執(zhí)行;
-
大部分企業(yè)仍然沒(méi)有擺脫手工作坊期間的做法,每個(gè)項(xiàng)目或者產(chǎn)品由于管理人員或者團(tuán)隊(duì)的不同,重新設(shè)計(jì)系統(tǒng)框架,浪費(fèi)大量的時(shí)間在結(jié)構(gòu)驗(yàn)證與調(diào)整上;
企業(yè)應(yīng)用系統(tǒng)的開(kāi)發(fā)中,需求的變更是項(xiàng)目中唯一不變的東西,而且,為了保持開(kāi)發(fā)的一致性和利益最大化,系統(tǒng)集成商需要與客戶(hù)保持長(zhǎng)期的合作。因此,采取演進(jìn)式敏捷軟件開(kāi)發(fā),可以更好的保證項(xiàng)目質(zhì)量。在所有的敏捷軟件開(kāi)發(fā)方法中,XP是目前應(yīng)用最為廣泛的一種。它是一種高度動(dòng)態(tài)的過(guò)程,它通過(guò)非常短的迭代周期來(lái)應(yīng)對(duì)需求的變化;溝通、簡(jiǎn)單、反饋和勇氣是它的四大核心價(jià)值。同時(shí),它集中了業(yè)界的很多最佳實(shí)踐,目前已經(jīng)有18條之多,XP強(qiáng)調(diào)通過(guò)嚴(yán)格執(zhí)行全部的最佳實(shí)踐來(lái)獲得"極限"效果。
同時(shí),出于復(fù)用和效率的考慮,尤其是對(duì)于系統(tǒng)集成商,企業(yè)應(yīng)用系統(tǒng)應(yīng)該具有自己的框架和結(jié)構(gòu)。擁有具有良好性能、經(jīng)過(guò)項(xiàng)目驗(yàn)證的系統(tǒng)框架,結(jié)合有效的軟件開(kāi)發(fā)過(guò)程,系統(tǒng)集成商可以快速、成功地開(kāi)發(fā)企業(yè)應(yīng)用系統(tǒng)。
為了更好的開(kāi)發(fā)成功的系統(tǒng),系統(tǒng)集成商們可以試著從以下兩個(gè)方面著手解決問(wèn)題:
-
結(jié)合開(kāi)源工具的支持,在組織內(nèi)部實(shí)施"敏捷軟件開(kāi)發(fā)方法";
-
為核心業(yè)務(wù)領(lǐng)域建立靈活、有效的Framework;
由于目前很多企業(yè)應(yīng)用是采用基于J2EE技術(shù)的網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā),因此,下面主要介紹基于JAVA的開(kāi)源項(xiàng)目、工具的應(yīng)用。
1. 開(kāi)源工具與XP
XP的12條最佳實(shí)踐,對(duì)于所有的企業(yè)應(yīng)用開(kāi)發(fā)商而言,由于組織和文化的不同,不可能全部應(yīng)用,但是,下面幾個(gè)實(shí)踐是有條件逐步實(shí)施的:
-
代碼規(guī)范:CODE STANDARD
-
測(cè)試驅(qū)動(dòng)開(kāi)發(fā):TEST-DRIVEN DEVELOPMENT
-
日構(gòu)建:DAILY BUILDING
-
持續(xù)集成:CONTINUOUS INTEGRATION
-
小步發(fā)布:SMALL RELEASE
-
每日晨會(huì):DAILY MEETING
-
每周40小時(shí)工作:40-HOURS A WEEK
其中,CODE STANDARD和TDD是CONTINUOUS INTEGRATION、DAILY BUILDING和SMALL RELEASE的基礎(chǔ);而DAILY MEETING和40-HOURS A WORK是單獨(dú)的實(shí)踐過(guò)程,可以與其他的實(shí)踐想結(jié)合,增強(qiáng)項(xiàng)目小組的溝通,激發(fā)士氣。
需要說(shuō)明的是以上最佳實(shí)踐并非XP所獨(dú)有,而是被最多的軟件開(kāi)發(fā)方法所應(yīng)用,其中"日構(gòu)建"就在微軟的軟件開(kāi)發(fā)方法中正式出現(xiàn)過(guò)。
-
代碼規(guī)范
雖然大部分的企業(yè)在一定程度上推行代碼標(biāo)準(zhǔn)與規(guī)范,而且對(duì)于使用JAVA的應(yīng)用程序開(kāi)發(fā),也有SUN的推薦編碼規(guī)范,但是,實(shí)際的情況并不理想。
主要的原因在于:一方面,開(kāi)發(fā)人員的習(xí)慣勢(shì)力很大;另一方面,代碼審查的力度不夠。如果能夠借助工具,從一定程度上幫助進(jìn)行代碼標(biāo)準(zhǔn)的執(zhí)行情況檢查,那么代碼審查就可以著重檢查程序的邏輯和性能等方面。
開(kāi)源產(chǎn)品CheckStyle (
http://sourceforge.net/projects/checkstyle
) 可以幫助開(kāi)發(fā)組織解決代碼標(biāo)準(zhǔn)審查的問(wèn)題。
目前的最新版本為3.0,它提供了兩種運(yùn)行方式:一種是命令行;一種是與Ant結(jié)合(Ant自1.5以后提供的OPTIONAL TASKS中有對(duì)于CheckStyle的支持)。同時(shí),SourceForge中有對(duì)于JBuilder等流行IDE的插件支持,可以定義Global、Project級(jí)別上的屬性文件, 但是,目前只是支持2.42版本。
在3.x版本之前,CheckStyle的配置信息寫(xiě)在Property File中;而在3.x之后,配置信息為XML文件,配置更加靈活。3.0的發(fā)布版本中提供了針對(duì)Sun Code Conventions的特定Check File,可以參考使用。
建議執(zhí)行情況:
-
手動(dòng)執(zhí)行:開(kāi)發(fā)人員在IDE中手動(dòng)觸發(fā)CheckStyle檢查或者代碼審查時(shí)由審查者手動(dòng)執(zhí)行;
-
自動(dòng)執(zhí)行:將CheckStyle與源碼控制系統(tǒng)(CVS)結(jié)合,在源碼Checkin的時(shí)候進(jìn)行規(guī)則判斷,如果不符合,則不允許代碼進(jìn)入系統(tǒng)。
-
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
測(cè)試先行或者測(cè)試驅(qū)動(dòng)是XP的基本實(shí)踐之一,同時(shí)測(cè)試在軟件開(kāi)發(fā)中的重要作用正越來(lái)越得到人們的重視。審查和測(cè)試作為系統(tǒng)確認(rèn)和驗(yàn)證的有效方式,是項(xiàng)目質(zhì)量保證的重要措施。
下面按照一般的測(cè)試分類(lèi),介紹各個(gè)領(lǐng)域內(nèi)的開(kāi)源測(cè)試工具:
-
單元測(cè)試:JUnit (
http://www.junit.org
)
JUnit是由 Erich Gamma 和 Kent Beck 編寫(xiě)的一個(gè)回歸測(cè)試框架(regression testing framework),用于Java開(kāi)發(fā)人員編寫(xiě)單元測(cè)試之用。下面介紹的開(kāi)源測(cè)試工具,很多都是對(duì)于JUnit的擴(kuò)展。
它目前的版本為3.7,為編寫(xiě)單元測(cè)試提供了主要的接口。目前主流的IDE都提供了對(duì)于JUnit的支持。
XP強(qiáng)調(diào)測(cè)試先行,尤其重視單元測(cè)試。系統(tǒng)集成商需要通過(guò)軟件開(kāi)發(fā)過(guò)程的執(zhí)行,來(lái)強(qiáng)化JUnit的使用。
目前很多商業(yè)測(cè)試軟件都提供了與JUnit的聯(lián)合使用,例如獲得1999和2000年Jolt測(cè)試類(lèi)工具亞軍和生產(chǎn)率大獎(jiǎng)的Jtest (ParaSoft公司產(chǎn)品,內(nèi)置200余條編碼規(guī)范,提供Java代碼靜態(tài)和動(dòng)態(tài)檢查,同時(shí)還可以自動(dòng)生成簡(jiǎn)單的測(cè)試用例等等)就可以導(dǎo)入和導(dǎo)出JUnit的測(cè)試用例。
-
集成與功能測(cè)試:HttpUnit (
http://unit.sourceforge.net
) & Cactus (
http://jakarta.apache.org/cactus/
)
HttpUnit是一套通過(guò)HTTP連接測(cè)試Web應(yīng)用程序的Java類(lèi)。在結(jié)合JUnit的情況下,HttpUnit可以作為一種創(chuàng)建測(cè)試程序的強(qiáng)大工具用來(lái)保證Web應(yīng)用程序正常的端對(duì)端功能。
雖然JUnit自身就可以通過(guò)編寫(xiě)單一類(lèi)的測(cè)試程序?qū)Ψ?wù)器端Java代碼進(jìn)行測(cè)試,不過(guò),有了HttpUnit的幫助,JUnit就可以擴(kuò)展為模擬Web瀏覽器-Web服務(wù)器的工作方式對(duì)整個(gè)Web程序結(jié)構(gòu)進(jìn)行測(cè)試。
Cactus為我們提供了一種測(cè)試SERVLET等WEB組件的有效手段。它是JUnit的一個(gè)擴(kuò)展,但是它又和JUnit有一些不同。Cactus的測(cè)試分為三種不同的測(cè)試類(lèi)別,JspTestCase, ServletTestCase, FilterTestCase, 而不是像JUnit就一種TestCase。Cactus的測(cè)試代碼有服務(wù)器端和客戶(hù)端兩個(gè)部分,他們協(xié)同工作。
一般意義上,可以采用Cactus作集成測(cè)試;而使用HttpUnit做功能測(cè)試。
雖然在集成與功能測(cè)試方面,有很多優(yōu)秀的開(kāi)源工具,但是在實(shí)際應(yīng)用過(guò)程中,還是采用商業(yè)測(cè)試軟件的比較多,對(duì)于復(fù)雜應(yīng)用更是如此。這是因?yàn)榧膳c功能測(cè)試大部分還是由專(zhuān)門(mén)的測(cè)試人員進(jìn)行,而他們對(duì)于已有的商業(yè)軟件,例如Rational Robot、E-Test Suite、WinRunner等都比較熟悉,同時(shí)商業(yè)軟件也提供了更為強(qiáng)大的功能。
-
壓力與性能測(cè)試: JMeter (
http://jakarta.apache.org/jmeter/
)
由于企業(yè)應(yīng)用越來(lái)越復(fù)雜,用戶(hù)數(shù)量也是越來(lái)越多,系統(tǒng)的性能參數(shù)以及眾多的非功能性需求在開(kāi)發(fā)中獲得了越來(lái)越多的重視。因此,很多壓力與性能測(cè)試工具也開(kāi)始出現(xiàn),這其中有一定影響的是Apache Software Foundation的JMeter。
JMeter是100%的JAVA桌面應(yīng)用,用來(lái)測(cè)試系統(tǒng)的負(fù)載與性能。它最開(kāi)始設(shè)計(jì)是用來(lái)測(cè)試WEB應(yīng)用,后來(lái)加以擴(kuò)展,可以測(cè)試Http,F(xiàn)TP,支持JDBC的關(guān)系型數(shù)據(jù)庫(kù)的性能與壓力。同時(shí),JMeter提供一定的定制功能,系統(tǒng)集成商可以自行開(kāi)發(fā)針對(duì)EJB、CORBA或者SOAP的插件。
壓力與性能測(cè)試方面,由于測(cè)試比較復(fù)雜,實(shí)際企業(yè)應(yīng)用測(cè)試中,也是采用商業(yè)測(cè)試軟件比較多,例如LoadRunner、JProbe Suite以及與JBuilder8 同步發(fā)布的OptimizerIT;
-
日構(gòu)建
在軟件開(kāi)發(fā)的領(lǐng)域里有各種各樣的"最佳實(shí)踐",它們經(jīng)常被人們談起,但是似乎很少有真正得到實(shí)現(xiàn)的。這些實(shí)踐最基本、最有價(jià)值的就是:都有一個(gè)完全自動(dòng)化的創(chuàng)建、測(cè)試過(guò)程,讓開(kāi)發(fā)團(tuán)隊(duì)可以每天多次創(chuàng)建他們的軟件。
"日創(chuàng)建"也是人們經(jīng)常討論的一個(gè)觀點(diǎn),McConnell在他的《快速軟件開(kāi)發(fā)》中將日創(chuàng)建作為一個(gè)最佳實(shí)踐來(lái)推薦,同時(shí)日創(chuàng)建也是微軟很出名的一項(xiàng)開(kāi)發(fā)方法。但是,我們更支持XP社群的觀點(diǎn):日創(chuàng)建只是最低要求。一個(gè)完全自動(dòng)化的過(guò)程讓你可以每天完成多次創(chuàng)建,這是可以做到的,也是完全值得的。
Ant是Apache Jakarta的一個(gè)項(xiàng)目,是"不帶 make 缺點(diǎn)的 make"。Ant 正在成為開(kāi)放源代碼世界中實(shí)際上的標(biāo)準(zhǔn)。原因很簡(jiǎn)單:Ant 是使用 Java 語(yǔ)言編寫(xiě)的,這種語(yǔ)言可以讓創(chuàng)建過(guò)程在多種平臺(tái)上使用。
Ant目前的版本為1.5,它的執(zhí)行是基于一個(gè)XML文件,配置文件由目標(biāo)樹(shù)構(gòu)成。每個(gè)目標(biāo)都包含了要執(zhí)行的任務(wù),其中任務(wù)就是可以執(zhí)行的代碼。在下面給出的例子中,mkdir 是目標(biāo) compile 的任務(wù)。mkdir 是建立在 Ant 中的一個(gè)任務(wù),用于創(chuàng)建目錄。 Ant 帶有一套健全的內(nèi)置任務(wù),也可以通過(guò)擴(kuò)展 Ant 任務(wù)類(lèi)來(lái)添加自己的功能。
Ant內(nèi)置了對(duì)于JUnit、CVS、ClearCase、Visual SourceSafe以及CheckStyle的支持,通過(guò)于系統(tǒng)定時(shí)功能,例如Windows的"任務(wù)計(jì)劃"或者Linux/Unix的"cron",可以很方便的利用Ant來(lái)自動(dòng)完成每日構(gòu)建的工作。
-
持續(xù)集成
持續(xù)集成是XP的重要實(shí)踐之一,Martin Fowler在參考文獻(xiàn)[6]中有詳細(xì)的介紹,上述實(shí)踐都是它的基礎(chǔ)。
開(kāi)源項(xiàng)目中有一個(gè)著名的工具是用來(lái)幫助實(shí)現(xiàn)持續(xù)集成的:CruiseControl,其次,目前還有一款商業(yè)軟件AntHill也為持續(xù)集成提供了很好的支持。
-
CruiseControl (
http://cruisecontrol.sourceforge.net/
)
CruiseControl是著名的ThoughtWorks公司的產(chǎn)品,目前它的源碼已經(jīng)公開(kāi),它是一個(gè)持續(xù)集成的框架。它包含,但是并不局限于Email通知、Ant以及其他源碼控制工具。同時(shí),它還提供了WEB界面來(lái)查看當(dāng)前和已往Build的詳細(xì)信息。
-
AntHill (
http://www.urbancode.com/projects/anthill/
)
AntHill可以確保Build過(guò)程受控,同時(shí),幫助組織內(nèi)部的知識(shí)共享。它在每次Build之前從源碼控制系統(tǒng) (CVS、VisualSourceSafe、ClearCase等) 中獲取最新的源碼,同時(shí)在 Build完成之后為源碼分配一個(gè)唯一的數(shù)字進(jìn)行標(biāo)定。同時(shí),它還會(huì)在根據(jù)Build的情況,更新Intranet的信息。
-
小步發(fā)布
有了以上實(shí)踐的支持,小步發(fā)布就有了實(shí)現(xiàn)的可能。XP強(qiáng)調(diào)在非常短的周期內(nèi)以遞增的方式發(fā)布新版本,從而可以很容易地估計(jì)每個(gè)迭代周期的進(jìn)度,便于控制工作量和風(fēng)險(xiǎn);同時(shí),也可以及時(shí)處理用戶(hù)的反饋。
為了成功的進(jìn)行應(yīng)用系統(tǒng)的版本發(fā)布,需要SCM,尤其是源碼控制程序的配合。在開(kāi)源項(xiàng)目中,CVS (Concurrent Version System) 是最著名的版本控制程序。
目前CVS的版本為1.5.11,它是一個(gè)將一組文件放在層次目錄樹(shù)中以保持同步的系統(tǒng)。人們可以從 CVS 服務(wù)器上更新他們的本地層次樹(shù)副本,并將修改的結(jié)果或新文件發(fā)回;或者刪除舊文件。CVS 基于客戶(hù)端/服務(wù)器的行為使得其可容納多用戶(hù),構(gòu)成網(wǎng)絡(luò)也很方便。這一特性使得 CVS 成為位于不同地點(diǎn)的人同時(shí)處理數(shù)據(jù)文件(特別是程序的源代碼)時(shí)的首選。所有重要的免費(fèi)軟件項(xiàng)目都使用 CVS 作為其程序員之間的中心點(diǎn),以便能夠綜合各程序員的改進(jìn)和更改。
基于多個(gè)操作系統(tǒng)的CVS的客戶(hù)端軟件也很多,其中以WinCVS最為著名。
2. 開(kāi)源項(xiàng)目與Framework:
目前,對(duì)于基于J2EE的應(yīng)用程序開(kāi)發(fā),有很多開(kāi)源的Framework,例如Struts (
http://jakarta.apache.org/struts/
)、WebWork等,都提供了利用J2EE技術(shù)的優(yōu)秀解決方案。其中,Struts是目前應(yīng)用最為廣泛和獲得關(guān)注最多的框架之一。
Struts目前的版本為1.1,它是基于Model2的MVC實(shí)現(xiàn)框架。Struts的核心是基于Servlet、JavaBean、ResourceBundles和XML技術(shù)的控制層。
還有很多開(kāi)源項(xiàng)目為Struts提供支持,例如:
-
配置文件GUI:Struts Console;
-
Code Generator:Easy Struts;
-
Unit-Test:StrutsTestCase;
獲得2002年JAVA IDE大獎(jiǎng)的JBuilder 8更是內(nèi)置了對(duì)于Struts的支持,這也從另外一個(gè)側(cè)面體現(xiàn)了Struts的重要意義。
同時(shí),需要注意的是,Struts本身并沒(méi)有提供Persistence層的標(biāo)準(zhǔn)實(shí)現(xiàn),但是,目前這個(gè)方面的解決方案比較多,系統(tǒng)集成開(kāi)發(fā)商可以根據(jù)具體情況加以選擇。
如果可以在Struts等Framework的基礎(chǔ)上,結(jié)合不同業(yè)務(wù)系統(tǒng)的專(zhuān)業(yè)知識(shí),開(kāi)發(fā)獨(dú)立的系統(tǒng)平臺(tái),系統(tǒng)集成商的項(xiàng)目開(kāi)發(fā)速度和質(zhì)量都會(huì)有很大的提高。

歡迎大家訪問(wèn)我的個(gè)人網(wǎng)站
萌萌的IT人