| COLUMN |
Streamlining software development with VMware: Typical problems |
 |
 |
 |
By Alessandro Perilli
20 Sep 2006 | SearchServerVirtualization.com



|
|
Developing new software is an expensive and time-consuming process. Development team members have to independently work on their code and share it when needed, and they have to build and rebuild it on the same or different environments. QA engineers have to test it on multiple configurations and scenarios until the final deployment in production, where several factors are out of control and can undermine stability and reliability. IT managers have traditionally had few ways to mitigate technical issues and smooth the release path. But server virtualization changes that.
In this article, we'll look at how deploying a VMware virtual infrastructure could reduce problems your company's development department encounters, making it easier to roll out new products. In part two, "Streamlining software development with VMware part 2: Snapshots, portability and automation," we'll explore the features in VMware products that can be used to tweak applications. VMware is not the only company that offers virtualization solutions, but its wide range of products and its capability to seamless migrate a virtual machine from one platform to another make it a good choice for this scenario.
Typical problems
The very first issue of a software development is environment integrity.
Many software engineers keep their development tools on an everyday workstation. When a new project starts, the majority simply start coding in the same environment that they use for browsing the Web, reading email, watching videos or presentations -- often even gaming. In theory, the systems used for coding new products ought to be perfectly clean, like the fresh installation in which customers are supposed to host the product being developed. Unfortunately, this rarely happens.
Machines that serve many functions on a day-to-day basis will tend to have a lot of installed software, which means each machine has multiple libraries, requires high-level permissions, modifies environmental variables and so on. This is not to mention possible malware infections. The newly developed code could easily run or not run because of these variations, but moving it onto different machines – machines on which the operating systems have been compromised in different manners -- will produce different results, leading to the need for complex and time-consuming troubleshooting.
Another frequent problem in complex projects is environment portability. Software architects and engineers, product managers, have to keep track of a product's growth during the whole development process or have to collaborate on it to improve or debug its routines.
Having many persons around the same monitor or permitting remote access to the development environment is highly unpractical. On the other hand, moving code from an operating system to another is no simple matter.
Any application based on database access, for example, is very hard to share if the developer has installed the database instance on his own machine or relied on a remote instance on a dedicated network segment that not everybody can access. But even without a database, a development team could be in need of libraries or, in the case of multi-tiered applications, of other services that aren't moved along with the code.
A third typical problem is the lack of physical resources. When software engineers are savvy enough to not rely on locally installed services, they need remotely accessed services that have to be deployed, configured and notified to the team. This requires time but most of all implies machine availability, which cannot be taken for granted.
Similarly, hardware configurations often have to be modified during development to add more memory or another network interface card. Adding new components can be even more complex in big companies in which hardware is acquired in stock from OEMs.
But the amount of machines needed for software development is not only limited to machines on which to deploy needed services. QA engineers have to try the same code on several versions of the same operating system to verify that the code works as expected in all possible scenarios -- with different permission levels in several Windows editions or with different libraries availability in several Linux distributions. A dedicated machine is expected to be available for each of them, and things become complicated when multiple new applications are concurrently in development.
It's obvious that lack of hardware can soon turn to be a problem for IT managers. Once the big project is finished, they have a certain amount of computers that will be wasted until the next project and could become obsolete in the meantime.
Even having enough resources, software engineers and testing staff members still have to face the most frightening risk: short deadlines. A long series of logistical operations can severely slow down development, distracting coders from their goals. For example recognizing the need for environment integrity leads to the act of debugging code always on a fresh installation, which is impossible until developers reinstall the whole operating system from scratch every time. But even without such level of attention, when the developed code includes an installer, it's critical to be working on a virgin OS.
Lack of time availability also affects testers. Testers not only need multiple physical machines for every platform on which the code has to be certified as but also need to reinstall the same operating system several times -- perhaps because last installation failed or simply to test different languages, service packs or concurrent applications.
Fundamentally every test case should be conducted on a dedicated environment and this implies a notable effort. Even if disk backup solutions are in place, their usefulness depends on the underlying hardware and restore times.
These are some of the most typical problems plaguing software development.
In "Streamlining software development with VMware, part 2: Snapshots, portability and automation" we'll explore VMware products features, detailing a winning strategy to improve the process, from code writing to production release and customers delivery.
About the author: Alessandro Perilli, a self-described server virtualization evangelist, launched his influential virtualization.info blog in 2003. He is an IT security and virtualization analyst, book author, conference speaker and corporate trainer. He is a Microsoft Most Valuable Professional for security technologies and the certifications he holds include Certified Information Systems Security Professional; Microsoft Certified Trainer; Microsoft Certified System Engineer with Security competency; CompTIA Linux+; Check Point Certified Security Instructor; Check Point Certified System Expert+; Cisco Certified Network Associate; Citrix Metaframe XP Certified Administrator.

Sound Off! - |
');
// -->
|