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:
- 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]
- 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]
- 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
- Los investigadores han argumentado que diferentes equipos de programación pueden cometer errores similares. [4] En 1986, Knight y Leveson llevaron a cabo un experimento para evaluar el supuesto de independencia en NVP, descubrieron que el supuesto de independencia de fallas en programas de N versiones fallaba estadísticamente. [4] [5] [6]
- La debilidad de un programa NVP reside en el algoritmo de decisión. La cuestión de la corrección de un programa NVP depende parcialmente del algoritmo que utiliza NVX para determinar qué salida es "correcta" dada la multitud de salidas de cada programa individual de N versiones. [3] En teoría, es más probable que la salida de múltiples versiones independientes sea correcta que la de una única versión. [3] Sin embargo, existe un debate sobre si las mejoras del desarrollo de N versiones son suficientes o no para justificar el tiempo, los requisitos adicionales y los costos de utilizar el método NVP. [3] En particular, bajo ciertos modelos de confiabilidad y esfuerzo de diseño, se ha demostrado que las mejoras debidas al uso de NVP son menores que si todo el esfuerzo se concentrara en mejorar la confiabilidad de una única versión. [7]
- “Ha habido un debate considerable sobre la posibilidad de aprovechar todo el potencial de la programación de n versiones, ya que supone que la independencia conducirá a errores estadísticamente independientes. La evidencia ha demostrado que esta premisa puede ser errónea [12]”. [1]
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
- ^ 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-
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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.
- ^ 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
- Programación de N versiones en RKBExplorer