¿Las compañías de software prestigiosas usan regularmente UML?

¿Deberías usar UML? Depende de la complejidad y de lo que esperas de UML.

Aquí hay un método totalmente no científico, pero lo usaré de todos modos: una búsqueda hoy para puestos de “Ingeniero de Software” en un sitio web de reclutamiento popular reveló más de 1000 en Silicon Valley. Sin embargo, si filtra esa búsqueda con las palabras “UML” en la oferta, ¡el mercado se reduce a solo 20 empleos! A partir de las descripciones, tienden a ser puestos más altos. Conclusión: no necesitará aprender UML para encontrar un trabajo. Es posible que lo necesite en un puesto superior en Amazon o Google Android (según algunas de las empresas que vi en las ofertas).

¿Es útil si te importa la calidad del código? Creo que UML te ayudará a mejorar tu diseño en el nivel modular (clase) o superior, no porque UML tenga algún poder mágico, sino porque te ayuda a abstraer las cosas importantes en este nivel, dejando de lado los tediosos detalles que ‘ Lo encontrarás en todo el código. Los modelos tratan de abstraer lo esencial.

Los diagramas de clase UML muestran fácilmente cómo se reduce el acoplamiento en un diseño después de aplicar un patrón de diseño (que generalmente se documenta con UML). Supongo que será más difícil usar patrones de diseño OO en un equipo si no conoce UML. Pero todavía es solo un modelo. “Las burbujas no se estrellan” es una frase famosa de Bertrand Meyer, lo que significa que aún tendrá que ser bueno para codificar su diseño. MDA / MDD aún no está listo para la mayoría del mercado.

¿Hay algún otro software ligero …? UML en su conjunto no es liviano, pero puede usarlo de manera liviana. El boceto de la pizarra es muy liviano y creo que permite una creatividad diferente que con mi mano en el mouse mirando una pantalla. Un par de herramientas que me gustan para hacer UML ligero son UMLet y PlantUML. Este último incluso tiene un complemento para Google Docs llamado PlantUML Gizmo (descargo de responsabilidad: soy el desarrollador, pero es un software gratuito que desarrollé como un “servicio comunitario” en mi papel de profesor universitario).

Aquí hay un ejemplo de UML producido por PlantUML:
Puede ver el código fuente en PlantUMLServer.

Un par de comentarios finales:

  • Como señaló otra respuesta, la industria anhela muchos más desarrolladores concretos (que fabrican software como un producto básico ) que ingenieros de software con capacitación clásica (?) (Como lo enseñamos en una universidad). La verdad es que si una compañía de software no obtiene alguna versión 1.0 de su producto, no importará si el código se puede mantener, está bien diseñado, etc. La comercialización cambia mucho el juego y la educación en ingeniería de software no reacciona tan rápido a las tendencias (lo cual no es necesariamente algo malo, ya que algunas tendencias se desvanecen). El estándar para los ingenieros de software “competentes” se ha reducido porque la demanda es alta. Esta no es una razón para descartar UML en mi opinión. Vuelvo a mi anécdota de búsqueda de empleo. ¿Desea obtener un trabajo de programación en cualquier lugar de Silicon Valley o trabajar para Google en el equipo de Android?
  • UML pone las abstracciones en foco (lo cual es bueno para el diseño y la arquitectura) pero a veces hay que “simplemente codificarlo” (porque el demonio está en los detalles). Muchos desarrolladores que aprenden a usar UML tienen problemas para cambiar de un lado a otro, o para equilibrar la atención que ponen en varios niveles. Trabajar en varios niveles de abstracción es bastante difícil. Gastar demasiada energía en las abstracciones (descuidar el código) no ayudará a la compañía a sacar esa versión 1.0 (piense en “parálisis de análisis”). Es posible que pierda su trabajo si no produce suficiente código que realmente se ejecute. Por lo tanto, debido a las presiones del mercado, la dificultad de la tarea y la falta de herramientas fáciles de usar (y asequibles), el modelado y el diseño pasan por alto. Por lo tanto, la apariencia de que UML no es necesaria.

UML sigue siendo relevante, pero definitivamente no es para todos.

Con los años, UML ha pasado de ser una notación (originalmente tratando de unificar notaciones variadas como OMT, Booch, Objectory, Harel, Shlaer-Mellor, etc.). Al principio, la semántica era bastante flexible, lo que significaba que muchos gurús (competidores y conflictivos) debían expresar sus puntos de vista, causando cierta fragmentación.

