SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Test Driven Development, fortalezas y debilidades.                                                                        1


                              Test Driven Development
                                       Fortalezas y Debilidades

                                               Alejandro Araújo
                                                   (alar@bipbip.com.uy)


                                  Informe presentado para la aprobación
                                 del seminario de Software Testing 2007.
                                         Instituto de Computación,
                                       Fac. de Ingeniería. UDELAR,
                                           Montevideo-Uruguay,
                                                   08-2007

                                                    Resumen
Test Driven Development (Desarrollo Dirigido por Pruebas) es una disciplina de diseño
y programación, donde cada nueva línea de código que escribe un programador es en
respuesta a una prueba que ha fallado, también escrita por el programador. Sin ser
definida como una metodología de pruebas se apoya fuertemente en las pruebas
unitarias y también en pruebas de aceptación, basándose en prácticas formalizadas por
Extreme Programming. Ha despertado gran interés tanto en ámbitos académicos como
de la industria, encontrándose en la literatura investigaciones sobre su aplicación,
aunque aún en limitado número, ya sea mediante experimentos controlados o reportes
acerca de su práctica en la industria. En el presente artículo se abordará Test Driven
Development en general, el dominio de su aplicación y se analizarán ventajas y
desventajas de su adopción.

Palabras claves: Test Driven Development, Extreme Programming, Xunit, FIT.


                                       Breve reseña histórica
Existen antecedentes de utilización esporádica de técnicas de tipo Test Driven
Development (TDD) que datan de varias décadas atrás, citándose en particular las
técnicas aplicadas en el proyecto Mercury1 de la NASA en el comienzo de la década de
1960, que incluían la planificación y escritura de las pruebas previo a cada micro
incremento [LB03], pero será a partir de la metodología Extreme Programming [BA04]
[Bec199] [Bec299] que emerge otra vez, difundiéndose a nivel mundial.

Durante la década de 1980 y a comienzos de los 90, Kent Beck y Ward Cunningham
colaboraron y refinaron sus prácticas con el propósito de lograr que el desarrollo de
programas fuera más adaptativo y orientado hacia las personas [Fow05], apoyándose en
ideas y prácticas existentes, con notorias influencias de las ideas de Chistopher
Alexander2, Takeuchi & Nonaka3, Jacobsen4 y otros, las cuales se constituyen en sus

1
  http://www-pao.ksc.nasa.gov/history/mercury/mercury-overview.htm Este proyecto recogió la experiencia del exitoso proyecto
sobre el jet x15 en 1950s y otros, como ser un proyecto para simulación celular en Motorola, 1958.
2
  “The Timeless Way of Building”, Oxford University Press, 1979
3
  “The New Product Development Game”. Harvard Business Review. 1986.
De notoria influencia en otra metodología agil:“Scrum” http://www.controlchaos.com
Test Driven Development, fortalezas y debilidades.                                                              2


raíces [BA04 sec.2] [Bec299] En Marzo de 1996 Kent Beck fue contratado para revisar
el proyecto C3 [BA04 cáp.17] [Fow07] en Daimler Chrysler, el cual fue restaurado
bajo su liderazgo. Esto dio lugar a la formalización de la metodología Extreme
Programming, colaborando estrechamente en dicha formalización Ward Cunningham y
Ron Jeffries.

En el año 1999 Kent Beck publica el libro que puede considerarse como el manifiesto
de la metodología: “Extreme Programming Explained: Embrace Change” [Bec199].
Una de las prácticas fundamentales de dicha metodología, “Test First Programming”, se
sustenta en TDD. En tanto, en el mismo año, Martin Fowler et all publican “Refactoring,
Improving the Design of Existing Code”, [Fow99] considerado una fundamental
introducción a la técnica de reconstrucción de código, práctica que se aplica en TDD.

En Febrero de 2001 se marca otro hito, en Salt Lake City, Utah, al emitirse el
“Manifiesto para Desarrollo Ágil de Software” [MA01] por parte de un grupo de
metodologístas allí reunidos, entre los cuales estaban los proponentes de XP. Test Driven
Development tendrá un gran impulso al ser adoptado por practicantes y defensores de
dichas metodologías, con las cuales comparte entre otras características, el desarrollo
iterativo e incremental en muy breves ciclos y el diseño simple inicial.

En los años 2002 y 2003, se publican libros que tratan directamente sobre TDD,
presentando y formalizando la disciplina: “Test Driven Development by Example”5 por
Kent Beck [Bec02] y “Test-driven development: A Practical Guide“6 por David Astels
[Ast03].
                                                 Características
Test Driven Development (Desarrollo Dirigido por Pruebas) es una disciplina iterativa e
incremental de diseño y programación, donde cada nueva línea de código se escribe en
respuesta a una prueba fallida que el propio programador ha programado. Es parte
medular del desarrollo ágil de código derivado de XP, donde resulta en una práctica
crítica, y de los principios del Manifiesto Ágil. Apoyada en la popularidad de XP, Test
Driven Development ha tenido gran difusión mundial en los últimos años, pudiéndose
adoptarse dentro de cualquier otro tipo de proceso de desarrollo de Software. Su
principal objetivo es obtener “Código limpio que trabaje”7 [Bec02.]

Siguiendo la categorización citada en [Mug03], TDD puede ser aplicado a dos niveles,
a saber:
  • Nivel de micro-iteraciones: En este nivel el desarrollo es guiado por pruebas
    unitarias escritas por el propio programador de la aplicación, donde los pasos son,
    según [Bec02]:
            o     Rápidamente agregar una prueba.
            o     Correr todas las pruebas y comprobar que solo la nueva falla.
            o     Hacer un pequeño cambio.
            o     Correr todas las pruebas y comprobar que pasan satisfactoriamente.
            o     Reconstruir para remover duplicaciones.


4
  “Object-Oriented Software Engineerieng” Addison Wesley. 1994
5
  Es el primer libro sobre el tópico, conteniendo un ejemplo básico, un ejemplo de Xunit y patrones para TDD.
6
  Guía practica con problemas y soluciones reales.
7
  Frase acuñada por Ron Jeffries.
Test Driven Development, fortalezas y debilidades.                                                                       3


     Lo anteriormente expuesto se puede resumir en el diagrama de actividad de la
     figura 1.




                                          Figura 1. Pasos en un ciclo TDD

     Las principales tareas se pueden agrupar en “Escribir y ejecutar pruebas”, “Escribir
     código de producción” y “Reconstrucción”, detallándose a continuación:

     Escribir y ejecutar pruebas:

     La escritura de las pruebas sigue varios patrones identificados y detallados por
     Beck en [Bec02]. En particular se destaca que las pruebas:
          o Son escritas por el propio desarrollador en el mismo lenguaje de
              programación que la aplicación, y su ejecución se automatiza. Esto
              último es primordial para que obtenga un retorno inmediato, indicándose
              que el ritmo de cambio entre prueba-código-prueba esta pautado por
              intervalos de no más de diez minutos. La automatización también permite
              aplicar, en todo momento, la batería de pruebas, implicando pruebas de
              regresión inmediatas y continuas.
          o Las pruebas se deben escribir pensando en primer lugar en probar las
              operaciones que se deben implementar.
          o Deben ser aisladas, de forma que puedan correrse independientemente de
              otras, no importando el orden Este aislamiento determinará que las
              soluciones de código cohesivas y bajo acoplamiento, con componentes
              ortogonales8.
          o Deben de escribirse antes que el código que se desea probar.

     Escritura de código:

     La escritura de código es el proceso por el cual se logra hacer que la prueba
     unitaria pase [Sis06]. La propuesta de Beck contempla cuatro estrategias para salir
     rápidamente de la situación de falla, descritas como patrones en [Bec02]: Imitarlo

8
 En el sentido de independencia entre objetos. En el libro “The Pragmmatic Programmer: From Journeyman to Master” se expone
