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 se generan independientemente múltiples programas funcionalmente equivalentes 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 la NVP es mejorar la confiabilidad del funcionamiento del software mediante la incorporación de tolerancia a fallas o redundancia . [ 1 ]
Enfoque NVP
Los pasos generales de la programación de versiones N 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-indicadores), puntos de verificación cruzada (cc-puntos), 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 incorporan mecanismos especiales al software 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 (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 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 sobre los programas de N versiones en su conjunto, basándose en la salida de cada programa individual de N versiones. [ 2 ] La implementación de los algoritmos de decisión puede variar, desde algo tan simple como aceptar la salida que aparece con mayor frecuencia (por ejemplo, si la mayoría de las versiones coinciden en una salida, es probable que sea correcta) hasta algoritmos más complejos. [ 3 ]
Críticas
- Los investigadores han argumentado que diferentes equipos de programación pueden cometer errores similares. [ 4 ] En 1986, Knight y Leveson realizaron un experimento para evaluar el supuesto de independencia en NVP, y encontraron 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 corrección de un programa NVP depende parcialmente del algoritmo que utiliza el NVX para determinar qué salida es "correcta" dada la multitud de salidas de cada programa N -versión individual. [ 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 N -versiones son suficientes para justificar el tiempo, los requisitos adicionales y los costos de usar 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 sola versión. [ 7 ]
- Ha habido un debate considerable sobre cómo aprovechar todo el potencial de la programación de versiones n, ya que parte del supuesto de que la independencia conducirá a errores estadísticamente independientes. La evidencia ha demostrado que esta premisa puede ser errónea [ 8 ].
Aplicaciones
La programación de versiones N se ha aplicado al software en el control 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 ] Más recientemente, se han utilizado grandes modelos de lenguaje (LLM) para automatizar la generación de variantes de programas funcionalmente equivalentes, lo que permite ensamblajes de versiones N con garantías de equivalencia formal. [ 9 ]
Véase también
Referencias
- 1 2 3 4 5 6 7 Programación de versiones N: un enfoque de tolerancia a fallos para la fiabilidad del funcionamiento del software , Liming Chen; Avizienis, A., Computación tolerante a fallos, 1995, ' Aspectos destacados de veinticinco años', Vigésimo quinto simposio internacional sobre, vol., núm., 27-30 de junio de 1995, páginas: 113-
- 1 2 3 4 5 6 A.A. Avizienis, “ La metodología de la programación de versiones N ” Archivado el 3 de noviembre de 2005 en Wayback Machine , Tolerancia a fallos de software, editado por M. Lyu, John Wiley & Sons, 1995.
- 1 2 3 4 5 Liburd, Soyini. Un sistema de votación electrónica de N versiones (Tesis) . Instituto Tecnológico de Massachusetts. Departamento de Ingeniería Eléctrica y Ciencias de la Computación, 2004.
- 1 2 3 Lajos Nagy, Richard Ford y William Allen. Programación de versiones N para la detección de exploits de día cero . Conferencia temática 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 . 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). "Usando la simplicidad para controlar la complejidad". IEEE Software . 18 (4): 20– 28. doi : 10.1109/MS.2001.936213 . ISSN 1937-4194 .
- ↑
- ↑ Ron, Javier; Gaspar, Diogo; Cabrera-Arteaga, Javier; Baudry, Benoit; Monperrus, Martin (2025-12-17). "Galápagos: Programación automatizada de N versiones con LLM" . ACM Transactions on Software Engineering and Methodology . doi : 10.1145/3785363 . ISSN 1557-7392 .
Enlaces externos
- Programación de versiones N en RKBExplorer
- Calidad del software
- Sistemas informáticos tolerantes a fallos