# Portability testing

Portability testing is the process of determining the degree of ease or difficulty to which a software component or application can be effectively and efficiently transferred from one hardware, software or other operational or usage environment to another. The test results, defined by the individual needs of the system, are some measurement of how easily the component or application will be to integrate into the environment and these results will then be compared to the software system's non-functional requirement of portability for correctness. The levels of correctness are usually measured by the cost to adapt the software to the new environment compared to the cost of redevelopment.

## Use cases

When multiple subsystems share components of a larger system, portability testing can be used to help prevent propagation of errors throughout the system. Changing or upgrading to a newer system, adapting to a new interface or interfacing a new system in an existing environment are all problems that software systems with longevity will face sooner or later and properly testing the environment for portability can save on overall cost throughout the life of the system. A general guideline for portability testing is that it should be done if the software system is designed to move from one hardware platform, operating system, or web browser to another.

### Examples

* Software designed to run on Macintosh OS X and Microsoft Windows operating systems.
* Applications developed to be compatible with Google Android and Apple iOS phones.
* Video Games or other graphic intensive software intended to work with OpenGL and DirectX API's.
* Software that should be compatible with Google Chrome and Mozilla Firefox browsers.

## Attributes

There are four testing attributes included in portability testing. The ISO 9126 (1991) standard breaks down portability testing attributes as Installability, Compatibility, Adaptability and Replaceability. The ISO 29119 (2013) standard describes Portability with the attributes of Compatibility, Installability, Interoperability and Localization testing.
* Adaptability testing- Functional test to verify that the software can perform all of its intended behaviors in each of the target environments. Using communication standards, such as HTML can help with adaptability. Adaptability may include testing in the following areas: hardware dependency, software dependency, representation dependency, standard language conformance, dependency encapsulation and/or text convertibility.
* Compatibility/ Co-existence- Testing the compatibility of multiple, unrelated software systems to co-exist in the same environment, without effecting each other's behavior. This is a growing issue with advanced systems, increased functionality and interconnections between systems and subsystems who share components. Components that fail this requirement could have profound effects on a system. For example, if 2 sub-systems share memory or a stack, an error in one could propagate to the other and in some cases cause complete failure of the entire system.
* Installability testing- Installation software is tested on its ability to effectively install the target software in the intended environment. Installability may include tests for: space demand, checking prerequisites, installation procedures, completeness, installation interruption, customization, initialization, and/or deinstallation.
* Interoperability testing- Testing the capability to communicate, execute programs, or transfer data among various functional units in a manner that requires the user to have little or no knowledge of the unique characteristics of those units.
* Localization testing- Localization is also known as internationalization. Its purpose is to test if the software can be understood in using the local language where the software is being used.
* Replaceability testing- Testing the capability of one software component to be replaced by another software component within a single system. The system, in regards to the replaced component, should produce the same results that it produced before the replacement. The issues for adaptability also apply for replaceability, but for replaceability you may also need to test for data load-ability and/or convertibility.