stringtranslate.com

Programación en N versiones

La programación de N -versiones (NVP), también conocida como programación multiversión o software disímil de múltiples versiones , es un método o proceso en ingeniería de software donde múltiples programas funcionalmente equivalentes se generan independientemente a partir de las mismas especificaciones iniciales. [1] El concepto de programación de N -versiones fue introducido en 1977 por Liming Chen y Algirdas Avizienis con la conjetura central de que la "independencia de los esfuerzos de programación reducirá en gran medida la probabilidad de que ocurran fallas de software idénticas en dos o más versiones del programa". [1] [2] El objetivo de NVP es mejorar la confiabilidad del funcionamiento del software incorporando tolerancia a fallas o redundancia . [1]

Enfoque NVP

Los pasos generales de la programación de N versiones son:

  1. Se desarrolla una especificación inicial de la funcionalidad prevista del software. La especificación debe definir de forma inequívoca: funciones, formatos de datos (que incluyen vectores de comparación, c-vectores e indicadores de estado de comparación, cs-indicators), puntos de verificación cruzada (cc-points), algoritmo de comparación y respuestas al algoritmo de comparación. [1] [2]
  2. A partir de las especificaciones, se desarrollan de forma independiente dos o más versiones del programa, cada una por un grupo que no interactúa con las demás. [1] Las implementaciones de estos programas funcionalmente equivalentes utilizan algoritmos y lenguajes de programación diferentes. [1] En varios puntos del programa, se incorporan al software mecanismos especiales que permiten que el programa sea gobernado por el entorno de ejecución de N versiones (NVX). [2] Estos mecanismos especiales incluyen: vectores de comparación (c-vectores, una estructura de datos que representa el estado del programa), indicadores de estado de comparación (cs-indicators) y mecanismos de sincronización. [1] Los programas resultantes se denominan software de N versiones (NVS). [2]
  3. Se desarrolla un entorno de ejecución de N versiones (NVX) que ejecuta el software de N versiones y toma decisiones finales de los programas de N versiones en su conjunto dada la salida de cada programa de N versiones individual. [2] La implementación de los algoritmos de decisión puede variar desde algo tan simple como aceptar la salida que ocurre con más frecuencia (por ejemplo, si una mayoría de versiones concuerdan en alguna salida, entonces es probable que sea correcta) hasta un algoritmo más complejo. [3]

Críticas

Aplicaciones

La programación de N -versiones se ha aplicado al software para cambiar trenes, realizar cálculos de control de vuelo en aviones de pasajeros modernos, votación electrónica (el sistema SAVE) y la detección de exploits de día cero , entre otros usos. [2] [3] [4]

Véase también

Referencias

  1. ^ abcdefg Programación de N-Versiones: Un Enfoque de Tolerancia a Fallas para la Confiabilidad de la Operación de Software, Liming Chen; Avizienis, A., Fault-Tolerant Computing, 1995, 'Lo más destacado de veinticinco años'., Vigésimo Quinto Simposio Internacional sobre, Vol., Iss., 27-30 Jun 1995, Páginas:113-
  2. ^ abcdef AA Avizienis, “La metodología de la programación de N versiones”, Archivado el 3 de noviembre de 2005 en Wayback Machine , Software Fault Tolerance, editado por M. Lyu, John Wiley & Sons, 1995.
  3. ^ abcde Liburd, Soyini. Un sistema de votación electrónica en versión N (Tesis). Instituto Tecnológico de Massachusetts. Departamento de Ingeniería Eléctrica y Ciencias de la Computación, 2004.
  4. ^ abc Lajos Nagy, Richard Ford y William Allen. Programación de N-versiones para la detección de exploits de día cero. Conferencia temática IEEE 2006 sobre ciberseguridad, Daytona Beach, Florida, abril de 2006.
  5. ^ Knight, JC y Leveson, NG 1986. Una evaluación experimental del supuesto de independencia en la programación multiversión. IEEE Trans. Softw. Eng. 12, 1 (enero de 1986), 96-109.
  6. ^ Knight, JC y Leveson, NG 1990. Una respuesta a las críticas al experimento de Knight y Leveson. SIGSOFT Softw. Eng. Notes 15, 1 (enero de 1990), 24-35.
  7. ^ Sha, L. (julio de 2001). "Uso de la simplicidad para controlar la complejidad". IEEE Software . 18 (4): 20–28. doi :10.1109/MS.2001.936213. ISSN  1937-4194.

Enlaces externos