Error de software frente a corrupción de software
Mientras investigaba el artículo de Wikipedia sobre el vuelo 72 de Qantas, encontré la sección " Tipos de disparadores potenciales " que dice (el énfasis es mío):
Se investigaron varios tipos de disparadores potenciales, incluidos errores de software , corrupción de software , fallas de hardware, interferencia electromagnética y las partículas secundarias de alta energía generadas por los rayos cósmicos.
Me pregunto si hay alguna diferencia distintiva y definitiva entre "error" y "corrupción" (en caso afirmativo, ¿cuál es la diferencia) o es sólo la redacción de un artículo y nada más?
Respuestas
La corrupción del software es lo contrario de la integridad del software. Es lo mismo que la corrupción de datos , excepto que los datos son el código de software.
Puede afectar:
- el software binario almacenado en la memoria: los códigos binarios de las instrucciones del software se alteran, por ejemplo, debido a interferencias físicas ("apague los dispositivos electrónicos durante el despegue y el aterrizaje"), defectos de hardware (chip de memoria), actividades maliciosas (por ejemplo , vulnerabilidad de martillo de fila) ) o errores de software (es decir, como consecuencia de un desbordamiento del búfer).
- el software binario antes de que se cargue en la memoria, es decir, el archivo ejecutable almacenado en un sistema de archivos (por ejemplo, memoria SSD, disco duro, ...) o en tránsito a través de la red (por ejemplo, cargado desde un servidor de archivos remoto).
- el código fuente del software antes de que se produzca el ejecutable: el código fuente son datos como cualquier otro, que pueden corromperse en la misma situación que cualquier otro dato. Un ejemplo típico es cuando el repositorio de código fuente de una empresa de software es pirateado (los casos accidentales generalmente evitan la compilación y tienen un impacto muy limitado)
Tenga en cuenta que la "corrupción del software" se puede utilizar de forma ambigua para referirse a la corrupción causada por el software en lugar de la corrupción del propio software.
Puede corregir la corrupción restaurando desde una buena copia de seguridad. La corrupción significa que algunas de las partes de alguna manera cambiaron de lo que debían ser.
Puede corregir un error * desarrollando más y volviendo a implementar. Aquí los bits son lo que estaban destinados a ser. Simplemente no hacen lo que necesitamos que hagan.
* Por supuesto, esto supone que error significa un defecto en el código fuente, no una polilla atascada entre los contactos del relé.
Un error ocurre cuando un software hace exactamente lo que el programador le dijo que hiciera, en lugar de lo que el programador quería que hiciera.
Una corrupción es cuando un software hace algo diferente a lo que el programador le dijo que hiciera, posiblemente debido a una falla del hardware u otros problemas no directamente relacionados con el desarrollo del software.
Presumiblemente, lo que quieren decir con "corrupción de software" son cambios no intencionales en el contenido de un archivo ejecutable debido a cosas como una falla en los medios de almacenamiento.
Un "error" significaría que los binarios son los mismos que los originales proporcionados por el proveedor o desarrollador del software, pero que hubo algún error de programación, lo que significa que no se comportan exactamente como se esperaba.
Escribo un programa, se compila, se lo envía, lo instala en su computadora. Pero algunas cosas han cambiado en el camino. Eso es corrupción de software.
Un error es un error cometido por un desarrollador de software.
La corrupción no es un error de un desarrollador; es cuando algo altera el programa después (o durante) la entrega, incluso algo accidental / benigno como un error de almacenamiento o un error de transmisión de la red.
Desde 2003, el término corrupción en el software también se ha asociado con un acoplamiento no deseado entre dos módulos de software . DDD prescribe la creación de una capa anticorrupción (ACL) entre dos sistemas de software (o "contextos limitados" en términos de DDD). Si el sistema A necesita interactuar con el sistema B, y la API de B utiliza diferentes estándares de diseño, estructuras de datos y formatos, una ACL puede evitar que los elementos de la API de B se propaguen y "corrompan" componentes en A.
Este uso del término "corrupción" claramente no era la intención del artículo del vuelo 72 de Qantas, pero ayuda a aclarar la terminología común. O eso espero.