¿Qué tan importantes son los diagramas UML para un proyecto exitoso? [cerrado]


22

Estoy en medio de un proyecto y me pidieron que escribiera diagramas UML (casos de uso, diagrama de clase, etc.). El proyecto no es muy complejo.

Me preguntaba si esto sería una pérdida de tiempo? ¿Debería estar haciendo otras cosas divertidas como escribir código? ¿Y cuándo no está bien construir algo sin pasar por toda la fase conceptual? ¿Se trata de complejidad? Y si es así, ¿cómo medirlo?


Quizás te interese esta publicación: programmers.stackexchange.com/questions/58084/…
c_maker

15
Lo siento pero encuentro UML "basura técnica", pérdida de tiempo y ... Ok, me detendré aquí. Me siento mejor ahora.
Quirón

2
"Si le lleva más tiempo diseñarlo de lo que el cliente está dispuesto a pagar, está diseñando en exceso". No recuerdo a quién atribuirlo, pero este es un buen hilo conductor para adivinar "si" debería ser utilizado y valdría la pena :)
PhD

1
"Should I just be doing other fun stuff like writing code?"¿Quieres decir: "other stuff that contributes to the bottom line of the project like writing code"seguramente?
StuperUser

Por supuesto que sí, y no te llamo Shirley.
StuperUser

Respuestas:


53

Yo era un gran fan de UML hace un tiempo. Incluso estoy certificado por OMG. Lo utilicé ampliamente en grandes proyectos empresariales en los que estuve involucrado.

Hoy, detuve UML casi por completo. A veces, uso el diagrama de secuencia que encuentro muy útil para describir las interacciones entre sistemas, pero ningún otro diagrama.

Ahora prefiero trabajar con historias de usuarios, respaldadas por (solo) la documentación necesaria escrita por el propietario del producto (o analistas) Y su (su) dedicación al equipo de desarrollo para dar más detalles según sea necesario.

UML es una herramienta que puede usar, pero ciertamente no es un factor crítico para el éxito de sus proyectos. Después de muchos años, ahora creo que el factor crítico es el equipo de desarrollo, sin importar qué herramientas use.


Dijiste que estás certificado por OML. ¿Qué es el OML? ¿Un error?
Bћовић

Sí, fue OMG para Object Management Group, el organismo detrás de UML => uml.org

12
+1 para el último párrafo. Cuando se trata de diagramar un sistema de software, UML es excelente ya que está estandarizado y debe ser bien entendido por otros desarrolladores de software sin explicación. Sin embargo, es solo una herramienta y es posible que no la necesite, dependiendo de las personas que crean el software.
Thomas Owens

14
El primer párrafo es mucho más divertido si solo lees OMG con su significado habitual .
JSB ձոգչ

@ Pierre303 Estoy de acuerdo, que hay otras opciones además de UML. Pero la pregunta también es sobre el uso de herramientas de especificación / documentación en contraste con la codificación pura. ¿"No importa qué herramientas usa" significa "siempre y cuando el equipo realmente use herramientas para estas tareas"? ¿Usas historias de usuarios incluso para proyectos "[no] muy complejos" o son una pérdida de tiempo en esos casos?
scarfridge

9

La planificación es crítica, pero como advierte el famoso estratega Carl von Clausewitz

Ningún plan de campaña sobrevive al primer contacto con el enemigo.

Por lo tanto, no es una gran pérdida de tiempo planificar cómo atacar inicialmente los problemas. Pero probablemente sea una pérdida de tiempo documentar su código para futuros programadores. Para usar una metáfora militar, necesitas un plan de batalla, pero no le darías ese plan a los historiadores para usarlo como un informe posterior a la acción.

Más concretamente, puede usar estos diagramas para comunicar sus intenciones entre su equipo y pensar en su plan de ataque antes y durante el proyecto. Pero lo más probable es que lo que se te ocurra deba modificarse a medida que codifiques y aprendas más sobre el problema. Casi siempre su plan / diseño inicial necesita ser alterado porque no puede saber todo por adelantado.


