¿Los comentarios en línea 'editado por' son la norma en las tiendas que usan control de revisión?

17

El desarrollador principal de nuestra tienda insiste en que cada vez que se modifica el código, el programador responsable debe agregar un comentario en línea que indique lo que hizo. Estos comentarios generalmente se ven como// YYYY-MM-DD <User ID> Added this IF block per bug 1234.

Usamos TFS para el control de revisiones, y me parece que los comentarios de este tipo son mucho más apropiados como notas de registro que como ruido en línea. TFS incluso le permite asociar un registro con uno o más errores. Parece que algunos de nuestros archivos de clase más antiguos, a menudo modificados, tienen una relación de comentario a LOC cercana a 1: 1. A mis ojos, estos comentarios hacen que el código sea más difícil de leer y agregan valor cero.

¿Es esta una práctica estándar (o al menos común) en otras tiendas?

Joshua Smith
fuente
12
Estoy de acuerdo con usted, para eso están los registros de revisión en el control de versiones.
TZHX
1
El desarrollador senior de su equipo hizo esto antes de que el control de versiones se extendiera ampliamente, y no se ha dado cuenta de que pertenece a otro lugar para eliminar el olor del código. Muéstrele seis proyectos de código abierto que usan un sistema bugzilla y vc, pregúntele si necesitaba saber en los comentarios de la Biblioteca jQuery que jaubourg cambió recientemente $ .ajax () hace 4 meses, y todos los cambios menores. hecho por cientos de personas pertenecen allí también. ¡Toda la biblioteca jQuery sería un desastre de comentarios, y no se ganó nada!
Incognito
1
En realidad, tenemos una política no escrita de ningún nombre en el código fuente, ya que puede crear una sensación de propiedad del código que se considera BadThing TM.
Stephen Paulger

Respuestas:

23

Por lo general, considero que tales comentarios son una mala práctica y creo que este tipo de información pertenece a los registros de confirmación de SCM. Simplemente hace que el código sea más difícil de leer en la mayoría de los casos.

Sin embargo , todavía a menudo hago algo como esto para tipos específicos de ediciones.

Caso 1 - Tareas

Si usa un IDE como Eclipse, Netbeans, Visual Studio (o tiene alguna forma de realizar búsquedas de texto en su base de código con cualquier otra cosa), tal vez su equipo use algunas "etiquetas de comentarios" o "etiquetas de tareas" específicas. En cuyo caso esto puede ser útil.

De vez en cuando, al revisar el código, agrego algo como lo siguiente:

// TOREVIEW: [2010-12-09 haylem] marking this for review because blablabla

o:

// FIXME: [2010-12-09 haylem] marking this for review because blablabla

Utilizo diferentes etiquetas de tareas personalizadas que puedo ver en Eclipse en la vista de tareas para esto, porque tener algo en los registros de confirmación es algo bueno pero no suficiente cuando un ejecutivo le pregunta en una reunión de revisión por qué se olvidó por completo la corrección de errores XY y se deslizó a través. Entonces, en asuntos urgentes o piezas de código realmente cuestionables, esto sirve como un recordatorio adicional (pero generalmente mantendré el comentario breve y revisaré los registros de confirmación porque ESO es para eso que está el recordatorio, así que no abarroto el código también mucho).

Caso 2 - Parches de Libs de terceros

Si mi producto necesita empaquetar un código de terceros como fuente (o biblioteca, pero reconstruido desde la fuente) porque necesitaba ser parcheado por alguna razón, documentamos el parche en un documento separado donde enumeramos esas "advertencias" para referencia futura, y el código fuente generalmente contendrá un comentario similar a:

// [PATCH_START:product_name]
//  ... real code here ...
// [PATCH_END:product_name]

Caso 3 - Soluciones no obvias

Este es un poco más controvertido y más cercano a lo que pide su desarrollador senior.

En el producto en el que trabajo en este momento, a veces (definitivamente no es algo común) tenemos un comentario como:

// BUGFIX: [2010-12-09 haylem] fix for BUG_ID-XYZ

Solo hacemos esto si la corrección de errores no es obvia y el código se lee de manera anormal. Este puede ser el caso de las peculiaridades del navegador, por ejemplo, o las oscuras correcciones de CSS que debe implementar solo porque hay un error de documento en un producto. Entonces, en general, lo vincularíamos a nuestro repositorio de problemas internos, que luego contendrá el razonamiento detallado detrás de la corrección de errores y los punteros a la documentación del error del producto externo (por ejemplo, un aviso de seguridad para un defecto bien conocido de Internet Explorer 6, o algo como eso).

