Streamlining Your Application Analysis and Testing Project
What’s our next project? Test our applications to get ready for Windows 7? No problem, boss. We just have about 950 that we need to look at…
How thoroughly you’ve conducted the application compatibility portion of the migration project will determine if your OS roll-out is reasonably smooth, or if you’re about to throw your IT team into a firestorm of help-desk calls, finger-pointing and numerous late nights.
When companies began evaluating Windows Vista a few years back, application compatibility was the issue that stopped some dead in their tracks. In many of these cases, critical applications an organization relied upon for key business functions simply were not available for Windows Vista. In other cases, organizations did not have the budget, nor desire, to license the new version that was designed for Windows Vista. Finally, in some instances, key applications were custom or in-house development efforts where the original developers were either no longer around or otherwise not available to re-engineer the code base.
If you are looking to migrate to Windows 7, you’ll find the situation isn’t as challenging as it was a few years back—most applications designed to work with Windows Vista will work fine with Windows 7, and most ISVs have updated their applications to work with this new generation of Windows operating system. So whether you’re migrating from Windows XP or Windows Vista, the situation isn’t quite as tough as it was in the past.
That said, getting your application portfolio ready for an OS migration can be a major undertaking, but taking the right sequence of steps and making some tough choices to reduce the scope of testing can make the chore a little less daunting.
Why do applications break in Windows Vista and Windows 7?
So what changes were made in Windows 7 (and Windows Vista) that caused applications designed for Windows XP to ‘break?’ To be sure, the engineering teams responsible for Windows Vista and Windows 7 didn’t take the issue lightly.
The changes to Windows were made to improve security, reliability, performance, and usability, and in some cases to remove legacy components that have simply reached the end of their useful life. We won’t take the time to catalog all of the changes in this article, but those most significant to application compatibility include:
User Account Control (UAC)/Standard User accounts. In the development of Windows Vista, the engineering team set out to enable most organizations to deploy their users as standard users, and reserve administrator privileges for those who need them—IT professionals. Adopting the principle of what we used to call ‘least-privileged user account’ for client PCs helps prevent intrusive malware, reduces end user configuration errors, and prevents unauthorized applications from being loaded on the machine. In the past, an application had the ability to write to the registry settings, modify the kernel, and other similarly invasive actions. Unfortunately this level of freedom came with a price—namely security. Windows now restricts the parameters of the OS an application is able to change—limiting the impact any malware can have—but applications that were written with this behavior will need to be modified or shimmed to function in Windows 7.
Applications performing hard version checks for the Windows XP operating system version are also affected. While it makes some sense for a developer to lock support and functionality for the application with the version of the operating system the developer originally used in testing, it also assumes that users will never attempt to install that application on a newer OS, or install a newer Service Pack to the same OS. While this is a relatively easy issue to mitigate with compatibility modes or fixes, you will see this surface frequently when coming from Windows XP to Windows 7.
The five steps to managing application readiness for Windows 7
Like most big undertakings, the challenge isn’t insurmountable if you take the time to deconstruct the problem into logical, manageable tasks.
An application readiness project falls into three major sections: Collecting, Analyzing and Mitigating. However, there are a couple of additional steps we would like to call out: consider virtualization technologies before you commence the testing regimen, to help reduce the testing process and potentially help improve your desktop infrastructure to make future migrations more manageable; and sequence the testing phase to align to your roll-out strategy.
If you’re ready to dive in, let’s get started.
Step 1: Collect an application inventory
The first step is to take an application inventory to understand exactly where you stand—and believe us; at this point you’ve probably just realized the problem is bigger than you thought. But more importantly, you’ve just turned an ‘unknown’ into a ‘known’ and are in a better position to scope the testing and readiness program and understand the challenges ahead.
Fortunately there are a number of tools available that can help automate the process. Your client management software might have this capability built-in, or you can also use the Application Compatibility Toolkit, available for free download. If you already have another inventory mechanism like System Center Configuration Manager, Asset Inventory Service or other, you can use that as a starting point.
To make the inventory most useful downstream, capture more than just a list of applications—you’ll want to understand more detail on who is using an application, what their role is, and how important that application is to the user. With this information, you can prioritize those mission-critical applications and eliminate unused or redundant applications (more on that in the next step).
Also, there’s a side benefit—identifying widely-used applications that you don’t currently manage. You’ll want to get these into your orbit so you can ensure they are properly managed, on the approved version and have the required software updates.
Step 2: Analyze your applications
How many applications do you currently support that have been replaced or have otherwise fallen out of favor with business users? If you’re like most organizations, a sizable number of them—in some cases most of them. So once you done your assessment and have a good ‘lay of the land,’ the next step is to scrub your supported application list and filter them down, before you undertake the time consuming—and costly— process of regression testing.
Set appropriate goals for your application portfolio. How many total apps do you want to support? At what point does an app elevate to “managed” status?
After you set your goals, it’s now time to find the low hanging fruit and narrow down the applications that need testing.
- Eliminate redundant and unused applications.You’ll undoubtedly find that you have several applications that perform the same function. Now is a good time to standardize on a single application per function, and eliminate those that have been made obsolete. One tip here is to try and map application dependencies, as you may need to support a legacy version of one application to keep another one supported by the ISV.And of course drop those that are rarely or never used.Not only will you make testing easier, you might save on licensing expense as well.
- Remove multiple versions of the same application and standardize on the most current.In almost all cases, the newest version performs best and is the most secure and reliable. Again, watch for application-to-application dependencies.
Collect information from business users to help prioritize those apps that are mission critical, and determine which departments are using which apps. This will be useful when you sequence your testing process; you’ll want to align the timing of your testing to your staged roll-out of the new desktop image.
Step 3: Assess incompatibilities and mitigation options
No doubt you will find some applications that need some work to get them ready for Windows 7. At this point you have several options:
- You can replace the non-compatible application with a new version.Certainly the most reliable method, but unfortunately, the most expensive as well.If the application is mission-critical or otherwise strategic to operations, this is the way you’ll want to go.
- Create shims for your existing applications.Shims are small pieces of code inserted between the application and Windows to modify calls to the underlying OS—for instance, to trick your application into thinking the user is running as an administrator, while still maintaining standard user mode.You will have some management overhead, since you’ll need to maintain a shim database, but this approach will remedy many application problems.This is the more cost effective route, and might be the only option if the application vendor is no longer around.One caveat—many vendors will not support shimmed applications.
- You can use Group Policy to change the offending behavior of the application.Like shimming, this will usually take care of the compatibility problem but carries some downsides as well.Essentially this approach uses policy to disable a particular feature or function that is causing the application to falter.Unfortunately, in many cases these functions involve the security of the underlying system, so the trade-off is significant.Likewise, the application must have Group Policy settings to enable this manageability.
For custom or in-house developed applications, you can of course modify the code. This isn’t always an option, but if it is, there are great resources to help—the Application Compatibility Cookbook for changes made from Windows XP to Windows Vista, and the Application Quality Cookbook for changes made from Windows Vista to Windows 7. Both are free guides that help developers recode an application for native compatibility.
Step 4: Prepare for the OS deployment and new application delivery options
The start of an OS migration project is a great time to rethink how you package and deliver applications to your end users. Virtualization technologies have opened up options that simply weren’t available for the last major OS migration; you should consider different models for desktop image and application delivery before beginning the testing process. You might find that the savings in application testing and readiness more than offsets the cost of implementing a virtualized environment—while providing a more flexible and easier-to-manage environment for future efforts.
There are two major forms of virtualization that can address application compatibility issues—application virtualization and OS virtualization. Application virtualization separates the application layer from the OS, including the applications files and registry settings, and packages the application for streaming. OS virtualization come in a few different forms, but essentially creates an OS image independent of the native image on the machine.
Virtualizing your application portfolio provides a number of benefits for manageability and flexibility, but one key advantage is that you minimize application-to-application conflicts. This type of conflict arises, for instance, when you need to run two versions of the same application simultaneously—common in training situations where you want to compare the process of conducting a specific task in an old versus new application, or when the finance department is migrating to a newer version of their accounting software but needs access to the old one to close the fiscal year.
A more general use of virtualization to overcome application compatibility is to create a virtual image that contains a critical application and the operating system it is designed to run on. There are several tools to enable OS virtualization, from Virtual PC and Windows XP Mode in Windows 7 Professional and higher SKUs (an unmanaged virtual image that will run applications intended for Windows XP but not compatible with Windows 7) to Microsoft Enterprise Desktop Virtualization (MED-V), in the Microsoft Desktop Optimization Pack (MDOP), which enables a virtual machine to be easily provisioned, configured and managed using policies to determine how the physical and virtual environments interact with one another.
Of course, adopting an alternative computing model for your client PCs is an undertaking in its own right, but this would be the time to assess whether the benefits to your organization—greater flexibility and manageability—outweigh the additional effort to adopt this model for PC provisioning.
Step 5: Sequence your testing, piloting and deployment efforts
Use your prioritization from step 2 to sequence your testing efforts, so you can begin the staged roll-out with and conduct subsequent testing in parallel.
As you begin the testing process, you can use two approaches—static and dynamic analysis; while static analysis is relatively new, a thorough testing regimen will use both.
- Static analysis looks at the structure of the application and identifies issues that will undoubtedly arise, either in installation or runtime.There are a number of tools and services that can help automate this process, and will quickly highlight the obvious problems.
- Dynamic analysis looks at the behavior of the application at runtime, and is what is traditionally done in regression testing.Here, you are “smoke testing” the application in your specific environment—replicating the experience a variety of users will have with their hardware and the other key applications and drivers.
- Finally, you will want to get a handful of real users running the applications and looking for any strange behavior that hasn’t surfaced in the structured testing.The promise of keeping the new PC for participation can be a great motivator here!
Once you are ready to start rolling out into production, identify the people for whom a migration makes sense first—based on specific capabilities they need, or to minimize business disruption. Migrating a group of expert users will be easier than dealing with the help desk calls from task workers who now are looking at an unfamiliar screen and don’t know what to do with it. Next, identify which applications these groups will need to perform their work. Start with groups that are minimally or unaffected by application compatibility based on the applications they use, this will enable you to validate the deployment process and the operating system. As you work through your application portfolio and more groups become unblocked from incompatible applications, then target those groups.
One final word of caution—avoid taking the process too far. If you let the scope creep from application compatibility to a full-blown application quality project, you might never finish. Accept the goal of fixing bugs that prevent work from being done, and avoid trying to eliminate every bug that exists—you undoubtedly have better use for your time!
Readying your application portfolio for a migration to Windows 7 is a major undertaking, but fortunately there are a number of tools and an abundance of guidance to make the process more streamlined and manageable. We have just scratched the surface in this article; if you’re ready to dive deeper and get the process rolling, a great next step is to visit the Application Compatibility zone on the Springboard Series on TechNet, download the Application Compatibility Toolkit, and start building your project plan!
You can also find helpful information and guidance on Chris Jackson’s Blog, and in the Windows 7 Application Compatibility white paper, which covers Understanding Application Compatibility and Understanding Application Compatibility in Your Environment. You can learn more on the virtualization technologies mentioned above at www.microsoft.com/mdop and on the MDOP TechNet page.
To learn more about Windows 7 or any of the Windows Client technologies, please visit www.microsoft.com/springboard for the latest in information, guidance, and community connections.