N programación -version (NVP), también conocido como multiversión programación o de múltiples versión de software diferente , es un método o proceso en la ingeniería de software donde múltiples programas funcionalmente equivalentes se generan independientemente de las mismas especificaciones iniciales. [1] El concepto deprogramación en versión N 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 incorporandotolerancia a fallos o redundancia . [1]
Enfoque NVP
Los pasos generales de la programación de la versión N 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 las 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 integran mecanismos especiales en el software que permiten que el programa sea gobernado por el entorno de ejecución de 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 algún entorno de ejecución de N versión (NVX) que ejecuta el software de N versión y toma las decisiones finales de los programas de N versión en su conjunto, dada la salida de cada programa de N versión individual . [2] La implementación de los algoritmos de decisión puede variar desde lo simple como aceptar la salida que ocurre con mayor frecuencia (por ejemplo, si la mayoría de las versiones están de acuerdo con alguna salida, entonces es probable que sea correcta) hasta algún algoritmo más complejo. [3]
Criticas
- Los investigadores han argumentado que diferentes equipos de programación pueden cometer errores similares. [4] En 1986, Knight & Leveson llevaron a cabo un experimento para evaluar el supuesto de independencia en NVP, encontraron que el supuesto de independencia de fallas en programas de N -versió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 versión N. [3] En teoría, es más probable que la salida de múltiples versiones independientes sea correcta que la salida 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 garantizar el tiempo, los requisitos adicionales y los costos de usar el método NVP. [3]
- “Ha habido un debate considerable sobre cómo aprovechar todo el potencial de la programación de n versiones, ya que se asume 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 la versión N se ha aplicado al software en el cambio de trenes, la realización de cálculos de control de vuelo en aviones modernos, la votación electrónica (el Sistema SAVE) y la detección de exploits de día cero , entre otros usos. [2] [3] [4]
Ver también
Referencias
- ^ a b c d e f g Programación de la versión N: Un enfoque de tolerancia a fallas para la confiabilidad del funcionamiento del software , Liming Chen; Avizienis, A., Fault-Tolerant Computing, 1995, 'Highlights from Twenty-Five Years'., Vigésimo Quinto Simposio Internacional, Vol., Edición, 27-30 de junio de 1995, Páginas: 113-
- ^ a b c d e f A.A. Avizienis, “ The Methodology of N-version Programming ” Archivado 2005-11-03 en Wayback Machine , Software Fault Tolerance, editado por M. Lyu, John Wiley & Sons, 1995.
- ^ a b c d e Liburd, Soyini. Un sistema de votación electrónica en versión N (Tesis) . Instituto de Tecnología de Massachusetts. Dpto. 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 sobre ciberseguridad de la IEEE de 2006, Daytona Beach, Florida, abril de 2006.
- ^ Knight, JC y Leveson, NG 1986. Una evaluación experimental del supuesto de independencia en la programación multiversion . IEEE Trans. Softw. Ing. 12, 1 (enero de 1986), 96-109.
- ^ Knight, JC y Leveson, NG 1990. Una respuesta a las críticas del experimento de Knight & Leveson . SIGSOFT Softw. Ing. Notes 15, 1 (enero de 1990), 24-35.
enlaces externos
- Programación de la versión N en el RKBExplorer