¿Los comentarios obsoletos son un mito urbano?

38

Constantemente veo personas que afirman que "los comentarios tienden a quedar desactualizados". La cuestión es que creo que he visto quizás dos o tres comentarios desactualizados en toda mi carrera. La información desactualizada en documentos separados ocurre todo el tiempo, pero en mi experiencia los comentarios desactualizados en el código en sí son extremadamente raros.

¿Acabo de tener suerte con quién trabajo? ¿Son ciertas industrias más propensas a este problema que otras? ¿Tiene ejemplos específicos de comentarios desactualizados recientes que haya visto? ¿O los comentarios obsoletos son más un problema teórico que uno real?

Karl Bielefeldt
fuente
30
Convenido. Código desactualizado convertido en un comentario, ahora es algo que veo mucho, y me gustaría ver menos.
pyvi
8
Veo más falta de comentarios que nada. Combinado con las convenciones de nomenclatura pobres, es muy divertido intentar leer algunas de las cosas con las que trabajo.
P.Brian.Mackey
2
He visto muchos comentarios desactualizados, algunos eran simplemente MALOS engañosos. Definitivamente no es un mito, pero es principalmente válido para proyectos mantenidos por muchas personas y / o durante mucho tiempo, amplificados por la complejidad. Sin embargo, aprendí a confiar en el código, no en los comentarios (casi nunca los leo si exceden más de una o dos líneas).
Marzo
He trabajado principalmente con un código heredado muy antiguo a lo largo de toda mi carrera. Ha habido una docena de veces cuando tuve algunos problemas graves relacionados con comentarios desactualizados en un extraño código Fortan77 de 30 años, pero era un porcentaje cercano al cero del código donde los comentarios eran adecuados. Así que estoy de acuerdo, la escala de un problema debe haber sido exagerada.
SK-logic
Solo mi suerte, he visto bastantes en el año desde que publiqué esto. Supongo que inconscientemente aprendí a no confiar en ellos, luego a corregirlos y seguir adelante, sin pensarlo lo suficiente como para ponerlos en mi memoria a largo plazo.
Karl Bielefeldt

Respuestas:

33

Constantemente

Realmente no puedo creer que soy el único que nada en comentarios anticuados y engañosos. En el caso improbable, esto ayuda a comprender:

Probablemente depende más importante de la antigüedad del código. El siguiente factor sería la rotación del personal.

Hago trabajos de I + D y mantenimiento a partes iguales. El R&D es un código nuevo, generalmente cosas que están un poco fuera de lo común. Muchos de mis colegas creen en dar muchas explicaciones comentadas cuando intentan algo para lo que todavía no hay una biblioteca. Dado que la relación comentario a código es más alta de lo normal, solo hay más oportunidades para que las cosas no estén sincronizadas.

El código de mantenimiento ... Soy un mantenedor activo en un sistema que tiene más de 10 años y otro que tiene más de 5. El código y los comentarios de 10 años son atroces, como era de esperar. En 10 años, obtienes muchas manos en la base de código y ya nadie tiene idea de cómo funciona todo. El código y los comentarios de 5 años son bastante buenos porque la rotación del equipo ha sido bastante baja.

Trabajo en casi todos los servicios, incluso nuestros productos están altamente personalizados para un cliente en particular.

Ejemplos específicos:

  • Comentarios que describen la mejora del rendimiento para una metodología particular, como evitar una copia en memoria. Un gran problema cuando una máquina de gama alta en un Pentium 2 con MB de RAM, pero ahora casi no es un problema.

  • TODOS

  • Bloques de código copiado, incluidos los comentarios. El comentario puede haber tenido sentido en su ubicación original, pero aquí apenas tiene sentido

  • Bloques de comentarios sobre el código comentado (Quién sabe cuántos años lleva allí).

En todo esto, se ve una tendencia a no mantener los comentarios y el código al mismo nivel que el software. Los IDE y los hábitos básicos del desarrollador no ayudan con esto, mi ojo ha sido entrenado para superarlos. Creo que los comentarios obsoletos son relativamente baratos de evitar en proyectos activos y de campo verde. Si puede mantener alta la relación código / comentario, no es un gran problema mantenerlos actualizados. Es un poco más difícil justificar la búsqueda de estas cosas cuando tiene un presupuesto de x horas para una corrección de errores en un sistema de producción.

