Transcript descarguen

Testing
y algo más . . .
[email protected]
Conceptos - Testing
• Según IEEE standards 1999. “El testing de software es el proceso
de analizar un producto de software para detectar las diferencias
entre el comportamiento real con el pedido, y para evaluar las
funcionalidades y características no funcionales del software”.
• O sea, es el proceso que compara “lo que es” con “lo que
debería ser”.
Conceptos - Calidad
• Aptitud del producto o servicio para satisfacer las
necesidades del usuario.
• Propiedad o conjunto de propiedades inherentes a algo,
que permiten juzgar su valor.
• Cualidad de un producto de software
¿QA o QC?
•
Mito
 Las tareas de testing muchas veces son mal llamadas como QA (Aseguramiento de la calidad),
cuando en realidad estas tareas son de QC (Control de Calidad).
•
Aseguramiento de la calidad (QA)
 Plantear, organizar, dirigir y controlar la calidad en un sistema con el objetivo de dar al cliente
productos con la calidad adecuada.
•
Control de calidad (QC)
 Mecanismos, acciones y herramientas que se utilizan para detectar la presencia de errores.
•
En otras palabras, QA es proactivo ya que trata sobre los procesos y cómo prevenir
defectos (por ej.: definición de procesos, entrenamiento, auditorías, etc.), mientras que
QC es reactivo, ya que trata sobre los productos y como encontrar defectos (por ej.:
testing, revisiones por pares, inspecciones, etc.).
Etapas de un proyecto de Testing
Preparación
ambiente
Startup
Ejecución
Definición
casos
Seguimiento
de
incidentes
Definiciones
•
Error
 Equivocación cometida por un humano durante el proceso de desarrollo.
•
Defecto (defect o fault)
 Consecuencia de un error: están presentes en un producto de software. La presencia de un
defecto diferencia un producto correcto de uno incorrecto.
•
Fallo (failure)
 Manifestación del defecto: diferencia entre los resultados esperados y reales.
Relación entre error, defecto y falla
•
Un error lleva a uno o más defectos, que están presentes en el código.
•
Un defecto lleva a cero, una o más fallas.
•
La falla es la manifestación del defecto.
•
Una falla tiene que ver con uno o más defectos.
Más definiciones
•
Testear

Ejecutar un programa con el objeto de identificar fallos, comparando el resultado esperado con
el resultado obtenido a partir de la ejecución.
•
Axiomas del testing
 “El Testing solo puede mostrar la presencia de defectos, no su ausencia”. (Dijkstra)
 El objetivo del testing es encontrar errores.
 Un test solo es exitoso si encuentra errores.
 Cuando cumplimos el rol de Tester debemos ser creativos… pero para destruir.
 Bug cero = falacia
•
Cobertura o Cubrimiento
 Es una medida de qué tan completo fue el testing (en función de una estrategia particular).
 Toda estrategia tiene asociado su concepto de cobertura.
Más definiciones
• Casos de prueba
 Descripciones de qué se va a probar.
 Crear casos es un proceso creativo.
• Datos de prueba
 Lotes de datos necesarios para ejecutar un caso de test.
 Crear datos de test es un proceso laborioso, y muy poco creativo.
Más definiciones
• Test Limpio (o positivo)
 Intenta mostrar que el producto satisface sus requerimientos.
• Test Sucio (o negativo)
 El objetivo es romper el sistema.
• Test de regresión
 Luego de agregar una nueva funcionalidad, se vuelven a probar
