Pragmatic Project Automation
Forget wizards, you need a slave--someone to do your repetitive, tedious and boring tasks, without complaint and without pay, so you'll have more time to design and write exciting code. That's what computers are for: you can enlist your computer to automate all of your project's repetitive tasks, ranging from individual builds and running unit tests through to full product release and customer deployment. Instead of trying to do it by hand--and risk doing it differently or just plain wrong--you can turn these labor-intensive, boring and potentially risky chores into automatic, background processes that just work. This eagerly anticipated book covers a variety of popular, free tools to help automate your project. Armed with plenty of examples and pragmatic advice, you'll find it's easy to get started and reap the benefits of modern software development. You can begin enjoying pragmatic, automatic, unattended software production that's reliable and accurate every time.
Review By: Harmon Avera, Jr.
11/23/2005"Pragmatic Project Automation" is the third book in the Pragmatic Starter Kit series. In six concise chapters, Mike Clark provides an introduction to automating the major steps in a Java project--building the code, releasing the system, deploying or installing the finished product, and monitoring these processes.
Clark discusses techniques and tools used to automate features of a delivered Java application. First, he shows how to structure the project to do complete, repeatable builds of the system, including unit tests using Ant (http://ant.apache.org), as well as the Groovy scripting tool (http://groovy.codehaus.org) that can interface directly with Ant. Once the build process has been scripted, the author devotes a chapter to tools that can run the build at a defined frequency and publish the build results, either via e-mail or posting to a Web site.
In chapter four, Clark automates the process of creating the release package from the raw ingredients (source code and libraries) under version control. Once you've built the release, though, how do you know it will work for a customer? The author shows how to add diagnostic tests to the standard distribution and how to use NSIS (http://nsis.sourceforge.net) to create an installer for delivered software, explores automation techniques for deploying hosted applications, and shows a technique for deploying applications via the Web. Clark uses the final chapter to talk about ways to monitor any of these automated processes, using everything from e-mails or colored lava lamps when a build fails to writing automated, screen-scraping software to monitor Web sites.
This book poses a clear, conversational writing style with many example sources for each tool and level of automation described. Source code for the described tools or scripts makes up about 20 to 25 percent of each chapter. The layout flows well. Each chapter features a short synopsis at the beginning as well as an ending summary. The author uses few acronyms or abbreviations, for which I was grateful. Once I started reading this book, I couldn't put it down; I wanted to see how the author tackled the next level of automation.
Some of the techniques were immediately useful to our project, with the sections on automating and scheduling builds with unit tests being the most helpful for our team. We created a nightly build process and use e-mail to notify the developers of failures.
I appreciated the author's use of real, available tools in the chapters on scheduled builds and installation/deployment. A template for each tool is presented with enough code and documentation to be immediately useful. Alternative tools are also briefly discussed where appropriate. The major caveat is that the tools and techniques presented are aimed at Java-based development. Suitable substitutes for C++ or C# may be available, but were not described in this book.
Although this book is written for programmers, I highly recommend it for anyone involved with release management and quality assurance.