1. Universidad Nacional de San Juan
Facultad de Ciencias Exactas, Físicas y Naturales
23 de Noviembre de 2010
José Luis Rodríguez Roldan
joseluis.rodriguezroldan@gmail.com
2. Pruebas o Testing (Tipos)
Pruebas unitarias *
Pruebas funcionales : Es un proceso para procurar encontrar discrepancias
entre las funcionalidades del programa y la especificación funcional.
Pruebas de Integración : Es cuando se han aprobado las pruebas unitarias, se
prueban todos los elementos que componen un proceso.
Pruebas de validación : Es el proceso de comprobación que lo que se a
desarrollado es lo que el usuario quería , es como se debe de comportar el
programa desde el punto de vista del usuario.
Pruebas de sistema : Es la comprobación que se le realiza al producto en
forma completa.
Pruebas de aceptación : Es la comprobación que realiza un grupo de
usuarios o clientes , para asegurarse que el sistema desarrollado cumple sus
requisitos.
Pruebas de regresión: Es la comprobación que intenta descubrir las causas
de errores, falta de funcionalidades o cualquier comportamiento no esperado
después de realizado un cambio y que anteriormente no se producía.
Pruebas de carga: Es para observar el comportamiento de una aplicación bajo
una cantidad de peticiones esperadas. Tienen el propósito de encontrar cuellos
de botellas en la aplicación
Pruebas de prestaciones: Es simular la normal utilización del sistema para
identificar problemas de rendimiento y desgracian de recursos para facilitar su
corrección.
4. Introducción a TCA
Que es TCA (Test After Coding)
Son los test que se realizan, después que el código ya esta
escrito .
Los casos de prueba se suelen escribir después de
implementar el modulo cuyo funcionamiento se
pretende verificar.
A veces se preparan en paralelo si el programador y la
persona que realizan las pruebas (tester) no son la
misma persona.
5. Introducción a TDD
Que es TDD (Test Driven Development)
Es una metodología de programación que involucra 2 prácticas:
Escribir primero las pruebas unitarias, o sea, escribir el test antes de
escribir el programa y refactoring.
Ciclo del TDD:
1. Escribir un test e intentar compilar, aunque aun no sea posible
porque no se desarrollo la funcionalidad correspondiente.
2. Escribir la mínima cantidad de código posible para que la
prueba unitaria compile y ejecutarla. Deberá fallar, ya que no
tiene la funcionalidad requerida.
3. Escribir el test de tal manera, que al ser ejecutado, este no falle.
La idea es que la función escrita no sea lo más elegante y
optimo posible, sino que simplemente, permita pasar el test
unitario exitosamente.
4. Refactorizar el código de la función, para que sea lo más
optimo posible. Es muy posible que existan varias instancias de
refactorización del código de la función en distintas etapas del
proyecto.
5. Escribir un nuevo test unitario para otra funcionalidad.
7. Test Unitario (Unit Test)
Un test unitario (Unit Test) es un trozo de
código desarrollado con el único objetivo de
verificar que una rutina o función de nuestro
código está funcionando según esperamos.
Test simples que cubren las instancias de
clases en diferentes escenarios.
Condiciones de pruebas diseñadas.
Resultados verificados.
8. Test Unitario (Unit Test)
¿Por qué usar Test Unitario (Unit Test) ?
1. Facilita los cambios en la aplicación ya que las pruebas nos
asegurarán que los nuevos cambios no han introducido errores.
2. Simplifica la integración gracias a que permiten llegar a la fase de
integración con un grado alto de seguridad de que el código está
funcionando correctamente. De esta manera se facilitan las pruebas
de integración.
3. Documenta el código. Las propias pruebas son un libro abierto
sobre el funcionamiento de la función y los resultados esperados.
4. Separación de la interfaz y la implementación. Dado que la única
interacción entre los casos de prueba y las unidades bajo prueba son
las interfaces de estas últimas, se puede cambiar cualquiera de los
dos sin afectar al otro.
5. Los errores están más acotados y son más fáciles de localizar:
dado que tenemos preparado un test para cada función que puede
desenmascararlo.
6. Aunque pueda parecer mentira, los test unitarios aceleran el
desarrollo de nuestro software.
7. Ayuda a tener un código desacoplado gracias a que cada una de
nuestras funciones está pensada para devolver un resultado que
podrá ser testeado.
9. Test Unitario (Unit Test)
Herramientas
Debido al gran éxito que esta metodología está teniendo en el mundo de la ingeniería
del software, son muchas y variadas las herramientas que se han ido desarrollando
hasta día de hoy. Algunas han surgido en forma de frameworks, otras en formato plug-
in bajo el control de algún browser o incluso como librerías para su uso en plataformas
de programación.
Entre los que podemos citar a:
JUnit: Entorno de pruebas para Java creado por Erich Gamma y Kent Beck.
HttpUnit: viene a ser un cliente web programable. Se puede usar de forma aislada o
como complemento del framework Junit.
DBUnit: en realidad es una extensión de JUnit que tiene como ventaja el poder tener
en cuenta la existencia de una base de datos a la hora de realizar las pruebas de los test
SimpleTest: Entorno de pruebas para aplicaciones realizadas en PHP.
PHPUnit: framework para realizar pruebas unitarias en PHP.
CPPUnit: Versión del framework para lenguajes C/C++.
NUnit: Versión del framework para la plataforma.NET.
FoxUnit: framework OpenSource de pruebas unitarias para Microsoft Visual FoxPro.
TestNG: Creado para suplir algunas deficiencias en JUnit.
JTiger: Basado en anotaciones, como TestNG.
Selenium: es toda una herramienta dedicada al Test-driven Development, tiene
distintos formatos en los que puede ser utilizados y aporta una importante cantidad de
funcionalidades nuevas para la creación de los test.
10. Test Unitario (Unit Test)
Assert
La mayoria de las herramientas tienen assert, que son afirmaciones que son usada para
comprobar suposiciones en el programa, colocada donde el desarrollador considera
que su ennunciado es siempre verdadero.
Esto da lugar a que existan afirmaciones y por lo tanto condiciones antes
(precondiciones) y despues (postcondiciones) de la ejecución de determinadas lineas
de código, lo que da lugar a las pruebas unitarias.
Ejemplo
int b= 3;
b= b+8;
System.out.println(“b tiene valor: “, b);
(b==11) //assert
b= b*2;