(casos más importantes) de las funcionalidades ya existentes.
¿Por qué siempre hay que volver
a probar?
Joshua Bloch–JDK (java.util.Arrays):
public static int binarySearch(int[] a, int key) {
int low = 0;
int high = a.length - 1;
int mid = (low + high) / 2;
while (low <= high) {
int midVal = a[mid];
if (midVal < key)
low = mid + 1
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
Sacado de una presentación de Ernesto Kiszkurno
Técnicas de testing
• Estático
 Buscan fallas sobre el sistema en reposo.
 Se puede aplicar sobre artefactos de requerimientos, análisis, diseño y
código.
 Técnicas: Revisiones, Inspecciones, Walkthrough y Auditorías de calidad.
• Dinámico
 Se ejecuta y observa el comportamiento de un producto.
Estímulo  Proceso  Respuesta
 Tipos
 Caja Negra: Requerimientos
 Caja Blanca: Código
Testing estático
Revisiones de documentación
• Tipos de problemas que se encuentran
 Indefiniciones
 Inconsistencias
• Qué revisar
 Requerimientos
 Diseños
 Casos de pruebas
 Planes de proyecto
Testing estático
Técnicas
• Inspecciones (peer-reviews)
• Presentador
• Con preparación de los participantes
• Informe
• Generalmente 2 a 4 partcipantes
• Walkthroughs
• Presentador
• Sin preparación de los partcipantes
• Gran cantidad de partcipantes
• Sin informe
Testing estático
Técnicas
• Auditorías
• Preparada
• Sin presentador
• Auditor y auditado
• Informes
Break
• 5 minutos 
Testing dinámico
Niveles de testing
• De Unidades
• Pruebas de módulos, funcionalidades, etc. de forma unitaria
• De Integración
• Pruebas de módulos, funcionalidades, etc. de forma conjunta
• De Aceptación del Usuario
• Verifican que el sistema/módulo esté listo para su uso
• De Usabilidad
• Verifican la calidad de uso
Testing dinámico
Niveles de testing
• De Volumen
• Verifican que el sistema soporte grandes volumenes de datos
• De Performance
• Verifican que el sistema se encuentre dentro de los parámetros de
performance definidos
• Stress
• Verifican que el sistema soporte grandes cargas de procesamiento
• Del Sistema (o Sub-Sistema)
• Pruebas enfocadas a los requerimientos originales
Testing dinámico
Técnicas de derivación de casos de
prueba
•
Partición de equivalencias
 Particiona el dominio de entrada en un conjunto de clases de entrada (o
inputs) que tienen comportamientos similares .
 Luego se selecciona un valor representativo de cada partición para ser
testeado.
•
Análisis de condiciones de borde
 Variación de la técnica de partición de equivalencias, que se focaliza en los
bordes de cada clase de equivalencia: por arriba y por debajo de cada clase.
•
Test de robustez
 Es una variación de la técnica de análisis de borde.
 Consiste en ingresar no un valor apenas superior al máximo, valor sino
muchísimo mayor, y un valor muchísimo inferior al mínimo valor.
Testing dinámico
Testing automatizado
•
Escribir programas para que realicen pruebas que se harían manualmente.
•
Ventajas
 Ejecuta más pruebas en menos tiempo.
 Efectua pruebas muy dificiles de realizar manualmente.
 Integración continúa y despliegue continuo.
•
Desventajas
 No reemplazan las pruebas manuales, las complementan.
 Encuentran menos defectos que las pruebas manuales.
 Aplicarlo bien, requiere un gran esfuerzo.
• Hay que saber dónde y cuanto aplicarlo!
Testing dinámico
Testing automatizado
Herramientas
• JMeter
• Selenium
• Selenium RC
• Python
• Ruby
• Quick Test Professional – QTP
• Cacique
Testing dinámico
Testing automatizado
Otras herramientas
• NUnit
• moq
• Testlink
• Bugzilla, Mantis, etc.
• Visual Studio For Testers
Testing dinámico
Testing Manual – Algunos nombres
•
•
Testing Independiente

El que desarrolla no prueba.

Mayor experiencia y concentración.

Nadie está motivado para encontrar sus propios errores.
Test exploratorio

•
Risk-based Testing

•
•
Definir y ejecutar el testing al mismo tiempo (testing intuitivo).
Priorizar los componentes y los tipos de testing más críticos.
Testing de Contenidos

Ortografía.

Gramática.
Testing de Compatibilidad

Verificar que la aplicación funciona en distintas plataformas existentes en el mercado (browsers, SOS,
etc.).
•
Delivery Testing

Testear el website en un ambiente real o con sus condiciones.
Testing dinámico
Otros nombres
•
Fuzz Testing
 Automatizada o semi-automatizada.
 Provee ingreso de datos inválidos, inesperados y aleatorios en búsqueda de excepciones y
caídas.
 Utilizado comumente para detectar problemas de seguridad o robustez.
•
Smoke Testing
 Primer test realizado después de un release (pruebas básicas).
 Determina si es posible continuar con el testing (pruebas más intensas).
 Generalmente utilizado para validar un pasaje al ambiente de testing.
•
Sanity Testing
 Generalmente utilizado después de un smoke test. Valida también un pasaje a test.
 Ejecución de un pequeño conjunto de funcionalidades.
 Determina si la lógica de funcionamiento del programa es correcta.
•
Pairwise Testing
 Para cada par de parámetros prueba todas las combinaciones posibles
Detección tardía
¿Preguntas?
Nuestro objetivo es
desarrollar un software con
0 bugs.
Pagaré un bono de 10
dolares por cada bug que
encuentren y arreglen.
Somos ricos!!
Espero que esto conlleve al
comportamiento correcto.
Me escribiré una nueva
minivan esta tarde!