Most software systems have installation procedures that are needed before they can be used for their main purpose. Testing these procedures to achieve an installed software system that may be used is known as installation testing. These procedure may involve full or partial upgrades, and install/uninstall processes. Installation testing may look for errors that occur in the installation process that affect the user's perception and capability to use the installed software. There are many events that may affect the software installation and installation testing may test for proper installation whilst checking for a number of associated activities and events. Some examples include the following:
A user must select a variety of options.
Dependent files and libraries must be allocated, loaded or located.
Valid hardware configurations must be present.
Software systems may need connectivity to connect to other software systems.
Installation testing may also be considered as an activity-based approach to how to test something. For example, install the software in the various ways and on the various types of systems that it can be installed. Check which files are added or changed on disk. Does the installed software work? What happens when you uninstall? This testing is typically performed in Operational acceptance testing, by a software testing engineer in conjunction with the configuration manager. Implementation testing is usually defined as testing which places a compiled version of code into the testing or pre-production environment, from which it may or may not progress into production. This generally takes place outside of the software development environment to limit code corruption from other future or past releases which may reside on the development environment. The simplest installation approach is to run an install program, sometimes called package software. This package software typically uses a setup program which acts as a multi-configuration wrapper and which may allow the software to be installed on a variety of machine and/or operating environments. Every possible configuration should receive an appropriate level of testing so that it can be released to customers with confidence. In distributed systems, particularly where software is to be released into an already live target environment installation can involve database schema changes as well as the installation of new software. Deployment plans in such circumstances may include back-out procedures whose use is intended to roll the target environment back if the deployment is unsuccessful. Ideally, the deployment plan itself should be tested in an environment that is a replica of the live environment. A factor that can increase the organizational requirements of such an exercise is the need to synchronize the data in the test deployment environment with that in the live environment with minimum disruption to live operation. This type of implementation may include testing of the processes which take place during the installation or upgrade of a multi-tier application. This type of testing is commonly compared to a dress rehearsal or may even be called a "dry run".