Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gestin de
Software
2006
Testing en eXtreme
Programming
Grupo 6
Responsables:
Nombre
Dayvis Malfar
Diego Cukerman
Fernando Ccaro
Juan Pablo
Cassinelli
Cdula
38606763
33483409
43473711
31000538
Pgina 1 de 22
Gestin de Software
Renzo Sttimo
27661295
Pgina 2 de 22
Gestin de Software
NDICE
1
2
Qu es eXtreme Programming?.....................................................................................4
Las doce Prcticas........................................................................................................... 4
3.7
Experiencia personal..................................................................................................... 16
3.6.1
3.6.2
3.6.3
3.6.4
4
5
CONCLUSIONES.......................................................................................18
REFERENCIAS.........................................................................................19
Pgina 3 de 22
Gestin de Software
Pgina 4 de 22
Gestin de Software
2.1
Qu es eXtreme Programming?
Programacin:
Diseo Simple, Refactoring, Estndares de cdigo, Pruebas.
Los procesos:
Cliente on-site, El juego de la planificacin, Pruebas, Pequeas entregas.
Como podemos observar hay prcticas que se repiten en las diferentes capas, ya que
estn relacionadas en cada una de ellas.
A continuacin se presenta un detalle de cada prctica:
El juego de la planificacin
Mediante esta prctica se realiza la planificacin del proyecto en XP. La misma
consiste en el plan de entregas, el plan de iteraciones, las historias de usuario, las
tareas y los casos de pruebas para las mismas.
Pequeas entregas
Las entregas deben ser lo ms pequeas posibles, conteniendo siempre los
requerimientos del negocio mas importantes para el cliente en ese momento
dado. De esta manera el cliente va obteniendo funcionalidades del sistema en
Pgina 5 de 22
Gestin de Software
Metfora
La metfora le brinda al equipo una imagen del sistema la cual ellos pueden
utilizar para describir la estructura en forma simple y sencilla. Las ventajas de su
aplicacin es que hace ms fcil la comprensin del sistema y colabora para
mantener un diseo simple.
Diseo simple
El diseo se va creando en forma progresiva, sin prever las necesidades del
futuro. Al tener un diseo simple capaz de mantener las caractersticas actuales
del sistema, este puede adaptarse mejor a un entorno cambiante cuando surgen
nuevos requerimientos o cambian los actuales.
Pruebas
Las pruebas (testing) son una de las prcticas fundamentales en las cuales se
basa XP. Esta actividad se realiza en forma continua a lo largo del proyecto.
Existen dos tipos de pruebas, las unitarias y las de aceptacin.
Las pruebas unitarias son definidas por los programadores antes de comenzar a
escribir cdigo. stas deben contemplar cada mdulo del sistema que pueda
generar fallas. Para poder integrar el cdigo realizado al ya existente, el mismo
debe aprobar satisfactoriamente todos los casos de prueba definidos.
El cliente con ayuda del tester define las pruebas de aceptacin para cada historia
de usuario a principio de cada iteracin. Las pruebas de aceptacin se utilizan
para validar que cada requerimiento implementado funciona como se haba
especificado.
Refactoring
Significa mejorar el diseo del cdigo sin cambiar la funcionalidad actual. Aplicar
esta tcnica permite reducir la complejidad del cdigo y eliminar posibles
redundancias.
Propiedad colectiva
Esta prctica se basa en que todo el cdigo desarrollado pertenece al equipo.
Todos los integrantes del equipo tienen la misma responsabilidad sobre todo el
sistema. Al ser el equipo el responsable, cualquier integrante esta autorizado a
realizar los cambios que se consideren necesarios para mejorar la calidad del
mismo.
De esta manera se logra descentralizar el conocimiento y no generar
dependencias hacia las personas.
Integracin continua
La integracin de cdigo se debe realizar en forma continua, esto implica al
menos en un lapso de un da de trabajo y de ser posible cada unas pocas horas.
La ventaja de la integracin continua es obtener retroalimentacin lo ms rpido
posible. Adems de ser ms sencilla que las integraciones que se realizan luego
de varias semanas de programacin.
Pgina 6 de 22
Gestin de Software
40 horas semanales
Esta prctica expone que 40 es la cantidad de horas que se debe dedicar al
trabajo semanalmente. De esta manera se logra cometer menos errores por
cansancio y aumentar la productividad del equipo.
Cliente on-site
Para lograr un correcto funcionamiento de un proyecto en XP es necesario contar
con la presencia full-time del cliente en el lugar de trabajo, siendo ste un
integrante ms del equipo. Contar con un cliente en el lugar de trabajo fomenta la
comunicacin y reduce la posibilidad de malentendidos y tiempos de espera.
Estndares de cdigo
El equipo de programadores define en forma consensuada los estndares de
programacin que utilizar. De esta manera se logra obtener un cdigo uniforme,
como si el sistema fuera programado por una sola persona. Esta prctica fomenta
la comunicacin y facilita la implementacin de las prcticas de refactoring,
programacin en pareja y propiedad colectiva.
Pgina 7 de 22
Gestin de Software
3.1
Pgina 8 de 22
Gestin de Software
3.2
3.3
Pruebas Unitarias
Una prueba unitaria es la verificacin de un mdulo (unidad de cdigo) determinado
dentro de un sistema. El concepto de mdulo vara de acuerdo al lenguaje de
programacin que estemos utilizando; por ejemplo, en Java sera una clase. Las pruebas
unitarias nos aseguran que un determinado mdulo cumpla con un comportamiento
esperado en forma aislada antes de ser integrado al sistema.
Los programadores realizan estas pruebas cuando: la interfaz de un mtodo no es clara,
la implementacin es complicada, para testear entradas y condiciones inusuales, luego
de modificar algo. stas deben contemplar cada mdulo del sistema que pueda generar
fallas. Para poder integrar el cdigo realizado al ya existente, el mismo debe aprobar
satisfactoriamente todos los casos de prueba definidos.
En XP los programadores deben escribir las pruebas unitarias para cada mdulo antes
de escribir el cdigo. No es necesario escribir casos de prueba para todos los mdulos,
slo para aquellos en que exista la posibilidad de que puedan fallar.
Luego de escribir el cdigo, los programadores ejecutan las pruebas, las cuales deben
resultar 100% efectivas para que el cdigo pueda integrarse al sistema. En caso
contrario hay que solucionar los errores y ejecutar nuevamente los casos de prueba
hasta lograr que ninguno de ellos.
Pgina 9 de 22
Gestin de Software
Las pruebas son automatizadas utilizando herramientas como xUnit, de forma tal de
poder soportar un testing continuo y mantener organizados los casos de pruebas.
La ausencia de las pruebas unitarias lleva a tener que invertir una gran cantidad de
horas en sesiones de debugging al momento de integrar el cdigo con el sistema
existente.
Las pruebas unitarias brindan una inmediata retroalimentacin el la realizacin de su
trabajo, permiten al programador saber si una determinada funcionalidad se puede
agregar al sistema existente sin alterar el funcionamiento actual del mismo. Tambin
permiten la aplicacin de otras prcticas como refactoring y diseo simple al estar
respaldados por efectivos casos de prueba.
La retroalimentacin que se genera por la realizacin de las pruebas, deriva en un
constante aprendizaje sobre el sistema a realizar, lo cual permite que los
programadores desarrollen de forma ms rpida y eficiente.
3.4
3.5
Gestin de Software
si los resultados son correctos indicara que las pruebas fueron exitosas, en caso que
alguno de los resultados no sea el esperado Junit indicara que se produjo un fallo he
indicara el o los mtodos que no pasaron sus evaluaciones. Es importante destacar que
Junit seguir con las pruebas aunque ya se haya detectado una falla.
Este framework es Open Source y fue desarrollado por Kent Beck y Erich Gamma, el
primero uno de los creadores de XP y el segundo conocido por ser uno de los lideres del
proyecto Eclipse y por sus trabajos en Patrones de Diseo.
En JUnit, los casos de prueba son clases que derivan de la clase TestCase, e
implementan mtodos sin parmetros de nombre testXXX, donde XXX es una
descripcin de lo que est probando ese mtodo (Beck y Gamma, n.f.).
Las pruebas implementadas que extendern de la clase TestCase tiene la posibilidad de
sobre-escribir los mtodos setUp() y tearDown(), los cuales son invocados antes y
despus de cada mtodo de test. Esto permite inicializar y liberar recursos entre la
ejecucin de los distintos mtodos en la clase, permitiendo asegurarse de que no hay
efectos colaterales entre la ejecucin de los distintos test.
El propio framework incluye formas de ver los resultados (runners) que pueden ser en
modo texto, grfico (AWT o Swing) o como tarea en Ant.
En la actualidad las herramientas de desarrollo como NetBeans y Eclipse cuentan con
plug-ins que permiten que la generacin de las plantillas necesarias para la creacin de
las pruebas de una clase Java se realice de manera automtica, facilitando al
programador enfocarse en la prueba y el resultado esperado, y dejando a la
herramienta la creacin de las clases que permiten coordinar las pruebas.
Los TestCase pueden unirse en rboles de TestSuite que invocan automticamente
todos los mtodos testXXX() definidos en cada TestCase. Un TestSuite es una
composicin de otros tests, bien TestCase u otros TestSuite. El comportamiento
compuesto exhibido por los TestSuite te permite ensamblar suites de tests, de una
profundidad arbitraria, y ejecutar todos los tests automticamente para obtener un
simple estado de pasado o fallado.
Los mtodos de prueba consisten en verificar que los resultados obtenidos sean los
esperados. Para esto JUnit ofrece un conjunto de mtodos (assert, assertEquals,
assertTrue y otros) que permiten realizar comparaciones entre objetos o comprobar la
veracidad de una condicin determinada.
Para realizar un caso de test en Junit se deben seguir los siguientes pasos.
Escribir un test para probar un nico componente de software. Enfocndose en escribir
test que comprueben el comportamiento que tiene el mayor potencial de rotura, as
puede maximizar los beneficios con respecto a la inversin en testeo.
Para escribir un test, sigue estos pasos:
1. Define una subclase de TestCase.
2. Sobrescribe el mtodo setUp() para inicializar el objeto(s) a probar.
3. Sobrescribe el mtodo tearDown() para liberar el objeto(s) a probar.
4. Define uno o ms mtodos testXXX() pblicos que prueben el objeto(s) y aserten
los resultados esperados.
5. Define un mtodo factora suite() esttico que cree un TestSuite que contenga
todos los mtodos testXXX() del TestCase.
6. Opcionalmente, define un mtodo main() que ejecute el TestCase en modo por
lotes.
Supongamos que tenemos la siguiente clase Money (moneda) con sus correspondientes
mtodos y propiedades:
Pgina 11 de 22
Gestin de Software
class Money {
private int fAmount;
private String fCurrency;
public Money(int amount, String currency) {
fAmount= amount;
fCurrency= currency;
}
public int amount() {
return fAmount;
}
public String currency() {
return fCurrency;
}
public Money add(Money m) {
return new Money(amount()+m.amount(), currency());
}
public boolean equals(Object anObject) {
if (! anObject instanceof Money)
return false;
Money aMoney= (Money)anObject;
return aMoney.currency().equals(currency())
&& amount() == aMoney.amount();
}
}
La siguiente tabla muestra una breve descripcin de los mtodos de la clase:
Mtodo
Descripcin
String
equals(Object
Los pasos a seguir, para construir un caso de prueba para la clase Money, son los
siguientes:
1. Definir la clase de prueba que derive de la clase TestCase.
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.framework.Test;
public class MoneyTest extends TestCase {
//
private Money mobj12USD;
private Money mobjf14USD;
//
}
2. Sobreescribir el mtodo setUp() para inicializar el/los objetos implicados en la
prueba (si es necesario).
Pgina 12 de 22
Gestin de Software
Gestin de Software
Pruebas de aceptacin
Las pruebas de aceptacin son pruebas de caja negra definidas por el cliente para cada
historia de usuario, y tienen como objetivo asegurar que las funcionalidades del sistema
cumplen con lo que se espera de ellas. En efecto, las pruebas de aceptacin
corresponden a una especie de documento de requerimientos en XP, ya que marcan el
camino a seguir en cada iteracin, indicndole al equipo de desarrollo hacia donde
tiene que ir y en qu puntos o funcionalidades debe poner el mayor esfuerzo y
atencin.
Las pruebas de aceptacin permiten al cliente saber cuando el sistema funciona, y que
los programadores conozcan que es lo que resta por hacer. (Jeffries et al. 2000, 45)
Las pruebas de aceptacin tienen una importancia crtica para el xito de una iteracin.
Por lo tanto el tester debe tenerlas prontas lo antes posible a partir del comienzo de la
iteracin, y lograr que el cliente las apruebe para poder presentrselas cuanto antes al
equipo de desarrollo.
Gestin de Software
Pgina 15 de 22
Gestin de Software
Pgina 16 de 22
Gestin de Software
Otra importante diferencia entre las pruebas de aceptacin y las pruebas unitarias es
que para las de aceptacin la presentacin de lo resultados es importante, en cambio
para las unitarias no tiene mucho sentido ya que siempre se requiere un 100% de
efectividad. Beck (2000) recomienda la exhibicin de los resultados que se obtienen al
ejecutar las pruebas de aceptacin, generando reportes y grficas que desplieguen los
porcentajes de efectividad obtenidos. Estos ndices permiten evaluar si el equipo de
desarrollo esta realizando un buen trabajo o no. Es importante mantener esta
informacin estadstica actualizada y visible para todos los integrantes del proyecto.
Crispin (2001) propone el siguiente cuadro de resumen donde presenta tanto grfica
como numricamente los casos de pruebas escritos, ejecutados y exitosos.
Gestin de Software
iteraciones finales los casos con error y los no validados por el cliente disminuyan,
llegando a la ltima iteracin con el 100% de los casos validados.
3.7
Experiencia personal
En esta seccin se da una opinin personal referente al desarrollo y testing en XP,
basado en la experiencia adquirida en el curso de ingeniera de software en el ao
2003.
En ese ao se pona en prctica esta metodologa de desarrollo a modo de evaluacin,
la idea era ver la factibilidad de incorporar dicha metodologa a las ya existentes en el
curso (RUP y ModsGx). Por lo visto no result muy satisfactoria dicha metodologa, ya
que no se ha vuelto a aplicar, en un principio porque el coach se ve sobrecargado al
momento de dirigir los grupos, ya que los grupos saben muy poco (o nada) de la
metodologa y todo es nuevo para los estudiantes.
Dos de los actuales integrantes de este grupo fuimos partcipes de dicha experiencia,
asumiendo los roles de Analista Desarrollador y Verificador Desarrollador.
Los grupos que aplicaron esta metodologa estaban compuestos por siete integrantes,
se desarrollaba sobre GeneXus + WorkFlow utilizando para ello el generador java
desarrollando para Web. Ambos grupos que aplicaron GXP (GeneXus Extreme
Programming) tenin un cliente comn, el SECIU, a manos de la Ing. Mariela de Leon.
El proyecto a desarrollar fue un prototipo de factibilidad referente al manejo y
seguimiento de expedientes tanto electrnicos como en papel para la Universidad.
Dado que la metodologa exige ciertos puntos bsicos fue necesario introducir
modificaciones, como por ejemplo incorporar un rol nuevo que libere al cliente de la
escritura de historias (Analista), recorte de horas de trabajo (XP supone 40 horas
semanales GXP 15 horas semanales), el verificador asume la responsabilidad de
escribir las pruebas funcionales y validarlas con el cliente, se modific tambin el
concepto de cliente on site o cliente en el lugar ya que se pactaban reuniones
semanales con el y el equipo de desarrollo.
Los equipos de desarrollo encontraron dificultades al momento de realizar las pruebas
tanto unitarias por parte de los desarrolladores como tambin las pruebas funcionales
por parte del verificador, ya que la herramienta usada (Racional Robot) hace fuerte uso
de la interfaz grfica, la cual estaba en constante modificacin, lo cual hacia perder
varias horas en retrabajo por parte de quienes realizaban los scripts de pruebas.
No queda claro el concepto de unidad, ya que por ejemplo en Java una unidad pede ser
considerada una clase y verificarla con jUnit, en cambio en GeneXus tenemos el
concepto de objeto GeneXus (transaccin, reporte, procedimiento y webpanel), e
intentar probar un procedimiento con Rational Robot en una prueba unitaria resultaba
compleja. Lo cual llevaba un entrenamiento adicional sobre la herramienta Rational
Robot, cuyo resultado era que el test unitario se realizara a mano o no se realizara
(esto implicara un desviamiento total sobre la metodologa ya que se exige que las
pruebas sean automatizadas) y dejando para probar directamente la unidad dentro de
la prueba funcional.
Una de las prcticas claves en XP es la programacin en pares, dicha prctica se
debera seguir como en XP tradicional, pero dado que los integrantes de los equipos
tienen discordancia horaria es difcil conseguir pares para rotar dos veces a la semana.
Como solucin a este problema surge la idea de juntarnos los fines de semana y luego
de la reunin semanal, continuar con el desarrollo haciendo el cambio de par
respectivo.
Esto no quiere decir que XP no sea aplicable sino que se necesitan ciertas condiciones
para encarar un proyecto con esta metodologa, y es difcil conseguirlo en el contexto
de la facultad.
Pgina 18 de 22
Gestin de Software
Pgina 19 de 22
Gestin de Software
CONCLUSIONES
El tester es el responsable de ayudar al cliente a seleccionar y escribir las pruebas de
aceptacin para cada historia de usuario. Tiene la responsabilidad de ayudar al cliente a
tomar las decisiones correctas sobre que significa la calidad para su proyecto.
El tester escribe las pruebas de ACEPTACION, pero NO las pruebas UNITARIAS, esto lo
debe hacer cada desarrollador.
La prctica de programacin por pares puede resultar muy buena si los pares se llevan
bien y son unidos, las ventajas se ven en que el cdigo se encuentra bajo revisin
continua. Se ve una mejora en la calidad del cdigo ya que se utiliza siempre el
estndar.
Los casos de prueba se pueden discutir con el par al momento de implementar, lo que
puede llevar a tener casos de prueba ms completos.
La prctica de diseo simple no quiere decir un mal diseo, sino el diseo ptimo que
se ajuste solo a las necesidades.
Unas de las principales ventajas que vemos en XP es que todo el equipo es conciente
del estado del proyecto, y adquiere un conocimiento global sobre las funcionalidades (o
historias) del mismo, ya que la continua rotacin de los pares evita la aparicin de
expertos en determinadas reas del sistema.
Las pruebas unitarias como se dijo anteriormente son una actividad fundamental en XP,
deben ser automatizadas y elaboradas antes y durante la implementacin de un
mdulo. Luego de terminada la implementacin del mismo las pruebas unitarias deben
ser todas correctas, asegurando as el buen funcionamiento del mdulo, es necesario
que todas las pruebas sean correctas para poder integrar el mdulo nuevo al sistema
existente.
Todas las pruebas deben ser automatizadas ya que en cada integracin deben correrse
todas las unitarias como funcionales y deben pasar a ser 100% correctas, de lo
contrario es factible que el mdulo nuevo tenga conflictos con el sistema de la etapa
anterior.
La automatizacin de las pruebas
Fomentan el cambio: facilitan la refactorizacin, puesto que permiten hacer
pruebas sobre los cambios y as asegurarse de que los nuevos cambios no han
introducido errores.
Simplifica la integracin: Puesto que permiten llegar a la fase de integracin con
un grado alto de seguridad de que el cdigo est funcionando correctamente. De
esta manera se facilitan las pruebas de integracin.
Documenta el cdigo: Las propias pruebas son documentacin del cdigo puesto
que ah se puede ver cmo utilizarlo.
Los errores estn ms acotados y son ms fciles de localizar: dado que tenemos
pruebas unitarias que pueden desenmascararlos.
En XP las pruebas de aceptacin son pruebas de caja negra y debera ser
responsabilidad del cliente la escritura de casos y definicin de criterios para la
aceptacin del sistema.
Las pruebas de aceptacin en XP permiten verificar que las funcionalidades de cada
iteracin se cumplan correctamente.
Se debe definir un criterio de aprobacin de las mismas que puede no ser de un 100%
de efectividad.
Se deben presentar los resultados de las mismas a todo el equipo de desarrollo.
Pgina 20 de 22
Gestin de Software
Pgina 21 de 22
Gestin de Software
REFERENCIAS
[BECK, Kent. 2000] Extreme Programming Explained: Embrance Change. Massachusetts:
Addison-Wesley.
[CRISPIN. 2001]
12/04/2004].
article.pdf>
en
internet:
<http://www.testing.com/agile/crispin-xp-
[CRISPIN, HOUSE. 2002] CRISPIN, L.; TIP HOUSE. 2002. Testing Extreme Programming.
Massachusetts: Addison-Wesley.
[JEFFRIES, Ron. 1999b]
Extreme Testing. [online] [citado 12/04/2004].
Disponible en internet:
<http://www.xprogramming.com/publications/SP99 Extreme
Web.pdf>
for
Pgina 22 de 22