Steve Jackson
fuente
Entonces, básicamente, estás diciendo que simplemente ignoras los comentarios por completo porque ya es un desastre demasiado grande, solo empeorando tu situación. Difícil de sorprender.
Steven Jeuris
55
@ Steven - Yo personalmente, no. Soy un gran creyente en la mejora incremental. He visto gruñidos de código completamente indescifrable convertido en algo bastante decente con suficiente esfuerzo gradual. Pero, ignorar es ciertamente la norma en mi experiencia. Es muy comprensible cuando se encuentran varias clases de líneas entrelazadas de 10000 con problemas de semanas para catalogar, que los comentarios obsoletos tienden a caer al final de la lista de prioridades.
Steve Jackson
1
@ Steve: En su situación, simplemente crearía un script que elimine todos los comentarios y comenzaría a comentar desde cero cuando sea necesario. :)
Steven Jeuris
1
La base de código principal donde solía trabajar era al menos la mitad de los comentarios y el código rara vez comentaba. ¡Los comentarios obsoletos eran una realidad, los comentarios correctos eran extremadamente raros y ni siquiera comenzaré a comentar sobre la documentación! vista ... Después de este trabajo he aprendido que menos es buena, si código necesita comentario, es probable que necesite un refactor a hacer las cosas más obvia ...
Newtopian
44
He visto algunos ejemplos horribles de Blocks of copy-pasted code including comments. Comment may have made sense in its original location, but hardly makes sense here. Comentarios a nivel de clase que hablan de una clase diferente, por ejemplo.
Peter Taylor
18

"Los comentarios tienden a quedar desactualizados".

He visto que esto sucede con la frecuencia suficiente para saber que esto puede ser un problema.

La cuestión es que creo que he visto quizás dos o tres comentarios desactualizados en toda mi carrera.

Creo que debería ser perfectamente posible trabajar en un entorno en el que todos cuiden suficientemente los comentarios y los mantengan. Es solo un pequeño esfuerzo adicional mirar los comentarios cerca del código que está editando y actualizarlos cuando sea apropiado. En caso de que los comentarios estén tan lejos que no los note de inmediato, de todos modos fueron malos comentarios, y no deberían haberse agregado en primer lugar (o al menos no están allí).

Además, generalmente junto con la afirmación de que los comentarios tienden a quedar desactualizados, sigue la afirmación de que esto reduce la legibilidad y confunde a las personas. Esto es algo que aún no he experimentado. Cada vez que encuentro un comentario desactualizado, veo claramente lo que cambió y solo actualizo el comentario en consecuencia para representar el código más nuevo, aunque con un esfuerzo adicional.


Un estudio reciente de Roehm et al. 2012 observa lo siguiente:

21 participantes [de 28] informaron que obtienen su información principal del código fuente y comentarios en línea, mientras que solo cuatro declararon que la documentación es su principal fuente de información.

Esto está en línea con su sospecha de que los comentarios en el código en sí mismo generalmente se consideran muy útiles. Esto indica que se debe trazar una línea clara entre la documentación desactualizada y los comentarios desactualizados .

Roehm, T., Tiarks, R., Koschke, R., y Maalej, W. (2012, junio). ¿Cómo comprenden los desarrolladores profesionales el software? En Actas de la Conferencia Internacional de 2012 sobre Ingeniería de Software (pp. 255-265). IEEE Press.

