Está en la página 1de 49

Pruebas de software

Principios básicos del proceso de Pruebas

Rafael Poma Laura – rpomalaura@gmail.com – Junio,2014


Pruebas de Software : Temas

 Introducción
 Un poco de historia
 Por que son necesarias las pruebas
 Peores errores de la historia
 Definiciones básicos
 Errores, defectos y fallas
 Las pruebas, y los riesgos, Pruebas Vs. Depuración
 Recomendaciones para unas pruebas exitosas
 Trabajo encomendado
Introducción – Un poco de Historia
Software:
• Especifica el conjunto de programas informáticos que se desarrollan en el
entorno de una computadora
• Papel del software en la sociedad ha cambiado significativamente en los
últimos 50 años
• mejoras en rendimiento del hardware
• cambios en arquitecturas informáticas
• aumentos de memoria y capacidad de almacenamiento
• variedad de dispositivos de entrada y salida
• ...
• Importancia profesional y personal de la Informática
• Disminuye el precio del hardware
• Aumenta la demanda de nuevas aplicaciones
Introducción – Un poco de Historia

• Sistemas cada vez más sofisticados y complejos


• Se ha pasado de ser una herramienta para la resolución de problemas a
una industria
• Características del software
• El software se desarrolla, no se fabrica
• El software no se estropea
• Aunque la industria tiende a ensamblar componentes, la mayoría del software se
construye a medida
Introducción : Un poco de historia

• Años 40 -> Fundamentos de la computación moderna


• Principios de los 60 -> Consolidación del desarrollo de software de
aplicaciones relativamente grandes
• Finales de los 60 -> Crisis del software
• Imposibilidad de desarrollar proyectos de una dimensión acorde con los
avances tecnológicos de la época.
• 1968 -> El comité científico de la OTAN patrocina una conferencia en
Alemania, para identificar, clasificar y discutir los problemas que se
producían en el desarrollo de grandes proyectos
• Resultado: el desarrollo del software es una tarea de ingeniería (se acuña el
término de Ingeniería del Software)
• Ingeniería del Software:
• Boehm, 1976

“Aplicación práctica del conocimiento científico en el diseño y


construcción de programas de computadora y la documentación
asociada requerida para desarrollar, operar y mantenerlos”
• IEEE, 1993
• IEEE
“Aplicación de un enfoque sistemático, disciplinado y cuantificable al
desarrollo, operación y mantenimiento del software”
Historia de las Pruebas
 La primera referencia aparece en 1950
 Recién en 1957 fue distinguida del debugging
 La Prueba de Software puede ser usada para mostrar la
presencia de bugs, pero nunca su ausencia (Dijkstra en 1970)
 “La prueba continúa estando entre las artes oscuras del
desarrollo de software” Myers
El software no es perfecto
Introducción

Importancia de las Pruebas de Software

Por qué son necesarias las Pruebas ?


Importancia de las pruebas de software Introducción

Introducción
Porque son necesarias las pruebas?
 A la empresa  Al entorno
• Reputación dañada acerca de • Contaminación
la calidad • Desperdicio de Recursos
• Costos de mantenimiento
altos e impredecibles  A las personas, sociedades y
• Retrasos inesperados en estados
ciclos de versiones • Perdida de trabajos
• Falta de confianza en el • Perdida de vidas
sistema • Perdida de derechos
• Demandas • Perdida de Guerras
Importancia de las pruebas de software Introducción

Introducción
En un proyecto de desarrollo de software los errores (bugs
en inglés) puede presentarse en cualquiera de las etapas
del ciclo de vida del software

Aún cuando se intente detectarlos despúes de cada fase


utilizando técnicas como la inspección, algunos errores
permanecen sin ser descubiertos
Importancia de las pruebas de software Introducción

Introducción

Por lo tanto es muy probable que el código final contenga errores


de requerimientos y diseño, adicionales a los introducidos en la
codificación
Importancia de las pruebas de software Introducción

Introducción

o Las pruebas de software son una parte importante pero


muy costosa del proceso de desarrollo de software

o Pueden llegar a representar entre el 30 y 50 % del costo


total del desarrollo del software [Myers, 2004]

o Sin embargo, los costos de las fallas en un software en


operación pueden llegar a ser mucho mayores
(catastróficos)
Importancia de las pruebas de software Introducción

Introducción
Algunos de los peores errores de la historia

