磨刀不误砍柴工,拥有一个好的工具,在现代化编程、团队管理中拥有重要的地位。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也提供新的自动脚本功能。
【编辑推荐】