¿Por qué es inapropiado usar diagramas UML para planificar cómo se organizará su código?


9

Entonces, sí, los diagramas pueden ser inapropiados a veces. ¿Cuándo son inapropiados? Cuando los cree sin código para validarlos, y luego tenga la intención de seguirlos. No hay nada de malo en dibujar un diagrama para explorar una idea.

Desarrollo de software ágil: principios, patrones y prácticas - Robert C. Martin

¿Qué quiere decir exactamente con esto? ¿No está UML diseñado para ayudar a planificar cómo estructurar su código antes de "sumergirse"? ¿Cuál es el punto de usarlo si no sigues los diagramas que se te ocurrieron?

Contexto: en este capítulo, el tío Bob hace un diagrama UML para el Score Keeper de un juego de bolos. Luego continúa desarrollando el programa de una manera basada en pruebas, sin consultar el diagrama UML. El programa resultante no se parece en nada al diagrama UML, y el tío Bob llega a la conclusión citada anteriormente.


44
El punto del tío Bob es que la arquitectura que emerge del desarrollo impulsado por pruebas puede diferir radicalmente del diagrama UML.
Robert Harvey

1
¿Leer también es diseño muerto? Por Martin Fowler para una discusión equilibrada sobre este tema y el movimiento ágil
Eliezer Steinbock

44
Votar esta pregunta en respuesta al pobre juicio de parte de @RobertHarvey et al al votar para cerrar lo que es una pregunta importante y útil.
David Arno

3
@DavidArno Si tiene opiniones firmes sobre lo que debería o no debería cerrarse, le recomiendo que participe en las discusiones en nuestro meta sitio. Todos los que actualmente publican allí (incluyéndome a mí) probablemente pertenezcan a "@RobertHarvey et al", excepto algunos empleados de SE, y nos preocupa que haya otro punto de vista que no esté representado, pero hasta ahora nadie ha aparecido para representarlo. .
Ixrec

1
@ Ixrec, nunca antes me había involucrado en meta discusiones, más allá de una vez, para verificar si podía referirme a mis propias bibliotecas de código abierto en las respuestas (la respuesta a eso fue que podía). Tal vez debería tomar tu consejo y participar más. Gracias por la sugerencia.
David Arno

Respuestas:


19

Para explicar esto adecuadamente, necesitamos una breve lección de historia. En los primeros días de la ingeniería de software, una analogía de uso frecuente era construir una casa. Un arquitecto e ingeniero estructural discuten los planes con un cliente y elaboran un diseño. Los constructores luego siguen ese diseño para construir la casa real. Escribir código fue visto como el equivalente a construir la casa real. Por lo tanto, se percibió la necesidad de un diseño inicial antes de que esa construcción pudiera tener lugar. Se crearon varias herramientas de diseño gráfico, con UML como una de ellas.

La idea original con UML era que uno diseñara completamente un sistema con UML y luego lo entregara a los codificadores para traducir ese diseño en código. En realidad, esto simplemente no funciona, y llevó a años de programadores a ser vistos como "implementadores", en lugar de "diseñadores", los proyectos se retrasaron, los diseños tuvieron que cambiar constantemente después de que se suponía que estaban completos, etc.

El motivo es simple. La codificación es diseño . Con la analogía de la casa, el código son los dibujos del arquitecto. El compilador es el constructor que toma esos diseños y crea un programa a partir de ellos. Esta realización condujo a técnicas ágiles, TDD, etc. nacen: herramientas para ayudar a mejorar la calidad del diseño de ese código.

Del mismo modo que un arquitecto puede producir bocetos preliminares para ayudarla a ella y a su equipo a visualizar el diseño general, un desarrollador puede usar UML u otras herramientas para ayudar a visualizar el diseño necesario. Así como esos bocetos no se siguen a ciegas, el UML no se debe seguir a ciegas. El diseño del código debe evolucionar a partir de iteraciones ágiles y utilizando TDD. Del mismo modo, así como un arquitecto podría construir un modelo de la casa para ayudarla a ella y a su equipo a visualizar los dibujos, también se puede usar UML para ayudar a visualizar la estructura del código.

Como dice el tío Bob, no puedes validar el UML, solo puedes validar el código. Por lo tanto, el código es la documentación de diseño principal y UML, si se usa, es solo documentación secundaria.


77
A principios de este año levanté una sección del techo de mi casa y fue bastante educativo. El arquitecto realmente no hizo más que dibujar cómo se suponía que debía ser el producto final. Le entregó los cálculos duros y el diseño estructural a un ingeniero de construcción. Luego, los constructores tuvieron que hacer coincidir los diseños teóricos con la realidad de la casa (una vez que la placa de yeso estaba apagada, las vigas se encontraban en lugares ligeramente diferentes) para que el diseño tuviera lugar en cada paso.
Jaydee

1
Esta es una respuesta útil, sin embargo, simplifica demasiado algunos aspectos. Una de las razones principales por las que UML no funciona bien como una "notación de diseño de alto nivel" es en mi humilde opinión que sus inventores fueron demasiado tercos para agregar un diagrama de flujo de datos. Ese es el único tipo de notación que sé que se adapta al diseño de la ciudad superior, lo que permite expresar abstracciones para componentes e interfaces entre ellos de diferente escala, y también puede tener un mapeo bien definido para codificar. En cambio, UML contiene muchas tonterías que nadie realmente necesita.
Doc Brown

3

Supongo que no todos los modismos de programación (o diseño o código) encajan en UML (lo cual admito que no conozco bien, solo leo algunos libros sobre él, nunca lo usé, y probablemente no me guste).

El código C simple (por ejemplo, el código fuente del kernel de Linux) podría no estar exactamente modelado por UML.

El código Ocaml (con sus módulos y functores) o incluso el código C ++ 11 (con lambdas y plantillas) podrían no encajar en UML.

La programación multietapa a la MetaOcaml probablemente no encaja en UML.

El código de prólogo o el código de Common Lisp probablemente no encaja en UML.

Vea también esta respuesta y esta pregunta mía.

Lea los pragmáticos del lenguaje de programación de Scott y los libros de conceptos, técnicas y modelos de programación informática de Van Roy , luego pregúntese si cada modelo de programación encaja en UML.

Ver también Martin Fowler's Is Design Dead? Blog.

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.