La programación de N versiones (NVP), también conocida como programación multiversión o software diferente de múltiples versiones , es un método o proceso en ingeniería de software donde se generan múltiples programas funcionalmente equivalentes de forma independiente 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 mediante la incorporación de tolerancia a fallas o redundancia . [1]
Enfoque NVV
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 sin ambigüedades: funciones, formatos de datos (que incluyen vectores de comparación, vectores c e indicadores de estado de comparación, indicadores cs), puntos de verificación cruzada (puntos cc), 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 los demás. [1] Las implementaciones de estos programas funcionalmente equivalentes utilizan diferentes algoritmos y lenguajes de programación. [1] En varios puntos del programa, se incorporan mecanismos especiales en el software que permiten que el programa sea gobernado por el entorno de ejecución de la versión N (NVX). [2] Estos mecanismos especiales incluyen: vectores de comparación (vectores c, una estructura de datos que representa el estado del programa), indicadores de estado de comparación (indicadores cs) y mecanismos de sincronización. [1] Los programas resultantes se denominan software de versión N (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, dado el resultado de cada programa de N versiones individual. [2] La implementación de los algoritmos de decisión puede variar, desde lo simple como aceptar el resultado que ocurre con más frecuencia (por ejemplo, si la mayoría de las versiones están de acuerdo en algún resultado, entonces es probable que sea correcto) hasta algún 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 y descubrieron que el supuesto de independencia de las fallas en los programas de la versión N fallaba estadísticamente. [4] [5] [6]
- La debilidad de un programa NVP radica 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 los resultados de múltiples versiones independientes sean correctos que los resultados de una sola versión. [3] Sin embargo, existe un debate sobre si las mejoras del desarrollo de la versión N son suficientes 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 del VPN son menores que si todo el esfuerzo se concentrara en mejorar la confiabilidad de una sola versión. [7]
- “Ha habido un debate considerable sobre cómo aprovechar todo el potencial de la programación de n versiones, ya que se supone que la independencia conducirá a errores estadísticamente independientes. La evidencia ha demostrado que esta premisa puede ser defectuosa [12]”. [1]
Aplicaciones
La programación de la versión N se ha aplicado al software para cambiar de tren, realizar cálculos de control de vuelo en aviones modernos, votación electrónica (el sistema SAVE) y la detección de vulnerabilidades de día cero , entre otros usos. [2] [3] [4]
Ver también
Referencias
- ^ Programación abcdefg N-Version: un enfoque de tolerancia a fallas para la confiabilidad del funcionamiento del software, Liming Chen; Avizienis, A., Computación tolerante a fallos, 1995, 'Lo más destacado de veinticinco años'., Vigésimo quinto simposio internacional, vol., edición, 27-30 de junio de 1995, páginas: 113-
- ^ abcdef AA Avizienis, “La metodología de la programación de la versión N” 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 versión N (Tesis). Instituto de Tecnología de Massachusetts. Departamento de Ingeniería Eléctrica e Informática, 2004.
- ^ a b C Lajos Nagy, Richard Ford y William Allen. Programación en versión N para la detección de exploits de día cero. Conferencia temática del IEEE de 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. Traducción IEEE. Software. Ing. 12, 1 (enero de 1986), 96-109.
- ^ Knight, JC y Leveson, NG 1990. Una respuesta a las críticas al experimento de Knight & Leveson. Software SIGSOFT. Ing. Notas 15, 1 (enero de 1990), 24-35.
- ^ Sha, L. (julio de 2001). "Usar la simplicidad para controlar la complejidad". Software IEEE . 18 (4): 20–28. doi :10.1109/MS.2001.936213. ISSN 1937-4194.
enlaces externos
- Programación de la versión N en RKBExplorer