3
But likely a waste of time for documenting your code for future programmers.Si un proyecto quiere usar UML como una forma de documentación, generalmente se crea usando herramientas de ingeniería inversa. Existen varias herramientas que pueden generar diagramas de clase y secuencia (y algunas veces algunas otras) a partir del código fuente, y la salida de estas herramientas se captura como documentación.
Thomas Owens

9

Creo que los diagramas UML solo pueden ser útiles si expresan algo en un nivel de abstracción más alto que su código .

Escribir UML solo por escribir UML se convierte en una burocracia innecesaria y hace que el proyecto y el código sean menos adaptables a los cambios sin ningún beneficio.

Por ejemplo, un diagrama de clase UML que muestra todas las clases en un paquete, con todos sus atributos y métodos, algo que se puede generar fácilmente de forma automática, no proporciona ningún valor: está en el mismo nivel de abstracción que su código . Además, el código seguramente será una mejor fuente de esa información porque siempre estará actualizado, y probablemente será documentado y organizado de una manera que sea más fácil saber qué métodos / atributos / cosas son más importantes.

Por otro lado, si tiene conceptos de un nivel de abstracción superior al que puede expresarse en el código, puede ser una buena idea documentarlos en un diagrama.

Por ejemplo, un diagrama que muestra los módulos abstractos de nivel superior en un sistema complejo, con sus dependencias y tal vez una pequeña descripción de sus responsabilidades y a qué paquete / espacio de nombres se asignan en el código fuente puede ser realmente útil para un nuevo miembro del equipo eso debe introducirse en el proyecto, o también puede usarse para determinar dónde se debe lanzar una nueva clase / funcionalidad.

Otro ejemplo de un diagrama útil podría ser un diagrama de secuencia que muestre los pasos de alto nivel a seguir en un protocolo de comunicación. Quizás cada paso de esos tenga sus pequeñas peculiaridades y complejidades, pero probablemente sea suficiente para describirlos en el código mismo. El diagrama de nivel superior puede ayudar a un programador a comprender el "panorama general" de las cosas fácilmente sin tener que preocuparse por las complejidades de cada interacción.

De todos modos, esos son solo algunos ejemplos; Hay muchos casos en los que un diagrama simple puede ser de gran ayuda. Solo recuerda que deberías hacerlo solo cuando no puedas expresar algo en el código mismo. Si se encuentra utilizando diagramas UML para explicar el código fuente en sí, haga que el código soruce sea más autodocumentado.

Finalmente, algunas de las reglas generales que se aplican al código también pueden aplicarse a los diagramas: evite repetirlo, manténgalo simple, no tema cambiar las cosas (solo porque algo está documentado en un diagrama UML no significa que no pueda cambiar) y siempre piense en quién leerá / mantendrá esos diagramas en el futuro (probablemente su futuro) cuando los escriba :)


8

UML tiene valor si los miembros del equipo lo entienden colectivamente y lo consideran una forma útil de resumir y comunicar decisiones de diseño. No necesita saberlo todo, solo ese subconjunto que el equipo encuentra útil.

Además, no necesita dibujar diagramas perfectos y pulidos. Un diagrama de secuencia esbozado en una pizarra o un diagrama de clase en el que las clases son notas post-it pegadas a esa pizarra puede ser suficiente, dependiendo del contexto.


3
+1: De hecho: ver UML como un boceto .
Richard

6

Una vez trabajé en un concierto donde necesitaba administrar un equipo de desarrolladores de contratos en el extranjero.

Algunas de las cosas que estaban produciendo eran bastante horrendas (un síntoma común de los codificadores de contratos remotos: realmente no les importa mucho su código, solo quieren terminarlo rápidamente).

Para administrar el proyecto, me encontré produciendo diagramas UML y entregándoselos a código. Tuvo mucho éxito: no me llevó tanto tiempo escribir un programa en UML, mucho más rápido que en Java, y era algo que los contratistas podían seguir y comparar.

