A menudo tengo un código basado en un algoritmo específico bien definido. Esto se comenta bien y parece apropiado. Para la mayoría de los conjuntos de datos, el algoritmo funciona de maravilla.Cómo administrar casos especiales y heurística
Pero luego las cajas de borde, los casos especiales, la heurística se agregan para resolver problemas particulares con conjuntos de datos particulares. A medida que crece el número de casos especiales, los comentarios se vuelven cada vez más brumosos. Me temo volver y mirar este código dentro de un año e intentar recordar por qué se agregó cada caso especial o heurística.
A veces me gustaría poder insertar o vincular gráficos en el código fuente, así que podría decir con eficacia, "en el gráfico de este conjunto de datos, esta característica particular causaba que la rutina se disparara incorrectamente, así que por qué se añadió este fragmento de código ".
¿Cuáles son algunas de las mejores prácticas para manejar situaciones como esta?
Siempre se requieren casos especiales para manejar estos casos inusuales/de borde. ¿Cómo se las puede manejar para mantener el código relativamente legible y comprensible?
Considere un ejemplo relacionado con el reconocimiento de características de las fotos (no es exactamente en lo que estoy trabajando, pero la analogía parece apta). Cuando encuentro una imagen particular para la cual falla el algoritmo general y se necesita un caso especial, grabo lo mejor que puedo esa información en un comentario (o como alguien sugirió a continuación, un nombre de función descriptiva). Pero lo que a menudo falta es un enlace permanente al archivo de datos en particular que exhibe el comportamiento en cuestión. Si bien mi comentario debería describir el problema, y probablemente diga "ver archivo foo.jp para obtener un ejemplo de este comportamiento", este archivo nunca se encuentra en el árbol de origen y puede perderse fácilmente.
En casos como este, ¿las personas agregan archivos de datos al árbol de fuentes como referencia?
Si proporciona un ejemplo de código, apuesto a que podría obtener algunos consejos muy específicos de algunos de los expertos aquí. –
No estoy seguro de que la programación integrada realmente importe aquí. Sugiero eliminar la etiqueta. – Aardvark
¿Es posible eliminar el código de los casos especiales de su algoritmo y colocarlos en una estructura más genérica para que se puedan volver a agregar de una manera más limpia? Por ejemplo, ¿puedes usar funtores que se puedan modificar para diferentes conjuntos de datos (de forma parecida a como STL te permite especificar funtores de comparación)? Su explicación del problema es un poco vaga, por lo que es difícil hacerse una idea de cuál es el verdadero problema. –