开源软件意味着什么?当你需要向别人解释时,如何省心又省力地传达开源的价值和精髓?自从开源这个短语在1997年首次提出以来,业界在开源方面已经获得了许多来之不易的经验教训,我们不应该忘记这些经验教训。

Java开发者常常都会想办法如何更快地编写Java代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用、正在使用或将来一定会用到的高效工具。

为此,我收集了12个文化基因,在我看来它们有助于分享历史、搭建舞台,并为开源的定义以及它对整个软件行业的意义提供上下文。

1、测试

这头几个文化基因涉及软件的构建。我认为,它们定义了我们所认为的成功的开源项目,因为它们就是涉及软件本身的基本方面。了解这些文化基因的项目才会成功。采用宽松许可证、注重社区的软件可能是我们用来构建和维护优秀软件的最出色、最高效的软件重复使用机制。

JUnit是一个Java语言的单元测试框架,用于编写和运行可重复的测试。它为测试预期结果提供断言,为共享的常用测试数据提供测试装置(test
fixtures),以及运行测试的测试者(test runners)。

第一个文化基因:自我们编写软件以来就共享软件。

TestNG是受到了JUnit的启发开发而成,但同时还具有一些新功能,所以相对而言,TestNG更加强大也更便于使用,如注解(annotations)、灵活的测试配置、数据驱动的测试和参数支持,以及强大的执行模型。它涵盖了单元测试、功能、端到端、集成测试,支持各种工具和插件(Eclipse、IDEA、Maven等)。

上世纪50年代末,IBM开办了一场计算机大会,这个大会一直持续到今天,名叫SHARE。DEC在60年代开办,支持DECUS社区,你可以在其会议上购买装满其他人编写和贡献的软件的磁带。USENIX起源于70年代,当时适逢使用磁带发布早期UNIX版本。但是这种共享的做法完全可以追溯到40年代普林斯顿高级研究所的第一台可编程计算机上的开发工作。

Arquillian是一个Java和JVM的测试平台,主要侧重于集成和功能测试。它去掉了单元测试,重点关注真正实时环境下的程序代码的相互作用。Arquillian为测试配备了容器生命周期管理和典型测试精选。

第二个文化基因:编写优秀软件是艰苦的工作。

2、集成

我认为,共享归结为这个简单的现实:编写优秀软件很困难。软件开发领域有两大比率:开发人员在一天之内平均可以编写的代码行数,合理开发流程出来的每千行代码的错误数量。从语言进化到架构重复使用的所有软件方面的进展围绕这个中心思想:用更少行的代码编写出更多更优秀的软件。软件构建可靠性、配置管理、审查工具和流程以及测试方面的进步,都旨在减少合理的软件交付流程出来的错误数量。

Apache
Maven
是一个非常著名的软件项目管理和综合工具。基于项目对象模型的概念,它的信息中心管理着项目的构建、报告和文档。Maven提供了一个统一的构建系统、项目信息和最佳的开发实践指导,并且支持新功能的透明迁移。

第三个文化基因:没有毫无章法的规模扩展。

Gradle是一个开源的自动化构建系统。Gradle可以自动构建、测试、发布、部署,还有多种软件包或其他类型项目,如生成静态网站。Gradle结合了Ant的能力和灵活性,以及Maven的依赖管理和约定,形成了一种高效的构建方式。

编写优秀软件离不开章法。如果你看一下作为成功产品或者开源项目的软件,构建时通常会由同行审查,实行版本控制和配置管理,构建自动化和测试框架与软件一同完善。要是没有审查、配置管理以及构建和测试自动化,软件无法在用户社区里面进行扩展,作为一款产品也无法在成千上万的用户当中进行扩展。需要维护软件的核心小组一定要能够回答“软件执行什么”。

Apache
Ant
是一个开源的Apache项目,经Apache软件许可发布。它由多种内置任务而成,允许开发者编写、装配、测试和运行java应用程序。它的特点是高度灵活,不会严格限制Java项目的编码惯例或目录布局。

林纳斯定律可以笼统地表述为“给予足够的关注,所有代码错误都会浮现出来。”我认为这实际上表明了提交审查过程的重要性。研究表明,审查环节发现的错误比测试环节发现的还多。一个健康的社区势必在代码签入(check-in)方面有一套严格的审查流程。

3、应用服务器

第四个文化基因:软件天生是动态的。

Apache
Tomcat
是一个开源的Web服务器和Servlet容器,由Apache软件基金会开发。它实现了几个JavaEE规范,包括Java
Servlet、JavaServer Pages、Java
EL和WebSocket,提供了一个可以运行Java代码的HTTP Web服务器环境。

程序因使用而完善。错误被发现后要加以修复。发现新的用途,从而推动新功能。程序不断得到磨练和加强。程序从一个环境移植到另一个环境。遗憾的是,版权在1980年成了“保护”软件发布管道的机制。人们也许不明白软件的发展有多快、衍生版的开发有多快,或者也许不明白物联网和万维网问世后,这种动态性只会加快。我们共享网络带宽已从磁带大小的口袋、会议日程表和杂志出版延迟变成了全天候的实时全球构建、发布和维护。