Una advertencia: a veces querían ser creativos y desviarse de mis modelos, sin embargo, en esos casos, en realidad eran correctos y, sobre todo, el UML mejoró la calidad del producto final


+1: uno de los beneficios clave del modelado es poder crear, cambiar, comprender y explorar diferentes ideas mucho más rápido de lo que puede hacerlo en código.
Dunk

3

Si alguien le pidió que prepare diagramas UML y que alguien le pague su salario, entonces no es realmente una pérdida de tiempo. Puede o no ser una pérdida de tiempo para alguien.

Si esa persona planea comprender su proyecto leyendo sus diagramas UML, entonces probablemente no sea una pérdida de tiempo.


2

Me resulta útil en la etapa de diseño inicial para obtener ideas en papel o en la pizarra. Principalmente he usado diagramas de clases UML, sin un estricto cumplimiento de los estándares. Es útil volver a visitar su diseño original UML cuando está a medio camino y también al final del proyecto. Me ha ayudado a mirar una base de código en un nivel más alto de abstracción que uno puede leer con solo leer el código, e incluso me ha ayudado a detectar posibles errores.

Hay un punto de buena hecha aquí por ragu.pattabi distingue entre dos tipos de UML ...

Creo que el sabor ágil de UML (por ejemplo, un boceto rápido de pizarra) tiene más éxito que el sabor en cascada de UML (por ejemplo, diagrama elaborado con todos los detalles sangrientos para documentación, generación de código, etc. para hacer felices a los gerentes expertos en documentos).

Cuando UML fue visto como una habilidad 'imprescindible' (hace 10 años o más) probablemente estaba en contra debido a las opiniones obstinadas de sus muchos fanáticos en ese momento. Pero ahora que ha caído en desgracia, me encuentro viéndolo tal como es: una herramienta útil que tiene mérito pero no es la bala de plata del desarrollo de software.


1
+1: las únicas veces que vi UML como una pérdida de tiempo fue cuando las personas intentaron adherirse al "estándar" y, lo que es peor, generar código a partir de él. El uso adecuado es usarlo como un mecanismo de comunicación y una forma de explorar diferentes ideas, incluso si eso significa "adaptarlo" para satisfacer sus necesidades. Es mucho más eficiente que codificar primero, a menos que la aplicación sea trivial.
Dunk

1

Uso UML (o algo similar a UML :)) cuando hablo con amigos sobre algo que estamos a punto de hacer. Para discutir ideas. No para preparar un proyecto UML que genere código automáticamente para mí. No puedo imaginar crear mis clases en UML y luego generar código y no modificarlo más tarde. Esto nunca pasa. Por lo tanto, tendrá que traer cambios del código a UML. Y cuando uso UML dibujo en pizarra o papel. Nunca en una herramienta como Enterprise Architect.

La única razón para documentar todo mi código en UML sería un contrato donde el cliente lo exige. Por ejemplo, cuando quiere tener una opción para cambiar la tienda de software después de que una parte del software haya terminado.


1

La documentación de trabajo del proyecto es una entrega fundamental de un proyecto profesional. ¿Cuánto es suficiente? Bueno, depende, por supuesto, de muchos factores. Sin embargo, en mi opinión, los casos de uso, los diagramas de clases, los diagramas de flujo de procesos, etc. no son una pérdida de tiempo en absoluto. Tienen valor en varias fases del proyecto. El único problema con la documentación suele ser los recursos.

Algunos programadores consideran que la documentación es una pérdida de tiempo. Pero esto no es cierto. Si ve la documentación como una muestra de sus reglas de diseño y sistema de una manera elegante y clara, puede llegar a apreciarla más. Además, uno necesita ponerse en la posición de las personas que necesitan mantener el sistema. Lanzar 500 archivos de código y pedirles que solucionen los problemas con ellos es algo malo pero no raro.

