Download Desarrollo Software Gran Escala

Document related concepts
no text concepts found
Transcript
Desarrollo Software Gran
Escala
Herramientas de Desarrollo
(Parte 3: Generadores y Constructores)
Diferentes tipos de herramientas
•
•
•
•
•
•
Controladores de versión
Ambientes de desarrollo
Pruebas y Depuración
Documentación
Generadores de código
Constructores
Generadores de código (CG)
• Diferentes Lenguajes, Arquitecturas y
frameworks soportados
• Algunos pocos generan full aplicación
• Diferentes fuentes:
– Desde UML
– Desde un MER
• Ambiente gráfico
• Posibilidad de ingeniería inversa
Caso de Ejemplo (Java)
• Se desea generar una aplicación con acceso a una BD
por medio de EJB.
• De tienen dos equipos: Uno para la capa de BD y otro
para la GUI.
• Primero se construye la capa de BD que incluye la lógica
• Los EJB’s se construyen desde cero
Caso de estudio: Construcción de la
capa de BD
• El modelo esta representado en un archivo XML (generado desde
una herramienta UML)
• El generador toma el archivo XML como entrada el cual contiene las
tablas y campos de la BD.
• Lo anterior alimenta una plantillas donde se define como generar
EJB’s para la BD objetivo, incluyendo los SQL necesarios (técnica
conocida como Model-Driven Generation)
Caso de estudio: Generación de
páginas de prueba
• Se incluyen unas plantillas para generar las paginas JSP
de pruebas que permiten acceder a los EJB’s
• Las páginas de prueba observan el archivo SQL de
inicialización de la BD
• Algunas de estas páginas se llevan a producción
Caso de estudio: Generación de la GUI
• Se utiliza un generador especifico para la GUI
• Se generan los JSP y la interfaz SWING
• Se parte de una definicion manual de las interfaces
Caso de estudio: Como se genera la
GUI
• Se utiliza las definiciones de entidades (las
mismas de los EJB’s) junto a la definición
manual de la GUI como entradas al generador
Caso de estudio: Se agrega la
generación de GUI
• Se integra el generador de GUI, el cual toma parte de su
información del generador de BD
• Construye tanto la parte Web (JSP) como la de escritorio (Swing)
Beneficios de CG para ingenieros
• Calidad:
– Grandes volumenes de código escrito a mano tiende a una
calidad inconsistente
– El uso de plantllas estandariza el proceso por lo que las mejoras
al código se pueden aplicar consistentemente a través de todo
el código base
• Consistencia:
– El código construido con un generador es consistente con sus
API’s y el nombramiento de variables facilitando su uso y
entendimiento
– Un cambio en una nombre de una tabla en un solo punto
permite regenerar el esquema, la capa de objetos, la
documentación y demás artefactos de desarrollo
Beneficios de CG para ingenieros
(2)
• Más tiempo para el diseño:
– Se puede dedicar mas tiempo para razonar sobre el
uso de las API’s y del framework
– No obstante, el tiempo ganado debe ser utilizado
para reescribir las plantillas y integración de partes
generadas consistentemente con la arquitectura, si
es el caso del generador utilizado.
• Consistencia con la Arquitectura:
– CG encauza a los programadores para mantenerse
dentro de la arquitectura
• Documentación:
– Apoya las labores más tediosas de documentación y
su mantenimiento
Buenas practicas para CG
• Preste atención al código escrito a mano:
– Puede existir codificación especial en algunos casos que no es posible
hacerle ingeniería
• Entienda el framework para el cual está generando código
– Una forma de entenderlo es escribiendo código a mano para dicho
framework
• Haga control al código fuente:
– Es muy importante proteger él codigo escirto a mano a través de un
controlador de versiones robusto
• Considere el lenguaje para el CG:
– El generador y el código generado no necesariamente debén estar bajo
el mismo lenguaje
• Integre el generador en todo el proceso de desarrollo
– Considere integrarlo a su ambiente de desarrollo (IDE)
Algunos CG populares
•
•
•
•
•
•
•
•
•
Oracle Application Express (Oracle/Java)
CodeSmith (.Net/C#)
Codify (.NET/C#)
Velocity (Java)
Symphony (PHP)
UML2PHP (PHP)
Code Charge (PHP, Java)
XDoclet (Java/XML)
Acceleo (MDA, multiples plataformas)
Constructores
• Son herramientas de apoyo a la generación o
automatización de construcción y compilación
de código
• Su finalidad es construir archivos ejecutables o
programas, entendibles por la plataforma sobre
la cual se ejecuta resolviendo dependencias a
otros archivos (bibliotecas, API’s, etc.)
• Además son utilizados para la automatización
de otras tareas como la creación de
documentación, mantenimiento del sistema
(borrado de archivos temporales, por ejemplo),
etc.
Caso de Estudio: Apache Ant
• Ant es un proyecto de código abierto de la Apache
Software Foundation.
• Es una herramienta usada para la realización de tareas
mecánicas y repetitivas, normalmente durante la fase de
compilación y construcción (build).
• Es similar a Make pero sin las engorrosas dependencias
del sistema operativo.
• Ofrece la ventaja de no depender de las órdenes de
shell de cada sistema operativo, sino que se basa en
archivos de configuración XML y clases Java para la
realización de las distintas tareas, siendo idónea como
solución multi-plataforma.
• Esta hecha en Java
Ejemplo Ant: “Hello World”
• En un archivo build.xml se definen tres objetivos
- clean, compile y jar, cada uno de los cuales
tiene una descripción asociada y las
dependencias entre acciones para lograrlo
• El archivo se ejecuta con una línea de
comandos invocada con el ejecutable de Ant y
una serie de parametros opcionales para ajustar
la compilación según lo deseado (por ejemplo,
solo limpiar, o solo compilar, etc.)
Ejemplo Ant: Archivo build.xml
Caso de Estudio: Maven
• Es una herramienta software para la gestión de
proyectos Java de la Apache Software
Foundation.
• La versión 1 se basá en un fichero de
configuración en XML (project.xml) y una serie
de plugins,
• Esta herramienta permite:
– Compilar el proyecto Java
– Ejecutar los tests unitarios
– Generar paquetes (jars, wars, ears o distribuciones
en zip)
– Generar reportes de desarrollo.
Caso de Estudio: Maven (2)
• La versión 2 usa también un fichero de configuración en
XML llamado pom.xml.
• Su funcionalidad es parecida a Apache Ant pero con la
diferencia que trata de forma automática las
dependencias del proyecto.
• Una de las más importantes características es su
actualización en línea mediante servidores de
repositorios.
• Maven es capaz de descargar nuevas actualizaciones
de las bibliotecas de las que depende el proyecto y de
igual manera subir una nueva distribución a un
repositorio de versiones, dejandola al acceso de todos
los usuarios.