La mayoría, si no todas las personas de TI que conozco, creen que es beneficioso modelar software con UML u otros tipos de diagramas antes de la codificación. (Mi pregunta no es sobre UML específicamente, podría ser cualquier descripción gráfica o textual del diseño del software).
No estoy tan seguro de eso. La razón principal es: el código no miente. Lo comprueba el compilador o el intérprete. Con suerte, tiene pruebas automatizadas y necesita pasar el análisis de código estático. Si un módulo no interactúa correctamente con otro módulo, generalmente es obvio en el código porque recibe un mensaje de error.
Todo esto no se puede hacer con diagramas y otros documentos. Sí, hay herramientas que comprueban UML, pero todo lo que he visto hasta ahora es muy limitado. Por lo tanto, estos documentos tienden a ser incompletos, inconsistentes o simplemente falsos.
Incluso si los diagramas en sí son consistentes, no puede estar seguro de que el código realmente los implemente. Sí, hay generadores de código, pero nunca generan todo el código.
A veces siento que la obsesión con el modelado resulta de la suposición de que el código inevitablemente tiene que ser un desastre incomprensible con el que los arquitectos, diseñadores u otras personas bien remuneradas que tienen una visión general no deberían tener que lidiar. De lo contrario, sería demasiado caro. Por lo tanto, todas las decisiones de diseño deben alejarse del código. El código en sí debe dejarse a especialistas (monos de código) que pueden escribirlo (y tal vez leerlo) pero no tienen que ocuparse de nada más. Esto probablemente tenía sentido cuando el ensamblador era la única opción, pero los lenguajes modernos le permiten codificar a un nivel muy alto de abstracción. Por lo tanto, ya no veo la necesidad de modelar.
¿Qué argumentos para modelar sistemas de software me estoy perdiendo?
Por cierto, creo que los diagramas son una excelente manera de documentar y comunicar ciertos aspectos del diseño de software, pero eso no significa que debamos basar el diseño de software en ellos.
Aclaración:
La pregunta quedó en suspenso por no estar clara. Por lo tanto, permítanme agregar alguna explicación:
Me pregunto si tiene sentido usar documentos (sin código) que modelen el software como la fuente principal de verdad sobre el diseño de software. No tengo en cuenta el caso en el que una parte significativa del código se genera automáticamente a partir de estos documentos. Si este fuera el caso, consideraría los documentos en sí mismos como código fuente y no como modelo.
Enumeré algunas desventajas de este procedimiento que me hacen preguntarme por qué tanta gente (en mi experiencia) lo considera como la forma preferible de hacer diseño de software.