he era of agile software development is upon us. Chances are, if your development shop doesn't already practice some form of agile development, you're probably competing with a company that does. The rapid-release nature of the agile mindset alongside the idea of releasing features incrementally and frequently inherently increases the risk of introducing unforeseen problems into the software. The charge for any development manager working in these conditions is to find such problems early and provide processes to handle them appropriately.
If anything is clear about the agile philosophy of software development, it is that it requires new and efficient processes for finding bugs early and handling them efficiently; rapid communication of problems and events is critical. These problems have always existed, even in more traditional models of software development, but longer delivery cycles made them less urgent.
It is important to point out that while the term "agile" may have been coined in the software development industry, the problems inherent to managing fast-moving processes are not software-specific. In other industries such as auto manufacturing and national retailing (think Wal-Mart) corporate inventories are dependent on carefully orchestrated supply chains. Industry leaders have long recognized that "lean thinking" can be a considerably more efficient business model. The idea is that by keeping less stock on the shelf, and by acquiring or manufacturing goods just-in-time, companies are able respond more quickly to changes in consumer demand, have fewer wasted goods that go unpurchased, and reduce storage and inventory costs. By letting customer demand drive purchasing, suppliers can provide the right items in the appropriate quantities precisely when and where they are needed.
Without strict governance of the processes and constant communication about faults in the supply chain, the entire system becomes very unstable. With little or no reserve stores of supplies and goods, problems in the chain have to be fixed quickly to prevent shortages. Stopped assembly lines and empty retailer shelves must be avoided at almost all costs. The software construction industry must implement similar processes to manage the rapid changes in the software. Further, like a healthy supply chain, problems in the software must be detected early and often to ensure that such problems do not cause problems for the project by either delaying the release date or reducing software quality.
Two processes that provide big payoffs for developers are unit testing and continuous integration. I covered unit testing for Visual Studio Team System in a previous article. This article shows you how to implement a continuous integration process that will rebuild the software project every time new code is checked into the project. The benefit that continuous integration brings to the development process is early detection of problems with the "quality" of the software. In this case, quality is judged by the success of the build and the success of unit tests run against the new build. While other tools are available that serve similar purposes, we will use the tools provided by Team Foundation Server. This article will not specifically discuss the Team Build tool provided by Team Foundation Server but rather show how to run Team Build automatically.
|Author's Note: Perhaps the best philosophical reference available for continuous integration is Martin Fowler's web page aptly titled "Continuous Integration." While not the seminal article on the subject, Fowler's page is heavily referenced in many discussions about continuous integration and provides practical guidance on why it is important and how to make it work.
This article reuses the sample project code provided in my earlier article on unit testing
, retrofitting the project code so it rebuilds automatically when changed code gets checked in. First, download the code
and create a new team project named DevXLibrary. In the rest of this article I'll show you how to create and automate a team build type for the project.