Técnica de desarrollo de software en la que dos o más variantes funcionalmente idénticas de un programa se desarrollan a partir de la misma especificación por diferentes programadores o equipos de programación con la intención de proporcionar detección de errores, mayor fiabilidad, documentación adicional o reducir la probabilidad de que la programación o los errores de compilación influyan en los resultados finales.