近两年开放源码项目发展日益壮大出现了很多有着广阔用户群体的项目与产品它们在企业应用开发中正在发挥着越来越大的作用本文以基于JEE架构的企业应用开发为例探讨了如何在项目中深入运用JAVA开发源码项目与工具
一企业应用开发目前面临的主要问题
企业应用是指服务于商业目的处理企业业务信息数据的软件系统虽然随着dot COM热潮逐渐冷却企业开始谨慎考虑自己在应用系统开发方面的投入但是毕竟企业的业务流程需要专门的信息系统处理从而提高自动化程度减少中间环节加快信息处理速度因此目前国内的企业应用项目开发还是日益火爆尤其在电子政务CRMSCM等领域更是如此
但是不论企业应用开发是采用自行开发或者委托系统集成商进行开发都存在着下面一些情况
大部分项目超时或者超出预算
项目在部署以后BUG很多而且修改的周期比较长
对于系统集成商来说下面的情况更是比较普遍
没有统一的FRAMEWORK每个项目都会重新设计ARCHITECTURE
项目开发过程的自动化程度和重复步骤不是很多人为引入的BUG很多
二开放源码项目现状
开放源码运动在年代开始日益发展目前已经成为软件业内不可低估的一股势力比较着名的有LinuxApacheTomcatMySQL等目前开放源码的潮流已经超出了操作系统数据库管理系统和WEB服务器等系统开发领域开发在企业应用开发中寻找新的领地尤其是对于企业应用开发的框架和CASE工具开放源码项目都有很优秀的解决方案
国外开放源码项目的集中地有以及其中前者为大家奉献了着名的ApacheTomcatStrutsAxis而后者是最着名的开源项目中心同时国内自年代末开始也有很多人投入到开源项目的开发比较集中的网址是 共创软件联盟() 等等他们除了提供各种CASE工具以外还有一些项目是专注于特定领域的解决方案开发如CRM等
三JAVA开发源码项目与工具的应用
对于目前企业应用开发竞争日益激烈需求变更频繁各个系统集成商都面临巨大的生存压力其中有两个方面表现尤其突出
没有统一的软件开发过程或者照搬重量级的软件开发过程例如RUP等但是往往由于时间等压力的影响并不能切实执行
大部分企业仍然没有摆脱手工作坊期间的做法每个项目或者产品由于管理人员或者团队的不同重新设计系统框架浪费大量的时间在结构验证与调整上
企业应用系统的开发中需求的变更是项目中唯一不变的东西而且为了保持开发的一致性和利益最大化系统集成商需要与客户保持长期的合作因此采取演进式敏捷软件开发可以更好的保证项目质量在所有的敏捷软件开发方法中XP是目前应用最为广泛的一种它是一种高度动态的过程它通过非常短的迭代周期来应对需求的变化沟通简单反馈和勇气是它的四大核心价值同时它集中了业界的很多最佳实践目前已经有条之多XP强调通过严格执行全部的最佳实践来获得极限效果
同时出于复用和效率的考虑尤其是对于系统集成商企业应用系统应该具有自己的框架和结构拥有具有良好性能经过项目验证的系统框架结合有效的软件开发过程系统集成商可以快速成功地开发企业应用系统
为了更好的开发成功的系统系统集成商们可以试着从以下两个方面着手解决问题
结合开源工具的支持在组织内部实施敏捷软件开发方法
为核心业务领域建立灵活有效的Framework
由于目前很多企业应用是采用基于JEE技术的网络应用程序开发因此下面主要介绍基于JAVA的开源项目工具的应用
开源工具与XP
XP的条最佳实践对于所有的企业应用开发商而言由于组织和文化的不同不可能全部应用但是下面几个实践是有条件逐步实施的
代码规范CODE STANDARD
测试驱动开发TESTDRIVEN DEVELOPMENT
日构建DAILY BUILDING
持续集成CONTINUOUS INTEGRATION
小步发布SMALL RELEASE
每日晨会DAILY MEETING
每周小时工作HOURS A WEEK
其中CODE STANDARD和TDD是CONTINUOUS INTEGRATIONDAILY BUILDING和SMALL RELEASE的基础而DAILY MEETING和HOURS A WORK是单独的实践过程可以与其他的实践想结合增强项目小组的沟通激发士气
需要说明的是以上最佳实践并非XP所独有而是被最多的软件开发方法所应用其中日构建就在微软的软件开发方法中正式出现过
代码规范
虽然大部分的企业在一定程度上推行代码标准与规范而且对于使用JAVA的应用程序开发也有SUN的推荐编码规范但是实际的情况并不理想
主要的原因在于一方面开发人员的习惯势力很大另一方面代码审查的力度不够如果能够借助工具从一定程度上帮助进行代码标准的执行情况检查那么代码审查就可以着重检查程序的逻辑和性能等方面
开源产品CheckStyle () 可以帮助开发组织解决代码标准审查的问题
目前的最新版本为它提供了两种运行方式一种是命令行一种是与Ant结合(Ant自以后提供的OPTIONAL TASKS中有对于CheckStyle的支持)同时SourceForge中有对于JBuilder等流行IDE的插件支持可以定义GlobalProject级别上的属性文件 但是目前只是支持版本
在x版本之前CheckStyle的配置信息写在Property File中而在x之后配置信息为XML文件配置更加灵活的发布版本中提供了针对Sun Code Conventions的特定Check File可以参考使用
建议执行情况
手动执行开发人员在IDE中手动触发CheckStyle检查或者代码审查时由审查者手动执行
自动执行将CheckStyle与源码控制系统(CVS)结合在源码Checkin的时候进行规则判断如果不符合则不允许代码进入系统
测试驱动开发
测试先行或者测试驱动是XP的基本实践之一同时测试在软件开发中的重要作用正越来越得到人们的重视审查和测试作为系统确认和验证的有效方式是项目质量保证的重要措施
下面按照一般的测试分类介绍各个领域内的开源测试工具
单元测试JUnit ()
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)用于Java开发人员编写单元测试之用下面介绍的开源测试工具很多都是对于JUnit的扩展
它目前的版本为为编写单元测试提供了主要的接口目前主流的IDE都提供了对于JUnit的支持
XP强调测试先行尤其重视单元测试系统集成商需要通过软件开发过程的执行来强化JUnit的使用
目前很多商业测试软件都提供了与JUnit的联合使用例如获得和年Jolt测试类工具亚军和生产率大奖的Jtest (ParaSoft公司产品内置余条编码规范提供Java代码静态和动态检查同时还可以自动生成简单的测试用例等等)就可以导入和导出JUnit的测试用例
集成与功能测试HttpUnit () & Cactus ()
HttpUnit是一套通过HTTP连接测试Web应用程序的Java类在结合JUnit的情况下HttpUnit可以作为一种创建测试程序的强大工具用来保证Web应用程序正常的端对端功能
虽然JUnit自身就可以通过编写单一类的测试程序对服务器端Java代码进行测试不过有了HttpUnit的帮助JUnit就可以扩展为模拟Web浏览器Web服务器的工作方式对整个Web程序结构进行测试
Cactus为我们提供了一种测试SERVLET等WEB组件的有效手段它是JUnit的一个扩展但是它又和JUnit有一些不同Cactus的测试分为三种不同的测试类别JspTestCase ServletTestCase FilterTestCase 而不是像JUnit就一种TestCaseCactus的测试代码有服务器端和客户端两个部分他们协同工作
一般意义上可以采用Cactus作集成测试而使用HttpUnit做功能测试
虽然在集成与功能测试方面有很多优秀的开源工具但是在实际应用过程中还是采用商业测试软件的比较多对于复杂应用更是如此这是因为集成与功能测试大部分还是由专门的测试人员进行而他们对于已有的商业软件例如Rational RobotETest SuiteWinRunner等都比较熟悉同时商业软件也提供了更为强大的功能
压力与性能测试 JMeter ()
由于企业应用越来越复杂用户数量也是越来越多系统的性能参数以及众多的非功能性需求在开发中获得了越来越多的重视因此很多压力与性能测试工具也开始出现这其中有一定影响的是Apache Software Foundation的JMeter
JMeter是%的JAVA桌面应用用来测试系统的负载与性能它最开始设计是用来测试WEB应用后来加以扩展可以测试HttpFTP支持JDBC的关系型数据库的性能与压力同时JMeter提供一定的定制功能系统集成商可以自行开发针对EJBCORBA或者SOAP的插件
压力与性能测试方面由于测试比较复杂实际企业应用测试中也是采用商业测试软件比较多例如LoadRunnerJProbe Suite以及与JBuilder 同步发布的OptimizerIT
日构建
在软件开发