Imagine el siguiente escenario:
Ha detectado que su programa (o el de otra persona) tiene un error: una función produce un resultado incorrecto cuando se le da una entrada particular. Examina el código y no puede encontrar nada incorrecto: parece que se atasca cuando se le da esta entrada.
Ahora puede hacer una de dos cosas: puede examinar el código más a fondo hasta que encuentre la causa real; o golpea un vendaje agregando una if
declaración que verifica si la entrada es esta entrada en particular; si es así, devuelve el valor esperado.
Para mí, aplicar el vendaje sería completamente inaceptable. Si el código se comporta inesperadamente en esta entrada, ¿a qué otra entrada que se haya perdido reaccionará de manera extraña? Simplemente no parece una solución en absoluto: solo está resolviendo el problema debajo de la alfombra.
Como ni siquiera consideraría hacer esto, me sorprende la frecuencia con la que los profesores y los libros nos siguen recordando que la aplicación de soluciones de "vendaje" no es una buena idea. Entonces esto me hace preguntarme: ¿qué tan comunes son este tipo de "soluciones"?
fuente
Hora
Es la razón # 1 en mi opinión. Aunque si el problema es de base de código, me tomaría más tiempo investigarlo. A menudo, mis soluciones de "vendaje" implican ajustes de CSS o UI. He escrito algunos CSS y JavaScript en línea bastante desagradables para tratarlos rápidamente. Volver y arreglarlo siempre es una opción si tienes tiempo.
fuente
Los hacemos excepcionalmente.
Para las correcciones durante el desarrollo, nos aseguramos de que no se realice ninguna corrección sin conocer la causa raíz. Sin embargo:
En esos casos, optamos por soluciones de "vendaje". Luego abrimos defectos internos para abordar la causa raíz. Sí, la mayoría de las veces estos defectos internos se tratan con muy baja prioridad.
Para las correcciones en la secuencia de mantenimiento, nos aseguramos de que no se realice ninguna corrección sin conocer la causa raíz. Sin embargo:
En esos casos, optamos por la solución temporal de "vendaje" primero y una vez que el cliente está satisfecho, trabajamos en la solución adecuada y solo entonces se resuelve el defecto.
fuente
Desambiguación
Primero, con respecto a la frecuencia de arreglos de "vendaje":
Segundo, mi consejo:
Si el error ocurre en el propio código fuente del equipo de desarrollo:
Si el error ocurre en el código fuente de otro equipo:
Si el error ocurre en el producto de otra empresa (o de ninguna empresa):
fuente
Depende mucho de la edad del código base, creo. En el código antiguo, creo que es muy común, reescribir que la rutina COBOL de 20 años no es divertida. Incluso en el código moderadamente nuevo que está en producción, sigue siendo bastante común.
fuente
Yo diría que es muy común.
Echa un vistazo a la publicación del blog de Joel Spolsky: The Duct Tape Programmer
Puedo decir fácilmente que en casi todos los proyectos en los que he estado he tenido que aplicar algún tipo de vendaje o cinta adhesiva para cumplir con los plazos y completar una tarea. No es bonito, no está limpio, pero hace el trabajo para que una empresa pueda seguir funcionando y el proyecto pueda avanzar de alguna manera.
Hay una diferencia entre el mundo académico y el mundo real donde el software realmente necesita enviarse bajo tiempo y limitaciones comerciales.
En cierto modo, lo está poniendo debajo de la alfombra, para diferir una solución, hasta que, con suerte, más tarde. Lamentablemente, con demasiada frecuencia, la solución diferida nunca ocurre y este código llega a la producción.
fuente
Es difícil de decir sin más contexto: en su ejemplo, ¿por qué agregar la declaración if no es la solución correcta? ¿Es porque supuestamente hay algún otro bloque de código en algún lugar que se supone que está tratando con esa entrada?
La frecuencia con la que se usan las correcciones de vendaje depende de varias cosas, como cuán complejo es el código, si la persona más familiarizada con el código está disponible (la persona responsable de la rutina COBOL de 20 años de Craig puede haber dejado la compañía hace años). ) y los plazos involucrados.
Con una fecha límite que lo mira a la cara, a veces se encontrará con la solución más segura, incluso si solo está golpeando un yeso en lugar de solucionar la causa raíz. Eso está bien siempre y cuando no empeore las cosas, pero es importante hacer un seguimiento del hecho de que todavía no es correcto y aún debe repararse correctamente.
fuente
if
declaración no es correcta porque la función subyacente es defectuosa.Hay casos en los que ese tipo de solución está realmente bien y probablemente sea el ideal (en lo que respecta a la cantidad de tiempo que lleva depurar).
Imagine un escenario en el que tiene 20 archivos DLL que se supone que actúan como algún tipo de módulo para su ejecutable principal, pero también requieren cierta información del ejecutable principal para ejecutarse.
Si alguna vez desea utilizar esas DLL fuera del ejecutable principal, deberá falsificar algunos valores de retorno del ejecutable principal porque. A.) No existe en este contexto y B.) No desea que exista en este contexto.
Dicho esto, es mejor que coloque algunas directivas de compilación en su código para asegurarse de que está ejecutando un código completamente diferente cuando está falsificando los resultados frente a cuando obtiene los resultados reales.
En lugar de poner una función
if
dentro de otra persona, pondría una{$ifdef}
alrededor de la función, de esa manera nadie la confunde con algo que debería estar allí.fuente