M07 - UF2 Preparación y Distribución de Aplicaciones
M07 - UF2 Preparación y Distribución de Aplicaciones
M07 - UF2 Preparación y Distribución de Aplicaciones
Preparación y distribución de
aplicaciones
[Parte 1]
TESTING
Hacer pruebas es la forma de asegurarse que lo que queremos que haga nuestro
programa, lo haga, y lo haga sin errores.
Aquí tenemos algunos ejemplos que hacen referencia a los errores más bestias
cometidos mediante Software
(http://www.cs.tau.ac.il/~nachumd/horror.html)
- El mal funcionamiento del lanzador de satélites Ariane 5 fue causado por una
rutina de excepción de software defectuosa resultante de una mala
conversión de punto flotante de 64 bits a entero de 16 bits
Pruebas de Regresión
Las pruebas de regresión son cualquier tipo de pruebas de software con el objeto
de descubrir errores (bugs), carencias de funcionalidad, o divergencias funcionales
con respecto al comportamiento esperado del software, causados por la realización
de un cambio en el programa.
Para detectar estos defectos, todo el proyecto debe someterse a una regresión: una
nueva prueba completa de un programa modificado, en lugar de una prueba de solo
las unidades modificadas, para garantizar que no se hayan introducido errores con
las modificaciones.
Como se puede deducir, este tipo de pruebas debe ser automatizado porque puede
estar compuesto por decenas o miles de pruebas unitarias, de integración o más.
Una versión menos costosa, podría ser construir pruebas que repliquen las acciones
que provocaron la regresión, y comprueben que han sido corregidos al no volver a
sucederse los errores; además de añadir los test unitarios que aseguren que el
código que ha corregido la regresión funciona correctamente.
Prueba de Estrés
Pruebas de Seguridad
Muchos proyectos utilizan un enfoque de caja negra para las pruebas de seguridad,
lo que permite a los expertos, sin conocimiento del software, probar la aplicación en
busca de agujeros, fallos, exploit y debilidades.
Definición de Testing
Problema
Los programadores reconocen la utilidad de las pruebas, pero ... pocos escriben test
drivers para realizar pruebas de unidad.
¿Por qué ?
Test manager
● Planifica proyectos y gestiona el grupo de testers
● Controla la evaluación final del proyecto.
ingeniero de Test
● Controla que los tests se realizan y se documentan tal cómo se
especifica en los requerimientos y por el test manager.
● Implementa casos de prueba (test case)
Tester
● Realiza las pruebas y documenta los resultados.
User(usuario)
● Da feedback sobre versiones alfa y beta.
Principios del Testing
• Los defectos más graves son los que impiden al programa cumplir las
especificaciones.
Caja Negra
Caja Blanca
- Estructura de datos
- Lógica y estructura de un componente
- Interfaz de un componente
- Funciones de un componente
Pruebas de sistema
● Performance testing
Rendimiento (velocidad, I/O, latencia, robustez, escalabilidad, ...) en tiempo
de ejecución.
Objetivos:
Las pruebas de sistema tienen que pasar por dos procesos diferentes, verificación y
validación.
● Verificación : Proceso para determinar si los resultados de una fase dada del
desarrollo cumplen los requerimientos establecidos en la fase previa; por
ejemplo, ¿se ajusta el programa al diseño?
→ ¿Estamos construyendo el software correcto? (el que hay que hacer) ← Caja Negra
Caja Negra
1 < = x → válido
→ En algunos casos de pruebas, se definen las fronteras del dominio de los datos
de entrada → Se cogen todos los valores frontera y límite entre ambos lados del
valor límite.
Otro ejemplo:
No hay que limitarse a sólo valores numéricos, si no, al concepto en general de los
casos límite.
Otro ejemplo:
Caso de uso
Flujos alternativos:
– Casos opcionales, excepcionales o fuera de la norma.
Cada flujo se descompone en una lista de pasos o eventos, en que se explica qué
hace un actor y qué responde a la aplicación (como en un diálogo).
Ejemplo de prueba y casos de uso cajero automático:
• Flujos alternos:
- No es una tarjeta válida
- Cajero automático sin dinero
- Fondos insuficientes en el cajero automático para dispensar la cantidad solicitada
- PIN incorrecto
- Sin cuenta / Tipo de cuenta incorrecto (p. Ej., Congelada)
- Fondos insuficientes en la cuenta
- Se alcanzó la cantidad máxima diaria de retiro
- El cliente abandona en cualquier momento
- Inclinación: los sensores ATM detectan una señal de alarma
etc ...
Generación de casos de prueba
[Fin parte 1 ]
[Parte 2]
Test Driven Development
- ¿Qué es un test?
- Desde el punto de vista de un tester (persona que testea)
- Encontrar errores.
- Desde el punto de vista de un programador…
- Asegurarse de que el código es correcto.
Introducción
• En la práctica:
– Dividimos los casos de uso en ‘n’ ejemplos hasta que ese número sea suficiente
para describir la tarea sin ambigüedades.
¿Qué problemas prácticos cree que pueden aparecer si queremos hacer unit-testing
de los métodos de la clase AccountService?
Definición: “Mock object is object created to stand in for object that your code will be
collaboraing with. Your code can call methods on the mock object, which will deliver
results as set up by your tests”.
– Sustituyen los objetos con los que interactúa el SUT (Subject under Test).
– Son capas vacías que proveen métodos con los que interactúa el SUT (Subject
under Test).
Ejemplo
Por lo tanto…
Los casos de prueba deben de cubrir con true o false cada una de las condiciones
de la expresión lógica
Path Coverage: Se ejecutan todos los paths
• ¿Por qué?
Hay una fórmula para saber cuántos arcos y cuántos nodos hay en un path
coverage: V(G) = E – N + 2 donde E = #arcos i N = #nodos a G.
Ejemplo:
• Definimos test cases para ejecutar estos paths, y por tanto parámetros que nos
hagan ejecutar estos paths.
Loop Testing
Loop simple
– Test cases
• Evitar el loop
• Una pasada por el loop
• Dos pasadas por el loop
• m pasadas por el loop m<n
• (n-1), n pasadas por el loop (n es el número máximo de pasadas) donde n
es el número máximo posible de pasadas
Loops anidados
[Fin parte 2]
JUnit - Implementación en intellyJ IDEA
1 - Creamos un nuevo proyecto Kotlin; una vez creado, clicamos en la carpeta “src”
y creamos una nueva carpeta (package) y la denominamos testing.
Una vez creado, creamos en ella una nueva java class (testing01.java) y en ella
dentro del a clase escribimos la sentencia: @Test