Objetivos del curso
General: Aprender y aplicar los conceptos fundamentales de arquitectura de software y diseño arquitectónico en la ingeniería de software implementando las diferentes técnicas, principios y patrones de diseño.
Específicos:
- Diseñar modelos de software aplicando diferentes técnicas y principios que cumplan con los requerimientos del proyecto.
- Definir la arquitectura de alto nivel y detallada de un proyecto de software
- Usar herramientas CASE en el diseño de modelos de software.
- Construir, distinguir e interpretar correctamente modelos de dominio y modelos de solución.
- Aprender UML en la notación para el diseño de software.
- Comprender los patrones de asignación de responsabilidades como base de los diseños de software.
- Conocer diferentes tipos de patrones creacionales, estructurales y de comportamiento para aplicar en los proyectos de software.
- Reconocer el ciclo de vida de la arquitectura de software.
Metodología del curso
Cada concepto de diseño será entregado a través de la experimentación. El objetivo será que las personas descubran por si mismas los beneficios de aplicar practicas y procesos de diseño y desarrollo de software.
La metodología es la siguiente:
- Partimos de un problema o necesidad.
- Las personas empiezan a desarrollar sin ninguna restricción
- Una vez terminado el desarrollo se enseñan practicas, procesos y herramientas que permitan mejorar el diseño del código desarrollado.
- Las personas deben refactorizar el código construido inicialmente aplicando los conocimientos adquiridos.
- Al terminar el refactor se mira en retrospectiva y se analiza como los nuevos conocimientos mejoraron o no el código construido.
A tener en cuenta durante la ejecución del curso
- Toda implementación se deberá hacer en Pair Programming.
- Cada persona deberá crear una cuenta en Git-hub, en esta deberá subir todo el código fuente construido.
- Una vez completadas las fases "Code as You Know" y "Refactor applying concepts learned", se deben marcar Tags en Git-hub. Esto tiene como objetivo poder comparar las versiones de código en el tiempo y evaluar la mejora continua.
- La selección del IDE de desarrollo es decisión de cada persona.
Desarrollo del curso
1. Proceso de diseño de software utilizado como referencia durante el curso
¿Como escribir código mantenible?
2. Coding Kata Procesamiento de Ordenes de Compra Ver Aqui.
Actividad #1: Se debe construir una aplicación en Java (Sin BD, ni GUI), que satisfaga funcionalmente las necesidades descritas en la Kata. No se deben tener en cuenta consideraciones especiales para el desarrollo. La implementación se debe hacer en Pair Programming.
3. Code Smells Ver Aquí
Actividad #2 Leer el articulo de Code Smells y generar un listado de malas practicas que hayan sido utilizadas en el código de la Actividad #1.
4. Refactoring Patterns - Martin Fowler Ver Aqui
Actividad #3 Leer los siguientes patrones de refactor y aplicarlos al código construido en la Actividad #1. El objetivo será eliminar los smells que se hayan identificado en la Actividad # 2:
Add Parameter
Encapsulate Field
Extract Class
Extract Method
Extract Module
Hide Method
Move Field
Move Method
Parameterize Method
Rename Method
Replace Magic Number With Symbolic Constant
Replace Parameter With Method
Self Encapsulate Field
Decompose Conditional
Actividad #4 Crear la interfaz gráfica de usuario integrada con el código construido hasta la Actividad #3. La Kata de procesamiento de Ordenes de Compra. deberá quedar completa.
5. Análisis estático de código
Actividad #5 Leer sobre análisis estático de código.
Actividad #6 Realizar el análisis estático sobre todo el código construido hasta la Actividad #4. El siguiente es un instructivo que muestra el proceso de instalación de las herramientas de análisis estático de código en NetBeans Ver Aqui
¿Como aumentar la probabilidad de que el software impacte positivamente al negocio?
6. OOAD - Object Oriented Analisis And Design
- Modelo Conceptual
- Modelo de Diseño
Actividad #7 Leer los siguientes artículos sobre OOAD. Articulo 1, Articulo 2, Articulo 3
7. UML
Actividad #8 Investigar sobre UML, principalmente sobre diagramas de clase, componentes y las relaciones entre elementos del lenguaje (Agregación, Composición, Asociación, Generalización)
8. Principios de diseño orientado a Objetos
Actividad #9 Leer sobre los siguientes conceptos: Abstracción, Modularidad, Encapsulamiento, Generalización, Polimorfismo y Principio de única responsabilidad de SOLID. Modifique el modelo conceptual realizado en clase aplicando los conceptos leídos. ¿Como cambió el diseño?
9. Patrones de Arquitectura - MVC
Actividad #10 Leer sobre el patrón de diseño MVC .
Actividad #11 Realizar el diseño de la Kata usando como referencia el patrón de diseño MVC.
Actividad #12 Refactorizar el código fuente construido hasta el momento utilizando como referencia el diseño creado en la actividad 11.
Actividad #13 (Momento de cuestionarse) Realice una presentación ante sus compañeros (Por grupo) donde muestre la evolución en aprendizaje hasta el momento. Esta debe mostrar ¿Como ha evolucionado el código en el tiempo?. Mostrar imágenes que muestren como han variado las clases y ¿Por que variaron de esta manera?
Actividad #14 Crear el acceso a datos integrado con el código construido hasta la Actividad #12. La Kata de procesamiento de Ordenes de Compra. deberá funcionar completamente integrada con la base de datos.
10. Arquitectura de software - Drivers Arquitectónicos
Actividad #15 Leer sobre atributos de calidad y drivers Arquitectónicos. Pueden usar estos documentos en internet como punto de referencia. Articulo 1, Articulo 2, Articulo 3. Debe identificar y documentar los Drivers Arquitectónicos de la kata "procesamiento de Ordenes de Compra"
11. Arquitectura de software - Proceso de diseño Arquitectónico
Actividad #16 Leer el siguiente post sobre contextualización a la arquitectura de software: Goal Driven Design
Actividad #17 Leer sobre 4+1 vistas, realizar y documentar el diseño de arquitectura de la kata "procesamiento de Ordenes de Compra".
Actividad #18 Leer sobre Attribute Driven Design (ADD)
Actividad #19 Leer los siguientes artículos sobre 4+1 vistas y proceso de definición arquitectónica: Articulo 1 y Articulo 2
Actividad #20 Leer el capitulo 5 del libro Software Architecture in Practice, Second Edition de Len Bass, Paul Clements, Rick Kazman. Especificar las tácticas arquitectónicas que le permitirán satisfacer los drivers arquitectónicos analizados para la Kata de procesamiento de facturas
Actividad #21 Leer el capitulo THE ARCHITECTURE DESIGN PROCESS (Pag 27 a 39) del libro N-Layered Domain-Oriented Architecture Guide With .NET 4.0. Puede verlo aquí
Actividad #22 Realizar el diseño de arquitectura de la Kata "procesamiento de Ordenes de Compra". y crear el documento de arquitectura de software utilizando como base el template. Ver aqui
Actividad #23 Estudiar los siguientes patrones de diseño: Adapter o Wrapper, Composite, Facade, Command, Strategy, Template Method.
Actividad #24 Estudiar los patrones de diseño GRASP, y los principios SOLID
Actividad #25 Adicionar una sección al DAS en la que se especifique claramente como cada uno de estos puede mejorar sus atributos de calidad. También debe complementar la vista de desarrollo aplicando al menos uno de los patrones leídos.
Imagen tomada de http://coronet.iicm.tugraz.at/sa/s5/sa_arch.html |
Imagen tomada de http://coronet.iicm.tugraz.at/sa/s5/sa_arch.html |
Imagen tomada de http://coronet.iicm.tugraz.at/sa/s5/sa_arch.html |
Retrospectivas Ver aqui.
Referencias Bibliográficas
- Ingenieria de software, un enfoque practico. Autor: Roger S Pressman. Editorial: Mc Graw Hill
- Ingenieria de software orientada a objetos con UML java e internet. Autor: Alfredo Wetzenfeld. Editorial: Thomson
- The Unified Modeling Language Reference Manual. Autor: James Rumbaugh, Ivar Jacobson, Grady booch. Editorial: Addison Wesley
- Software architecture in practice 3rd edition. Autor: Lean Bass, Paul clements, Rick Kazman. Editorial:
- PRESSMAN, Roger S. Ingeniería del Software: Un enfoque práctico. 5ta Ed. Santa Fé de Bogotá, Mc. Graw Hill.
- MEYER, Bertrand. Construcción de Software Orientado a Objetos. 2da Ed. Madrid: Prentice Hall, 1999. 1248 p
- KIMMEL, Paul. Manual de UML. Ed.: Mc Graw Hill
- PFLEEGER S., Ingeniería de Software, Teoría y Práctica - Primera Edición - Editorial Prentice Hall - 2002.
- RUMBAUGH J., Jacobson I., Booch G., El Lenguaje Unificado de Modelado. Manual de Referencia - Editorial Addison-Wesley - 2000.
- YOURDON E., Análisis Estructurado Moderno - Primera Edición - Editorial Prentice-Hall - 1989.
- SOMMERVILLE, Ian. Ingeniería de Software. Addison Wesley. 2002.
- BRUEGGE Bern, DUTOIT Allen H., Ingeniería de Software Orientado a Objetos. Editorial Prentice Hall. 2002
- IEEE, SWEBOK: Guide to the Software Engineering Body of Knowledge. 2004
Links de interés
http://www.bredemeyer.com/
No hay comentarios:
Publicar un comentario