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.
fuente
Respuestas:
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.
fuente
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.
fuente