Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en...

20
13/11/2010 1 Extreme programming, TDD y patrones de diseño Abrahan Romo Ramos Miguel Guillen IBM Guadalajara. Concurso regional de programacíon. ITESO Guadalajara y ACM 2010. Extreme Programming, TDD y Patrones de Diseño. | Software Development Octubre 2010 ITESO Agenda ¿por qué analizar? ¿por qué diseñar? Las herramientas: Las razones y las estadísticas: Experiencia personal de desarrollo. Referencias y links de utilidad. Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 2010 2

Transcript of Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en...

Page 1: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

1

Extreme programming, TDD y patrones de diseño

Abrahan Romo RamosMiguel Guillen

IBM Guadalajara.

Concurso regional de programacíon.

ITESO Guadalajara y ACM 2010.

Extreme Programming, TDD y Patrones de Diseño. | Software Development Octubre 2010

ITESO

Agenda

¿por qué analizar? ¿por qué diseñar?

Las herramientas:

Las razones y las estadísticas:

Experiencia personal de desarrollo.

Referencias y links de utilidad.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20102

Page 2: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

2

ITESO

¿Por qué analizar? ¿Por qué diseñar?

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20103

ITESO

¿por qué analizar? ¿por qué diseñar?

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20104

Page 3: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

3

ITESO

¿por qué analizar? ¿por qué diseñar?

Antes el desarrollo de sistemas era un propuesta al azar.

Los desarrolladores hacían con frecuencia análisis y diagrama que solo ellos entendían y que excluían al cliente de toda opinión. Y se deseaba de todo corazón que el producto cumpliese con lo que el cliente deseaba.

O de plano no hacían análisis profundo sobre el problema a resolver.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20105

El cliente no participaba y no tenia voz ni voto sobre el proceso de desarrollo de un producto.

ITESO

¿por qué analizar? ¿por qué diseñar?

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20106

Page 4: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

4

ITESO

¿por qué analizar? ¿por qué diseñar?

El éxito de un proyecto se debe a que sirve como enlace entre quien tiene la p y q qidea y el desarrollador.

Prácticamente en todas las áreas del ámbito de las ciencias primero se concretan los requerimientos, y luego estos de diseñan, y solo hasta entonces se avanza a la etapa de implementación.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20107

¿Si en todas las áreas del ámbito de las ciencias se procede así, porque no es común en la ciencia de la computación?

ITESO

¿por qué analizar? ¿por qué diseñar?

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20108

Page 5: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

5

ITESO

¿por qué analizar? ¿por qué diseñar?

Los lenguajes de modelado son de diseño, no de programación. Por lo tanto i d di t d l i l j d ióson independientes de cualquier lenguaje de programación.

La comunicación de la idea es de suma importancia. Son un puente, un enlace entre quien tiene la idea o una necesidad y entre quien materializa dicha necesidad.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 20109

La clave esta en la organización de la información que sea de tal manera que le sirva a analistas, clientes, desarrolladores, arquitectos

ITESO

Las Herramientas

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201010

Page 6: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

6

ITESO

UML Apache Ant

El ciclo completo de Desarrollo de software

Junit

XML

Test DrivenDevelopment

Extreme

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201011

XML

Eclipse

ExtremeProgramming

Patrones dediseño

ITESO

Las herramientas

UML. Es un lenguaje de modelado de datos independiente de los lenguajes de implementación Es un mecanismo de comunicación a todos los involucrados en unimplementación. Es un mecanismo de comunicación a todos los involucrados en un proyecto.

Patrones de diseño. Cada patrón de diseño es una solución abstracta hecha con elementos básicos de la programación, herencia, polimorfismo, encapsulamiento, abstracción y OOP.

NCSS. Herramientas que contabilizan el número total de líneas de código fuente que son ejecutables. También provee el análisis de complejidad ciclomatica.

Cobertura. Provee en términos de porcentaje el código tocado por los casos de

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201012

prueba para el código fuente. También provee análisis de complejidad ciclomatica.

Extreme programming. Es una disciplina de desarrollo de software basada en valores de simplicidad, comunicación y retroalimentación.

Junit. Es un framework para la creación de casos de prueba.

Page 7: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

7

ITESO

Historia de los patrones de diseño

Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977.

En 1987, Kent Beck y Ward Cunningham iniciaron experimentos con la idea de aplicar los patrones de arquitectura a cuestiones de software. Presentaron sus resultados en la OOPSLA de ese año. Posteriormente, Beck, Cunningham y otros continuaron estos trabajos.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201013

Los patrones de diseño ganaron popularidad dentro del mundo de la computación con el nacimiento del libro Design Patterns: Elements of Reusable Object-Oriented Software publicado en 1994 (Gamma et al).

ITESO

El catalogo

Abstract Factory (87) Iterator (257) y ( ) Adapter (139) Bridge (151) Builder (97) Chain of

Responsibility (223) Command (233) Composite (163) Decorator (175)