definición y discusión de la importancia de dicho tópico [HT99 pp.43-45].
Test Driven Development, fortalezas y debilidades.                                                                 4


        (Fake It): Retornar un valor esperado, Triangulación, Implementación obvia y Uno
        a muchos.

        En cuanto a la programación en si, la recomendación, extraída de la aplicación de
        la práctica en XP, consiste en programar por intención (programming by intention)
        lo cual implica no detenerse a pensar en como hacer una cosa, sino en lo que se
        debe hacer [Jef00 cáp.14].

        Reconstrucción (Refactoring):

        En Fowler et all [Fow99] se define la reconstrucción como una practica que
        consiste en mejorar el código existente, de manera disciplinada, sin alterar su
        comportamiento externo, para hacerlo más fácil de entender y modificar. La
        mejora de código se logra mediante la aplicación de una serie de consejos entre los
        cuales de destaca la eliminación de duplicación, la división en segmentos menores,
        la estructuración de manera que resulte más conveniente y la aplicación de las
        ventajas que brinde el lenguaje de programación9. La reconstrucción cumple un rol
        sustancial como complemento del diseño.

        El orden de ejecución de las tareas se resume con la frase
        Rojo/Verde/Reconstrucción (Red/Green/Refactor). En Rojo se está en la etapa en
        que una prueba falló, en Verde en la etapa cuando la aplicación pasa las pruebas.

        A modo de resumen, se establece que TDD a este nivel sigue tres grandes leyes
        [Mar07]:
            o No se escribe código de producción salvo que se hubiera escrito
                 previamente una prueba unitaria que falló.
            o No se escribe más de una prueba unitaria que sea suficiente para fallar.
            o No se escribe más código de producción que el suficiente para pasar la
                 prueba unitaria

     • Nivel Iteración o Funcional: El desarrollo es guiado por pruebas de aceptación.
       Este nivel, mencionado en [Bec02] como ATDD (Aceptance TDD), consta de los
       siguientes pasos:
             o El usuario especifica pruebas antes que las funcionalidades sean
                implementadas.
             o Una vez que el código es escrito la prueba sirve como un criterio de
                aceptación.

        La construcción de las pruebas es también a este nivel un proceso evolutivo, salvo
        que el retorno se da en ventanas de tiempo más extendidas, a nivel de iteración, y
        están fundamentalmente en manos del usuario apoyado por verificadores y
        programadores. Dado que se requiere la automatización de las mismas se lo conoce
        también como “Executable Aceptance TDD” (EATDD) o “StoryTest-Driven
        Development”.

En Test Driven Development las pruebas siempre actúan, en ambos niveles, como
estímulos para el desarrollo; el cual responde para satisfacerlas. Tal como se expresa

9
    En particular referido a facilidades de la programación Orientada a Objetos (p/ej: Polimorfismo y Herencia).
Test Driven Development, fortalezas y debilidades.                                                                            5


en [Bec02] el punto de vista de las pruebas por parte de TDD es pragmático, son estas
el medio utilizado para obtener certezas, vencer los temores y guiar el desarrollo.

Por último se desea resaltar que si bien Test Driven Development se ha definido como
una disciplina de análisis, diseño y programación, no como una disciplina de pruebas:
 “una de las ironías de TDD es justamente no ser una técnica de pruebas” [Bec02]
y sus proponentes hacen especial hincapié en destacar este aspecto, sus prácticas
centrales pueden ser analizadas desde el punto de vista de la prueba de programas,
haciéndose mención a ella además como “Extreme Testing” [Mye04] abarcando las
pruebas unitarias y de aceptación.

                                                Herramientas10
Para utilizar la disciplina se debe contar con herramientas que permitan la
automatización de las pruebas. Beck advierte, en [Bec199] que “una porción de código
sin un programa que la pruebe automáticamente simplemente no existe”. A tales
efectos se han desarrollado marcos para definir y ejecutar las pruebas, tanto unitarias
como de aceptación, ya que la automatización se considera imprescindible. Es lo que
permite la ejecución rápida y eficaz de todas las pruebas existentes con inmediato
retorno al programador, a los efectos de brindarle las necesarias certezas y posibilitar
la prueba de regresión, evitando además el ciclo perverso de más presión, menos
pruebas, más fallas, provocado por el apremio en los plazos [Bec199].

Las herramientas disponibles se especializan en general para pruebas unitarias o
pruebas de aceptación, aunque la división no es estricta y podrían utilizarse en ambos
niveles, ya sea mediante la incorporación de extensiones y bajo ciertas restricciones.
En particular se han desarrollado varios marcos para pruebas open-source, con
participación en su gestación de los proponentes principales del emergente TDD.

Xunit: Familia de marcos para pruebas unitarias

Beck escribió un marco de pruebas para SmallTalk llamado “SUnit”11 [Sun07], que
fue extendido luego por J. Pelrine y otros durante varias iteraciones. Dicho marco se
expone originalmente en el trabajo titulado “Simple SmallTalk Testing: With Patterns”
[Bec98]. Luego de esto, Beck trabajando junto a Erich Gamma, portan el marco a Java
[Jav07] dando lugar a “JUnit” [Jun07]. A partir de allí comienza a ganar aceptación y
amplia difusión, habiendo sido portado a múltiples plataformas y lenguajes de
programación, constituyendo la familia de marcos para pruebas unitarias conocida
como Xunit12 [Jun07].

En la figura 2 se muestra a modo de ejemplo como luce JUnit durante una prueba.




10
   Las herrmientas han sido desarrolladas utilizando TDD.
11
   http://sunit.sourceforge.net/
12
   La X se sustituye generalmente por la primer letra, o primera y segunda letra,del nombre del lenguaje o plataforma a la que ha
sido portado.
Test Driven Development, fortalezas y debilidades.                                                                   6




                                     Figura 2. JUnit TestCalculator [MH04].

El programador utiliza el marco extendiendo o importando sus clases, utilizando
ciertos ‘marcadores’ (tags) para indicar a la herramienta los métodos de prueba, que se
escriben en el propio lenguaje de la aplicación. Mediante sentencias apropiadas tales
como “Assert”, el programador puede validar los datos obtenidos contra los resultados
esperados y notificar de la condición encontrada. Al ejecutarse bajo el marco este
busca utilizando “Reflection”13 dentro de los ejecutables las clases, variables y el resto
de la información que necesita para ejecutar las pruebas, notificando al programador
del resultado de las mismas con un símil del semáforo: Rojo no pasó la prueba, Verde
pasó satisfactoriamente, Amarillo dio alguna excepción. El desarrollador puede
agrupar las pruebas en conjuntos (Suites) para organizar su ejecución en una corrida.

Existe una gran cantidad de extensiones e IDE’s a los que puede integrarse. El sitio
http://www.junit.org [Jun07] está dedicado a los desarrolladores que utilizan JUnit o
algunos de los otros marcos de la familia XUnit.

FIT: Marco para pruebas de aceptación

FIT [FIT107] es una herramienta creada por Ward Cunningham con el objetivo de
automatizar las pruebas de aceptación y mejorar tanto la comunicación como la
colaboración en el desarrollo de software. Según la descripción expresada en el libro
“Fit for Developing Software: Framework for Integrated Tests” [MC05 p.1]:

“FIT (Framework for Integrated Tests) es un poderoso marco de trabajo para pruebas
automatizadas…FIT es especialmente indicado para probar desde una perspectiva de
negocios, usando tablas para representar las pruebas y para reportar los resultados de
la comprobación automática de dichas pruebas. Este formato tabular permite que
personas sin conocimientos de programación escriban casos de prueba y guíen el
desarrollo general del sistema necesario. FIT es un marco de trabajo de propósito
general abierto y fácil de extender para expresar diferentes ordenes de pruebas.”

Es una herramienta de pruebas dirigidas por palabras claves y datos, que implementa los
siguientes pasos:

13
   Proceso de inspección y modificación de un programa en tiempo de ejecución. Concepto desarrollado por Smith,B.C. en:
"Procedural Reflection in Programming Languages", PhD Thesis, Massachusetts Institute of Technology, 1982.
http://hdl.handle.net/1721.1/15961
Test Driven Development, fortalezas y debilidades.                                         7


   •   Lee tablas que contienen información para la prueba y los resultados esperados
       (ejemplos).
   •   Interpreta cada tabla con una clase (conocida como “Fixture”).
   •   Compara el resultado de correr el programa bajo prueba con los ejemplos
       suministrados en las tablas.

Las “fixtures” son escritas por los programadores, en el mismo lenguaje que el código
de producción. Son muy pequeñas porciones de código que se encargan de actuar
como el pegamento entre las “fixtures” suministradas por el marco y las tablas con la
especificación de las pruebas entradas por el usuario. En general extienden las
“fixtures” del marco o ejecutan bajo ellas. Al igual que los marcos Xunit busca
utilizando “Reflection” dentro de los ejecutables las clases, variables y el resto de la
información que necesita para ejecutar las pruebas, notificando al programador del
resultado con similar código de colores.. El desarrollador puede agrupar las pruebas en
conjuntos (“Suites”) para organizar su ejecución en una corrida. Presenta la
particularidad que no se detiene la ejecución de las pruebas ante un error.

Dado que FIT no provee una interfase gráfica para su utilización se han elaborado
extensiones para cargarlo en IDE’s, tales como Eclipse [Ecl07], o se han desarrollado
productos para mantener y organizar los casos de pruebas, de los cuales notoriamente
el más conocido es FitNesse [MMW06].




                                  Figura 3. FitNesse[Adz107].

El sitio http://c2.fit.org [Cun207] esta dedicado a los desarrolladores, usuarios y
verificadores que utilizan FIT y http://www.fitnesse.org [MMW06] a aquellos que
utilizan FitNesse.

                            Fortalezas y Debilidades
Test Driven Development presenta , como toda disciplina, defensores y detractores,
fortalezas y debilidades; En la literatura es posible encontrar mucha información acerca
de estas, especialmente desde un punto de vista teórico. Sería muy útil contar con
abundante evidencia empírica documentada, para obtener criterios objetivos de
valorización y para medir adecuadamente los beneficios y perjuicios de su utilización así
como las mejores prácticas para determinar cuando resulta oportuno adoptarla y para que
Test Driven Development, fortalezas y debilidades.                                        8


