When publishing a new application for the first time or publishing an update to an existing application, thorough testing is critical to delivering a smooth and fulfilling experience to your customers and prospects. In this article, we cover some of the fundamentals of good testing and its importance.
Establishing a clean environment to use for testing is the first step to ensure your users have a good experience. Many of us in the industry are painfully aware of instances in which something works on a developer's computer but not a customer's or prospect's computer. This can be difficult to troubleshoot, especially when there's pressure to rush so that no sales are lost.
The best way to avoid this kind of scenario is to test in a clean environment, such as a fresh virtual machine snapshot or a dedicated test machine that leverages complete backup images. This ensures that the test environment can be fully restored to a state where it has never seen your software or its dependencies between each test. There are many virtualization solutions available, some free and some paid, and this is our preferred approach since it is usually the easiest and cleanest to work with (especially with the use of snapshots).
Another thing to consider is to establish test environments that adequately represent what you intend to support (as much as reasonably possible). This can include things such as setting up a virtual machine for each operating system (and version thereof) that you intend to support, each type of device you intend to support, and other factors.
Types of Tests
The next step is to understand the types of tests you can perform. This includes, but is not limited to:
- Unit Tests are code-driven tests that verify that individual areas of code/logic work as intended. An important perk of having unit tests is that it requires more thoughtful code design from developers, which can help mitigate potential problems arising from unnecessary complexities.
- Regression Tests are tests that ensure functionality in the software functions, so that changes made to the software over time do not break pre-existing functionality.
- Load Tests artificially create load/burden to ensure that the software is capable of handling at least (or more than) the maximum desired load on recommended/supported devices. This is particularly important for software that provides services for other software/devices to use.
Although these few types of tests are an excellent way to start when ensuring reliability, there are many other types of tests beyond these that you can leverage to further establish a competent level of quality assurance.
Furthermore, it is typically possible and recommended to automate these tests so that it is easy for you to run them prior to publishing a build/release of your software. Many tools can be leveraged for this, whether paid or included with your operating system and/or development tools. By automating your tests, you avoid accidentally forgetting to test a critical feature.
A good user experience with well-tested software is key to encourage prospects to make a purchase, and will fuel retention with existing customers.
Defining Your Tests
Leveraging the knowledge given above to define the tests to run on your software prior to publishing is the most critical step to releasing reliable software. Ideally, you should have scripts and/or a check-list for testing everything related to using your software from start to finish. This can include things such as:
- Make sure installation, version upgrades/updates, and uninstallation all work properly.
- If your software supports automatic update notifications and/or installation, it is best to simulate and test this for the new release before it is published so you know you can rely on it when needed. This is especially important in the event that you need to issue a security related patch in the future.
- Make sure the application and its key features function as required, after a first-time installation and after updating from a prior version.
- When using a software licensing system:
- Make sure licensing, periodic validation with the server, and deactivation all work as appropriate.
- Make sure copy-protection is working as intended for the types of licenses you support and issue.
- Make sure all licensing requirements are enforced as appropriate, such as time-limits, network seats, etc.
- Test with and without internet connectivity to ensure the application and its license validation behaves well in less than ideal conditions.
A good user experience with well-tested software is key to encourage prospects to make a purchase, and will fuel retention with existing customers. If you’re currently using or considering using the SoftwareKey System, the Protection PLUS 5 SDK manual and Instant Protection PLUS 3 manual each offer more technical insight into testing for these licensing clients. And, as always, you can contact us with just a click or a call.