En los últimos años UML ("Unified Modeling Language") se ha impuesto como un estándar de– facto para expresar modelos orientados a objetos. Es un lenguaje diseñado para especificar, visualizar, construir y documentar “artefactos” de sistemas de software [Booch’99].
A diferencia de los lenguajes visuales que lo precedieron, UML posee una definición semántica más precisa que combina notación gráfica, reglas bien formadas expresadas en OCL [OMG’01] y lenguaje natural. Esta definición semántica da una estructura rigurosa al lenguaje aunque aún varias de sus construcciones están definidas débilmente.
Si bien UML estandariza un lenguaje de modelamiento y no impone ningún proceso de desarrollo fue concebido pensando en procesos dirigidos por casos de uso, centrados en arquitecturas, iterativos e incrementales. En noviembre de 2001 OMG presenta “Software Process Engineering Metamodel” (SPEM) que es usado para describir un proceso de desarrollo de software concreto o una familia de procesos que usan UML. El proceso más popular que se ajusta a SPEM es RUP (“Rational Unified Process”) [Krutchen’00].
La existencia de un lenguaje de modelamiento estándar como UML brinda la posibilidad de concentrar esfuerzos en la definición de potentes herramientas CASE UML. Pueden mencionarse entre las numerosas existentes en el mercado a Argo/UML, Together, GDPro, Stp/UML, Rational Rose, MagicDraw/UML, Rhapsody y Objecteering. Las mismas asisten en el análisis, diseño e implementación de sistemas orientados a objetos. Proveen facilidades, si bien limitadas, para homogeneizar diagramas y realizar comprobaciones que detecten inconsistencias y errores como asimismo para procesos de ingeniería directa (forward engineering) e inversa (reverse engineering)