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.