F d (18 )

( ) Mediator (273) Memento (283) Observer (293) Prototype (117) Proxy (207) Singleton (127) State (305) Strategy (315) Template Method

(325)

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 2010

Facade (185) Factory Method (107) Flyweight (195) Interpreter (243)

(325) Visitor (331)

Page 8: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

8

ITESO

Organización del catalogo

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 2010

ITESO

Razones para usar patrones de diseño.

1 El di ñ i t d bj t difí il l l di ñ l t1. El diseño orientado a objetos es difícil, lo es aun mas el diseñar elementos de software reusable.

2. Una vez que se identifican los objetos clave, se separa en clases y se le da granularidad, se definen interfaces y herencia. Finalmente se establece una relación entre ellos.

3. Cuando se diseña se hace pensando en un problema en especifico, pero al mismo tiempo lo suficientemente general para manejar futuros requerimientos y problemas Además se minimiza el rediseño

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201016

requerimientos y problemas. Además se minimiza el rediseño.

4. Los programadores experimentados dicen y saben que encontrar o diseñar elementos de software reusables y flexibles es difícil y casi imposible la primera vez. Antes de terminar un diseño se itera tanta veces como sea necesario hasta obtener la plantilla deseada.

Page 9: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

9

ITESO

Razones para usar patrones de diseño.

5. Los programadores experimentados hacen buenos diseños. Mientras los programadores nuevos están vueltos locos por las opciones disponibles para creas sus diseños y caen una y otra vez en las mismas tendencias que p y y qno son sanas para el diseño y repiten los mismos errores una y otra vez. Toma tiempo aprender a crear buenos diseños

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201017

ITESO

Razones para usar patrones de diseño.

6. Los expertos saben que no se debe resolver un problema desde la raíz en una sola vuelta. En lugar de ello separan el problema en partes mas pequeñas y buscan para cada uno de ellos soluciones que les han f i d l d C d t b l ió lfuncionado en el pasado. Cuando encuentran una buena solución, la usan una y otra vez. Esto es en parte lo que se conoce como experiencia y lo que los convierte en expertos.

7. Entonces se da paso a los patrones de diseño, pues se encuentran soluciones recurrentes para diversos problemas. Estos patrones proveen flexibilidad, elegancia, y reusabilidad. Y entonces se pueden crear diseños basados en experiencias previas. Esto evita tener que descubrir el hilo negro una y otra vez.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201018

8. Todos sabemos el valor de la experiencia. ¿cuantas veces se tiene la sensación de que algo ya lo hemos hecho en el pasado? Y pensamos que si tan solo tuviéramos por ahí escritos en algún lado los detalles con los cuales dimos la solución.

Page 10: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

10

ITESO

Razones para usar patrones de diseño.

9. El propósito de un patrón de diseño es recordar la experiencia previa a la hora de enfrentar problemas y darles solución. La idea es capturar la experiencia de alguna manera, darle nombre, y entenderla sin tener que p g , , y qexplicarla una y otra vez..

10.Los patrones de diseño hacen fácil el camino a la hora de hacer diseño y crear arquitecturas. Saber técnicas ya probadas hacen mas accesible el conocimiento a nuevos programadores. Ayudan a escoger soluciones que hacen que un sistema sea mas fácil de mantener y a no comprometer la calidad.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201019

ITESO

Razones para usar patrones de diseño.

11.Ningún patrón describe nuevos diseños o soluciones no probadas con anterioridad.

12.Todo ellos están documentados. Son parte de la jerga computacional que usan los programadores expertos a la hora de comunicarse.

13.Están catalogados para problemas específicos.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201020

Page 11: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

11

ITESO

Razones para usar patrones de diseño.

14.Los patrones de diseño capturan solo una parte de lo que un experto conoce.

15.No son específicos o están atados a un dominio en particular.

16.No dicen como hacer código, o como escribir drivers.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201021

ITESO

Las razones y las estadísticas

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201022

Page 12: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

12

ITESO

Backup - TDD Project at IBM Device Drivers

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201023

ITESO

TDD Project at IBM Device Drivers (continued)

Legacy7th Iteration

New1st Release

T Si (D l ) 5 9Team Size (Developers) 5 9

Team Experience (Language and Domain)

Experienced SomeInexperienced

Code Size (KLOC)New; Base; Total

6.6; 49.9; 56.5 64.6; 9.0; 73.6

Language Java/C++ Java

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201024

Technical Leadership Shared resource Dedicated coach

Collocation Collocated Distributed

Unit Testing Practice Ad hoc TDD

Page 13: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

13

ITESO

Automated build and test machines To guarantee that all unit tests are run by all members of the team, we set up automated build and test system in Guadalajara.

Extract

CMVC

library

LinuxWindows

Testing Environment

Developer

Report

Check out-in

Compile, create the

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201025

pbuild, run the test and generate the report

