I pretty much use it in all of the ways specified above:
Sometimes I use it for development: I may need a development environment that I can not set up on my desktop for some random reason.
Other times, I use it to test software on various OS installs. As an example, I recently had the need to test an installer and software on Vista 32/64, XP, Windows Server 2003, Windows Server 2008. That would've been a pain in the butt for me without VMs. (Handy tip that I use, I often take snapshots of my VMs after I first set them up. This allows me to roll back to a 'fresh' install any time I want.)
Other times, I'm setting up multiple linux boxes to test how I want the multiple machines to interact or to test multi-server deployment without actually having to pay to bring up more servers.
Sometimes I just need to set something up that matches my production environment so that I can test possible changes and see what's going to work and what's going to break.
I have a full dual monitor linux development environment setup on my windows box as well so that I can do my development from there if I need to.
Essentially: Your options are limitless.