Ingeniería de software

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 1Articulo 2Articulo 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 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, CompositeFacadeCommandStrategyTemplate 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: