21. October, 2010
In the ancient mythology, Hercules slew the Hydra, a monster which could grow a new head for each one cut off. Does that remind you of your programming job? The punchline is: Hercules didn’t conquer his opponent with brute force but with brains.
So if your product sprouts two new bugs for each you fix, it’s time to take the fingers away from the keyboard and start rubbing your head.
The solution? Unit tests. Each test makes sure that a piece of code works as it should. Even if each tests looks dump and futile, in a mass, they make sure that all the code which you didn’t change still behaves as you expect.
Kudos to Thomas E. Deutsch for the idea of the Hydra.
Leave a Comment » |
Software | Tagged: Testing, Unit testing |
Permalink
Posted by digulla
8. October, 2010
@Rules seem a better solution than @RunWith to do some special work before/after a test. The release notes mention a couple of ideas:
- Notification on tests
- Setting up or tearing down resources, especially when they are used in multiple test classes
- Special checks performed after every test, possibly causing a test to fail.
- Making information about the test available inside the test
Related articles:
Leave a Comment » |
Software | Tagged: Development Tools, Java, JUnit, Programming, Tests, Unit testing |
Permalink
Posted by digulla
7. October, 2010

Image via Wikipedia
If you use slf4j in your project and need to log JDBC events, then have a look at log4jdbc. It has all the usual features: Timing statements, showing all arguments, mapping SQL to connections. It can even log stack traces if you need to know where a JDBC call was made. Sample output:
16:32:56.162 [INFO ] jdbc.connection - 1. Connection opened java.sql.DriverManager.getConnection(DriverManager.java:525)
16:32:56.168 [DEBUG] jdbc.connection - open connections: 1 (1)
16:32:56.169 [DEBUG] jdbc.audit - 1. Connection.new Connection returned java.sql.DriverManager.getConnection(DriverManager.java:525)
16:32:56.284 [DEBUG] jdbc.audit - 1. PreparedStatement.new PreparedStatement returned com.avanon.basic.db.XPreparedStatement.prepare(XPreparedStatement.java:84)
16:32:56.292 [DEBUG] jdbc.audit - 1. Connection.prepareStatement(SELECT *
FROM V_RCSA_40_4_CTRL_RATING) returned net.sf.log4jdbc.PreparedStatementSpy@423606 com.avanon.basic.db.XPreparedStatement.prepare(XPreparedStatement.java:84)
16:32:56.162 [INFO ] jdbc.connection - 1. Connection opened java.sql.DriverManager.getConnection(DriverManager.java:525)
16:32:56.168 [DEBUG] jdbc.connection - open connections: 1 (1)
16:32:56.169 [DEBUG] jdbc.audit - 1. Connection.new Connection returned java.sql.DriverManager.getConnection(DriverManager.java:525)
16:32:56.284 [DEBUG] jdbc.audit - 1. PreparedStatement.new PreparedStatement returned com.avanon.basic.db.XPreparedStatement.prepare(XPreparedStatement.java:84)
16:32:56.292 [DEBUG] jdbc.audit - 1. Connection.prepareStatement(SELECT *FROM V_RCSA_40_4_CTRL_RATING) returned net.sf.log4jdbc.PreparedStatementSpy@423606 com.avanon.basic.db.XPreparedStatement.prepare(XPreparedStatement.java:84)
16:32:56.342 [DEBUG] jdbc.audit - 1. PreparedStatement.clearParameters() returned com.avanon.basic.db.SetParameters.clear(SetParameters.java:144)
16:32:56.343 [DEBUG] jdbc.sqlonly - com.avanon.basic.db.XPreparedStatement.executeQuery(XPreparedStatement.java:71)
1. SELECT * FROM V_RCSA_40_4_CTRL_RATING
16:32:56.350 [INFO ] jdbc.sqltiming - SELECT * FROM V_RCSA_40_4_CTRL_RATING {executed in 7 msec}
16:32:56.356 [DEBUG] jdbc.audit - 1. PreparedStatement.executeQuery() returned net.sf.log4jdbc.ResultSetSpy@2c5444 com.avanon.basic.db.XPreparedStatement.executeQuery(XPreparedStatement.java:71)
16:32:56.412 [DEBUG] jdbc.audit - 1. PreparedStatement.close() returned com.avanon.basic.db.DBUtil.close(DBUtil.java:114)
16:32:56.418 [INFO ] jdbc.connection - 1. Connection closed com.avanon.basic.db.DBUtil.close(DBUtil.java:129)
16:32:56.418 [DEBUG] jdbc.connection - open connections: none
The strange “1.” is the connection number.
Alternatively, check out jdbcdslog.
Leave a Comment » |
Software | Tagged: Databases and Persistence, Java, Java Database Connectivity, JDBC, JDBC driver, Programming, SQL |
Permalink
Posted by digulla
6. October, 2010
If you want to backup your Hudson configuration, why not back it up to a version control system (VCS)?
Stephen Connolly has posted a solution in his blog: Keeping Hudson configuration and data in SVN
Leave a Comment » |
Software | Tagged: Apache Subversion, Backup, Hudson, Revision control, VCS |
Permalink
Posted by digulla
6. October, 2010
If you see this error in JavaScript (for example in a BIRT report):
org.mozilla.javascript.EvaluatorException: error instantiating (): class java.sql.Array is interface or abstract
then don’t include the package java.sql (as in importPackage(Packages.java.sql);) because if you do, new Array() will find the SQL class first and it will fail.
2 Comments |
Software | Tagged: BIRT, JavaScript, Programming, Rhino |
Permalink
Posted by digulla
30. September, 2010
Sometimes, SQL just isn’t enough. What do you do when you just can’t get the SQL to run in under an hour while a little piece of Java code does the same query in a few seconds? Put the result into a report table and then run the report against that table.
Leave a Comment » |
Software | Tagged: BIRT, BIRT Project, Databases, Java, Optimization, Performance, Programming, Reporting, SQL |
Permalink
Posted by digulla
29. September, 2010

Image via Wikipedia
From the website:
In early August, Google acquired Instantiations, a company known for its focus on Eclipse Java developer tools, including GWT Designer. We’re happy to announce today that we’re relaunching the following former Instantiations products under the Google name and making them available to all developers at no charge:
- GWT Designer
Powerful Eclipse-based development tools that enable Java developers to quickly create Ajax user interfaces using Google Web Toolkit (GWT)
- CodePro AnalytiX
Comprehensive automated software code quality and security analysis tools to improve software quality, reliability, and maintainability
- WindowBuilder Pro
Java graphical user interface designer for Swing, SWT, GWT, RCP, and XWT UI frameworks
- WindowTester Pro
Test GUI interactions within Java client rich applications for the SWT and Swing UI frameworks
I played a bit with CodePro. The tools look promising even through there were some glitches, namely:
- The JUnit editor looks cool but the table with the current unit results often hangs.
- It was more complicated than I liked to generate test cases
- I couldn’t get the code coverage tool to work
- The dependency works but didn’t play with it long enough to say for sure how useful it is
- The code analysis shows a lot of numbers but the workflow is clumsy. For example, it says that something has a cyclomatic complexity of 16 but I couldn’t find out what and where.
Leave a Comment » |
Software | Tagged: Google, Google Web Toolkit, IDE, Java, Programming, Tools |
Permalink
Posted by digulla