折疊屏手機(jī)不會(huì)用?快來學(xué)學(xué)華為Mate X的養(yǎng)護(hù)訣竅
磨刀不誤砍柴工,擁有一個(gè)好的工具,在現(xiàn)代化編程、團(tuán)隊(duì)管理中擁有重要的地位。2008年的軟件開發(fā)生命周期管理軟件(software development lifecycle: SDLC)在2008年有了長(zhǎng)足進(jìn)展,JavaWorld的Java工具領(lǐng)域?qū)<襃ohn Ferguson 為我們帶來2008年Java領(lǐng)域自動(dòng)構(gòu)建框架,軟件開發(fā)周期管理工具,測(cè)試工具,以及IDEs方面的總結(jié)。他指出java工具2008年的變化包括CI持續(xù)集成工具的改進(jìn),JVM腳本語言支持上升,以及對(duì)支持多核系統(tǒng)編程工具需求增加等。讓我們開始吧!
Build automation
讓我們從現(xiàn)代軟件開發(fā)進(jìn)程的核心部分開始:Build automation自動(dòng)構(gòu)建,整體來看,build automation包括持續(xù)集成(continuous integration :CI)工具,構(gòu)建腳本build-scripting工具,代碼質(zhì)量控制工具,以及版本管理或者稱為SCM存儲(chǔ)管理工具。
build automation的第一個(gè)舞臺(tái)是自動(dòng)build腳本。傳統(tǒng)工具類似于Apache Maven和Apache Ant,以及最新的Gant和Gradle,能夠幫助創(chuàng)建build腳本。在2008年,我看到許多大型公司都開始使用Maven,被Maven能在內(nèi)部軟件組件中為多個(gè)團(tuán)隊(duì)之間提供標(biāo)準(zhǔn)化開發(fā)實(shí)踐,和提供顯著的連貫透明的架構(gòu)所吸引。這個(gè)趨勢(shì)明顯將繼續(xù)延續(xù)到2009年。
Maven:最新的和即將發(fā)布的功能
在2008年,Maven 2的最高版本2.0.9發(fā)布,Maven 2.0.9修正了bug和添加了一些新的功能,Maven擁有更好的穩(wěn)定性,并提供很好的方式使用插件來駕馭依賴管理。比如,你能夠使用Checkstyle 插件來更新Checkstyle的版本。
總而言之,Maven開發(fā)中最活躍的是專注于新的重要版本的發(fā)布:Maven 2.1,這個(gè)版本將于2009年初面世。新的版本將包含很多性能改進(jìn)和最優(yōu)化,包括為多模塊項(xiàng)目提供更精細(xì)的build 規(guī)則,和能夠平行下載不相關(guān)依賴包,而不是現(xiàn)在我們使用的串行方式。
Eclipse對(duì)Maven的支持更好,m2eclipse 插件為Maven開發(fā)提供了完整的功能化的圖形編輯器,提供Maven pom.xml文件圖形化管理。這些功能包括依賴圖(見下圖1)和依賴層次。比如它讓你更容易可視化的查看編輯你的項(xiàng)目依賴,了解和解決依賴沖突。
依賴搜索也是m2eclispe提供的另一個(gè)很有用的功能,一旦你開始使用,你會(huì)發(fā)現(xiàn)你離不開它了。它讓添加一個(gè)新的依賴包進(jìn)入你的項(xiàng)目不會(huì)出現(xiàn)任何問題。你只需要通過名字搜索Maven存儲(chǔ)空間,選擇版本,加入到你的pom.xml文件中。
Maven存儲(chǔ)管理是也是每個(gè)Maven用戶都需要的工具,Maven存儲(chǔ)空間能夠同時(shí)支持作為Inter公共存儲(chǔ)空間的一個(gè)依賴緩存存在,也支持作為一個(gè)庫發(fā)布和分享給整個(gè)公司使用。2008年見證這個(gè)領(lǐng)域快速升起的一顆新星:Nexus,Nexus讓管理Maven存儲(chǔ)空間成為一種享受。
同時(shí)Maven的速度也有很大提高。
持續(xù)集成實(shí)踐添加了一個(gè)新的方向是代碼編寫規(guī)則工具,隨著時(shí)間推移幫助開發(fā)者顯示和分析代碼規(guī)則,2008年在持續(xù)集成控制方面也有不少進(jìn)展,Bamboo,Atlassian的一個(gè)商業(yè)持續(xù)集成工具,為這個(gè)領(lǐng)域注入了大量新功能,包括圖形顯示隨時(shí)間推移的build過程和獨(dú)立測(cè)試過程。
引用:Gant和Gradle取代了Ant
傳統(tǒng)的Java build腳本工具,Ant,在2008年似乎有點(diǎn)過時(shí)。相反,新的工具 Gant 在迅速發(fā)展中。Gant是也是一個(gè)build腳本工具,讓你能夠使用Groovy而不是XML來build Ant任務(wù)。Gant是前途光明的Grails web框架的底層build工具,因此也在2008年獲得關(guān)注。如果你不能離開Ant在build腳本方面的靈活性,又無法忍受累贅的XML語法,Gant值得一看。
同樣的,Gradle也是一個(gè)基于Groovy的build工具,于2008年初次露面。Gradle試圖使用Groovy語法來提供Ant的靈活性,而且它還讓你獲得許多類似Maven的功能比如傳遞依賴管理和約定大于配置。
CI持續(xù)集成進(jìn)入生命周期管理SDLC
2008年java開發(fā)領(lǐng)域在持續(xù)集成工具方面進(jìn)步巨大。持續(xù)集成工具被視為生命周期管理工具的關(guān)鍵部分。一個(gè)好的CI工具讓你能夠持續(xù)跟蹤整個(gè)項(xiàng)目,不僅僅是測(cè)試總數(shù),最新的測(cè)試失敗,還包括你的整個(gè)測(cè)試是如何進(jìn)行的。這種數(shù)據(jù)對(duì)于開發(fā)進(jìn)程調(diào)優(yōu)非常有好處。
引用:Hudson受到開發(fā)者寵愛
在過去的一年中,Hudson 從一個(gè)開發(fā)中的產(chǎn)品變成市場(chǎng)中流行的開源CI項(xiàng)目。雖然Hudson的魅力有時(shí)候來自于極少出錯(cuò),Hudson的直觀的用戶界面和有用的報(bào)表功能讓它成為一個(gè)強(qiáng)大的小CI持續(xù)集成工具。
Hudson也領(lǐng)導(dǎo)了Maven集成市場(chǎng),成為目前唯一的能夠基于Maven依賴圖正確決定哪個(gè)項(xiàng)目需要重新build的工具。當(dāng)你在管理多模塊Maven項(xiàng)目時(shí),這個(gè)功能能夠讓你節(jié)約大量的時(shí)間。Hudson也提供豐富的插件庫,允許你添加其他功能,比如與JIRA或者Trac集成,或者自動(dòng)部署到Tomcat服務(wù)器上。#p#
持續(xù)集成工具和代碼質(zhì)量工具集成
一些持續(xù)集成工具能夠集成優(yōu)秀的代碼質(zhì)量工具,比如Checkstyle,PMD,F(xiàn)indBugs,Cobertura和Emma。
這些工具提供有用信息,監(jiān)控你的項(xiàng)目是否健康,比如代碼標(biāo)準(zhǔn),不良代碼,以及代碼覆蓋等。開源代碼質(zhì)量工具相對(duì)比較穩(wěn)定,今年Checkstyle發(fā)布了新的功能,持續(xù)發(fā)展的FindBugs控制了數(shù)據(jù)庫,在商業(yè)市場(chǎng),Clover發(fā)布了多個(gè)創(chuàng)新的功能,包括per-test每測(cè)試覆蓋,讓你能夠不僅看到你的應(yīng)用代碼在測(cè)試中執(zhí)行有多頻繁,而且能夠看到哪些測(cè)試執(zhí)行了代碼。
另外一個(gè)方面,2008年持續(xù)集成工具從獨(dú)占的專家領(lǐng)域變得更加開放民主,讓開發(fā)團(tuán)隊(duì)更多的參與進(jìn)來。比如在Hudson中,一個(gè)插件讓開發(fā)者"申明"一個(gè)失敗的build,來告訴團(tuán)隊(duì)其他開發(fā)者他正在修改這個(gè)地方。在Bamboo中,你能對(duì)build添加注釋,或者通過一個(gè)失敗的build信息啟動(dòng)一個(gè)面向開發(fā)者的即時(shí)通訊討論。Hudson甚至添加了一個(gè)CI游戲插件讓你開發(fā)團(tuán)隊(duì)成員進(jìn)行提升代碼質(zhì)量的比賽。
Subversion 1.5發(fā)布
在版本控制存儲(chǔ)方面,2008年最大的新聞就是等待了很久的Subversion 1.5發(fā)布。它帶來了一些強(qiáng)大的新功能,包括合并跟蹤和存儲(chǔ)復(fù)制支持改進(jìn)。這個(gè)新的合并功能讓多個(gè)不同的分支能夠合并修改。
測(cè)試工具
基于Java的測(cè)試工具領(lǐng)域2008年發(fā)生了很多事情,尤其是behavior-driven development(BDD)行為驅(qū)動(dòng)開發(fā)框架引起了大家的興趣,以及web測(cè)試工具發(fā)展邁進(jìn)了一大步。
BDD是一個(gè)在test-driven development(TDD)測(cè)試驅(qū)動(dòng)開發(fā)技術(shù)上發(fā)展起來的敏捷開發(fā)領(lǐng)域的新的技術(shù)。JBehave在2008年9月發(fā)布,Jbehave是一個(gè)java BDD框架,你能夠使用JUnit測(cè)試案例寫B(tài)DD腳本,通過特殊的annotations,比如@Given, @When, 和@Then。你也能寫相應(yīng)的文本腳本,讓你能夠在實(shí)現(xiàn)解決方案之前描述你的行為流程。下面是例子:
Java代碼
Simple JBehave test case public class AccountDepositSteps extends Steps { Account account = null; BigDecimal initialDeposit = new BigDecimal("100.00"); @Given("I have created a new account") public void createAccount() { account = new Account(); } @When("I deposit $100 into the account") public void deposit() { account.makeDeposit(initialDeposit); } @Then("My account should have a balance of $100") public void checkBalance() { ensureThat(account.getBalance(), equalTo(initialDeposit)); } } |
另外一個(gè)基于Groovy的BDD框架:easyb,提供了Groovy的強(qiáng)大功能,能夠結(jié)構(gòu)性的在java測(cè)試領(lǐng)域?qū)崿F(xiàn)BDD。Easyb使用Groovy域特定語言DSL能夠跟隨BDD腳本模型。Groovy能讓測(cè)試具有更大的表達(dá)性,尤其當(dāng)你熟悉Groovy慣用方法,比如文件集成,激活和閉包。上面的例子用easyb重寫如下:
Java代碼
scenario "Make initial deposit onto a new account", { given "I have created a new account",{ account = new Account() } when "I deposit $100 into the account", { initialAmount = 100 account.makeDeposit(initialAmount) } then "the balance should be equal to the amount deposited", { account.balance.shouldBe initialAmount } and "My account should have a balance of $100", { account.balance.shouldBeEqualTo initialAmount } } |
Web測(cè)試工具進(jìn)化
這里有很多測(cè)試工具不僅僅是單元測(cè)試,2008年Web測(cè)試工具進(jìn)展迅速。這個(gè)領(lǐng)域尤其值得注意的工具有兩個(gè):Selenium 和Canoo WebTest.
Selenium 是一個(gè)原始測(cè)試工具,在瀏覽器中運(yùn)行你的web測(cè)試。在2008年,Selenium 1.0 beta發(fā)布了,提供更好的穩(wěn)定性和新的功能。通過錄制Selenium測(cè)試腳本,你能使用Selenium做功能測(cè)試和回歸測(cè)試,也能通過Java甚至Groovy寫Selenium測(cè)試案例來支持TDD測(cè)試驅(qū)動(dòng)開發(fā)。2008年也見證了Selenium Grid的出現(xiàn),一個(gè)非常有前途的工具,幫助你分布你的測(cè)試到多個(gè)不同的服務(wù)器,并且平行運(yùn)行測(cè)試或者在特定平臺(tái)瀏覽器上運(yùn)行。
Canoo WebTest 在2008年也非常活躍。這個(gè)強(qiáng)大的web測(cè)試框架非常適合TDD或者BDD實(shí)現(xiàn)。使用Canoo WebTest,你能夠用XML或者Groovy為你的Web應(yīng)用寫測(cè)試案例。Canoo WebTest運(yùn)行在Web應(yīng)用上,提供清晰,詳細(xì)的HTML測(cè)試報(bào)告。Grails使用Canoo WebTest用于自動(dòng)生成功能測(cè)試。Canoo WebTest并不像Selenium功能那么強(qiáng)大,對(duì)JavaScript的支持沒有Selenium那么好。
IDEs
在IDE方面,2008年見證了 Eclipse 3.4 Ganymede 和NetBeans 6.5的發(fā)布,兩者都帶來了很多新功能。Eclipse 3.4 改進(jìn)了java開發(fā)環(huán)境,包括:更好上下文幫助功能,更好的快速修復(fù),大量提升可用性。一個(gè)很好的被重構(gòu)的功能是Extract Class option,讓你能夠從class中獲得一組屬性和函數(shù),創(chuàng)建一個(gè)新的class封裝這些字段和函數(shù)。Eclipse 3.4的編譯速度變快,能從多核進(jìn)程中獲得優(yōu)勢(shì),把計(jì)算分布到不同的芯片上運(yùn)行。Eclipse 3.4支持外部Subversion,完全支持Subversion插件。
引用:Groovy Grails和IDEs
Groovy和Grails 2008年大量侵入java社區(qū),Groovy是一個(gè)動(dòng)態(tài)腳本語言,Grails是一個(gè)強(qiáng)大的基于Groovy的類似Ruby的web框架。2008年Groovy和Grails,以及Scala和Clojure發(fā)展很快,但是對(duì)于它們的IDE支持并不好,主要是因?yàn)樗鼈兪莿?dòng)態(tài)語言,比如很難提供很好的代碼完成功能,因?yàn)閯?dòng)態(tài)語言缺乏類型。目前支持動(dòng)態(tài)語言最好的是IntelliJ,其次是NetBeans,Eclipse仍需努力。可以預(yù)見到,2009年對(duì)于動(dòng)態(tài)語言的支持會(huì)繼續(xù)發(fā)展。
我最喜歡的Eclipse 3.4的功能是 Mylyn 3.0,Mylyn 是一個(gè)任務(wù)管理工具,Mylyn管理構(gòu)成了一個(gè)開發(fā)者工作日的所有任務(wù),例如我們修復(fù)的bug或者我們?cè)黾拥奶卣鳎急粺o縫的集成到IDE的界面中了。IDE集成提供了例如代碼補(bǔ)全,變更管理和離線編輯等功能。
NetBeans 6.5
隨著NetBeans 6.5的發(fā)布,NetBeans成為最舒服的開發(fā)環(huán)境之一。和以往一樣,它提供了比Eclipse更流暢的用戶使用體驗(yàn),雖然和Eclipse相比缺少了一些插件。對(duì)Maven用戶一個(gè)好消息是:NetBeans 6.5對(duì)Maven更加友好。雖然沒有Eclipse的m2eclipse功能那么豐富,NetBeans Maven插件質(zhì)量很好,并且視Maven項(xiàng)目為第一類成員對(duì)待。
NetBeans 6.5提供優(yōu)秀的動(dòng)態(tài)語言支持,包括JavaScript,Groovy和Grails,PHP,甚至是Ruby/Rails。你能使用所有這些語言創(chuàng)建項(xiàng)目,NetBeans為它們提供強(qiáng)大的開發(fā)環(huán)境。
NetBeans也支持JavaFX開發(fā),通過可選插件,能夠創(chuàng)建和調(diào)試JavaFX應(yīng)用。
最后NetBeans 6.5為庫提供更好的本地支持,比如Spring, Hibernate, 和 JavaServer Faces (JSF),提供比如進(jìn)入Spring Bean的對(duì)話框這樣的功能,并且支持在IDE內(nèi)運(yùn)行Hibernate 查詢語言查詢。
總結(jié)
2008年在Java開發(fā)工具領(lǐng)域出現(xiàn)了許多重要的大事,開發(fā)環(huán)境提供更豐富的功能,更容易使用,并且滿足了日益增加的對(duì)動(dòng)態(tài)語言類似Groovy和Ruby的支持。對(duì)動(dòng)態(tài)語言興趣的增加在2008年趨勢(shì)明顯。另外一個(gè)整體趨勢(shì)就是自動(dòng)build工具在2008年發(fā)展很快。Groovy在測(cè)試領(lǐng)域成為領(lǐng)頭羊,它讓開發(fā)者更加容易編寫更富表達(dá)能力和更加強(qiáng)大的測(cè)試工具,比如Hudson和Bamboo,將CI持續(xù)集成從專家手中釋放出來面向一般的開發(fā)者。Maven也更加容易使用,擁有豐富的用戶界面讓Maven更加能夠被理解。同時(shí)Subversion也提供新的自動(dòng)腳本功能。
【編輯推薦】
- 2008十大優(yōu)秀Java應(yīng)用程序
- Java 2008年大事記 由語言到平臺(tái)的轉(zhuǎn)變
- Sun高管透露JavaFX開源計(jì)劃 移動(dòng)平臺(tái)明年發(fā)布