Virtualization is a broad area. Here we delve into three types of virtualization: platform virtualization, network virtualization, and service virtualization. All three types are of high interest in software development. A separate article in this newsletter will discuss another specific type of virtualization: containerization.
Software testers may be acquainted with virtual machines (VMs), for example. VMs are a type of platform virtualization, and act like an entirely separate computer, complete with an installed operating system and software, running on a user’s machine. A helpful feature of VMs is that “snapshots” can be taken of the system in various conditions. Once recorded, snapshots can be restored later, thus putting the system back in a desired original state. A common usage for testing purposes is to have snapshots of a VM with software under development in different versions, thus allowing comparisons in behavior as the code is changed.
VMs also give the possibility of running an entirely different operating system such as, for example, an instance of a Linux box on a Windows desktop. This gives the opportunity for cross-platform development and testing on a single system. In addition, VMs are essentially cordoned-off environments, so things like suspected malware can be tested in the sandbox environment that a VM provides. The VM can be returned to its original state without damaging the computer on which it is housed.
Within a medium-to-large sized software development business, VMs are a good choice because once their images have been created, they can be shared across teams or across departments. This makes deployment and configuration a one-time task, while ensuring team members are all working on similar systems. Rapid provisioning and configuration can save a lot of time and money.
Another attractive feature of using VMs arises in disaster recovery. Many commercial virtualization platforms contain software that automates fail-over during a disaster situation, thus protecting critical data and enabling rapid system recovery. When compared to restoring actual physical servers, the benefits are easy to see.
Testers and developers will often encounter Virtual Private Networks (VPNs), which are a form of network virtualization. VPNs are a way for companies to have their own private internets, with control over functionality, management, and security. In this day and age, a company’s data is its most valuable asset, and VPNs give them the means of protecting that data. Given the increased importance of security, it is important to protect users from theft of personal information, which in recent years, has had dire and very public consequences. While it is important to remember that VPNs are not bulletproof, they do offer a good line of defense, especially when combined with other robust security initiatives.
A VPN is essentially a secure, encrypted connection, often referred to as a tunnel. The VPN is accessed both within the office and outside, so that remote workers can access all of the company resources they are authorized to use. As working remotely has become more widely adopted, this has been helpful.
Service virtualization models the behavior of components the software might interact with, but without all the underlying logic. This is a means for developers and testers to work with models of the external system, even when that system does not yet exist, or when it is under development. In modern software applications, interaction of components most commonly occurs across Application Programming Interfaces (APIs). The responses of external APIs can be simulated through virtualization, thus allowing rapid development, testing, and automation.
Commercial and open source tools are available for service virtualization. Some enable services to be modeled in a matter of minutes by recording interaction with a software component. They can then create a simulation of the API which can be used and shared across teams, whose own components under development might interact in other ways with this virtual version.
This article has outlined some popular uses for virtualization, but there are many more. Whether you are a seasoned developer or tester, or just starting out in your career, it is useful to know the uses of this technology to effectively and efficiently produce high-quality software.