Se colapsa el aeropuerto de Los Angeles (2007)

Más de 17 mil personas se quedaron en tierra por un problema de


software que provocó conflictos en una tarjeta de red que bloqueó
toda la red informática
Importancia de las pruebas de software Introducción

Introducción
Algunos de los peores errores de la historia

El lanzamiento comercial y la producción del Airbus A380 se


retrasa más un año (2006)

Diferencias entre versiones de las herramientas CAD (Computer


Aided Design) usadas en las fábricas de Hamburgo y Toulouse
provocaron un problema en el cableado (530km de cables)
Importancia de las pruebas de software Introducción

Introducción
Algunos de los peores errores de la historia

Sobredosis radiológica en el Instituto Nacional del Cáncer de


Panama (2000)
Errores en los procedimientos y un fallo de software causan que se apliquen
dosis erróneas de radiación
8 personas murieron y 20 tuvieron problemas de salud graves. Los
médicos responsables del hecho fueron acusados de asesinato
Importancia de las pruebas de software Introducción

Introducción

Como pueden observar las pruebas de software tienen un rol muy


importante en el aseguramiento de la calidad ya que permiten
detectar los errores introducidos en las fases previas del proyecto

Durante esta platica analizaremos algunas de las estrategias y


técnicas más importantes para efectuar las pruebas de software
Quieres saber algo más ?

Definiciones …
Conceptos
 Prueba es una actividad realizada para evaluar la
calidad del producto y mejorarla, identificando
defectos y problemas.
La prueba de software (testing) es la verificación
dinámica del comportamiento de un programa
contra el comportamiento esperado, usando un
conjunto finito de casos de prueba, seleccionados
de manera adecuada desde el dominio infinito de
ejecución.
Conceptos
 “Prueba de Software es la ejecución del código
usando combinaciones de entradas, en un
determinado estado, para revelar defectos.”
 “Prueba de Software […] es el diseño e
implantación de un software especial: uno que
ejercita otro software con la intención de hallar
defectos.” Robert V. Binder, Testing Object-Oriented
Systems: Models, Patterns, and Tools (1999)
En qué consisten las pruebas?
 Determinar qué partes del sistema desea
probar
 Definir valores de entrada que aporten
información significativa
 Correr el software con los valores de entrada

 Comparar los resultados producidos con los