Steven Jeuris
fuente
A medida que mejoré, descubrí que necesito menos comentarios para comprender qué hace el código en el código típico de plug n chug.
Paul Nathan
3
@Paul Nathan, los comentarios nunca deberían describir lo que hace el código; el código lo describe mejor. Los comentarios están ahí para explicar por qué el código hace lo que hace.
SK-logic
2
@ SK-logic: aunque entiendo el argumento, creo que es demasiado amplio. Los comentarios de una función (o párrafo / bloque de código) pueden aclarar mucho más (y más rápido) qué hace la función que su nombre. Esto es especialmente necesario para las funciones públicas. Tan fácil como puede ser leer el código, leer una explicación de dos líneas del código de 10 líneas es aún más rápido. Imagine trabajar con su API favorita que no tiene ninguna documentación de "qué" . Estaría mucho menos seguro de su funcionalidad.
Steven Jeuris
sí, no incluí una documentación (por ejemplo, Javadoc), está demasiado estructurada para ser llamada simplemente " comentarios ".
SK-logic
17

Los comentarios obsoletos son un olor a trabajo. Es como tener pruebas unitarias desactualizadas o desatendidas: muestra que los buenos procesos que alguna vez estuvieron activos en la tienda están degenerando en codificación de vaqueros. La "cultura de ingeniería" adecuada de tomarse el tiempo para hacer las cosas correctamente se ha roto. Es probable que el proyecto / empresa se endeude técnicamente.

En resumen, sí, has tenido suerte. Si tienes una serie de tiendas razonablemente bien administradas hasta ahora en tu carrera, es muy posible que no veas tanto. Pero en las tiendas más típicas y menos manejadas, esto corre paralelo al resto del caos.

Mesas Bobby
fuente
"Los comentarios obsoletos son un olor a trabajo". Muy bien puesto! Del mismo modo, el código autodocumentado solo sin comentarios no es la solución, sino un 'hack' perezoso.
Steven Jeuris
10

Los comentarios son como pruebas, son muy buenos cuando están actualizados, pero pueden dificultar aún más la comprensión del código si no los hay.

Si nunca has visto ningún comentario desactualizado, has tenido mucha suerte.

La mayoría de las bases de código con las que he trabajado han estado llenas de comentarios desactualizados, y por lo general ignoro los comentarios por completo, ya que generalmente son fuente de confusión en lugar de ayuda.

Kim.Net
fuente
¿Puedo preguntar en qué industrias ha trabajado? Me pregunto si esto es más común en algunos que en otros.
Karl Bielefeldt
He trabajado en 3 países diferentes en Europa, principalmente como consultor para una gran empresa y una pequeña. Últimamente en una casa de desarrollo SaaS.
Kim.Net
10

Los comentarios obsoletos a menudo aparecen en JavaDoc:

  • Listado de argumentos que ya no existen
  • No explica todos los argumentos (los que faltan probablemente se agregaron más tarde)
  • Cosas similares para excepciones, etc.

Además, a veces los comentarios indican cosas como "haga esto aquí por rendimiento" cuando la mayoría de las consideraciones de rendimiento tienden a quedarse obsoletas incluso más rápido que el código en sí.

Deckard
fuente
3
(No es una crítica, solo presentar una solución) Las advertencias de IDE pueden contribuir en gran medida a evitar esto. Si se necesitan medidas más drásticas, falle la compilación en una advertencia / error de compilación javadoc.
Michael K
1
Esto podría explicar por qué no he visto muchos. Nunca he trabajado en algún lugar que use comentarios de estilo JavaDoc.
Karl Bielefeldt
44
@Michael, las advertencias IDE son útiles en casos leves. Nuestra base de código heredada produce más de 20,000 advertencias de Checkstyle, eso supera el límite en el que dejas de prestar atención: (((los IDE, cuando se usan mal, pueden contribuir significativamente a la miseria Javadoc. La mayor parte de la basura Javadoc en nuestra base de código obviamente fue autogenerada.
Péter Török
4

Trato con comentarios desactualizados de vez en cuando. Ciertamente no es un mito urbano. La gente lo menciona en las listas de las peores prácticas, no porque te golpee muy a menudo, sino porque cuando lo hace, generalmente te cuesta mucho tiempo y esfuerzo.

En nuestra base de código, la mayoría de los comentarios desactualizados son causados ​​por el uso del patrón (anti) de describir el comportamiento del método cerca de su llamada y no cerca de la declaración del método. Ocurre cuando alguien extrae un fragmento de código largo en un método que solo se llama una vez en ese momento y luego comenta la llamada al método. Entonces terminas con algo como esto:

featureList = GetFeatures();

// Sorting features and deleting empty ones from the list...
ProcessFeatures(featureList);

Y el método se declara en algún lugar a continuación sin comentarios. La gente se mete con estos métodos a lo largo de los años tratando con cambios de especificaciones y arreglando errores, y eventualmente terminas con un método que no ordena la lista y lanza una excepción cuando encuentra la característica vacía. Por lo tanto, el comentario anterior es un comentario desactualizado que eventualmente le costará algún tiempo en el depurador. Esto sucede en algunas bases de código.

Dyppl
fuente
3

Pregúntate esto. ¿Alguna vez ha cambiado una línea de código y no ha cambiado los comentarios asociados o agregado otros nuevos?

He trabajado con mucho código heredado y los comentarios a veces ni siquiera son relevantes.

Bill Leeper
fuente
2

En su mayor parte, mi experiencia coincide con la suya, pero me he encontrado con un caso en el que eso era cierto en toda la base de código. Era una aplicación que había sido escrita años antes por una tienda de consultoría que ya no estaba "en buenos términos" con el cliente.

La compañía hizo un trabajo excepcional al comentar el código, pero los programadores que lo mantuvieron desde la transferencia original fueron parte de la mentalidad de "solo cambiar lo que absolutamente hay que cambiar", lo que en sí mismo no es malo. Desafortunadamente, mantuvieron esa misma actitud hacia los comentarios también, lo que condujo a una desconexión bastante grande entre los comentarios y el código con el tiempo.

Dave Wise
fuente
2

No veo demasiados comentarios descriptivos desactualizados, pero sí veo muchos comentarios TODO que han estado allí durante años. Desearía que fueran como cápsulas del tiempo y dije algo como esto:

//TODO: In 15 years AND NO SOONER... actually implement this method.
Morgan Herlocker
fuente
1
El problema en este caso es probablemente el mal uso de TODOs. Creo que TODO solo debe usarse cuando el código es realmente funcional, pero las mejoras podrían hacerse más tarde, por lo TODO: implementque no deberían existir comentarios y el hecho de que nadie regresó realmente no importa mucho. Lamentablemente, no mucha gente se adhiere a esta regla y estoy totalmente de acuerdo en que me gustaría ver un comentario como el que publicaste en algún código de producción en algún momento. Me alegraría el día.
pwny
1
En C #, uso NotImplementedException para esos fines.
Steven Jeuris
2
@pwny, solo uso TODOS en cosas que planeo escribir antes de registrarme, para asegurarme de cubrirlo. En mi opinión, cualquier cosa a más largo plazo que eso pertenece a un rastreador de errores.
Karl Bielefeldt
@Karl Bielefeldt Eso también tiene mucho sentido.
pwny
2

Los últimos 3 proyectos en los que trabajé pasé varios días eliminando comentarios obsoletos, engañosos y simplemente inútiles de la base de código. Siempre que sea posible y necesario, los reemplazo con comentarios más apropiados, pero la mayoría de las veces es solo una cuestión de eliminar el comentario y seguir adelante.

He hecho lo mismo en casi todas las bases de código que he tomado de otros, generalmente después de que no se mantuvo durante un tiempo y los propietarios originales se fueron y / o no quisieron o no pudieron realizar la transferencia adecuada.

jwenting
fuente
1

Podría ser la disminución en el uso de comentarios. ¿Cuánto del código de alguien califica? Por un lado, alguien realmente tiene que incluir comentarios para que estén desactualizados. En segundo lugar, el código que se comentó tiene que cambiarse. No estoy seguro de que un alto porcentaje de código califique.

Solo tiene que confiar en un mal comentario para arruinar una gran parte de una aplicación y perder mucho tiempo.

JeffO
fuente
0

En una organización que produce mucho código, es difícil mantener los comentarios sincronizados. La mejor manera de entender lo que está sucediendo es mediante el uso de softwares que dibujan el diagrama de flujo de control del módulo en el que está trabajando. Esa es la única forma de tener una idea de lo que hace el software.

Gaurav Sehgal
fuente