Estoy escribiendo un programa de aprendizaje automático bastante complicado para mi tesis en visión artificial. Está funcionando bastante bien, pero necesito seguir probando cosas nuevas y agregando nuevas funcionalidades. Esto es problemático porque a veces introduzco errores cuando estoy ampliando el código o tratando de simplificar un algoritmo.Unit Testing Machine Learning Code
Claramente, lo correcto es agregar pruebas unitarias, pero no está claro cómo hacerlo. Muchos componentes de mi programa producen una respuesta algo subjetiva, y no puedo automatizar los controles de cordura.
Por ejemplo, tenía un código que aproximaba una curva con una curva de menor resolución, por lo que podía hacer un trabajo computacionalmente intensivo en la curva de menor resolución. Accidentalmente introduje un error en este código, y solo lo encontré mediante una minuciosa búsqueda cuando mis resultados de todo mi programa empeoraron un poco.
Pero, cuando traté de escribir un test de unidad para él, no estaba claro qué debería hacer. Si hago una curva simple que tiene una versión claramente de menor resolución, entonces realmente no estoy probando todo lo que podría salir mal. Si hago una curva simple y luego perturbo ligeramente los puntos, mi código comienza a producir respuestas diferentes, a pesar de que esta pieza particular de código realmente parece funcionar bien ahora.
Este es realmente el consejo más útil. Toda mi depuración exitosa ha resultado del uso manual de técnicas como esta. Pero este PDF brinda buenos consejos para automatizar el proceso. Su enlace PDF no funcionó para mí, pero un simple google lo ubicó. – forefinger
@forefinger - He arreglado el enlace. Pero me alegro de que hayas encontrado el artículo, y me pareció útil. – APC
El autor de ese PDF tiene una excelente publicación sobre el mismo tema: http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – TrueWill