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