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