tipo de proyectos. Sin embargo, solo recientemente la información de este tipo se está
exponiendo y sumarizando en publicaciones, como ser [Fit207],[JM07],[MM07]
[REA05],[Sin06]] aunque probablemente sea un importante indicio de que se contará
con dicha información en el mediano plazo, partiendo de la base que el resurgimiento y
formalización de la disciplina data de hace pocos años. Dada esta situación se opinará
acerca de algunas de las fortalezas y debilidades desde un punto de vista teórico.

Fortalezas

   •   Al elaborar las pruebas primero el programador no siente que la prueba
       destruye su código. Se invierte la posición, ahora es el código el que salva la
       prueba, convirtiéndose el acto destructivo de la prueba en una carrera de salvar
       obstáculos, paso a paso. Por otra parte, y tal como destacaba Myers en 1975
       [Mey04], siendo las pruebas un proceso destructivo se establece una dificultad
       sicológica desde el inicio para su correcta elaboración por parte de los
       programadores; hecho que TDD ayuda a resolver.

   •   Al elaborar sus propias pruebas no somete su código a pruebas ajenas.
       Nuevamente se pone la carga en la responsabilidad de elaborar buenos
       obstáculos para un código saludable que deberá sortearlos, sin la presión de la
       competencia.

   •   Al automatizar el programador rápidamente obtiene retorno acerca del estado
       de salud de la aplicación. Si introduce mejoras en el código o nuevas
       funcionalidades sabrá rápidamente si pasan todos las pruebas. Esto reduce el
       stress y el temor. La automatización así lograda está escrita en el mismo
       lenguaje en que programa, y acompaña al código. No necesita aprender
       lenguajes nuevos.

   •   En cuanto al método, siguiendo el razonamiento empleado por Mugridge en
       [Mug03], este puede ser explorado desde el valor del método científico como
       una metáfora para Test Driven Development, especialmente al considerar la
       evolución de la teoría y el rol de la reproducibilidad en la experimentación, lo
       que le da un enorme valor a la disciplina. En las siguientes figuras se
       representa dicha metáfora alineando las prácticas con el método científico:




                                    Figura 4. TDD [Mug03].
Test Driven Development, fortalezas y debilidades.                                       9




                              Figura 5 Método científico [Mug03].

       Sin llegar a sostener, al contrario de Mugridge [Mug03], que el resto de los
       métodos están equivocados, es razonable coincidir en la importancia de esta
       correspondencia.

   •   Al prevenir defectos, mediante el diseño continuo de pruebas, extendiendo la
       aseveración de Beizer acerca que el acto de diseñar pruebas es de las técnicas
       más efectivas de prevención de defectos [Bei90].

Debilidades

   •   Los ciclos extremadamente cortos y el cambio entre pruebas y codificación
       de producción hacen que muchos programadores lo sientan como contrario a
       su intuición y desgastante. Exige además disciplina, responsabilidad y coraje.

   •   La imposibilidad de adopción cuando se utilizan lenguajes de programación
       que no cuentan con el marco de pruebas unitarias, o cuando se utilizan
       herramientas de alto nivel (CASE) para la generación de código y asistencia al
       desarrollo que no lo integran. Si bien esto puede resolverse en muchos casos
       con desarrollo propio, no siempre es posible por problemas de costo y tiempo.

   •   Las dificultades o imposibilidad para su adopción cuando se utilizan
       herramientas de alto nivel (CASE) para la asistencia al desarrollo o lenguajes
       de programación que no adhieren al paradigma de la orientación a objetos.

   •   En las pruebas de aceptación, donde es más dificultosa la automatización,
       especialmente pues la prueba puede ser asimilada a un ciclo funcional, lo que
       acrecienta la complejidad de los casos, con altamente probable intervención de
       interfases, especialmente gráficas (GUI), desde las cuales la aplicación
       interactúa con el usuario. También es de particular importancia a este nivel el
       tiempo que transcurre entre la elaboración de la prueba y su ejecución, que ya
       no puede medirse en minutos, sino en días o iteraciones, lo cual quita ritmo al
       proceso y disminuye los aspectos positivos del rápido retorno.
Test Driven Development, fortalezas y debilidades.                                                   10



                                               Conclusiones

Seguramente TDD no se convertirá en la bala de plata14 [Bro95 cáp.16], pero sus
fortalezas parecen aventajar en mucho a sus debilidades, la mayoría de las cuales
radicarían en los problemas que presenta la automatización de las pruebas. De allí la
importancia de investigar, proponer y construir mecanismos que permitan su
utilización en ambientes de desarrollo que usan modernas herramientas de
programación bajo las cuales no es posible aún su utilización. La baja penetración en
Uruguay de esta disciplina es probable que se deba, entre otras razones, a la falta del
marco adecuado relacionado a las herramientas de desarrollo más utilizadas.

Bibliografía
[Adz107] Adzic, G. “Getting Fit with Net. Quick Introduction to Testing .Net Applications with
FitNesse”, Version 0.2, http://www.gojko.net/FitNesse/fitnesse.pdf 02/2007.

[Ast03] Astels, D. “Test-Driven Development: A Practical Guide“,ISBN 0131016490, Prentice Hall,
2003.

[BA04] Beck, K. , Andres C. ““Extreme Programming Explained, Embrace Change 2nd Edition”, ISBN
0-321-27865-8, Addison Wesley, 2004.

[Bec98] Beck, K. “Simple Smalltalk Testing: With Patterns”, First Class Software, Inc.,
http://www.xprogramming.com/testfram.htm, 1998.

[Bec02] Beck, K. “Test Driven Development by Example”, ISBN 032-114653-0, Addison Wesley, 2002.

[Bec199] Beck, K. “Extreme Programming Explained, Embrace Change”, ISBN 201-61641-6, Addison
Wesley, 1999.

[Bec299] Beck, K. “Embracing Change with Extreme Programming”, IEEE Computer, Octubre 1999,
pp. 70-77.

[Bei90] Beizer, B. “Software testing techniques”, 2nd. Edition, ISBN 0-442-20672-0, Van Nostrand
Reinhold Co, 1990.

[Bro95] Brooks, F. P. “The Mythical Man-Month: Essays on Software Engineering”, Anniversary
Edition, ISBN 0-201-83595-9, Addison Wesley, 1995.

[Cun207] Cunningham W. “Welcome Visitors”,”Framework for Integrated Tests”, http://fit.c2.com/
28/01/2007.

[Ecl07] Eclipse Foundation “Eclipse - an open development platform”, http://www.eclipse.org, 2007.

[FIT107] Cunningham W. “Framework for Integrated Test”, http://sourceforge.net/projects/fit/ , 2007.

[FIT207] Deng, C., Wilson P. , Maurer F. “FitClipse: A Fit-based Eclipse Plug-in For Executable
Acceptance Test Driven Development”, Proceedings of the 8th International Conference on Agile
Processes in Software Engineering and eXtreme Programming (XP 2007), Come,
Italy,http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2007/Deng_Wilson_Maurer_FitClipse.pdf ,2007.

[Fow05] Fowler M. “The New Methodology”,
http://www.martinfowler.com/articles/newMethodology.html#xp, 12/2005.


14
     “No Silver Bullet-Essence and Accident in Software Engineering” Brooks F.P.
Test Driven Development, fortalezas y debilidades.                                                 11


[Fow07] Fowler M. “C3”, http://www.martinfowler.com/bliki/C3.html, 06/06/2007.

[Fow99] Fowler M. et all “Refactoring: Improving the Design of Existing Code”, 1st edition, ISBN
0201485672, Addison-Wesley Professional, 1999.

[HT99] Hunt, A. , Thomas D. “The Pragmatic Programmer: From Journeyman to Master”, 1st edition,
ISBN 0-201-61622-X, Addison Wesley, 1999.

[Jav07] Sun Microsystems Java, “Java Technology. The Power of Java” http://www.sun.com/java/,
05/2007.

[Jef00] Jeffries, R. , Anderson A. , Hendrickson, C. , Jeffries, R. E.,
“Extreme Programming Installed”, 1st edition, ISBN 0-201-70842-6 Addison Wesley, 2000.

[JM07] Jeffries, R , Melnik, G. “Guest Editors' Introduction: TDD--The Art of Fearless Programming “
,IEEE Computer, May/Jun 2007, Vol.24, Issue 3, pp. 24-30.

[Jun07] Junit.Org,, Object Mentor, http://www.junit.org/index.htm , 07/2007.

[LB03] Larman, C. , Basili, V. “Iterative and Incremental Development: A Brief History”, IEEE
Computer; Volume 36, Issue 6, pp 47 – 56, Junio 2003.

[MA01] Manifiesto for Agile Software Development, http://www.agilemanifesto.org, 2001.

[Mar07] Martin, R.C. “Professionalism and Test-Driven Development”, IEEE Computer; Volume 24,
Issue 3, pp 32 - 36, May-Jun 2007