Pero como se mencionó, es bastante raro. Y gracias a las etiquetas de tareas, podemos ejecutarlas regularmente y verificar si estas soluciones extrañas aún tienen sentido o pueden eliminarse gradualmente (por ejemplo, si dejamos de admitir el producto defectuoso que causa el error en primer lugar).


Esto solo en: un ejemplo de la vida real

En algunos casos, es mejor que nada :)

Acabo de encontrar una gran clase de cálculo estadístico en mi base de código, donde el comentario del encabezado tenía la forma de un registro de cambios con el yadda yadda habitual: revisor, fecha, ID de error.

Al principio pensé en eliminarlo, pero noté que las ID de errores no solo no coincidían con la convención de nuestro rastreador de problemas actual, sino que tampoco coincidían con el del rastreador utilizado antes de unirme a la empresa. Así que traté de leer el código y entender lo que estaba haciendo la clase (no ser estadístico) y también traté de desenterrar estos informes de defectos. Resulta que eran bastante importantes y habrían cambiado la vida del próximo tipo para editar el archivo sin saber sobre ellos bastante horrible, ya que se trataba de problemas menores de precisión y casos especiales basados ​​en requisitos muy específicos emitidos por el cliente de origen en ese momento. . En pocas palabras, si estos no hubieran estado allí, no lo habría sabido. Si no hubieran estado allí Y yo hubiera tenido una mejor comprensión de la clase,

A veces es difícil hacer un seguimiento de requisitos muy antiguos como estos. Al final, lo que hice fue eliminar el encabezado, pero después de introducir un comentario en bloque antes de cada función incriminatoria que describe por qué estos cálculos "extraños" son solicitudes específicas.

Entonces, en ese caso, todavía consideraba que esto era una mala práctica, ¡pero estaba feliz de que el desarrollador original al menos los pusiera! Hubiera sido mejor comentar el código claramente en su lugar, pero supongo que fue mejor que nada.

haylem
fuente
Estas situaciones tienen sentido. Gracias por el aporte.
Joshua Smith
el segundo caso es un comentario de código ordinario por qué hay un parche en el código. el primer caso es válido: solo una observación de que el código no está terminado o que hay más trabajo por hacer en esa parte.
Salandur
Bueno, el desarrollador senior en mi lugar de trabajo (yo) dice que los cambios van en los comentarios de confirmación de su sistema de gestión de configuración de software. Tienes tu SCM y rastreadores de defectos conectados, ¿verdad? (google SCMBUG) No haga manualmente lo que se puede automatizar.
Tim Williscroft
@Tim: Bueno, estoy de acuerdo contigo, como dice la primera línea de la respuesta. Pero en casos no obvios, los programadores (por pereza, supongo, ya que no quieren perder el tiempo) no verificarán los registros de confirmación y perderán alguna información clave, mientras que un comentario de 10char puede señalarlos. el ID de error correcto que contendrá los registros de las revisiones relacionadas con ese error si configuró su SCM y el rastreador para que trabajen juntos. Lo mejor de todos los mundos, de verdad.
haylem
En mi experiencia, los mensajes de confirmación a menudo se omiten (a pesar de las políticas para incluirlos, si es que existen) o son inútiles (solo un número de problema y, a menudo, el incorrecto). Sin embargo, esas mismas personas dejarán comentarios en el código ... Prefiero tener esos y ningún mensaje de confirmación que nada en absoluto (y en muchos entornos en los que he trabajado para llegar a los mensajes de confirmación / historial de origen fue tan difícil que era casi imposible , hasta e incluso tener que solicitar fuentes de otras personas porque el acceso al control de versiones estaba limitado "por razones de seguridad").
Jwent
3

Utilizamos esa práctica para archivos que no están bajo control de versiones. Tenemos programas RPG que se ejecutan en un mainframe, y ha resultado difícil hacer mucho más que respaldarlos.

Para el código fuente versionado, usamos las notas de check-in. Creo que ahí es donde pertenecen, no abarrotando el código. Son metadatos, después de todo.