esperados
 (Medir características de ejecución: tiempo,
memoria usada, etc).
Conceptos
¿Estamos Verificación: El proceso de evaluación de
construyendo un sistema (o de uno de sus componentes
correctamente
el producto?
para determinar si los productos de una
fase dada satisfacen las condiciones
impuestas al comienzo de dicha fase.

 Validación: El proceso de evaluación de


¿Estamos un sistema o de uno de sus componentes
construyendo el
producto
durante o al final del proceso de
correcto? desarrollo para determinar si satisface los
requisitos marcados por el usuario.
Conceptos
Defecto (defect, fault, «bug»): Un defecto en el software como, por ejemplo, un
proceso, una definición de datos o un paso de procesamiento incorrectos en un
programa.
Fallo (failure): La incapacidad de un sistema o de alguno de sus componentes para
realizar las funciones requeridas dentro de los requisitos de rendimiento especificados.
Error (error): tiene varias acepciones:
Fallo • La diferencia entre un valor calculado, observado o
medio y el valor verdadero, especificado o
teóricamente correcto.
Defecto • Un defecto

Fallo
• Un resultado incorrecto
• Una acción humana que conduce a un resultado
Error incorrecto
Conceptos
 Falla – inhabilidad que manifiesta un sistema para
realizar una función necesaria
 Evidenciado por:
 Salida incorrecta
 Terminación anormal
 Limitaciones de tiempo o espacio incumplidas

 Defecto – código incorrecto o faltante


 Ejecución puede resultar en una falla
 Error – acción humana que produce un defecto
 Problema – error, falla, defecto
Te gustaría pasar por esto ?
Explicación …
Errores, defectos y fallas

?!
puede generar que puede generar

un error humano Un defecto una falla

(interno) (externa)
Explicación : Relación entre defecto – falla - error
Explicación : Relación entre defecto – falla - error
Descubriendo el origen
De donde vienen los defectos y que es lo que ocasionan?
• La gente comete errores los cuales crean defectos en el sistema
• Requisitos y especificaciones de diseño
• Código (lógica de negocios e interfaz de usuario)
• Documentación (electrónica e impresa)
• Cuando un código defectuoso es ejecutado ocurren fallas
• Si estas fallas son visibles a los clientes, usuarios u otros interesados,
podrían resultar en insatisfacción con la calidad del sistema
Descubriendo el origen
De donde vienen los defectos y las fallas?
• Los defectos ocurren debido a:
• Presión de tiempo
• Complejidad del código, infraestructura o problemas a ser resueltos
• Las tecnologías cambian continuamente y deben engranar
• Muchas interacciones del sistema
• Las fallas ocurren debido a defectos y …
• Condiciones del entorno
• Uso incorrecto (deliberado o accidental)
Importancia de las pruebas de software Conceptos básicos

!! Un descanso por hoy !!

Lectura de clase: La carta del defecto

http://www.testinggeek.com/its-defect-speaking
Importancia de las pruebas de software Conceptos básicos

Entonces … cómo organizar el proceso de Pruebas ?


Importancia de las pruebas de software Conceptos básicos

Conceptos básicos :
Proceso de pruebas

La forma más común de organizar las actividades relacionadas al


proceso de pruebas de software [Burnstein, 2003] son:

 Planeación, fija las metas y una estrategia general de pruebas


 Preparación, se describe el procedimiento general de pruebas y
se generan los casos de prueba específicos.
 Ejecución, incluye la observación y medición del comportamiento
del producto
 Análisis, incluye verificación y análisis de resultados para
determinar si se observaron fallas.
 Seguimiento, si se detectaron fallas, se inicia un monitoreo para
asegurar que se remueva el origen de éstas
Importancia de las pruebas de software Conceptos básicos

Conceptos básicos
Casos de prueba y criterios de prueba

 Generar casos de prueba efectivos que revelen la presencia


de fallas es fundamental para el éxito del proceso de pruebas
(etapa de preparación)

 Idealmente, se debería determinar un conjunto de casos de


prueba tales que su ejecución exitosa implique que no hay
errores en el software desarrollado

 Comúnmente este objetivo ideal no se puede lograr debido a


las limitaciones prácticas y teóricas
Importancia de las pruebas de software Conceptos básicos

Conceptos básicos
Casos de prueba y criterios de prueba...

 Cada caso de prueba cuesta dinero: esfuerzo para


generarlo, tiempo de cómputo para ejecutarlo, esfuerzo
para evaluar los resultados

 Por lo tanto, el número de casos de prueba necesarios


para detectar los errores debe ser minimizado para
reducir costos
Importancia de las pruebas de software Conceptos básicos

Conceptos básicos
Casos de prueba y criterios de prueba...

 Cada caso de prueba cuesta dinero: esfuerzo para generarlo, tiempo de cómputo para
ejecutarlo, esfuerzo para evaluar los resultados
Importancia de las pruebas de software Conceptos básicos

Conceptos básicos
Objetivos del proceso de pruebas

 Los dos objetivos principales del proceso de pruebas:


 Maximizar el número de errores detectados (cobertura)
 Reducir al mínimo el número de casos de prueba (costo)

 Como con frecuencia son contradictorios, el problema de seleccionar el


conjunto de casos de prueba con el que un programa debe ser probado se
vuelve una tarea muy compleja
Importancia de las pruebas de software Conceptos básicos

Conceptos básicos
Objetivos de las pruebas

Los típicos objetivos generales de las pruebas


• Encontrar defectos y proporcionar a los programadores con la información
que ellos necesitan para corregir defectos importantes.
• Ganar confianza acerca del nivel de calidad del sistema
• Prevenir defectos (a través de la participación temprana en las revisiones y el
diseño anticipado de las pruebas)
Importancia de las pruebas de software Conceptos básicos

Las pruebas hacen gestión de Riesgos de Calidad

• Debido a los defectos y fallas, un sistema esta sujeto a varios riesgos


• Riesgo: es un factor que podría resultar en futuras consecuencias
negativas, usualmente expresado como el impacto y probabilidad.
• Existen otro riesgos y restricciones para un proyecto de software (riesgos
de proyecto) que las pruebas no pueden gestionar mucho.
• Riesgos al implementar todas las características
• Riesgos del retraso de cronogramas
• Riesgos del presupuesto
• Riesgo de calidad: sistema listo para los clientes
• Las pruebas gestionan los riesgos de calidad de varias maneras:
• Las pruebas proporcionan la información para guiar al proyecto, reducir y gestionar
los riesgos, y reparar los problemas importantes.
• Las pruebas pueden también abordar las necesidades de cumplimiento,
contractuales y reguladoras.
Importancia de las pruebas de software Conceptos básicos

Las pruebas vs. Depuración

• Es muy importante distinguir entre pruebas y depuración


• Las pruebas encuentran fallas que son causadas por los defectos
• Depuración…
• … Identifica la causa raíz de un defecto…
• … repara el código…
• … y comprueba que el defecto haya sido corregido correctamente
• Las pruebas de confirmación (repetición de pruebas) aseguran que la
corrección resuelve las fallas observadas.
• Diferentes responsabilidades:
• La prueba de probadores
• La depuración de los programadores
Importancia de las pruebas de software Conceptos básicos

Las pruebas son más que la ejecución de pruebas

Un problema común para los grupos de pruebas es cuando ellos


piensan en las pruebas meramente como la ejecución de pruebas
contra el sistema.
Otras actividades de pruebas, antes y después de la ejecución,
incluyen:
Planificar y controlar
Escoger condiciones de pruebas
Diseñar casos de pruebas
Comprobar resultados de pruebas
Evaluar criterios de salida
Informar resultados de pruebas
Tareas de cierre/fin de la prueba
Importancia de las pruebas de software Conceptos básicos

Ideas paradógicas de las pruebas

• La prueba exhaustiva del software es impracticable (no se


pueden probar todas las posibilidades de su
funcionamiento ni siquiera en programas sencillos).

• El objetivo de las pruebas es la detección de defectos en


el software (descubrir un error es el éxito de una
prueba).
• Mito: Un defecto implica que somos malos profesionales
y que debemos sentirnos culpables.

Todo el mundo comete errores.


Importancia de las pruebas de software Conceptos básicos

Recomendaciones para unas pruebas exitosas (1/3)

• Cada caso de prueba debe definir el resultado de salida esperado que se comparará
con el realmente obtenido.
• El programador debe evitar probar sus propios programas, ya que desea (consciente
o inconscientemente) demostrar que funcionan sin problemas. Además, es normal
que las situaciones que olvidó considerar al crear el programa queden de nuevo
olvidados al crear los casos de prueba.
• Se debe inspeccionar a conciencia el resultado de cada prueba, y así, poder descubrir
posibles síntomas de defectos.
• Al generar casos de prueba, se deben incluir tanto datos de entrada válidos y
esperados como no válidos e inesperados.
Importancia de las pruebas de software Conceptos básicos

Recomendaciones para unas pruebas exitosas (2/3)


• Las pruebas deben centrarse en dos objetivos (es habitual olvidar el segundo):
• Probar si el software no hace lo que debe hacer
• Probar si el software hace lo que debe hacer, es decir, si provoca efectos secundarios
adversos.
• Se deben evitar los casos desechables, es decir, los no documentados ni diseñados
con cuidado. Ya que suele ser necesario probar muchas veces el software y por tanto
hay que tener claro qué funciona y qué no.

• No deben hacerse planes de prueba suponiendo que, prácticamente, no hay


defectos en los programas y, por lo tanto, dedicando pocos recursos a las pruebas.
Siempre hay defectos.
Importancia de las pruebas de software Conceptos básicos

Recomendaciones para unas pruebas exitosas (3/3)

• La experiencia parece indicar que donde hay un defecto hay otros, es decir, la probabilidad
de descubrir nuevos defectos en una parte del software es proporcional al número de
defectos ya descubierto.
• Las pruebas son una tarea tanto o más creativa que el desarrollo de software. Siempre
se han considerado las pruebas como una tarea destructiva y rutinaria.

Es interesante planificar y diseñar las pruebas para poder detectar el máximo


número y variedad de defectos con el mínimo consumo de tiempo y esfuerzo.
!! Por ultimo … recuerda siempre !!
Importancia de las pruebas de software Conceptos básicos

!! No es posible probar completamente un programa !!

 Para probar completamente un sistema se deben


ejercitar todos los caminos posibles del programa a
probar.
 Myers mostró en 1979 un programa que contenía un
loop y unos pocos if, este programa tenia 100 trillones
de caminos, un tester podía probarlos todos en un
billón de años.