Automation in Agile


If there is anything that I have learned in my software development career it is that all development is Agile whether you call it that or not. Agile is fast, lean, dynamic and unforgiving. The development team is in a constant tug of war with requirements and at the same time trying to maintain quality. This poses a great challenge which Agile teams must learn to overcome. How do we balance quality with new functionality? The simple answer is automation. Automation is key for any successful Agile team.

Automation is simply the process of automating tasks within your software development and testing process. In a true Agile environment, software development is performed at such a fast pace that if there is anything that can be automated, it must be automated. We need to free up the development team from repetitive tasks to focus on building new things and fixing bugs. There is hardly any time to waste. One area where automation has existed for some time now, is the build process. If anyone has ever written a build script that compiles the application and puts out a released version of the software, then you have done automation. Every time the build fires whether using any build technology such as CruiseControl, Nant, or MSBuild, the build is automatically kicked off compiled, packaged and deployed to a server as a release for testers or anyone else to pick up. This is essential for virtually any software team out there, regardless of size. Automating the build eliminates one of the basic tasks that have to be done regularly and possibly multiple times a day. This keeps the team free from having any valuable resource tied up so that the team can focus on the more important aspects of software development.

Now we come to a slightly more advanced form of automation called Automated Testing. Once a build is created successfully, to assure it’s a quality build, a set of basic tests must be performed on it. This can be called a build verification test or a smoke test. The basic idea is to make sure that the piece of software that was just created is any good. Does it install? Does it even launch? Can it be deployed on a server? Whatever your software may do, there will be a set of very basic features that it must be able to do say it works, even if it may have bugs further down. This is something a lot of QA teams do as part of their daily routine. Their job is to verify and give a green light that the build has passed the basic tests and can be tested further for more regression, adhoc or exploratory testing. The challenge is that if your team wants to be Agile, this process should also be automated. A set of automation scripts or tests need to be built that perform this task unattended or automatically as frequently as possible; if not after every build then at least once a day. As the team is focusing on building new features or completing user stories, the automation is providing the necessary confidence and support to make sure that no major functionality is getting broken and the software still can be considered stable to be potentially shippable. This also reduces any unforeseen major bugs to creep in and surface when it comes time to close out a sprint or an iteration. Giving the team and its stake holders, greater confidence in the software they are producing.

While automation can be applied to many aspects of the development process, these two areas of automation are absolutely essential. Getting an automated build and automated test will give the team a strong foundation to build upon and increase development quality and speed. Remember, automation saves time and time is money!