The Virtual Dev Lifecycle

Leverage Virtualization to make application development more efficient.

Everyone has no doubt heard about the revolution occurring in IT thanks to the power of virtualization. I confess that when I programmed using VM and MVS on an IBM mainframe 20 years ago, I didn't get the point. I just knew that I edited and compiled under VM, but had to test under both VM and MVS. I could do so from the same terminal, making it convenient, but that didn't seem unusual given how mainframes were used then.

However, over the last few years I've become an enthusiastic convert to the use of virtualization in application development. Part of that enthusiasm results from the need to demonstrate software to various groups on a laptop computer. I've had to run beta builds of Windows, Visual Studio and a variety of other software packages and demonstrate several of these products in front of audiences. About six years ago, after I did one such demonstration in front of 50 people and the computer crashed three times, I looked for better ways of managing prerelease software for demonstration purposes.

It turns out that a virtualized disk and OS can be isolated from the laptop hardware. I can still crash the VM, but the computer itself stays up and I can relaunch the VM. More important, I can run my beta builds on their own VMs, protecting them from potential fatal interactions with other software.

High-Level Testing
For developers, the benefits of virtualization go well beyond making sure that your software doesn't crash your computer. It starts in the testing lab, where most software development organizations have rows of systems and monitors with different configurations, operating systems and installed software. Several years ago, I visited the headquarters of a large insurance company, whose test lab took up three acres of floor space and consisted of more than 4,000 servers and 4,000 clients. I would imagine that it is even larger today.

This software testing organization didn't have software permanently installed on any of these systems. Instead, it had a collection of thousands of different images. Its testers selected a group of server and client images based on the requirements stated in the test plan, sent those images off to a group of systems, and kicked off their test suite. This automated approach made possible a high level of app testing in a short period of time.

Images Galore
It's a good start if you're saving your testing configurations on images and installing those images when you have to test specific configurations. But you're still only scratching the surface of where you can take virtualization. You can run multiple images on a single system, enabling you to make better use of hardware resources. Each image can test a specific configuration and you might have several images running on a single large system at one time.

Developer's Toolkit Quote

Ah, but you say you're testing for performance? That's OK. Most performance-testing tools look strictly at the processor cycles devoted to executing the code of that application, and it doesn't matter how many applications or VMs you're running on the hardware -- you'll still get cycle-accurate performance measurements. And if you're doing timing, most such tools also make adjustments for speed, showing only the number of milliseconds (or a similar measure) required to execute the code segments.

Then there's virtualization in the development lab itself. Many developers have at least two computers at their disposal -- one for editing code and other administrative tasks, and a second for local builds and unit testing. This arrangement helps developers continue to edit code, prepare documents and send e-mail while still building and testing their code.

However, in other cases, developers only have use of a single system, which affects their productivity. One way of getting the most out of a single system is to incorporate two images, one that runs builds and unit tests, and the other that runs standard business productivity apps. If this employs a host-based (Type 2) hypervisor, the build VM can run as a guest on the development and editing host.

There are other creative ways of using virtualization in the development lifecycle. For example, VMs for application builds can maintain configurations for branches while also building versions based on the mainline. Doing so helps you get the most out of your hardware and accelerates the development and testing of code. Whether you're an individual developer or heading a large development organization, leveraging VMs to accelerate the development lifecycle will pay off in faster development and more complete testing.

About the Author

Peter Varhol is a principal at Technology Strategy Research LLC, an industry analysis and consulting firm.