[MC05] Mugridge R.,Cunningham W. ”Fit for Developing Software: Framework for Integrated Tests”,
ISBN 0-321-26934-9, Prentice Hall PTR, 2005.

[MH04] Massol, V. , Husted, T. “Junit in Action”, ISBN 1-930110-99-5, Manning Publications Co.,2004.

[MM07] Melnik, G. , Maurer, F. “Multiple Perspectives on Executable Acceptance Test-Driven
Development”, Department of Computer Science, University of Calgary, Canada,
http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2007/XP2007_Melnik_Maurer.pdf, 2007

[MMW06] Martin, R., Martin, M., Wilson, P. "Welcome to FitNesse", http://www.fitnesse.org,
01/12/2006.

[Mug03] Mugridge, R. “Test Driven Development and the Scientific Method”, Department of Computer
Science,University of Auckland,New Zealand,
http://agile.openmex.com/agile2007/2003/files/P6Paper.pdf, 03/2006.

[Mye04] Myers G. “The Artof Sotware testing, 2nd edition”, ISBN 0-471-46912-2, John Wiley & Sons
Inc., 2004.

[Rea05] Read, K. “Supporting Agile Teams of Teams via Test Driven Design”, Master Thesis,
Departament of Computer Science, University of Calgary, Calgary, Canada,
http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2005/Read2005.pdf 02/2005

[Sin06] Siniaalto, M. “Test driven development: empirical body of evidence”, “Agile Software
Development of Embedded Systems”, Versión 1.0, ITEA, Agile VTT, www.agile-
itea.org/public/deliverables/ITEA-AGILE-D2.7_v1.0.pdf, 3/03/2006.

[Sun07] Camp SmallTalk SUnit Project “Sunit. The mother of all unit testing framework”,
http://sunit.sourceforge.net, 08/2007.

Más contenido relacionado

La actualidad más candente

CASCADA CON REDUCCION DE RIESGOS
CASCADA CON REDUCCION DE RIESGOSCASCADA CON REDUCCION DE RIESGOS
CASCADA CON REDUCCION DE RIESGOSJofrahona Rojinegro
 
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...Jorge Hernán Abad Londoño
 
Modelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareModelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareUriel Ramos
 
Metodologías de desarrollo de software
Metodologías de desarrollo de softwareMetodologías de desarrollo de software
Metodologías de desarrollo de softwareWilfredo Mogollón
 
Historias de usuario: todo lo que querías saber y no te atreviste a preguntar
Historias de usuario: todo lo que querías saber y no te atreviste a preguntarHistorias de usuario: todo lo que querías saber y no te atreviste a preguntar
Historias de usuario: todo lo que querías saber y no te atreviste a preguntarLuis Antonio Salazar Caraballo
 
A Gentle Introduction To Agile
A Gentle Introduction To AgileA Gentle Introduction To Agile
A Gentle Introduction To AgileMichael Sahota
 
Agile scrum
Agile scrumAgile scrum
Agile scrumgregynog
 
Lean Software Development: Values and Principles
Lean Software Development: Values and PrinciplesLean Software Development: Values and Principles
Lean Software Development: Values and PrinciplesBalaji Sathram
 
Introduction to Lean and Kanban
Introduction to Lean and KanbanIntroduction to Lean and Kanban
Introduction to Lean and KanbanRajesh Viswanathan
 
Psp (personal software process) guia 0 introducción
Psp (personal software process) guia 0 introducciónPsp (personal software process) guia 0 introducción
Psp (personal software process) guia 0 introducciónAlejandra Ceballos
 
Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml esteban esteban
 
Agile-overview: Agile Manifesto, Agile principles and Agile Methodologies
Agile-overview: Agile Manifesto, Agile principles and Agile MethodologiesAgile-overview: Agile Manifesto, Agile principles and Agile Methodologies
Agile-overview: Agile Manifesto, Agile principles and Agile MethodologiesBalaji Sathram
 
Desarrollo ágil con JIRA y Confluence
Desarrollo ágil con JIRA y ConfluenceDesarrollo ágil con JIRA y Confluence
Desarrollo ágil con JIRA y ConfluenceHéctor Gomis Hidalgo
 

La actualidad más candente (20)

CASCADA CON REDUCCION DE RIESGOS
CASCADA CON REDUCCION DE RIESGOSCASCADA CON REDUCCION DE RIESGOS
CASCADA CON REDUCCION DE RIESGOS
 
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...
Estimación, Priorización y Seguimiento de un Proyecto Ágil Empleando el User ...
 
2. Cascada De Fase Solapada
2. Cascada De Fase Solapada2. Cascada De Fase Solapada
2. Cascada De Fase Solapada
 
Modelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareModelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de software
 
Metodologías de desarrollo de software
Metodologías de desarrollo de softwareMetodologías de desarrollo de software
Metodologías de desarrollo de software
 
Historias de usuario: todo lo que querías saber y no te atreviste a preguntar
Historias de usuario: todo lo que querías saber y no te atreviste a preguntarHistorias de usuario: todo lo que querías saber y no te atreviste a preguntar
Historias de usuario: todo lo que querías saber y no te atreviste a preguntar
 
Metodologia dsdm
Metodologia dsdmMetodologia dsdm
Metodologia dsdm
 
A Gentle Introduction To Agile
A Gentle Introduction To AgileA Gentle Introduction To Agile
A Gentle Introduction To Agile
 
Agile scrum
Agile scrumAgile scrum
Agile scrum
 
Sistema operativo mac
Sistema operativo macSistema operativo mac
Sistema operativo mac
 
Lean Software Development: Values and Principles
Lean Software Development: Values and PrinciplesLean Software Development: Values and Principles
Lean Software Development: Values and Principles
 
Introduction to Lean and Kanban
Introduction to Lean and KanbanIntroduction to Lean and Kanban
Introduction to Lean and Kanban
 
Scrum Training
Scrum TrainingScrum Training
Scrum Training
 
Kanban
KanbanKanban
Kanban
 
Psp (personal software process) guia 0 introducción
Psp (personal software process) guia 0 introducciónPsp (personal software process) guia 0 introducción
Psp (personal software process) guia 0 introducción
 
Extreme Programming (XP).pptx
Extreme Programming (XP).pptxExtreme Programming (XP).pptx
Extreme Programming (XP).pptx
 
Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml Generacion en los diferentes diagramas de uml
Generacion en los diferentes diagramas de uml
 
Agile-overview: Agile Manifesto, Agile principles and Agile Methodologies
Agile-overview: Agile Manifesto, Agile principles and Agile MethodologiesAgile-overview: Agile Manifesto, Agile principles and Agile Methodologies
Agile-overview: Agile Manifesto, Agile principles and Agile Methodologies
 
Scrumban
ScrumbanScrumban
Scrumban
 
Desarrollo ágil con JIRA y Confluence
Desarrollo ágil con JIRA y ConfluenceDesarrollo ágil con JIRA y Confluence
Desarrollo ágil con JIRA y Confluence
 

Destacado

Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsEric Hogue
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win winkhinkhe
 
Metodologia de desarrollo de software
Metodologia de desarrollo de softwareMetodologia de desarrollo de software
Metodologia de desarrollo de softwareVictor Varela
 
Clasificación de las metodologías de desarrollo de software
Clasificación de las metodologías de desarrollo de softwareClasificación de las metodologías de desarrollo de software
Clasificación de las metodologías de desarrollo de softwareElvisAR
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrolloHermes Romero
 
Sara Isela Gonzalez Chapa 1
Sara Isela Gonzalez Chapa 1Sara Isela Gonzalez Chapa 1
Sara Isela Gonzalez Chapa 1sarahgzz
 
Conceptos basicos
Conceptos basicosConceptos basicos
Conceptos basicosfdomen
 
Elevangelioenimagenes
ElevangelioenimagenesElevangelioenimagenes
Elevangelioenimagenestereabacua
 
Miraentujardin
MiraentujardinMiraentujardin
Miraentujardintereabacua
 
César Martínez Treviño - Semana
César Martínez Treviño - SemanaCésar Martínez Treviño - Semana
César Martínez Treviño - SemanaCésar Martínez
 

Destacado (20)

Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with Jenkins
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win win
 
Metodologia de desarrollo de software
Metodologia de desarrollo de softwareMetodologia de desarrollo de software
Metodologia de desarrollo de software
 
Clasificación de las metodologías de desarrollo de software
Clasificación de las metodologías de desarrollo de softwareClasificación de las metodologías de desarrollo de software
Clasificación de las metodologías de desarrollo de software
 
Metodologias de desarrollo
Metodologias de desarrolloMetodologias de desarrollo
Metodologias de desarrollo
 
Sara Isela Gonzalez Chapa 1
Sara Isela Gonzalez Chapa 1Sara Isela Gonzalez Chapa 1
Sara Isela Gonzalez Chapa 1
 
Cuando
CuandoCuando
Cuando
 
Conceptos basicos
Conceptos basicosConceptos basicos
Conceptos basicos
 