GlassFish是由SunMicrosystems的Java
EE平台起步,现在由Oracle公司赞助的开源应用服务器项目。支持的版本叫做Oracle
GlassFish应用服务器。GlassFish是免费软件,经两个免费的软件许可证批准:通用开发与发布许可和GNU通用公共许可证。

不妨看一下与开源软件的社区方面有关的几个文化基因。

Oracle WebLogic服务器是一个Java
EE应用服务器,目前由Oracle公司开发,用于构建和部署企业应用Java
EE,支持降低运营成本、提高性能、增强可扩展性和支持Oracle应用组合等的新特性。

第五个文化基因:你得到的总是多过给予的。

4、质量分析

这是社区协作式开发的经济效率。不断贡献可谓是项目软件发展的生命线。贡献者贡献代码或提供修正版没有多大的风险,但是得到的好处是,整个软件可以按贡献者觉得合适的方式来使用。而至于路过式贡献,这可能是开发人员给予的唯一重大贡献,不管他们的经验和专长如何。

SonarQube是一个开源的平台,现已成为代码质量管理系统的世界领先者,并且因代码质量的持续检查为众人所知。除了Java外,它还支持大多数的语言,而且可以用作Android开发,它集成了大多数的持续集成工具。SonarQube会为重复代码、编码标准、单元测试、代码覆盖、复杂代码、潜在错误、注释、设计和架构而产生报告。

得到的回报大于贡献既适用于个人,也适用于公司。来自红帽、英特尔和IBM等几家大公司的专用资源和投入让它们得以借助整个Linux操作系统来实行不同的商业战略。公司可以将优秀的软件项目变成解决客户问题的产品。

FindBugs也是开源的工具,在LesserGNU Public
license许可下发布。它运行在Java字节码上而不是源代码,可以识别和确定潜在错误的严重程度,如空指针引用、无限递归循环、Java库和死锁的错误使用。同时,它还可以作为Eclipse、NetBeans,IntelliJ
IDEA的插件。

澳门新葡亰,第六个文化基因:有人吃白食是成功的关键。

Checkstyle的是一个开发工具,可以帮助程序员坚持按编码标准来编写Java代码,会自动启动Java代码检查。它的配置性很强,能支持几乎任何的编码标准。

坊间传闻,在一个开源项目的每1000个用户中,有100人可能报告软件错误,其中10人贡献潜在的修正版,其中只有1人仔细阅读贡献准则。实际上,社区成功有三条途径(社区成功的衡量标准是代码贡献)。一个是软件需要异常容易安装和使用,那样项目才会获得大量用户。二是用户群当中会有开发者。软件需要异常容易构建和测试,那样想要更改(为了自己的私利)的开发者很容易更改。三是需要异常容易能够回过头来向项目贡献变更,那样贡献才会源源不断。有大量吃白食的人意味着你干得不赖。这样,如果有大量用户,对开发者来说会大有潜力,贡献的可能性也会随之而来。但是项目的责任是确保容易。

5、版本控制

试图构建开源项目的公司常常很难了解社区。他们想,有人得为自己提供东西。他们习惯于向社区(比如开发者网站)发号施令,而不是协作。有三个文化基因适用于公司和开源。

Apache
Subversion
是众所周知的SVN工具,是一个软件版本和版本控制系统,在一个开源许可下发布。目前,它是由一个Apache软件基金会的项目开发,也是全球性开发者和用户社区的一部分。

第七个文化基因:不混淆产品和项目。

Git是一个免费开源的分布式版本控制系统,能够提高大小事务的速度和效率。相对于其他的配置管理工具,Git的特色在于提供廉价的局部分支、便利的暂存区和多个工作流。每个Git工作目录是一个完整的版本库,有完整历史和完整版本的跟踪能力、独立的网络接入或中央服务器。

项目其实是一组安装和运行后可以解决某个问题的切实可行的软件。它是一种以代码来说话的协作和交流。你需要了解项目不是产品。产品是以解决客户的问题来盈利的东西。虽然很多出色的软件来自于运作良好、为工程技术减少一些工作的开源项目,但是仍有艰巨的工作要做,才能将它变成对客户而言解决问题的产品。比如Linux内核是项目,Fedora是发行版项目,RHEL却是产品。产品以满足客户对价值的期望来盈利。产品可默认安装、运行,附带保证和赔偿,还有服务(支持、升级、培训和咨询)以及针对特定产品的说明文档。它们可能是包括硬件和服务的更庞大产品组合的一部分。

6、Java应用分析

这个文化基因的一个推论可能是:“没有人来为你构建你的产品。”

在为分析Java应用开发最创新的智能工具方面,YourKit
Java
分析器是技术的领头羊。你可以在CPU和内存分析上都使用YourKit解决方案,还可以以最大生产率和零开销来分析大型应用。同时,Java分析器还有几个刚提出的分析创新,为其在各大小型企业的专业Java开发者获得了当之无愧的人气。

网站地图xml地图