To be successful at agile development it is important that you have the right tools in place. Some of the tools we use to deliver projects include:
Java web applications have proven themselves to be scalable, reliable and offer high performance but the emergence of frameworks like Ruby on Rails have exposed common Java application frameworks (like Spring MVC, Struts, etc) for their lengthy development cycles and heavy configuration (hard to argue with this). Grails changes this. Grails is an application development framework that leverages Groovy and other Java based frameworks such as Spring, Hibernate, Sitemesh, etc. Grails supports rapid application development, covention over configuration, less code, flexible configuration and just makes it much easier to build applications (more importantly it makes maintenance a lot easier too).
Hudon is a java based continuous integration server. We have used CruiseControl in the past but Hudson (like grails) makes things very easy. One of the main principles of agile development is iterative development - which means deliver working functionality in short iterations. Iterative development means you should be releasing the application very often. Hudson supports this process by allowing us to automatically deploy applications as soon as changes occur in our subversion repository. Hudson monitors our subversion repository for changes and when there are changes made to the repository Hudson will complete a number of steps including:
- Run all unit tests
- Run all functional tests
- Run static analysis reports
- Build a new version of the application
- Deploy the new version to our test environment
Selenium is a framework which allows automated testing of web applications. Selenium allows us to automatically run functional tests when a new version of an application is available. This means a full regression test can be completed within minutes.
These are just some of the tools we use to support our agile development process. Any other recommendations?