Elevangelioenimagenes
ElevangelioenimagenesElevangelioenimagenes
Elevangelioenimagenes
 
Tac Celebro
Tac CelebroTac Celebro
Tac Celebro
 
Eco stone
Eco stoneEco stone
Eco stone
 
presetación
presetaciónpresetación
presetación
 
Miraentujardin
MiraentujardinMiraentujardin
Miraentujardin
 
futura
futurafutura
futura
 
Hola
HolaHola
Hola
 
César Martínez Treviño - Semana
César Martínez Treviño - SemanaCésar Martínez Treviño - Semana
César Martínez Treviño - Semana
 
Encarte Diplomado Lima 2014
Encarte Diplomado Lima 2014Encarte Diplomado Lima 2014
Encarte Diplomado Lima 2014
 
Vih
VihVih
Vih
 
Vida
VidaVida
Vida
 
Twitter y la Política
Twitter y la PolíticaTwitter y la Política
Twitter y la Política
 

Similar a Test Driven Development. Fortalezas y Debilidades

Metodologias xp
Metodologias xpMetodologias xp
Metodologias xpElvisAR
 
Cursotdd 141202105217-conversion-gate01
Cursotdd 141202105217-conversion-gate01Cursotdd 141202105217-conversion-gate01
Cursotdd 141202105217-conversion-gate01Javier Morales
 
Carrera de informatica_educativa
Carrera de informatica_educativaCarrera de informatica_educativa
Carrera de informatica_educativaDiego Sinche
 
Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Martín Machuca
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Lis Pater
 
Behavior1
Behavior1Behavior1
Behavior1arajar
 
Proceso unificado de desarrollo
Proceso unificado de desarrolloProceso unificado de desarrollo
Proceso unificado de desarrolloOrlando Paublini
 
Metodologia seleccionada
Metodologia seleccionadaMetodologia seleccionada
Metodologia seleccionadayinethperez
 
Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarKiberley Santos
 
Comparación de dos Metodologias
Comparación de dos MetodologiasComparación de dos Metodologias
Comparación de dos Metodologiaszonajava
 
Rup vs. xp
Rup vs. xpRup vs. xp
Rup vs. xpjhon
 

Similar a Test Driven Development. Fortalezas y Debilidades (20)

Metodologias xp
Metodologias xpMetodologias xp
Metodologias xp
 
TDD Course (Spanish)
TDD Course (Spanish)TDD Course (Spanish)
TDD Course (Spanish)
 
Cursotdd 141202105217-conversion-gate01
Cursotdd 141202105217-conversion-gate01Cursotdd 141202105217-conversion-gate01
Cursotdd 141202105217-conversion-gate01
 
Xp Metodologia
Xp MetodologiaXp Metodologia
Xp Metodologia
 
Carrera de informatica_educativa
Carrera de informatica_educativaCarrera de informatica_educativa
Carrera de informatica_educativa
 
Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Behavior1
Behavior1Behavior1
Behavior1
 
Proceso unificado de desarrollo
Proceso unificado de desarrolloProceso unificado de desarrollo
Proceso unificado de desarrollo
 
Programacion extrema
Programacion extremaProgramacion extrema
Programacion extrema
 
xp
xpxp
xp
 
Metodologia seleccionada
Metodologia seleccionadaMetodologia seleccionada
Metodologia seleccionada
 
Metodologiaxp
MetodologiaxpMetodologiaxp
Metodologiaxp
 
Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usar
 
Monografia de xp
Monografia de xpMonografia de xp
Monografia de xp
 
Comparación de dos Metodologias
Comparación de dos MetodologiasComparación de dos Metodologias
Comparación de dos Metodologias
 
Rup vs. xp
Rup vs. xpRup vs. xp
Rup vs. xp
 
Rup vs. xp
Rup vs. xpRup vs. xp
Rup vs. xp
 

Más de Alejandro Araújo

Encuentrogx2006collaborativeprojects 090910122800-phpapp01
Encuentrogx2006collaborativeprojects 090910122800-phpapp01Encuentrogx2006collaborativeprojects 090910122800-phpapp01
Encuentrogx2006collaborativeprojects 090910122800-phpapp01Alejandro Araújo
 
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)Alejandro Araújo
 
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)Alejandro Araújo
 
Investigación sobre Dublin Core Data Model (Camargo-Araújo)
Investigación sobre Dublin Core Data Model (Camargo-Araújo)Investigación sobre Dublin Core Data Model (Camargo-Araújo)
Investigación sobre Dublin Core Data Model (Camargo-Araújo)Alejandro Araújo
 
GXFIT-Especificación de marco de pruebas
GXFIT-Especificación de marco de pruebasGXFIT-Especificación de marco de pruebas
GXFIT-Especificación de marco de pruebasAlejandro Araújo
 
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo) ...
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo)   ...Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo)   ...
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo) ...Alejandro Araújo
 
GxUnit - GeneXus Unit Testing
GxUnit - GeneXus Unit TestingGxUnit - GeneXus Unit Testing
GxUnit - GeneXus Unit TestingAlejandro Araújo
 
Metologías Ágiles ¿Testing Ágil? (LarreBorges, Schreiber, Araújo)
Metologías Ágiles ¿Testing Ágil?  (LarreBorges, Schreiber, Araújo)Metologías Ágiles ¿Testing Ágil?  (LarreBorges, Schreiber, Araújo)
Metologías Ágiles ¿Testing Ágil? (LarreBorges, Schreiber, Araújo)Alejandro Araújo
 
Construyendo una herramienta para pruebas unitarias en GeneXus
Construyendo una herramienta para pruebas unitarias en GeneXusConstruyendo una herramienta para pruebas unitarias en GeneXus
Construyendo una herramienta para pruebas unitarias en GeneXusAlejandro Araújo
 
Especificación GxFIT - Defensa Tesis Maestría
Especificación GxFIT - Defensa Tesis MaestríaEspecificación GxFIT - Defensa Tesis Maestría
Especificación GxFIT - Defensa Tesis MaestríaAlejandro Araújo
 
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)Alejandro Araújo
 

Más de Alejandro Araújo (12)

Encuentrogx2006collaborativeprojects 090910122800-phpapp01
Encuentrogx2006collaborativeprojects 090910122800-phpapp01Encuentrogx2006collaborativeprojects 090910122800-phpapp01
Encuentrogx2006collaborativeprojects 090910122800-phpapp01
 
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)
Our Experience with the GxUnit Project (Almeida, LarreBorges, Araújo)
 
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)
GxUnit-En sus comienzos...(Almeida, LarreBorges, Araújo)
 
Investigación sobre Dublin Core Data Model (Camargo-Araújo)
Investigación sobre Dublin Core Data Model (Camargo-Araújo)Investigación sobre Dublin Core Data Model (Camargo-Araújo)
Investigación sobre Dublin Core Data Model (Camargo-Araújo)
 
GXFIT-Especificación de marco de pruebas
GXFIT-Especificación de marco de pruebasGXFIT-Especificación de marco de pruebas
GXFIT-Especificación de marco de pruebas
 
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo) ...
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo)   ...Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo)   ...
Propuesta mejora proceso desarrollo Software (2002) (Diaz Arnesto, Araújo) ...
 
GxUnit - GeneXus Unit Testing
GxUnit - GeneXus Unit TestingGxUnit - GeneXus Unit Testing
GxUnit - GeneXus Unit Testing
 
Metologías Ágiles ¿Testing Ágil? (LarreBorges, Schreiber, Araújo)
Metologías Ágiles ¿Testing Ágil?  (LarreBorges, Schreiber, Araújo)Metologías Ágiles ¿Testing Ágil?  (LarreBorges, Schreiber, Araújo)
Metologías Ágiles ¿Testing Ágil? (LarreBorges, Schreiber, Araújo)
 
Construyendo una herramienta para pruebas unitarias en GeneXus
Construyendo una herramienta para pruebas unitarias en GeneXusConstruyendo una herramienta para pruebas unitarias en GeneXus
Construyendo una herramienta para pruebas unitarias en GeneXus
 
Especificación GxFIT - Defensa Tesis Maestría
Especificación GxFIT - Defensa Tesis MaestríaEspecificación GxFIT - Defensa Tesis Maestría
Especificación GxFIT - Defensa Tesis Maestría
 
Presentación Fitnesse
Presentación Fitnesse Presentación Fitnesse
Presentación Fitnesse
 
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)
Proyecto GxUnit - Congreso Cacic2008 (Almeida, LarreBorges, Araújo)
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 

Último (20)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 

