Compatibility testing is the software testing, in which we check the compatibility of the software with the different operating system, applications, networks, devices, etc.
In the compatibility testing, we see that whether the software is possessing platform independence, or is capable to be connected to the dedicated network system or is supportable with other applications or devices.
Compatibility is a broader term, as it speaks about different scopes of hardware and software which are required for the normal functioning of the software. Below diagram will make your idea clear.
As shown in the diagram, there are many different entities, which are attached to the software or act as a support system for the software. Entities such as operating system, the add-ons, plugins, etc are the support system for the software.
The entities like the Remote Server, remote operating system are also the remote support system for the software.
And the entities like, Processor, etc are hardware on which the software can run. And mobile devices, PC, etc are the interface/platform provider for the software.
.exe file may be the executable file in the IBM compatible machines or computers.
But for software running on an Apple Computer, the executable file extensions should be
Hardware Compatibility means that, whether the software is installed or connected with the hardware resources for which it is developed. Software cannot simply run on any hardware. All softwares are built to run with minimum requirements of resources.
Let us take an example of application such as Android Studio, now say for this software the hardware requirements are: CPU with a min clock speed of 3.2 GHz, 8 GB RAM, 40 GB Disk Space and 8 MB cache. These are the hardware requirements for the software to perform with the normal efficiency and maximized output.
Let us take another example of Hardware Compatibility:
Consider the software Visual Studio, in which the minimum RAM required is 4GB.
Suppose the system meets all the requirements including system virtualization, but the RAM installed on the system is 3GB. Therefore, if virtual disk space cannot be created inside the system, then due to the shortage of RAM, the hardware may become incompatible for the software.
Similar can be seen in the case of different hardware components connected to the software.
Let us take another example: Let us assume that we have a banking application, so for that also, we have to connect the software with a high-speed internet connection with a spine-and-leaf architecture. Now connecting software with the mesh architecture will not hold hood, as the software will lose its security.
Therefore, in the hardware compatibility test, it is seen whether the software is compatible with different configurations of hardware.
Software compatibility means that how much compatible is the software with the other software which is required in its run time. Most of the time when we discuss software, we mean application software. And all the application runs in master software called the operating system.
Let us see an example of software developed an Operating System which is a 32 bit OS. Therefore, the software developed in it is also a 32-bit word sized file. Now, as time passes by, a 64-bit version of the operating is launched in the market and people start using it.
Now, the same software (of 32 bit) is still in use and is available on the internet and has not been upgraded to 64 bit. In this case, when the user wants to install it in his 64 machines, it pops up notification with compatibility issue.
But the developer was aware of this much earlier and has include option install anyway to the software or the operating system module itself. This is a solution to the problem.
This kind of testing is carried out in the software compatibility testing.
The operating system is the platform on which the software runs. No application software can get access to hardware without the operating system. There is numerous operating system in the world. And making softwares for the different operating systems are not possible.
But if we see the graph we can see that the majorities are the Windows, Mac and the Android which is used nowadays.
Also, different versions of different operating systems keep on upgrading and thus it's very hard to track which operating system will dominate the market, and which operating system should the developer focus on.
For example, when a software is developed, there are different releases for different platforms or operating system or different computer/PC manufacturer. We see the same software has a different image for different OS. Therefore, the problem os getting into different OS is solved.
However, the softwares are not developed from time to time, as the OS keeps on upgrading. Therefore, this becomes a major challenge for the developers to identify what is the installation criteria that should be integrated into the software to make it version independent.
For example, consider a web application or a website. Sometimes, the notifications are there signifying that, that site can be viewed best on Chrome Only. Therefore, the software developer knew what are the modules, cookies functionality and the scripting that has been used in that particular browser.
Now, there are other elements to note, like the display resolution, the window size, etc which suits with the parameters of the web application.
Therefore, it is seen that the developer can just focus sorely only on one platform. For a web application, the platform may be the internet browser. And the platform for the internet browser is the operating system itself.
There is a hierarchy of platforms that are required to understand while developing software.
The network is the most crucial element, required by the software to communicate with any other entity. But it is important to note that, for all the softwares the network configurations are not the same. For example, some software may be using the ring topology or some may work with static IP only.
Configurations for different kinds of software are different. Therefore, the software should at least be compatible with almost the majority of the network structure.
Let us take an example, in a bank the softwares used are very safe and secure and require spine-and-leaf network topology only. Some software may be restricted for using wireless internet connection.
Now, while performing network compatibility test, the tester must be concerned that for which network environment, it is developing the software and what network configuration it requires.
Sometimes, in a security concerned area, they may be using a particular type of internet browser only and so, while developing the software, property of that particular internet browser should be kept in mind. And so the software should perform efficiently and accurately in that platform/internet browser at least.
Therefore, in the network compatibility testing, it is seen that, whether the software is able to work with different types of network configurations and can adapt itself in new network conditions.
By the end of the day, devices are the ones on which the softwares are going to be used. There are different device manufacturers across the globe and they make them with universal nature, and not keeping in mind that particular type of softwares is going to be installed on that.
Therefore, the software must be designed in such a way that, it covers almost all the modules required to run on different machines irrespective in the change in internal hardware resources or configurations.
For example: Consider Android, which has developed its operating system it can be installed in different hardware platforms. In today's' world, more than 80 of the hand-held devices are running on Android.
On the other hand, the Symbian OS, which is the product of Nokia, did not focus much on all devices, but only on their own Nokia Manufactured phone.
The result is, in front of your eyes. Because of the reliability of using Andriod, Nokia also bought it's copyright and started using Andriod for not getting out of the market.
Version compatibility is one of the most important compatibility issues. Because nothing worst may occur if the same software manufacturer cannot deal with the version change of the device or the software on which the software runs.
Version compatibility testing assures that the change in versions has not hampered the compatibility of the software.
For example, sometimes we get to see notifications like only compatible with the version 8.0 or later versions.
In the version compatibility, it is tested whether the software is compatible with the different versions of the software for which it is developed. If a software plug-in is developed for Chrome 2.0 and after the chrome has upgraded to 4.0, if the plug-in or add-on stops working, this is not acceptable.
Version compatibility is also seen in cross-platform systems also.
There is no thumb rule set for compatibility testing. Because there are different types of compatibility testing. Varying from software to hardware and from the operating system to mobile devices.
Therefore, different companies may perform the test as per their requirements, and target unique compatibility testing.
Below is a generalized way to carry out compatibility testing: