Quería preguntarles a las personas, en cuyo caso tiene sentido probar un código funcional estáticamente tipado, como está escrito en haskell, scala, ocaml, nemerle, f # o haXe (el último es lo que realmente me interesa, pero quería aprovechar el conocimiento de las comunidades más grandes).
Pregunto esto porque, según tengo entendido:
Un aspecto de las pruebas unitarias es tener las especificaciones en forma ejecutable. Sin embargo, cuando se emplea un estilo declarativo, que asigna directamente las especificaciones formalizadas a la semántica del lenguaje, ¿es incluso posible expresar las especificaciones en forma ejecutable de manera separada, lo que agrega valor?
El aspecto más obvio de las pruebas unitarias es rastrear errores que no pueden revelarse a través del análisis estático. Dado que el código funcional de tipo seguro es una buena herramienta para codificar extremadamente cerca de lo que entiende su analizador estático, parece que puede cambiar mucha seguridad hacia el análisis estático. Sin embargo, un simple error como usar en
xlugar dey(ambos siendo coordenadas) en su código no puede ser cubierto. OTOH, tal error también podría surgir al escribir el código de prueba, por lo que no estoy seguro de si vale la pena el esfuerzo.Las pruebas unitarias introducen redundancia, lo que significa que cuando los requisitos cambian, el código que los implementa y las pruebas que cubren este código deben cambiarse. Esta sobrecarga, por supuesto, es casi constante, por lo que se podría argumentar que realmente no importa. De hecho, en lenguajes como Ruby realmente no se compara con los beneficios, pero dado que la programación funcional tipada estáticamente cubre muchas de las pruebas de unidades terrestres, parece que se trata de una sobrecarga constante que simplemente se puede reducir sin penalización.
De esto deduciría que las pruebas unitarias son algo obsoletas en este estilo de programación. Por supuesto, tal afirmación solo puede conducir a guerras religiosas, así que permítanme resumir esto en una simple pregunta:
Cuando utiliza un estilo de programación de este tipo, ¿en qué medida utiliza pruebas unitarias y por qué (qué calidad espera obtener para su código)? O al revés: ¿tiene criterios por los cuales puede calificar una unidad de código funcional tipado estáticamente según lo cubierto por el analizador estático y, por lo tanto, sin necesidad de cobertura de prueba unitaria?