- JUnit and Friends
- Building and Configuration Management
- Web Services
- Aspect-Oriented Programming (AOP)
Building and Configuration Management
If you work in a team, you probably use configuration-management software as a source repository. It's surprising how many teams are still struggling without this facilitya fact that's more amazing given that the most popular configuration-management software in the world is free.
As software systems become more complex, it's necessary to use more-complicated software tools to build the software. While most IDEs offer build facilities, most of these are hopelessly inadequate in a team environment. If your teammate has an unusual setup, it's really difficult to get his or her software to build on your machinethis can have a high cost in time and money. ANT is designed to solve these problems.
If you're following the practices of extreme programming (XP)or even if you're not doing XP, but are quite smartthen you'll integrate your full system quite frequently. CruiseControl is a piece of software that can offer great assistance with this practice.
ANT stands for Another Neat Tool, and it lives up to its name. ANT takes your source code and builds it into an applicationsort of. ANT actually does a lot more than that: ANT is scriptable in XML, it can manipulate files and directories (even the contents of files), it can invoke applications such as javac, and it can interact with configuration-management systems such as CVS. Really, ANT is an XML-based general-purpose scripting tool for your entire development environment. It can be used to turn an editor into a full-featured IDE.
This description still misses a lot. ANT is based on the idea of a task. A task is handled by a specific class; if you want to add a new task, you just write a new class to handle it, and this is usually pretty simple.
For example, I have ANT tasks for Tomcat that allow me to hot-redeploy my applications for testing. I have ANT tasks for JBoss that allow me to do the same. I have ANT tasks for WebTest that allow me to drive the testing of my hot-redeployed J2EE application. There are tasks for just about everything you can think of. It's great.
ANT is also very popularit has been integrated into just about every major IDE in the world. If your IDE doesn't support it, get to their sales reps and find out why not.
CruiseControl is yet another very clever tool. This one supports the notion that the longer you leave between integrating, building, and testing your system as a whole, the more painful and risky it is. The extreme programming crowd simply calls this continuous integration, and it's a very important part of reducing risk and increasing feedback.
CruiseControl is a scheduling and reporting tool that uses ANT to build your system, and then runs all of its testsunit, integration, and acceptance (if they all exist, which they should). It then reports on the results in a variety of ways, including uploading HTML reports to a web server.
The best idea is to have a machine sitting in the corner of a project's war room running CruiseControl continually.
We all know how important it is to use a source code repository. When choosing one, you have to consider things like feature set, speed, and cost. Something else to consider, though, is why almost the entire open source community uses CVS. You'll find CVS wherever you look. It isn't a great system; it's difficult to utilize a lot of the CVS features unless you're a UNIX system administrator type. Fortunately, its ubiquity works in our favor, and CVS is integrated into all good IDEs. There are also some good open-source Windows and Linux front ends.
There isn't too much else to say about CVS, really. It's good, it does its job fast and without mistakes, and it's freewhat more can you ask?