main website home
  • About this blog

    This blog features updates, opinions, and technical notes from Caucho engineers about Caucho products, the enterprise Java industry, and PHP. Caucho Technology is the creator of the Resin Application Server and the Quercus PHP in Java engine. A leader in Java performance since 1998, Caucho is a Sun JavaEE licensee with over 9000 customers worldwide.
  • Tags

    ajaxworld bam candi cdi cloud cluster comet configuration deploy devoxx eclipse ejb embedded flash flex google app engine hessian hmtp ioc java ee 6 javaone javazone jms messaging newsletter nyjug osgi php pomegranate quercus resin resin 4.0 REST servlet sfjug silicon valley code camp spring testing training tssjs watchdog webbeans web profile websockets wordpress
  • Meta

    • Register
    • Log in
    • Entries RSS
    • Comments RSS
    • WordPress.org
« Quercus compilation available for Tomcat in 4.0.1
Logging custom statistics in Resin »

TDD and the release cycle

We’ve used test-driven development from the beginning of Caucho, almost 12 years now, and it heavily influences our development, refactoring, and also our release cycle. Today, we’re in the final two weeks of the release cycle for 4.0.1 which means passing our regression test suite and working through load testing.

Each week in our release cycle is influenced by our TDD methodology. For Resin, we aim for an eight week release cycle, and usually slip a week or two so it ends up being ten-ish weeks.

The first two weeks are for any major refactoring, i.e. anything that will massively break the regressions. Resin 4.0.1 includes a major refactor of CanDI (JSR-299) based on changes in that specification, and also our first full implementation of the Servlet 3.0 draft. Because those changes were so large, and because we use CanDI for all our configuration, the changes broke essentially all of our tests: our ioc/candi tests, the core Resin server tests, some JSP tests, our EJB tests, and even our JPA (amber) tests. Last week, for example, we failed about 3000 tests.

The next four weeks of the release cycle are for bugs and any new features. All bugs and new features get new tests added. In some rare cases like the CanDI refactor, the refactoring might slip into this phase. But normally, we stop breaking tests and start passing new ones.

The final phase of the release is passing all our regressions, and working on our stress tests. This is the phase we’re in now. From an outside view, this phase can look like we’re not doing much, because we’re not adding features, and we’re generally not fixing bugs, and generally don’t have time for blog posting. Nevertheless, this phase is our most important. For releases like 4.0.1 which involve large refactoring, the regression cleanup can take extra time.

People who have used TDD know that its main value is giving the flexibility to refactor your code. The quality from the tests is important, of course, but the extra freedom to continually refactor and continually improve the code base is extremely valuable.

Tags: candi, servlet, tdd

This entry was posted on Thursday, July 9th, 2009 at 10:41 am and is filed under Engineering. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “TDD and the release cycle”

  1. sblommers Says:
    July 13th, 2009 at 3:47 am

    Great journal! Keep up the good work. I am waiting forward for 4.0.1, hopefully it fixes some problems I keep having with my current Java and PHP integrated project. Please let me know when a snapshot is ready for testing.

    Best regards,
    Sebastiaan

Leave a Reply

You must be logged in to post a comment.


Caucho Technology is proudly powered by WordPress and Quercus®
Entries (RSS) and Comments (RSS).

  • HOME |
  • CONTACT US |
  • DOCUMENTATION |
  • BLOG |
  • WIKI 4 |
  • WIKI 3 |
  • Resin: Java Application Server
Copyright (c) 1998-2012 Caucho Technology, Inc. All rights reserved.
caucho® , resin® and quercus® are registered trademarks of Caucho Technology, Inc.
resin® is a cloud optimized, java® application server that supports the java ee webprofile ®