Test Driven Development. Fortalezas y Debilidades

  • 1. Test Driven Development, fortalezas y debilidades. 1 Test Driven Development Fortalezas y Debilidades Alejandro Araújo (alar@bipbip.com.uy) Informe presentado para la aprobación del seminario de Software Testing 2007. Instituto de Computación, Fac. de Ingeniería. UDELAR, Montevideo-Uruguay, 08-2007 Resumen Test Driven Development (Desarrollo Dirigido por Pruebas) es una disciplina de diseño y programación, donde cada nueva línea de código que escribe un programador es en respuesta a una prueba que ha fallado, también escrita por el programador. Sin ser definida como una metodología de pruebas se apoya fuertemente en las pruebas unitarias y también en pruebas de aceptación, basándose en prácticas formalizadas por Extreme Programming. Ha despertado gran interés tanto en ámbitos académicos como de la industria, encontrándose en la literatura investigaciones sobre su aplicación, aunque aún en limitado número, ya sea mediante experimentos controlados o reportes acerca de su práctica en la industria. En el presente artículo se abordará Test Driven Development en general, el dominio de su aplicación y se analizarán ventajas y desventajas de su adopción. Palabras claves: Test Driven Development, Extreme Programming, Xunit, FIT. Breve reseña histórica Existen antecedentes de utilización esporádica de técnicas de tipo Test Driven Development (TDD) que datan de varias décadas atrás, citándose en particular las técnicas aplicadas en el proyecto Mercury1 de la NASA en el comienzo de la década de 1960, que incluían la planificación y escritura de las pruebas previo a cada micro incremento [LB03], pero será a partir de la metodología Extreme Programming [BA04] [Bec199] [Bec299] que emerge otra vez, difundiéndose a nivel mundial. Durante la década de 1980 y a comienzos de los 90, Kent Beck y Ward Cunningham colaboraron y refinaron sus prácticas con el propósito de lograr que el desarrollo de programas fuera más adaptativo y orientado hacia las personas [Fow05], apoyándose en ideas y prácticas existentes, con notorias influencias de las ideas de Chistopher Alexander2, Takeuchi & Nonaka3, Jacobsen4 y otros, las cuales se constituyen en sus 1 http://www-pao.ksc.nasa.gov/history/mercury/mercury-overview.htm Este proyecto recogió la experiencia del exitoso proyecto sobre el jet x15 en 1950s y otros, como ser un proyecto para simulación celular en Motorola, 1958. 2 “The Timeless Way of Building”, Oxford University Press, 1979 3 “The New Product Development Game”. Harvard Business Review. 1986. De notoria influencia en otra metodología agil:“Scrum” http://www.controlchaos.com
  • 2. Test Driven Development, fortalezas y debilidades. 2 raíces [BA04 sec.2] [Bec299] En Marzo de 1996 Kent Beck fue contratado para revisar el proyecto C3 [BA04 cáp.17] [Fow07] en Daimler Chrysler, el cual fue restaurado bajo su liderazgo. Esto dio lugar a la formalización de la metodología Extreme Programming, colaborando estrechamente en dicha formalización Ward Cunningham y Ron Jeffries. En el año 1999 Kent Beck publica el libro que puede considerarse como el manifiesto de la metodología: “Extreme Programming Explained: Embrace Change” [Bec199]. Una de las prácticas fundamentales de dicha metodología, “Test First Programming”, se sustenta en TDD. En tanto, en el mismo año, Martin Fowler et all publican “Refactoring, Improving the Design of Existing Code”, [Fow99] considerado una fundamental introducción a la técnica de reconstrucción de código, práctica que se aplica en TDD. En Febrero de 2001 se marca otro hito, en Salt Lake City, Utah, al emitirse el “Manifiesto para Desarrollo Ágil de Software” [MA01] por parte de un grupo de metodologístas allí reunidos, entre los cuales estaban los proponentes de XP. Test Driven Development tendrá un gran impulso al ser adoptado por practicantes y defensores de dichas metodologías, con las cuales comparte entre otras características, el desarrollo iterativo e incremental en muy breves ciclos y el diseño simple inicial. En los años 2002 y 2003, se publican libros que tratan directamente sobre TDD, presentando y formalizando la disciplina: “Test Driven Development by Example”5 por Kent Beck [Bec02] y “Test-driven development: A Practical Guide“6 por David Astels [Ast03]. Características Test Driven Development (Desarrollo Dirigido por Pruebas) es una disciplina iterativa e incremental de diseño y programación, donde cada nueva línea de código se escribe en respuesta a una prueba fallida que el propio programador ha programado. Es parte medular del desarrollo ágil de código derivado de XP, donde resulta en una práctica crítica, y de los principios del Manifiesto Ágil. Apoyada en la popularidad de XP, Test Driven Development ha tenido gran difusión mundial en los últimos años, pudiéndose adoptarse dentro de cualquier otro tipo de proceso de desarrollo de Software. Su principal objetivo es obtener “Código limpio que trabaje”7 [Bec02.] Siguiendo la categorización citada en [Mug03], TDD puede ser aplicado a dos niveles, a saber: • Nivel de micro-iteraciones: En este nivel el desarrollo es guiado por pruebas unitarias escritas por el propio programador de la aplicación, donde los pasos son, según [Bec02]: o Rápidamente agregar una prueba. o Correr todas las pruebas y comprobar que solo la nueva falla. o Hacer un pequeño cambio. o Correr todas las pruebas y comprobar que pasan satisfactoriamente. o Reconstruir para remover duplicaciones. 4 “Object-Oriented Software Engineerieng” Addison Wesley. 1994 5 Es el primer libro sobre el tópico, conteniendo un ejemplo básico, un ejemplo de Xunit y patrones para TDD. 6 Guía practica con problemas y soluciones reales. 7 Frase acuñada por Ron Jeffries.
  • 3. Test Driven Development, fortalezas y debilidades. 3 Lo anteriormente expuesto se puede resumir en el diagrama de actividad de la figura 1. Figura 1. Pasos en un ciclo TDD Las principales tareas se pueden agrupar en “Escribir y ejecutar pruebas”, “Escribir código de producción” y “Reconstrucción”, detallándose a continuación: Escribir y ejecutar pruebas: La escritura de las pruebas sigue varios patrones identificados y detallados por Beck en [Bec02]. En particular se destaca que las pruebas: o Son escritas por el propio desarrollador en el mismo lenguaje de programación que la aplicación, y su ejecución se automatiza. Esto último es primordial para que obtenga un retorno inmediato, indicándose que el ritmo de cambio entre prueba-código-prueba esta pautado por intervalos de no más de diez minutos. La automatización también permite aplicar, en todo momento, la batería de pruebas, implicando pruebas de regresión inmediatas y continuas. o Las pruebas se deben escribir pensando en primer lugar en probar las operaciones que se deben implementar. o Deben ser aisladas, de forma que puedan correrse independientemente de otras, no importando el orden Este aislamiento determinará que las soluciones de código cohesivas y bajo acoplamiento, con componentes ortogonales8. o Deben de escribirse antes que el código que se desea probar. Escritura de código: La escritura de código es el proceso por el cual se logra hacer que la prueba unitaria pase [Sis06]. La propuesta de Beck contempla cuatro estrategias para salir rápidamente de la situación de falla, descritas como patrones en [Bec02]: Imitarlo 8 En el sentido de independencia entre objetos. En el libro “The Pragmmatic Programmer: From Journeyman to Master” se expone definición y discusión de la importancia de dicho tópico [HT99 pp.43-45].
  • 4. Test Driven Development, fortalezas y debilidades. 4 (Fake It): Retornar un valor esperado, Triangulación, Implementación obvia y Uno a muchos. En cuanto a la programación en si, la recomendación, extraída de la aplicación de la práctica en XP, consiste en programar por intención (programming by intention) lo cual implica no detenerse a pensar en como hacer una cosa, sino en lo que se debe hacer [Jef00 cáp.14]. Reconstrucción (Refactoring): En Fowler et all [Fow99] se define la reconstrucción como una practica que consiste en mejorar el código existente, de manera disciplinada, sin alterar su comportamiento externo, para hacerlo más fácil de entender y modificar. La mejora de código se logra mediante la aplicación de una serie de consejos entre los cuales de destaca la eliminación de duplicación, la división en segmentos menores, la estructuración de manera que resulte más conveniente y la aplicación de las ventajas que brinde el lenguaje de programación9. La reconstrucción cumple un rol sustancial como complemento del diseño. El orden de ejecución de las tareas se resume con la frase Rojo/Verde/Reconstrucción (Red/Green/Refactor). En Rojo se está en la etapa en que una prueba falló, en Verde en la etapa cuando la aplicación pasa las pruebas. A modo de resumen, se establece que TDD a este nivel sigue tres grandes leyes [Mar07]: o No se escribe código de producción salvo que se hubiera escrito previamente una prueba unitaria que falló. o No se escribe más de una prueba unitaria que sea suficiente para fallar. o No se escribe más código de producción que el suficiente para pasar la prueba unitaria • Nivel Iteración o Funcional: El desarrollo es guiado por pruebas de aceptación. Este nivel, mencionado en [Bec02] como ATDD (Aceptance TDD), consta de los siguientes pasos: o El usuario especifica pruebas antes que las funcionalidades sean implementadas. o Una vez que el código es escrito la prueba sirve como un criterio de aceptación. La construcción de las pruebas es también a este nivel un proceso evolutivo, salvo que el retorno se da en ventanas de tiempo más extendidas, a nivel de iteración, y están fundamentalmente en manos del usuario apoyado por verificadores y programadores. Dado que se requiere la automatización de las mismas se lo conoce también como “Executable Aceptance TDD” (EATDD) o “StoryTest-Driven Development”. En Test Driven Development las pruebas siempre actúan, en ambos niveles, como estímulos para el desarrollo; el cual responde para satisfacerlas. Tal como se expresa 9 En particular referido a facilidades de la programación Orientada a Objetos (p/ej: Polimorfismo y Herencia).
  • 5. Test Driven Development, fortalezas y debilidades. 5 en [Bec02] el punto de vista de las pruebas por parte de TDD es pragmático, son estas el medio utilizado para obtener certezas, vencer los temores y guiar el desarrollo. Por último se desea resaltar que si bien Test Driven Development se ha definido como una disciplina de análisis, diseño y programación, no como una disciplina de pruebas: “una de las ironías de TDD es justamente no ser una técnica de pruebas” [Bec02] y sus proponentes hacen especial hincapié en destacar este aspecto, sus prácticas centrales pueden ser analizadas desde el punto de vista de la prueba de programas, haciéndose mención a ella además como “Extreme Testing” [Mye04] abarcando las pruebas unitarias y de aceptación. Herramientas10 Para utilizar la disciplina se debe contar con herramientas que permitan la automatización de las pruebas. Beck advierte, en [Bec199] que “una porción de código sin un programa que la pruebe automáticamente simplemente no existe”. A tales efectos se han desarrollado marcos para definir y ejecutar las pruebas, tanto unitarias como de aceptación, ya que la automatización se considera imprescindible. Es lo que permite la ejecución rápida y eficaz de todas las pruebas existentes con inmediato retorno al programador, a los efectos de brindarle las necesarias certezas y posibilitar la prueba de regresión, evitando además el ciclo perverso de más presión, menos pruebas, más fallas, provocado por el apremio en los plazos [Bec199]. Las herramientas disponibles se especializan en general para pruebas unitarias o pruebas de aceptación, aunque la división no es estricta y podrían utilizarse en ambos niveles, ya sea mediante la incorporación de extensiones y bajo ciertas restricciones. En particular se han desarrollado varios marcos para pruebas open-source, con participación en su gestación de los proponentes principales del emergente TDD. Xunit: Familia de marcos para pruebas unitarias Beck escribió un marco de pruebas para SmallTalk llamado “SUnit”11 [Sun07], que fue extendido luego por J. Pelrine y otros durante varias iteraciones. Dicho marco se expone originalmente en el trabajo titulado “Simple SmallTalk Testing: With Patterns” [Bec98]. Luego de esto, Beck trabajando junto a Erich Gamma, portan el marco a Java [Jav07] dando lugar a “JUnit” [Jun07]. A partir de allí comienza a ganar aceptación y amplia difusión, habiendo sido portado a múltiples plataformas y lenguajes de programación, constituyendo la familia de marcos para pruebas unitarias conocida como Xunit12 [Jun07]. En la figura 2 se muestra a modo de ejemplo como luce JUnit durante una prueba. 10 Las herrmientas han sido desarrolladas utilizando TDD. 11 http://sunit.sourceforge.net/ 12 La X se sustituye generalmente por la primer letra, o primera y segunda letra,del nombre del lenguaje o plataforma a la que ha sido portado.
  • 6. Test Driven Development, fortalezas y debilidades. 6 Figura 2. JUnit TestCalculator [MH04]. El programador utiliza el marco extendiendo o importando sus clases, utilizando ciertos ‘marcadores’ (tags) para indicar a la herramienta los métodos de prueba, que se escriben en el propio lenguaje de la aplicación. Mediante sentencias apropiadas tales como “Assert”, el programador puede validar los datos obtenidos contra los resultados esperados y notificar de la condición encontrada. Al ejecutarse bajo el marco este busca utilizando “Reflection”13 dentro de los ejecutables las clases, variables y el resto de la información que necesita para ejecutar las pruebas, notificando al programador del resultado de las mismas con un símil del semáforo: Rojo no pasó la prueba, Verde pasó satisfactoriamente, Amarillo dio alguna excepción. El desarrollador puede agrupar las pruebas en conjuntos (Suites) para organizar su ejecución en una corrida. Existe una gran cantidad de extensiones e IDE’s a los que puede integrarse. El sitio http://www.junit.org [Jun07] está dedicado a los desarrolladores que utilizan JUnit o algunos de los otros marcos de la familia XUnit. FIT: Marco para pruebas de aceptación FIT [FIT107] es una herramienta creada por Ward Cunningham con el objetivo de automatizar las pruebas de aceptación y mejorar tanto la comunicación como la colaboración en el desarrollo de software. Según la descripción expresada en el libro “Fit for Developing Software: Framework for Integrated Tests” [MC05 p.1]: “FIT (Framework for Integrated Tests) es un poderoso marco de trabajo para pruebas automatizadas…FIT es especialmente indicado para probar desde una perspectiva de negocios, usando tablas para representar las pruebas y para reportar los resultados de la comprobación automática de dichas pruebas. Este formato tabular permite que personas sin conocimientos de programación escriban casos de prueba y guíen el desarrollo general del sistema necesario. FIT es un marco de trabajo de propósito general abierto y fácil de extender para expresar diferentes ordenes de pruebas.” Es una herramienta de pruebas dirigidas por palabras claves y datos, que implementa los siguientes pasos: 13 Proceso de inspección y modificación de un programa en tiempo de ejecución. Concepto desarrollado por Smith,B.C. en: "Procedural Reflection in Programming Languages", PhD Thesis, Massachusetts Institute of Technology, 1982. http://hdl.handle.net/1721.1/15961
  • 7. Test Driven Development, fortalezas y debilidades. 7 • Lee tablas que contienen información para la prueba y los resultados esperados (ejemplos). • Interpreta cada tabla con una clase (conocida como “Fixture”). • Compara el resultado de correr el programa bajo prueba con los ejemplos suministrados en las tablas. Las “fixtures” son escritas por los programadores, en el mismo lenguaje que el código de producción. Son muy pequeñas porciones de código que se encargan de actuar como el pegamento entre las “fixtures” suministradas por el marco y las tablas con la especificación de las pruebas entradas por el usuario. En general extienden las “fixtures” del marco o ejecutan bajo ellas. Al igual que los marcos Xunit busca utilizando “Reflection” dentro de los ejecutables las clases, variables y el resto de la información que necesita para ejecutar las pruebas, notificando al programador del resultado con similar código de colores.. El desarrollador puede agrupar las pruebas en conjuntos (“Suites”) para organizar su ejecución en una corrida. Presenta la particularidad que no se detiene la ejecución de las pruebas ante un error. Dado que FIT no provee una interfase gráfica para su utilización se han elaborado extensiones para cargarlo en IDE’s, tales como Eclipse [Ecl07], o se han desarrollado productos para mantener y organizar los casos de pruebas, de los cuales notoriamente el más conocido es FitNesse [MMW06]. Figura 3. FitNesse[Adz107]. El sitio http://c2.fit.org [Cun207] esta dedicado a los desarrolladores, usuarios y verificadores que utilizan FIT y http://www.fitnesse.org [MMW06] a aquellos que utilizan FitNesse. Fortalezas y Debilidades Test Driven Development presenta , como toda disciplina, defensores y detractores, fortalezas y debilidades; En la literatura es posible encontrar mucha información acerca de estas, especialmente desde un punto de vista teórico. Sería muy útil contar con abundante evidencia empírica documentada, para obtener criterios objetivos de valorización y para medir adecuadamente los beneficios y perjuicios de su utilización así como las mejores prácticas para determinar cuando resulta oportuno adoptarla y para que
  • 8. Test Driven Development, fortalezas y debilidades. 8 tipo de proyectos. Sin embargo, solo recientemente la información de este tipo se está exponiendo y sumarizando en publicaciones, como ser [Fit207],[JM07],[MM07] [REA05],[Sin06]] aunque probablemente sea un importante indicio de que se contará con dicha información en el mediano plazo, partiendo de la base que el resurgimiento y formalización de la disciplina data de hace pocos años. Dada esta situación se opinará acerca de algunas de las fortalezas y debilidades desde un punto de vista teórico. Fortalezas • Al elaborar las pruebas primero el programador no siente que la prueba destruye su código. Se invierte la posición, ahora es el código el que salva la prueba, convirtiéndose el acto destructivo de la prueba en una carrera de salvar obstáculos, paso a paso. Por otra parte, y tal como destacaba Myers en 1975 [Mey04], siendo las pruebas un proceso destructivo se establece una dificultad sicológica desde el inicio para su correcta elaboración por parte de los programadores; hecho que TDD ayuda a resolver. • Al elaborar sus propias pruebas no somete su código a pruebas ajenas. Nuevamente se pone la carga en la responsabilidad de elaborar buenos obstáculos para un código saludable que deberá sortearlos, sin la presión de la competencia. • Al automatizar el programador rápidamente obtiene retorno acerca del estado de salud de la aplicación. Si introduce mejoras en el código o nuevas funcionalidades sabrá rápidamente si pasan todos las pruebas. Esto reduce el stress y el temor. La automatización así lograda está escrita en el mismo lenguaje en que programa, y acompaña al código. No necesita aprender lenguajes nuevos. • En cuanto al método, siguiendo el razonamiento empleado por Mugridge en [Mug03], este puede ser explorado desde el valor del método científico como una metáfora para Test Driven Development, especialmente al considerar la evolución de la teoría y el rol de la reproducibilidad en la experimentación, lo que le da un enorme valor a la disciplina. En las siguientes figuras se representa dicha metáfora alineando las prácticas con el método científico: Figura 4. TDD [Mug03].
  • 9. Test Driven Development, fortalezas y debilidades. 9 Figura 5 Método científico [Mug03]. Sin llegar a sostener, al contrario de Mugridge [Mug03], que el resto de los métodos están equivocados, es razonable coincidir en la importancia de esta correspondencia. • Al prevenir defectos, mediante el diseño continuo de pruebas, extendiendo la aseveración de Beizer acerca que el acto de diseñar pruebas es de las técnicas más efectivas de prevención de defectos [Bei90]. Debilidades • Los ciclos extremadamente cortos y el cambio entre pruebas y codificación de producción hacen que muchos programadores lo sientan como contrario a su intuición y desgastante. Exige además disciplina, responsabilidad y coraje. • La imposibilidad de adopción cuando se utilizan lenguajes de programación que no cuentan con el marco de pruebas unitarias, o cuando se utilizan herramientas de alto nivel (CASE) para la generación de código y asistencia al desarrollo que no lo integran. Si bien esto puede resolverse en muchos casos con desarrollo propio, no siempre es posible por problemas de costo y tiempo. • Las dificultades o imposibilidad para su adopción cuando se utilizan herramientas de alto nivel (CASE) para la asistencia al desarrollo o lenguajes de programación que no adhieren al paradigma de la orientación a objetos. • En las pruebas de aceptación, donde es más dificultosa la automatización, especialmente pues la prueba puede ser asimilada a un ciclo funcional, lo que acrecienta la complejidad de los casos, con altamente probable intervención de interfases, especialmente gráficas (GUI), desde las cuales la aplicación interactúa con el usuario. También es de particular importancia a este nivel el tiempo que transcurre entre la elaboración de la prueba y su ejecución, que ya no puede medirse en minutos, sino en días o iteraciones, lo cual quita ritmo al proceso y disminuye los aspectos positivos del rápido retorno.
  • 10. Test Driven Development, fortalezas y debilidades. 10 Conclusiones Seguramente TDD no se convertirá en la bala de plata14 [Bro95 cáp.16], pero sus fortalezas parecen aventajar en mucho a sus debilidades, la mayoría de las cuales radicarían en los problemas que presenta la automatización de las pruebas. De allí la importancia de investigar, proponer y construir mecanismos que permitan su utilización en ambientes de desarrollo que usan modernas herramientas de programación bajo las cuales no es posible aún su utilización. La baja penetración en Uruguay de esta disciplina es probable que se deba, entre otras razones, a la falta del marco adecuado relacionado a las herramientas de desarrollo más utilizadas. Bibliografía [Adz107] Adzic, G. “Getting Fit with Net. Quick Introduction to Testing .Net Applications with FitNesse”, Version 0.2, http://www.gojko.net/FitNesse/fitnesse.pdf 02/2007. [Ast03] Astels, D. “Test-Driven Development: A Practical Guide“,ISBN 0131016490, Prentice Hall, 2003. [BA04] Beck, K. , Andres C. ““Extreme Programming Explained, Embrace Change 2nd Edition”, ISBN 0-321-27865-8, Addison Wesley, 2004. [Bec98] Beck, K. “Simple Smalltalk Testing: With Patterns”, First Class Software, Inc., http://www.xprogramming.com/testfram.htm, 1998. [Bec02] Beck, K. “Test Driven Development by Example”, ISBN 032-114653-0, Addison Wesley, 2002. [Bec199] Beck, K. “Extreme Programming Explained, Embrace Change”, ISBN 201-61641-6, Addison Wesley, 1999. [Bec299] Beck, K. “Embracing Change with Extreme Programming”, IEEE Computer, Octubre 1999, pp. 70-77. [Bei90] Beizer, B. “Software testing techniques”, 2nd. Edition, ISBN 0-442-20672-0, Van Nostrand Reinhold Co, 1990. [Bro95] Brooks, F. P. “The Mythical Man-Month: Essays on Software Engineering”, Anniversary Edition, ISBN 0-201-83595-9, Addison Wesley, 1995. [Cun207] Cunningham W. “Welcome Visitors”,”Framework for Integrated Tests”, http://fit.c2.com/ 28/01/2007. [Ecl07] Eclipse Foundation “Eclipse - an open development platform”, http://www.eclipse.org, 2007. [FIT107] Cunningham W. “Framework for Integrated Test”, http://sourceforge.net/projects/fit/ , 2007. [FIT207] Deng, C., Wilson P. , Maurer F. “FitClipse: A Fit-based Eclipse Plug-in For Executable Acceptance Test Driven Development”, Proceedings of the 8th International Conference on Agile Processes in Software Engineering and eXtreme Programming (XP 2007), Come, Italy,http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2007/Deng_Wilson_Maurer_FitClipse.pdf ,2007. [Fow05] Fowler M. “The New Methodology”, http://www.martinfowler.com/articles/newMethodology.html#xp, 12/2005. 14 “No Silver Bullet-Essence and Accident in Software Engineering” Brooks F.P.
  • 11. Test Driven Development, fortalezas y debilidades. 11 [Fow07] Fowler M. “C3”, http://www.martinfowler.com/bliki/C3.html, 06/06/2007. [Fow99] Fowler M. et all “Refactoring: Improving the Design of Existing Code”, 1st edition, ISBN 0201485672, Addison-Wesley Professional, 1999. [HT99] Hunt, A. , Thomas D. “The Pragmatic Programmer: From Journeyman to Master”, 1st edition, ISBN 0-201-61622-X, Addison Wesley, 1999. [Jav07] Sun Microsystems Java, “Java Technology. The Power of Java” http://www.sun.com/java/, 05/2007. [Jef00] Jeffries, R. , Anderson A. , Hendrickson, C. , Jeffries, R. E., “Extreme Programming Installed”, 1st edition, ISBN 0-201-70842-6 Addison Wesley, 2000. [JM07] Jeffries, R , Melnik, G. “Guest Editors' Introduction: TDD--The Art of Fearless Programming “ ,IEEE Computer, May/Jun 2007, Vol.24, Issue 3, pp. 24-30. [Jun07] Junit.Org,, Object Mentor, http://www.junit.org/index.htm , 07/2007. [LB03] Larman, C. , Basili, V. “Iterative and Incremental Development: A Brief History”, IEEE Computer; Volume 36, Issue 6, pp 47 – 56, Junio 2003. [MA01] Manifiesto for Agile Software Development, http://www.agilemanifesto.org, 2001. [Mar07] Martin, R.C. “Professionalism and Test-Driven Development”, IEEE Computer; Volume 24, Issue 3, pp 32 - 36, May-Jun 2007 [MC05] Mugridge R.,Cunningham W. ”Fit for Developing Software: Framework for Integrated Tests”, ISBN 0-321-26934-9, Prentice Hall PTR, 2005. [MH04] Massol, V. , Husted, T. “Junit in Action”, ISBN 1-930110-99-5, Manning Publications Co.,2004. [MM07] Melnik, G. , Maurer, F. “Multiple Perspectives on Executable Acceptance Test-Driven Development”, Department of Computer Science, University of Calgary, Canada, http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2007/XP2007_Melnik_Maurer.pdf, 2007 [MMW06] Martin, R., Martin, M., Wilson, P. "Welcome to FitNesse", http://www.fitnesse.org, 01/12/2006. [Mug03] Mugridge, R. “Test Driven Development and the Scientific Method”, Department of Computer Science,University of Auckland,New Zealand, http://agile.openmex.com/agile2007/2003/files/P6Paper.pdf, 03/2006. [Mye04] Myers G. “The Artof Sotware testing, 2nd edition”, ISBN 0-471-46912-2, John Wiley & Sons Inc., 2004. [Rea05] Read, K. “Supporting Agile Teams of Teams via Test Driven Design”, Master Thesis, Departament of Computer Science, University of Calgary, Calgary, Canada, http://ebe.cpsc.ucalgary.ca/ebe/attach/Publications.2005/Read2005.pdf 02/2005 [Sin06] Siniaalto, M. “Test driven development: empirical body of evidence”, “Agile Software Development of Embedded Systems”, Versión 1.0, ITEA, Agile VTT, www.agile- itea.org/public/deliverables/ITEA-AGILE-D2.7_v1.0.pdf, 3/03/2006. [Sun07] Camp SmallTalk SUnit Project “Sunit. The mother of all unit testing framework”, http://sunit.sourceforge.net, 08/2007.