In computer science a Virtual Machine (VM) is a software implementation of a hardware (or a part of it) that executes programs, applications and scripts just like the real machine would do.
Here's the simplest example of Virtual Machine - Windows 7 running Windows XP in a VM to provide backwards compatibility for the older applications:
Here's another example - Sun VirtualBox running Ubuntu x64 server within Windows 7:
These were the examples of Operating System Virtual Machines. Another type of VM is Application Virtual Machine, that runs applications and scripts in an isolated virtual environment. Examples of that would be Java VM or .NET Framework VM.
VMs and Software Development
Virtual Machines are getting very important and widely used these days. This happens due to the improvements in hardware and virtualization capabilities along with the numerous benefits offered by the technology.
Some of usage scenarios include:
Quality Assurance teams get the ability to test applications, their deployments and upgrades more efficiently. Testers don't need to have multiple OS and installation configurations available any more. A set of VM files (that are easy to share) is a replacement for that.
Additionally, it is quite easy to configure continuous integration to run actual integration tests within differet virtual machines (emulating various OS and setup configurations), thus providing a better code coverage and issue detection.
Software Developers could try out latest changes and various multi-server deployment configurations within virtual development environments.
Cloud service providers could sell finely-grained computing capacities to customers in form of the VM slices. Customer is able to configure his Virtual Machine any way he wants.
Should they want to change hosting provider, they just need to move a single VM from one environment to another.
For complex enterprise applications (spawning multiple machines and server roles) virtual machines provide high-level separation of concerns, simplifying software evolution and maintenance.
It is really easy to launch multiple virtual machine clones from one VM file. This simplifies scaling and cloud bursting scenarios for organizations.