El código ya está escrito y se dedican esfuerzos
También es innecesario. Si no lo usa para nada, es (por definición) inútil, sin importar lo que haga o cuánto esfuerzo se haya invertido en él.
El código se puede probar en un entorno sintético y real
Si es inútil, sigue siendo inútil incluso si tiene pruebas. Si el código es inútil, las pruebas también deberían ser inútiles (por lo tanto, mantener el código comentado allí crea ambigüedad: ¿conservas las pruebas? Si tuvieras el código de cliente del código comentado, ¿comentas también el código de cliente? )
Si está bien organizado (agrupado, paquete separado, poco acoplado, etc.), no le molesta en el análisis general del código o la refactorización
No tan. Todas sus herramientas (control de fuente, análisis estático, extractor de documentación, compilador, etc.) se ejecutarán más lentamente, porque tienen que procesar más datos (y una parte mayor o menor de esos datos es ruido).
Si el código no está bien organizado, por otro lado, estropeará el análisis estático, la refactorización y cualquier otro.
Estás introduciendo ruido en la entrada de tus herramientas y esperas que lo afronten correctamente.
¿Qué pasa si su herramienta de análisis estático calcula una proporción de comentarios / código? Simplemente lo arruinaste, con algo que era relevante hasta ayer (o cuando se comentaba el código).
Lo más relevante de todo es que los bloques de código comentados introducen retrasos en la comprensión del código para su mantenimiento y desarrollo posterior, y estos retrasos casi siempre cuestan mucho. Pregúntese esto: si necesita comprender la implementación de una función, ¿qué preferiría tener en cuenta? ¿Dos líneas de código claro, o dos líneas de código y otras veintiséis de comentarios que ya no son reales?
El código puede usarse en el futuro
Si es así, lo encontrará en el SCM de su equipo.
Si usa un SCM competente y confía en él para mantener el código muerto (en lugar de saturar la fuente), debería ver no solo quién eliminó ese código (autor de confirmación), sino por qué motivo (mensaje de confirmación) y qué otros Se realizaron cambios junto con él (el resto de las diferencias para esa confirmación).
Cuando se elimina, el autor puede sentirse incómodo
¿Entonces?
Sois (supongo) un equipo completo de desarrolladores a los que se les paga por crear el mejor software que sepas, no "el mejor software que sepas sin herir los sentimientos de X".
Es parte de la programación, que la mayoría del código escrito finalmente se descartará; por ejemplo, Joel Spolsky dijo en algún momento que para su empresa, aproximadamente el 2% del código escrito ve producción.
Si priorizas el ego de los desarrolladores sobre la calidad del código base, sacrificarás la calidad de tu producto, por ... ¿qué exactamente? ¿Preservando la inmadurez de sus compañeros desarrolladores? ¿Protegiendo las expectativas poco realistas de sus colegas?
Editar: He visto una razón válida para dejar el código comentado en la fuente, y es un caso muy específico: cuando el código está escrito de una forma extraña / poco intuitiva y la forma limpia de reescribirlo no trabajar por una razón muy sutil. Esto también debe aplicarse solo después de que se haya realizado un intento repetido para corregir el problema y cada vez que el intento haya reintroducido el mismo defecto. En tal caso, debe agregar el código intuitivo comentado como comentario y explicar por qué no funciona (para que los futuros desarrolladores no vuelvan a intentar el mismo cambio):
// note by <author>: the X parameter here should normally
// be a reference:
// void teleport(dinosaur& X);
// but that would require that we raise another dinosaur and
// kill it every twelve hours
// as such, the parameter is passed by value
void teleport(dinosaur X);