martes, 9 de diciembre de 2008

UML y PHP: Herramientas Case

Creative Commons License

Esta obra está bajo una licencia de Creative Commons.

© 2008 Jaime M. Tan Nozawa. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.



Después de haber analizado el negocio y haber realizado tus workflow de procesos, es hora de comenzar a diseñar (y analizar) la arquitectura de tu sistema.

La gran pregunta para todo desarrollador y arquitecto de software que implementará en PHP sería: qué herramientas CASE dispongo, hay alguna libre... y éstas me generarán código PHP ? y código PHP 5 si pido mucho???

Pues les listaré los que a los largo de estos años he podido testear:

StarUML : Interesante herramienta, es perfecta para la documentación usando la metodología RUP, los que vienen de utilizar Rational Rose, esta herramienta les parecerá ser un clon casi idéntico (inclusive en los colores). Tienes la posibilidad de crear íconos para tus estereotipos y crear tus propios profiles. (Digamos que puedo crear mi Profile para modelar para Zend Framework o un MVC propio más "abierto"). Su interfaz es ligera y agradable. utiliza UML 2.0.

La generación de código para PHP 5: intermedio ***
Utiliza un método de "templates", en el cual uno puede inclusive modificar el código que generará. Detecta agregación y composición y genera automáticamente el atributo en la "clase cliente"

Desventaja :
- Solo corre en Windows
- El código generado "chanca" (sobre-escribe) el código anterior generado.
- La generación de clases las crea sin tomar en cuenta el paquete donde se encuentra.
- Puedes crear Diagramas E-R pero al final no genera nada de SQL.
- No dispone de ingeniería reversa para PHP.


ArgoUML :
ArgoUML es una de esas joyitas libres hechas encajadas perfectas para JAVA, por suerte estos últimos años ha tomado en cuenta a PHP y su capacidad orientación a objetos y tenemos esta gran herramienta para PHP. Ahh!!...Por cierto esta es la que uso.

La generación de código para PHP 5: Excelente *****
Tiene la capacidad de generar código PHP 5 y seguir desarrollando paralelamente (no chanca el código), dispone de unas etiquetas de comentario que evitan la sobre-escritura de métodos. La generación de código la realiza usando la técnica de clases de nombres largos: presentacion_UCCcontrollers_gestionarPrestamo.php
Aunque ya estamos a puertas de los namespaces de PHP 5.3 y PHP 6, aún sigue siendo la única "forma simple" de dar pertenencia de una clase a una paquete.

>> Corre en Linux y en Windows <<

Desventajas:

- Es muy pesado y requiere de mucha memoria principal.
- Sigue utilizando UML 1.4, la interfaz no es tan agadable ni dispone de íconos para reconocer los estereotipos. (es un problema identificar mis clases controladoras con las de datos).
- Aunque ha mejorado en la última versión, sigo creyendo que su "usabilidad" no es de lo mejor.
- No dispone de Ingeniería reversa para PHP (si la sacan sería un GOL)
- No detecta la composición. No es una desventaja pero te dá más trabajo en crear atributos.


Bouml
BoUML fue una sorpresa después de haberlo testeado hace poco (y haberlo hecho hace 2 años veo su evolución), ahora ya tiene soporte TOTAL para PHP 5 y está orientado al programador. Está diseñado ,y te fuerza a usar la metodología RUP, por ejemplo no puedes crear un diagrama de clases en un "Use case View" donde solo se debe crear casos de uso. Es ligero, usa UML 2.0 y tiene íconos para los estereotipos. Interesante :)

La generación de código para PHP 5: Excelente *****
Tiene la capacidad de generar código PHP 5 y también seguir desarrollando paralelamente (no chanca el código), tiene un generador de métodos getter y setters (es lo mejor, me ahorro harto trabajo) e inclusive te genera código PHP5 en los métodos.

Viene con un aplicativo para la gestion de proyecto colaborativo y la gestión de cambios en los diagramas que creamos. (excelente aportación)
Tiene una opción de ingeniería reversa para PHP 5. Muy buena. (Con ésto hace este programa de los libres único por ahora)

Detecta la asociación de composición , crea un atributo en la clase cliente.

Desventajas:
- El código aún no dispone de una técnica para dar pertenencia de una clase a un paquete, pero tal vez halla un truco por allí (que no he logrado modificar) para generar con técnica de "nombres largos" de clase.
- No tiene un generador SQL para el modelo de datos.
- Increible, no encontré otra desventaja.. jeje
- Otra desventaja es que a pesar que se puede poner el estilo de documentacion de PHPdocumentor no detecta los returnValue o los parámetros de un método para generarlos en el comentario. Es posible digitarlos manualmente pero sería muy laborioso


Después hay otras herramientas como: umbrello (**) (su interfaz es básica y su generación de código también) y claro el Rational Rose (**)... que podemos decir que es el mejor en RUP y UML ... PERO....
para genera código PHP sólo conozco el PHP4Rose: genera sólo codigo PHP 4 y es pésimo.


CONCLUSIONES:

* Aplicaciones como Rational Rose para PHP está descartado (sin analizar el costo de licencias).
* ArgoUML es bueno pero se requiere capacitación y mucha RAM en tu PC.
* Ningúna herramienta Case propone aún los namespaces de PHP 5.3 ó PHP6 y eso que está a la vuelta de la esquina.

* A pesar de que aún utilizo ArgoUML, me empeñaré en seguir investigando el bouml que está demasiado interesante. Cuando bouml tenga la opción de cambiar el "formato de nombre de una clase" (o me digan como hacerlo) y disponga de la generación de un modelo de datos (SQL) estaremos frente a LA HERRAMIENTA case para PHP.

Aún para mis proyectos seguiré usando ArgoUML y en mis tiempos libres seguir investigando boUML.

4 comentarios:

Unknown dijo...

Excelente post. Me convenciste de usar el BOUML sin ser el que usas de cabecera. Me gustó.

ErickPM dijo...

El BOUML no es de uso libre como el Argos, no pasa nada :\

Pedro Jimenez dijo...

Como hacer modelado e ingeniería inversa de php. Lo explicamos paso a paso mediante herramientas open sorce.
http://www.proyectosphp.org.es/?q=es/node/89

Francisco Royo Velasco dijo...

He probado ArgoUML y la verdad que he salido bastante decepcionado. Para empezar la usabilidad se muy pobre, no puedo hacer copy/paste de elementos de los diagramas de secuencia por ejemplo. No hace scroll con la rueda de ratón. El drag & drop de cualquier elemento cuando tienes que llevarlo a otro sitio y por el camino tienes que pasar por encima de algún otro elemento es realmente tedioso, pues se te queda lo que estás moviendo 'pegado' sobre el otro elemento y resulta dificil trabajar así.
Para colmo he guardado un proyecto con dos diagramas de secuencia bastante sencillitos y alehop! vuelvo a abrirlo y me arroja una org.argouml.model.XmiReferenceException, no tengo forma de recuperarlo así que he perdido en lo que estaba trabajando.

Lo lamento mucho pero tengo que recomendar encarecidamente que no usen ArgoUML, al menos la versión 0.34, hasta que puedan garantizar que no existe riesgo de pérdida de datos.

Saludos.