Le sugiero que asigne tiempo a su proyecto y produzca los diagramas en ciclos. El primero cubriría los aspectos de alto nivel de su proyecto y los niveles posteriores podrían detenerse más en los detalles.

Los casos de uso en particular no pueden deducirse fácilmente del código (a diferencia de muchos otros aspectos de un sistema). Asegúrate de hacer eso.


-1: Si ve la documentación como una muestra de sus reglas de diseño y sistema de una manera elegante y clara : No, nunca lo hago; porque siempre es obsoleto // No estoy seguro de dónde vives, pero en el planeta Tierra, el software evoluciona demasiado rápido para justificar la documentación de "grado profesional".
Jim G.

@JimG. Eso puede ser cierto o falso, dependiendo de cuán detallada sea la documentación. Si mantiene su documentación de alto nivel (componentes, detalles principales de las clases principales), la documentación no se volverá obsoleta rápidamente. Si documenta manualmente a cada miembro de cada clase, su trabajo será inútil con bastante rapidez.
Danny Varod

1
@JimG., Estoy seguro de que no estás solo pensando de esta manera. El hecho de que el software cambie no hace que los documentos de análisis, diseño e implementación sean completamente obsoletos. Tal conocimiento evoluciona durante el ciclo de vida del sistema. Si tuviera que entregar sistemas a organizaciones que realizan auditorías de TI, tendría que mostrar la documentación y no solo el código y los archivos binarios.
NoChance

@Emmad Kareem: con respecto a las organizaciones que realizan auditorías de TI: la mayor parte de esa documentación es superficial y está destinada solo a la auditoría. La mayoría de los desarrolladores de software no confiarán en él.
Jim G.

@JimG., Lo que has descrito en tu último comentario es una situación que me gustaría ver desaparecer. Me encantaría ver que el desarrollo de software se convierta en un negocio más predecible que mejorará la vida de los desarrolladores y reducirá el riesgo de las organizaciones porque no conocen los peligros que deben enfrentar. De todos modos, supongo que es un tema largo pero interesante (para mí).
NoChance

1

UML es una herramienta, nada más, y si es útil o incluso crucial depende únicamente de su flujo de trabajo de desarrollo y diseño. Hay muchas maneras de llegar a Roma, y ​​algunas de ellas involucran UML, mientras que otras no.

Si su flujo de trabajo se basa en UML para documentar o planificar su arquitectura, dejarlo caer sería una tontería. Si UML es la mejor manera posible de comunicar la estructura del proyecto a otros miembros del equipo (en el sentido más amplio), entonces, por todos los medios, úselo. Pero si el proyecto funciona bien sin UML, entonces hacer diagramas UML por el simple hecho de que sea una tontería.


1

Tengo algunos pensamientos sobre esto. El lenguaje puede ser usado y abusado, obligar y distraer, desencadenar y detener. UML es solo otro idioma adecuado para un conjunto específico de problemas y, como cualquier otro idioma, tomará tiempo y esfuerzo aprender a hablarlo con fluidez y comprenderlo correctamente.

La decisión sobre qué comunicar es increíblemente más importante que el lenguaje en el que se comunica. UML no hará mágicamente comprensibles sus malos diseños. Al igual que cualquier otro idioma, es fácil perderse en los detalles o dejar demasiado a la imaginación.

UML recibió un mal nombre debido a los numerosos IDE horribles, lo que permite la creación de prototipos de ida y vuelta, la manipulación de gráficos intensivos en clics y la dificultad de cambiar cualquier cosa. UML 2.0 puede ser lo suficientemente complejo como para satisfacer a ciertos académicos, pero su metamodelo no parece atraer muchas aplicaciones prácticas.

Aún así, uso UML de vez en cuando. Evaluar un diseño de alto nivel (un buen diseño tiene complejidad en los márgenes y simplicidad en el centro). Comunicar una idea a un colega y recibir comentarios. Encontrar relaciones ocultas, normalizar, etc. Pero siempre es un reflejo de algo que ya está en mi cabeza. En general, dibujo UML con lápiz y papel, preferiblemente lejos de cualquier computadora. Si es necesario, cuando un diseño cristaliza, hago una representación visual en un programa de dibujo.