Michael K
fuente
Estoy de acuerdo, los archivos que no están bajo control de versiones son una historia diferente.
Joshua Smith
1
"resultó difícil hacer mucho más que respaldarlos". No es realmente una excusa que mi CTO soportaría.
Tim Williscroft
@Tim: siempre abierto a sugerencias, puedo patearlas en la cadena de mando. :) Es difícil trabajar con el mainframe para quitar y encender archivos.
Michael K
Mi sugerencia: presumiblemente puede quitarlos (copia de seguridad); ¿por qué no simplemente deshacerse de eso en algún lugar y tener un pequeño script que cambia los cambios a mercurial todas las noches?
Wyatt Barnett
2

Solíamos tener esta práctica hace mucho tiempo en una tienda SW donde nuestro gerente insistía en que quería poder leer los archivos de código en papel y seguir su historial de revisiones. No hace falta decir que no recuerdo ninguna ocasión concreta en la que él haya mirado una copia impresa del archivo fuente: - /

Afortunadamente, mis gerentes desde entonces tienen más conocimiento sobre lo que pueden hacer los sistemas de control de versiones (tengo que agregar que usamos SourceSafe en esa primera tienda). Por lo tanto, no agrego metadatos de versiones al código.

Péter Török
fuente
2

Por lo general, no es necesario si su SCM e IDE le permiten usar la función "mostrar anotación" (llamada de todos modos en Eclipse), puede ver fácilmente qué commit (s) cambió un fragmento de código, y los comentarios de commit deberían indicar quién y por qué.

La única vez que pondría un comentario como este en el código es si es un código particularmente extraño que puede causar confusión a alguien en el futuro, comentaré brevemente con el número de error para que puedan ir al informe de errores y leer en detalle al respecto.

Alba
fuente
"no se espera que entiendas esto" es probablemente un mal comentario para incluir en el código. Nuevamente, diré que vinculen su SCM y los rastreadores de errores.
Tim Williscroft
2

Obviamente, se garantiza que tales comentarios serán incorrectos con el tiempo; si edita una línea dos veces, ¿agrega dos comentarios? ¿A dónde van? Por lo tanto, un mejor proceso es confiar en sus herramientas.

Esta es una señal de que, por cualquier razón, el desarrollador senior no puede confiar en el nuevo proceso para realizar un seguimiento de los cambios y conectar los cambios al sistema de seguimiento de problemas. Debe abordar esta molestia para resolver el conflicto.

Debes entender por qué no puede confiar en eso. ¿Son viejos hábitos? ¿Una mala experiencia con el sistema SCM? ¿Un formato de presentación que no funciona para él? Tal vez ni siquiera sabe sobre herramientas como 'git blame' y la vista de línea de tiempo de Perforce (que esencialmente muestra esto, aunque podría no mostrar qué problema provocó el cambio).

Sin entender su razón para el requisito, no podrá convencerlo.

Alex Feinman
fuente
2

Trabajo en un producto Windows de más de 20 años. Tenemos una práctica similar que existe desde hace mucho tiempo. No puedo contar la cantidad de veces que esta práctica me ha salvado el tocino.

Estoy de acuerdo en que algunas cosas son redundantes. Solía ​​ser que los desarrolladores usaban esta práctica para comentar el código. Cuando reviso esto, les digo que continúen y eliminen el código, y el comentario no es necesario.

Pero, en muchas ocasiones, puedes ver el código que ha estado alrededor de una década y modificado por 20 desarrolladores, pero nunca refactorizado. Todos hace mucho tiempo olvidaron todos los detalles de los requisitos que estaban en el código original, sin importar todos los cambios, y no hay documentación confiable.

Un comentario con un número de defecto me da un lugar para buscar el origen del código.

Entonces, sí, el sistema SCM hace mucho, pero no todo. Trátelos como lo haría con cualquier otro comentario y agréguelos siempre que se realice un cambio significativo. El desarrollador que mira tu código hace más de 5 años desde cómo te lo agradecerá


fuente
1

Mencionar cada cambio en los comentarios no tiene sentido si tiene un VCS. Mencionar un error específico u otra nota importante relacionada con una línea específica es útil. Un cambio puede incluir muchas líneas alteradas, todas bajo el mismo mensaje de confirmación.

9000
fuente
1

No es que pueda decirlo.

Salpicando TODOs en mi código a medida que avanzo, y el objetivo es eliminarlos antes del tiempo de revisión.

Paul Nathan
fuente