En su encarnación actual, el nivel semántico y la formalidad de UML ha aumentado, y también su complejidad. Esto tiene, en mi humilde opinión, la aparición de un metamodelo para representar el negocio del desarrollo de software (y el desarrollo del sistema a través de perfiles). Esto significa que se ha vuelto más complejo y más poderoso.

Debido a este poder y complejidad, las organizaciones más pequeñas encontrarán un desafío adoptar la notación completa, incluso si partes de la notación siguen siendo muy relevantes, dependiendo de sus necesidades. Un ejemplo, como ya se mencionó, es el excelente trabajo de Scott Ambler al tratar de conciliar el modelado (y UML) con los enfoques ágiles en su sitio web Agile Modeling (Prácticas efectivas para el modelado y la documentación).

Donde puede ser muy poderoso es en el desarrollo de sistemas grandes y complejos, a menudo compuestos por hardware y software, y especialmente en lo que respecta a las líneas de productos. En tal situación, la inversión en herramientas UML y su uso a menudo se amortizarán. En algunos de estos casos, también, un lenguaje de modelado específico de dominio (DSML), basado en el metamodelo UML, mejorará aún más la productividad. Si está buscando un ejemplo de un DSML basado en UML, puede echar un vistazo a SysML (también en el sitio web de OMG). SysML es en realidad un superconjunto de un subconjunto de UML orientado a resolver un problema en particular. Tal enfoque también se puede utilizar para dominios específicos, como el software integrado, que a menudo se puede representar como máquinas de estado colaboradoras.

La mayor ventaja de los DSML es que aumentan el nivel de abstracción. Solo asssembler es una abstracción de binario y C / C ++ son abstracciones de ensamblador, un DSML se convertiría en una abstracción de un modelo que solo se correlacionaría con un 3GL.

He estado modelando en varias formas durante 25 años (comenzando con Shlaer-Mellor) y en los últimos 17 años (desde que se lanzó UML en v0.8), he trabajado con compañías que han usado UML con éxito, incluso hasta el punto donde el modelo era el activo principal y no el código generado (al igual que C ++ frente a binario), pero ninguno lo hacía para proyectos de software pequeños y / o únicos donde las herramientas habrían sido demasiado caras y el ROI sin interés. Sin embargo, hoy en día, hay muchas herramientas de modelado UML de bajo costo e incluso gratuitas.

También tengo un problema con el uso de UML solo para documentar, a menos que se use alguna forma de visualización. Soy un gran defensor de una única fuente de información y si su código y su modelo UML difieren, es inútil y generalmente es costoso de mantener.

¿Es relevante UML? Sí, pero no para todos y no para todos los proyectos.

More Interesting

Como estudiante de secundaria, ¿cómo puedo prepararme para especializarme en ingeniería de software en la universidad?

He completado B.Com con 48% de calificaciones. Ahora, ¿qué debo hacer a continuación para obtener un trabajo bien remunerado?

¿Cuál es la mayor cantidad de lenguajes de codificación que alguien ha aprendido?

Para un programador promedio, ¿en cuántos lenguajes de programación debería ser muy competente?

¿Cuál es la importancia de la analítica en una implementación de software CRM?

¿Por qué la GTU (Universidad Tecnológica de Gujarat) literalmente apesta?

¿Para qué sirven las revisiones de código?

Tengo mi sitio web de comercio electrónico desarrollado y está a punto de comenzar, pero como no tengo mucho conocimiento sobre el uso del tablero y los problemas relacionados con el software, ¿a quién debo contratar? ¿Quién puede ocuparse de los problemas de software de fondo y todo eso?

¿Alguien conoce un software / plataforma útil para verificar automáticamente si algunas respuestas de la encuesta son correctas?

¿Cuáles son las características que pueden mejorar el software de farmacia, desarrollado para la plataforma web?

Especificación de requisitos de software: ¿Qué tipo de procedimientos de documentación siguen las nuevas empresas en crecimiento como Quora?

Como puedo invocar métodos de clases estáticas, ¿cuál es el punto de crear instancias?

¿Cuáles son los 10 mejores productos de software empresarial? (por ingresos)

¿Dónde se usan las API en aplicaciones del mundo real?

¿Cómo funciona Siri en términos de algoritmos?