1

UML es absolutamente fantástico para obtener una vista gráfica de su arquitectura utilizando un diagrama de clase. La interacción con el diagrama de secuencia es mágica para mí. Por lo tanto, el problema no es UML sino MDD para mí.

Quiero decir que si UML es un espectador del código, entonces es realmente útil para fines de documentación, pero ciertamente no para la generación de código. El proyecto debe estar centrado en el código y ciertamente no centrado en el modelo. UML debe usarse en la etapa de implementación usando un código en vivo y sincronización de modelo. Me refiero no solo al nivel de requerimiento que requiere demasiada inversión para un pequeño retorno en productividad y calidad.


0

Los encuentro muy sobrevalorados. Las considero las únicas imágenes que no pintan más que mil palabras.


Ponga pintura y un pincel en las manos de alguien no calificado y todo lo que resulta es un desastre para limpiar. Sin embargo, poner pintura y pincel en manos de un artista y nace el arte. Lo mismo ocurre con los diagramas UML.
Dunk

0

UML solo tiene valor si las personas que diseñan el sistema no pueden escribir el código por sí mismas. es decir, UML es un "lenguaje" que comunica los conceptos arquitectónicos a otra persona. Ahora, si usted es la persona que diseña el código y lo implementa, ¿por qué necesitaría mostrarse qué es lo que va a hacer? ?! Súbete y dirígete directamente a la codificación. Aún tendrá que documentar lo que hizo más tarde, pero la eficiencia general es más rápida.

Pero, si usted fuera un arquitecto de sistemas que quisiera decirle a su equipo de desarrolladores subcontratados lo que quería, entonces tendría que decirles de alguna manera, y ahí es donde entra UML. Sin embargo, creo que hay muchos medios alternativos para realizar Esta tarea hoy en día, y francamente, la complejidad de la creación de diagramas UML significa que todos tienen que entender cómo leerla, lo que es algo autodestructivo si no lo hacen.


LMAO, negro / blanco? Su método de desarrollo "sugerido" es la razón por la que me llaman para limpiar y arreglar proyectos desastrosos con tanta frecuencia. El código no es el diseño. Hay pocas personas que pueden crear incluso sistemas moderadamente complejos (supongo que tengo que dejar esa declaración como independiente). Y hay muchas, muchas menos que pueden hacerlo saltando directamente al código. Además, es posible que tenga un sistema "roto" más rápido, pero no tendrá un sistema "que funcione" más rápido al saltar directamente al código. Pero supongo que todo depende del tipo de proyectos que tenga. Si la mitad del trabajo está bien, entonces su enfoque está bien.
Dunk

0

Nunca fui fanático de UML, pero he llegado a valorar un buen diagrama de secuencia para describir las interacciones entre sistemas o tareas.

Sin embargo, el diagrama de clases es obsoleto antes de que nazca. Un diseño aproximado no requiere UML, y una documentación completa se extrae automáticamente (en vivo) de la base del código. Javadoc y Doxygen han obsoleto por completo la necesidad de diagramas de clases manuales.

Lo que pasa con la documentación es que hay dos niveles:

  • las decisiones de alto nivel (arquitectónicas) deben ser documentación manual
  • los hechos de bajo nivel (relaciones entre entidades) deben extraerse automáticamente

Casi todas las herramientas CASE pueden realizar ingeniería inversa en sus diagramas de clase. Dicho esto, creo que los diagramas de clases son sobre los diagramas más inútiles que existen, excepto quizás por mostrar problemas de herencia y dependencia (en cuyo caso solo los nombres de clase son suficientes). La mayor parte del dinero en UML son los diagramas de secuencia. Desafortunadamente, ninguna herramienta hace un trabajo razonable de diagramas de secuencia de ingeniería inversa. Esta falta de capacidad es la razón principal por la que es realmente difícil usar UML para documentar su diseño tal como está. En cambio, UML solo proporciona una hoja de ruta antes de la implementación.
Dunk