Daily, these systems extract all the code from the library build and run all the unit tests. After each automated build/test run, an email is sent to all members of the teams listing all the tests that successfully ran and any errors found. This automated build and test served us as a daily integration and validation for the team.

JavaPOS 1.9 numbers:• Automated Uts : 6750

ITESO

Quality Results – Legacy (ad hoc UT)

7.0 error/KLOC as we enter regression vs. 5.5 error/KLOC projection

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201026

Page 14: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

14

ITESO

Quality Results – New (TDD)

3.7 error/KLOC as we enter regression vs. 4.0 error/KLOC projection

Better than 40% reduction compared to old project defect densityp p j y

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201027

ITESO

“Tareas” basicas de Apache Ant.

Crear directorios lógicos, de código fuente, directorio base y jars, por ejemplo.

Crear directorios físicos a disco duro a partir de los directorios lógicos.

Compilar el fuente y decidir el destino una vez compilado.

Crear archivos “.jar”

Borrar el contenido del

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201028

Borrar el contenido del directorio base y sus subdirectorios.

Page 15: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

15

ITESO

El framework “JUnit”

Ejecuta una lista de casos de prueba.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201029

ITESO

Salida del target “test-html”.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201030

Page 16: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

16

ITESO

Salida del target “loc”.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201031

ITESO

Code coverage con “Cobertura”

Características de Cobertura:

• Class coverage - total de clases en el paquete.

• Line coverage – El porcentaje de líneas de código fuente que fueron

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201032

g p j g qtocadas por casos de prueba.

• Branch coverage – porcentaje de bifurcaciones (decisiones) que fuerontocados por los casos de prueba.

• Complexity - La complejidad de todos los métodos en todas las clases.

• Uso de barras Rojo/Verde para facilitar la lectura.

Page 17: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

17

ITESO

Cuando se selecciona n paq ete este

Code coverage con “Cobertura”

un paquete, este muestra la cobertura de pruebas por clase dentro del paquete.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201033

Cuando se selecciona una clase, esta muestra su código fuente e indica su cobertura hecha por los casos de prueba.

ITESO

Experiencia personal de desarrollo.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201034

Page 18: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

18

ITESO

Lo que piensan los desarrolladores

I've never used unit testing in this way, I was very impressed in the use of this practice, how can help to avoid problem injection, In a project like Device Drivers where there are thousands of LOCs can be easy to change code that can impact some other functionality with this meaningful help we know if we did somethingsome other functionality, with this meaningful help we know if we did something wrong every day because of email build notification. Personally I hardly recommend the use of this good practice (I could say this should be a must) of unit testing

My impression at the first moment that I began to start to use this practice was: "This is going to be a loss of time", after some time I realized that is a powerful tool, and if learn how to use it, you code is going to be more consistent and almost free of errors

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201035

free of errors.

It's an innovative technique, having build machines downloading the latest changes made to the code, and running all the tests, makes it easier for everyone, our code is cleaner, and there are less defects opened during test phases

ITESO

Referencias

[Beck99] Beck, K. “eXtreme Programming: Embrace Change”, Addison Wesley, 1999.

[Beck02] Beck, K. “Test-Driven Development: By Example” Addison Wesley, [ ] , p y p y,2002.

[GeoWil03] George, Boby and Williams, L., “An Initial Investigation of Test-Driven Development in Industry”, ACM Symposium on Applied Computing 2003.

[LarBas03] Larman, C. and Basili, V., "A History of Iterative and Incremental Development," IEEE Computer, to appear June 2003

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201036

[MulHag02] Muller, M. M. and Hagner, O., "Experiment about Test-first Programming," presented at Conference on Empirical Assessment in Software Engineering (EASE), 2002.

(Many more books and articles on the subject)

Page 19: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

19

ITESO

Enlaces Eclipse project

http://www.eclipse.org/ Apache ant tool

http://ant.apache.org/JU it f k JUnit framework

http://www.junit.org/index.htm

Different frameworks for xUnit

http://www.xprogramming.com/software.htm JavaNCSS, A source measurement suite for Java

http://www.kclee.de/clemens/java/javancss/ Cobertura, A free Java tool that calculates the percentage of code accessed by tests.

http://cobertura.sourceforge.net/index.html

Different tools to calculate Java coverage

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201037

http://java-source.net/open-source/code-coverage Test Driven Development quick reference guide and rhythm

http://www.testdriven.com/modules/mydownloads/

UMLhttp://www.uml.org/

ITESO

Sección de preguntas.

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201038

Page 20: Extreme programming, TDD y patrones de diseño · Historia de los patrones de diseño Son en realidad un concepto de arquitectura de Christopher Alexander en el año de 1977. En 1987,

13/11/2010

20

ITESO

¡ Gracias !

abrahan romo@gmail com

Extreme Programming, TDD y Patrones de Diseño. | Software Development. Octubre 201039

[email protected]@hotmail.com