The Goal – Quality Software
The teams at Global Graphics Software spend a long time and a lot of effort making sure our code is as ‘bullet proof’ as possible.
- Developers write unit tests to ensure each area of low-level code is working as expected, and integration tests drive behaviour at a higher level
- ‘Developers in Test’ write UI automation scripts, mimicking human interaction with our products, including installation and uninstallation
- Our QA team design and execute test plans to ensure workflows are correct and optimal
…but the one thing which is hard to control is the state of an end-user’s machine.
The Challenge
In an automated testing environment it is important that we lock down the software installed on a machine. Test results need to be reproducible from one day to the next, and not be affected by changes which may have been made to the operating system.
For this reason we often test on ‘virtual’ machines. These can be ‘rolled back’ to a known state very easily. Software early on in its development cycle may not ‘uninstall’ cleanly (leaving files around after it is uninstalled) – being able to ‘clean’ the system is a must.
In the real world this level of control is not typically available; software will be added and removed, system settings will be changed, files will be created – all leading to environments which can be vastly different between machines.
DLL Hell
When software runs on a Windows machine it often delegates tasks off to the operating system.
Want to open a file? There is existing code to do that.
Need to ask the user a question? There is existing code to do that.
Need to print a document? There is code to do that as well.
Such functionality is provided in ‘libraries’ installed on the machine.
The difficulty comes when different users have a different version of these libraries. They might offer the same functionality, but be implemented in slightly different ways (and be prone to different bugs!).
And the worst case scenario – the software needs to make use of functionality which isn’t available at all!
It is this problem our tool is designed to solve.
Our Solution – Runtime Checker
Our ‘Runtime Checker’ tool will examine all the components making up an application:
- All Windows executables
- Any libraries we have written
- Our plugin components
- Any driver components
…and check the operating system provides all the required functionality.
If any deficiencies are detected, they are reported to the user.
Not only that, but we go a step further to help the user find and install those missing components.
Example – Missing DLLs
Ever heard of MSVCR140.dll?
This file is installed as part of the Visual Studio 2017 Runtime, and provides a whole swathe of functionality that many applications require. If it is not present on the system, it is likely to cause problems.
There are many other such DLL files – often required by software, but hard to detect if missing.
If our Runtime Checker determines the software needs such a DLL but the file is not there, it will aid the user in diagnosing the problem and solution. Without such a tool Windows will just inform the user it was ‘unable to launch the executable’ and give up.
The user gets frustrated, and they contact our Support Team who need to recreate the issues.
Not very useful…
Example – Blocked Files
Later versions of Windows have a security feature aimed to prevent the spread of malware and viruses. If the user downloads some executable code from the Internet, Windows will often mark it as ‘Blocked’, preventing it from being accidentally opened.
This can be a double-edged sword. Whilst offering protection from malicious software, it can also cause problems for ‘safe’ software (such as ours!).
Fixing the problem means manually ‘unblocking‘ every DLL, executable, driver, and plugin. Software might contain hundreds of such files, and even failing to unblock any single one might cause issues.
Runtime Checker to the rescue. Under the guidance of our Support Team, it will automatically report and unblock all such files in a single user-triggered action. Time (and money) is saved, users are happy, and our customers can get back to using our software hassle-free.