0

Por lo general, itero entre el código y los diagramas UML. Encuentro que los diagramas ayudan a mostrar el panorama general y un camino sólido hacia adelante y pueden cambiarse bastante rápido cuando se descubren problemas. Además, cuando tengo los diagramas, la codificación tiende a ser trivial.

Por el contrario, cuando dibujo el código en imágenes, expone los problemas de dependencia y hace que las oportunidades de mejora del diseño sean obvias, lo que probablemente no se habría notado si solo tuviéramos el código para trabajar. En particular, si es un dolor dibujar, también será un dolor codificar y una pesadilla mantener.

He descubierto que se requiere iteración, porque solo dibujar las imágenes siempre pierde aspectos importantes, mientras que la codificación da como resultado diseños problemáticos.

Sin embargo, como dijo otro cartel, todo se reduce a la gente. Si están capacitados para "usar" diagramas UML, entonces UML es invaluable. Si no lo son, entonces los diagramas no tienen valor.

Por lo tanto, la respuesta a su pregunta realmente es "depende". En este caso, depende de las personas, la complejidad del proyecto y la importancia de que el sistema funcione correctamente.


0

Desde mi experiencia, el UML es importante para la comunicación entre los desarrolladores sobre los patrones de código y para la arquitectura en general de la aplicación.


0

Me encantan los diagramas, pero si me pidieran que hiciera uno (¡especialmente UML!), Haría dos preguntas:

  1. ¿Para quién?
  2. ¿Lo necesitan ahora?

Los diagramas se desactualizan de inmediato. Entonces, a menos que lo esté usando para comunicarse con alguien ahora, simplemente se pudrirá. Y si la persona con la que se está comunicando le iría mejor con una descripción de texto, o una llamada telefónica, o un digram informal en una pizarra, sugiérale eso.


0

Una de las principales quejas para mí sobre los diagramas UML, como los he visto utilizados hasta ahora, es que en su mayoría solo tienden a servir como "imágenes bonitas" en la pared de alguien o como una página doblada en una encuadernación en algún lugar y rara vez sirven como línea de base para un código de producción.

En este tipo de escenario, los diagramas UML (o cualquier sabor del lenguaje de modelado que use) rara vez son útiles a largo plazo, ya que tienden a sufrir una pérdida de relevancia a medida que pasa el tiempo y el proyecto evoluciona. Estos dibujos iniciales son en su mayoría inútiles e incorrectos en pocos años y tenerlos cerca es en su mayoría perjudicial.

Dicho esto, el uso de herramientas de modelado (no necesariamente UML) no es una práctica totalmente inútil, si los modelos proporcionan una entrada real y relevante al código de ejecución real. Si la descripción del modelo es un artefacto útil del código, debe tratarse como código:

Ya sea utilizándolo como una fuente directa de metadatos para tomar decisiones dinámicas basadas en los conceptos modelados, o utilizando la generación de código para generar artefactos de código estático que se utilizan en el código de trabajo real.


0

No sé si la pregunta es sobre el mérito de UML, o sobre el mérito de diseñar la arquitectura de los programas.

Sobre UML Por lo general, solo necesita: casos de uso, diagramas de clases y diagramas de secuencia. Simple y fácil, aunque ciertamente podría hacerlo con sus propios tipos de diagramas. En este sentido, UML es un estándar que todos entenderán.

Sobre el diseño de programas.

  1. Cada programa tiene un diseño, incluso si no lo planifica. Cuando se escribe el código, simplemente realice ingeniería inversa. Si no lo planeó, apueste a que será un mal diseño.

  2. El diseño le ahorrará tiempo al usar patrones conocidos para problemas recurrentes.

  3. Si trabaja en equipo, el diseño es necesario para discutir soluciones, transmitir ideas y muy práctico pero necesario para distribuir el trabajo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.