Después de algunos serios problemas de calidad en el último año, mi compañía recientemente introdujo revisiones de código. El proceso de revisión del código se introdujo rápidamente, sin pautas ni ningún tipo de lista de verificación.
Otro desarrollador y yo elegimos revisar todos los cambios realizados en los sistemas, antes de fusionarlos en el tronco.
También fuimos elegidos como "Líder técnico". Esto significa que somos responsables de la calidad del código, pero no tenemos ninguna autoridad para implementar cambios en el proceso, reasignar desarrolladores o retrasar proyectos.
Técnicamente podemos negar la fusión, devolviéndola al desarrollo. En realidad, esto termina casi siempre con nuestro jefe exigiendo que se envíe a tiempo.
Nuestro gerente es un MBA que se preocupa principalmente por crear un cronograma de los próximos proyectos. Mientras lo intenta, casi no tiene idea de lo que hace nuestro software desde el punto de vista comercial, y está luchando por comprender incluso las demandas más básicas de los clientes sin la explicación de un desarrollador.
Actualmente, el desarrollo se realiza en las sucursales de desarrollo en SVN, después de que el desarrollador cree que está listo, reasigna el ticket en nuestro sistema de tickets a nuestro gerente. El gerente luego nos lo asigna.
Las revisiones del código han generado algunas tensiones dentro de nuestro equipo. Especialmente algunos de los miembros mayores cuestionan los cambios (es decir, "Siempre lo hicimos así" o "¿Por qué el método debe tener un nombre razonable, sé lo que hace?").
Después de las primeras semanas, mi colega comenzó a dejar pasar las cosas, para no causar problemas con los compañeros de trabajo (ella misma me dijo que, después de que un cliente presentara un informe de error, sabía que había un error, pero temía que el el desarrollador estaría enojado con ella por señalarlo).
Yo, por otro lado, ahora soy conocido por ser un imbécil por señalar problemas con el código comprometido.
No creo que mis estándares sean demasiado altos.
Mi lista de verificación en este momento es:
- El código se compilará.
- Hay al menos una forma en que el código funcionará.
- El código funcionará con la mayoría de los casos normales.
- El código funcionará con la mayoría de los casos extremos.
- El código arrojará una excepción razonable si los datos insertados no son válidos.
Pero acepto completamente la responsabilidad de la forma en que doy retroalimentación. Ya estoy dando puntos procesables que explican por qué algo debe cambiarse, a veces incluso solo pregunto por qué algo se implementó de una manera específica. Cuando pienso que es malo, señalo que lo habría desarrollado de otra manera.
Lo que me falta es la capacidad de encontrar algo que señalar como "bueno". Leí que uno debería tratar de emparejar las malas noticias con las buenas.
Pero estoy teniendo dificultades para encontrar algo que sea bueno. "Oye, esta vez realmente cometiste todo lo que hiciste" es más condescendiente que agradable o útil.
Ejemplo de revisión de código
Hola joe
Tengo algunas preguntas sobre sus cambios en la clase Library \ ACME \ ExtractOrderMail.
No entendí por qué marcaste "TempFilesToDelete" como estático. Por el momento, una segunda llamada a "GetMails" arrojaría una excepción, porque usted agrega archivos pero nunca los elimina, después de eliminarlos. Sé que la función solo se llama una vez por ejecución, pero en el futuro esto podría cambiar. ¿Podría simplemente convertirlo en una variable de instancia? Entonces podríamos tener varios objetos en paralelo.
... (Algunos otros puntos que no funcionan)
Puntos menores:
- ¿Por qué "GetErrorMailBody" toma una excepción como parámetro? ¿Me he perdido algo? No está lanzando la excepción, simplemente la pasa y llama "ToString". ¿Porqué es eso?
- SaveAndSend no es un buen nombre para el método. Este método envía correos de error si el procesamiento de un correo salió mal. ¿Podría cambiarle el nombre a "SendErrorMail" o algo similar?
- No solo comente el código antiguo, bórrelo directamente. Todavía lo tenemos en subversión.