La incompatibilidad de software es una característica de los componentes o sistemas de software que no pueden funcionar satisfactoriamente juntos en el mismo ordenador o en diferentes ordenadores conectados por una red informática . Pueden ser componentes o sistemas que están destinados a funcionar de forma cooperativa o independiente. La compatibilidad de software es una característica de los componentes o sistemas de software que pueden funcionar satisfactoriamente juntos en el mismo ordenador o en diferentes ordenadores conectados por una red informática. Es posible que algunos componentes o sistemas de software sean compatibles en un entorno e incompatibles en otro.
Consideremos programas secuenciales de la forma:
Solicitar recurso ASolicitar recurso BRealizar la acción utilizando A y BLiberar recurso BLiberar recurso A
Un programa particular podría utilizar una impresora (recurso A) y un archivo (recurso B) para imprimir el archivo.
Si varios programas de este tipo P1,P2,P3... funcionan al mismo tiempo, el primero que se ejecute bloqueará a los demás hasta que se liberen los recursos y los programas se ejecutarán uno tras otro. No habrá ningún problema. No hay ninguna diferencia si se utiliza un sistema monoprocesador o multiprocesador , ya que es la asignación de los recursos la que determina el orden de ejecución.
Sin embargo, cabe señalar que , en general, los programadores no están obligados a escribir programas de una manera determinada, o incluso si existen pautas, algunas pueden diferir de ellas. Una variante del programa anterior puede ser:
Solicitar recurso BSolicitar recurso ARealizar la acción utilizando A y BLiberar recurso ALiberar recurso B
Los recursos A y B son los mismos que en el ejemplo anterior, no son simplemente variables ficticias , ya que por lo demás los programas son idénticos.
Como antes, si hay varios programas de este tipo, Q1, Q2, Q3, que se ejecutan al mismo tiempo utilizando recursos como antes, no habrá ningún problema.
Sin embargo, si se configuran varias de las P para que se ejecuten al mismo tiempo que varias de las Q, puede surgir una condición de bloqueo . Tenga en cuenta que el bloqueo no tiene por qué surgir, pero puede surgir.
P: Solicitar recurso AP: Solicitar recurso BP: Solicitar recurso A (bloqueado por P)P: Solicitar recurso B (bloqueado por Q)...
Ahora ni P ni Q pueden proceder 1 .
Este es un tipo de ejemplo en el que los programas pueden demostrar incompatibilidad.
Otro ejemplo de un tipo diferente sería cuando un componente de software proporciona un servicio a otro. La incompatibilidad podría ser tan simple como un cambio en el orden de los parámetros entre el componente de software que solicita el servicio y el componente que proporciona el servicio. Esto sería un tipo de incompatibilidad de interfaz . Esto podría considerarse un error , pero podría ser muy difícil de detectar en algunos sistemas. Algunas incompatibilidades de interfaz se pueden detectar fácilmente durante la etapa de compilación , particularmente para sistemas fuertemente tipados , otras pueden ser difíciles de encontrar y solo pueden detectarse en tiempo de ejecución , mientras que otras pueden ser casi imposibles de detectar sin un análisis detallado del programa.
Consideremos el siguiente ejemplo:
El componente P llama al componente Q con los parámetros x e y. En este ejemplo, y puede ser un número entero.
Q devuelve f(x), que es el valor deseado y nunca cero, e ignora y.
Una variante de Q, Q', tiene un comportamiento similar, con las siguientes diferencias:
si y = 100, entonces Q' no termina.
Si P nunca llama a Q con y establecida en 100, entonces usar Q' en su lugar es un cálculo compatible . Sin embargo, si P llama a Q con y establecida en 100, entonces usar Q' en su lugar conducirá a un cálculo sin terminación.
Si suponemos además que f(x) tiene un valor numérico, entonces el componente Q'' se define como:
Q'' se comporta como Q excepto que Si y = 100 entonces Q'' no termina Si y = 101 entonces Q'' devuelve 0,9 * f(x) Si y = 102 entonces Q'' devuelve un valor aleatorio si y = 103 entonces Q'' devuelve 0.
puede causar problemas de comportamiento. Si P llama a Q'' con y = 101, los resultados del cálculo serán incorrectos, pero no provocarán un fallo del programa. Si P llama a Q'' con y = 102, los resultados son impredecibles y pueden producirse fallos , posiblemente debido a una división por cero u otros errores, como un desbordamiento aritmético . Si P llama a Q'' con y = 103, en el caso de que P utilice el resultado en una operación de división, puede producirse un fallo de división por cero.
Este ejemplo muestra cómo un programa P1 puede ser siempre compatible con otro Q1, pero que pueden construirse otros programas Q1' y Q1'' tales que P1 y Q1' sean a veces incompatibles, y P1 y Q1'' sean siempre incompatibles.
A veces, los programas P y Q pueden estar ejecutándose en la misma computadora y la presencia de uno inhibirá el rendimiento del otro. Esto puede suceder particularmente cuando la computadora utiliza memoria virtual . El resultado puede ser que se produzca una falla en el disco y uno o ambos programas tendrán un rendimiento significativamente reducido. Esta forma de incompatibilidad puede ocurrir si P y Q están destinados a cooperar, pero también puede ocurrir si P y Q no están relacionados en absoluto pero se ejecutan al mismo tiempo. Un ejemplo podría ser si P es un programa que produce archivos de salida grandes, que se almacenan en la memoria principal , y Q es un programa antivirus que escanea muchos archivos en el disco duro. Si se utiliza una memoria caché para la memoria virtual, es posible que los dos programas interactúen de manera adversa y el rendimiento de cada uno se reducirá drásticamente.
En el caso de algunos programas P y Q, su compatibilidad de rendimiento puede depender del entorno en el que se ejecutan. Pueden ser sustancialmente incompatibles si se ejecutan en un equipo con memoria principal limitada, pero es posible que se puedan ejecutar satisfactoriamente en un equipo con más memoria. Algunos programas pueden ser incompatibles en cuanto al rendimiento en casi cualquier entorno.