We occasionally get questions regarding the tools and approaches we use for developing our products.  These are described below.

Languages and IDE

Most of our programming is done in Java. We consider JDK 1.6 to be our baseline, though we use both 1.6 and 1.7 on various platforms.

We also use Groovy to ensure it works with business logic, most notably in the tests.

We use Eclipse Indigo and SpringSource STS.  The latter provides better debug support for Groovy. Some of us also use IntelliJ IDEA, a nicer IDE well worth its very reasonable price.

Source Control

We use Subversion to manage our source.  We publish our source tree along with the various parts of the product, as source jars and as part of a Maven package. As part of every release, we put all open-source code in GitHub and Sourceforge.

Testing

We use jUnit, both for integration tests and unit tests.  The integration tests are included in your download as part of the BusLogicIntro project as further explained here.  The integration tests are quite extensive, utilizing all logic constructs in typical real-world scenarios.  Note:
  1. You can run the ant script (eg, runAllTests_hsql#runAllTests) as described in the link above, and in the download installation verification procedure.

  2. The integration tests run extensive updates, often in multiple transactions.  To ensure that the database results in an expected state, we make extensive use of SnapshotDB, a "database diff" which compares database state before/after the test, with services to test the diff to verify expected results.

Automated build

All components are automatically built and tested every night.  We use a series of Ant scripts to drive the build, and the scripts are in turn managed by Jenkins. Here's a typical build output.

As part of this automated build, we run a fairly extensive suite of tools (in addition to all the compilation, testing and packaging):

 Javadoc To produce the API documentation for the engine and the add-ons
 java2html To format the source code and make it easy to browse online
 NCSS To gather statistics on the code base
 JCSC Same purpose, with some differences in approach
 PMD For static code analysis, and finding possible bugs
 CPD To detect code duplication
 FindBugs For static analysis of the bytecode
 JarAnalyzer To keep track of the dependencies between the various jars used in the project
 CheckStyle To measure our compliance with our coding standards (we're working on it!)
 StatSVN To get a report of who's been editing what files when
 JDiff To detect API changes between releases

Automated builds and releases are automatically added to our releases page using GoogleSitesAnt, an open-source project we developed for that purpose.

Ingredients

We use many third-party products to create ABL, here are the main ones:

 Apache Tomcat We use Tomcat as one of our test platforms for web environments. We also ship Tomcat in the standalone demo of ABL.
 Apache Commons beanutils An excellent library to manipulate Javabeans.
 Groovy We fully support Groovy as a language to express business logic. We use it ourselves to write some testing code.
 Hibernate This one should go without saying, of course.
 Apache Commons Jexl We use Jexl as the analyzer and interpreter for declarative rules, i.e. those rules expressed in the annotation rather than in code. The wonderful people who write Jexl were kind enough to make some enhancements that have allowed us to make full use of it.
 Apache log4j We use log4j as our primary logging framework.
 JUnit All our tests are written using jUnit.
 JunitReport For the daily builds, the output from JUnit is formatted using JUnitReport.
 HSQLDB We use HSQL as part of all the demos: it's fast and convenient. The in-memory mode is very convenient. We also use it for many of our tests.


Comments