SlideShare una empresa de Scribd logo
1 de 267
Ph.D. Franklin Parrales 1
13/05/2021
Construcción de Software Carrera de Software
PRINCIPIOS BÁSICOS DE
CONSTRUCCIÓN DE
SOFTWARE Y TRATAMIENTO
DE EXCEPCIONES
Unidad 1B
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Construcción de Software
Ph.D. Franklin Parrales 2
13/05/2021
Construcción de Software Carrera de Software
Objetivo general de la Unidad 1
Identificar los principios básicos del desarrollo de software
y del tratamiento de excepciones en el desarrollo mediante
la aplicación de técnicas usadas en la industria para
construir software seguro.
Ph.D. Franklin Parrales 3
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
Unidad 1B
Ph.D. Franklin Parrales 4
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 5
13/05/2021
Construcción de Software Carrera de Software
Referencias
• Myers, et al. (2004),
“The Art of Software
Testing”, Wiley, Estados
Unidos, 2004, ISBN: 0-
471-46912-2
Ph.D. Franklin Parrales 6
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
– Pruebas de software: revisión de tipos de prueba
– Pruebas unitarias
– Depuración del software: importancia, buenas
prácticas, herramientas
– Plan de pruebas y documentación de las pruebas
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 7
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 8
13/05/2021
Construcción de Software Carrera de Software
Temario
FASES DE LA PRUEBA
• Diseño de las pruebas (¿técnicas?)
• Generación de casos de prueba (¿datos de prueba?)
• Definición del procedimiento de la prueba (¿cómo, donde?)
• Ejecución de la prueba
• Informe de la prueba (¿resultados?)
TÉCNICAS DE PRUEBA
• Pruebas estructurales o de Caja Blanca.
• Pruebas funcionales o de caja negra.
NIVELES DE PRUEBA
• Pruebas unitarias.
• Pruebas de integración.
• Pruebas de sistema.
• Pruebas de aceptación.
• Pruebas de regresión.
Aspectos que
trataremos hoy
Ph.D. Franklin Parrales 9
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Objetivo: repasar las ideas principales
sobre las pruebas del software.
Ph.D. Franklin Parrales 10
13/05/2021
Construcción de Software Carrera de Software
Bugs y testing
• Confiabilidad (reliability): Probabilidad de que un sistema
de software no cause fallas en condiciones específicas.
– Medido por tiempo de actividad, MTTF (tiempo medio hasta la
falla), datos de fallas.
• Bugs son inevitables en cualquier sistema de software
complejo.
– Estimaciones de la industria: 10-50 errores por 1000 líneas de
código.
– Un error puede ser visible o puede esconderse en su código
hasta mucho más tarde.
• testing: Un intento sistemático de revelar errores.
– Prueba fallida: se demostró un error.
– Prueba aprobada: no se encontró ningún error (para esta
situación particular).
Ph.D. Franklin Parrales 11
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Ariane 5.
Lanzado por primera vez el 4 de junio de
1996.
Motivo:
Fallo software. La programación no se había probado lo suficiente.
Ariane 5.
36.7 segundos después explotó.
En concreto el fallo fue un trozo de software que habían reutilizado
del Ariane 4, pero que no lo habían probado en el Ariane 5
Ph.D. Franklin Parrales 12
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Sistemas software:
• Mayor tamaño.
• Mayor complejidad.
• Menor tiempo de desarrollo.
• Mayor calidad.
Pruebas:
• Más importancia y
protagonismo día a día.
• Garantizan la calidad del
software.
• Garantizan la satisfacción
de los requisitos.
• Ahorran tiempo y recurso en
el desarrollo.
• Su objetivo: localizar, para
subsanarlas, el mayor
número de deficiencias lo
antes posible.
Un reto a la
Ingeniería de
Software.
Ph.D. Franklin Parrales 13
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Verificación dinámica del
comportamiento del
software a partir de un
conjunto finito de casos de
prueba.
Definición de prueba:
Para probar un software
necesitamos ejecutar ese
software.
Ph.D. Franklin Parrales 14
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Verificación dinámica del
comportamiento del software a
partir de un conjunto finito de
casos de prueba.
Definición de prueba:
Dos conceptos muy
relacionados:
Validación: proceso de evaluar un
sistema o componente durante o al
final del proceso de desarrollo para
determinar si satisface los requisitos
especificados.
1
2
Verificación: proceso de evaluar
un sistema o componente para
determinar si los productos de
una determinada fase satisfacen
las condiciones impuestas al
comienzo de la fase.
Ph.D. Franklin Parrales 15
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Verificación dinámica del
comportamiento del
software a partir de un
conjunto finito de casos de
prueba.
Para probar un programa
tenemos que ejecutarlo.
La prueba tiene un límite.
No vale ejecutar el
programa de cualquier
manera.
Ph.D. Franklin Parrales 16
13/05/2021
Construcción de Software Carrera de Software
Pruebas de Programas
• Pruebas de programas es el proceso de
ejecutar programas con el propósito de
encontrar errores
• Se puede mostrar la presencia de un error
pero no la ausencia [Dijkstra]
• Debería ser visto como el último recurso
para encontrar errores
Ph.D. Franklin Parrales 17
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
Configurar partida:
 El sistema muestra un formulario con todos los
valores configurables.
 El jugador introduce modifica los valores.
 El sistema comprueba la validez de los valores y
vuelve a la pantalla principal.
Acciones
Configuración:
Intentos = 5
Valores = 8
Repetidos = cierto
Valores del prueba Resultado
Una prueba consta, al
menos, de tres
elementos:
Ph.D. Franklin Parrales 18
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
¿Funciona el teléfono?.
Valores de
prueba
Acciones Resultado esperado
123-45-67-89 1. Descolgar auricular.
2. Marcar número de Pepote.
3. Esperar contestación.
(Pepote): “Digameee”.
Veamos un ejemplo sencillo:
Ph.D. Franklin Parrales 19
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
¿Me está bien esta camisa?
Valores de
prueba
Acciones Resultado esperado
Mi cuerpo. 1. Ponerme la camisa.
2. Abrochármela.
3. Moverme un poco.
4. Mirarme al espejo.
Cuidado con la etiqueta o con arrugarla
por si hay que devolverla
Elegancia y confort.
Veamos otro ejemplo sencillo:
Ph.D. Franklin Parrales 20
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
public int suma(int a, int b)
{
return a + b;
}
¿Qué casos de prueba podemos escribir?.
Valores de
prueba
Acciones Resultado
esperado
??? Suma(a, b) ???
Los casos de prueba son
finitos (y cuantos menos,
mejor).
Ph.D. Franklin Parrales 21
13/05/2021
Construcción de Software Carrera de Software
Introducción a las pruebas
public int suma(int a, int b)
{
return a + b;
}
¿Qué casos de prueba podemos escribir?.
Valores de
prueba
Acciones Resultado
esperado
0, 0 Suma(a, b) 0
0, b = no 0 Suma(a, b) b
3, 4 Suma(a, b) 7
-2, -8 Suma(a, b) -10
-3, 6 Suma(a, b) 3
Integer.MAX_V
ALUE, 6
Suma(a, b) -2147483643
Y algunas permutaciones más.
Ph.D. Franklin Parrales 22
13/05/2021
Construcción de Software Carrera de Software
Fase de pruebas
• La fase de pruebas se realiza
una vez integrado cada uno
de los módulos del sistema.
• La fase de pruebas se realiza
de distintas formas tratando
de encontrar la mayoría de
los errores que se encuentran
de manera inherente en el
software.
Ph.D. Franklin Parrales 23
13/05/2021
Construcción de Software Carrera de Software
Dificultades de las pruebas
• Percepción de algunos desarrolladores y
administradores:
– Las pruebas se consideran un trabajo de novatos.
– Asignado a los miembros del equipo con menos
experiencia.
– Hecho como una ocurrencia tardía (si es que se hace).
• "Mi código es bueno; no tendrá errores. No necesito probarlo".
• "Encontraré los errores ejecutando el programa cliente".
• Limitaciones de lo que las pruebas pueden mostrarle:
– Es imposible probar completamente un sistema.
– Las pruebas no siempre revelan directamente los errores
reales en el código.
– Las pruebas no prueban la ausencia de errores en el
software.
Ph.D. Franklin Parrales 24
13/05/2021
Construcción de Software Carrera de Software
En conclusión
• Probar es ejecutar casos de prueba.
• Caso de prueba:
entrada + acciones + salida
salida obtenida == salida esperada
salida obtenida != salida esperada
• ¿Un programa que pasa todos sus casos
de prueba es un programa sin errores?.
Ph.D. Franklin Parrales 25
13/05/2021
Construcción de Software Carrera de Software
En conclusión
No
Las pruebas sólo pueden encontrar
los errores que buscan.
Por esto es tan importante un buen
diseño de pruebas->Plan de pruebas
Ph.D. Franklin Parrales 26
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 27
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
• Existen muchos tipos de pruebas dependiendo
de la labor y características de cada una de
ellas.
– Pruebas Alfa: se realizan por el usuario final en un
ambiente controlado.
– Pruebas Beta: se realizan por el usuario sin controlar
el ambiente.
Ph.D. Franklin Parrales 28
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
– Pruebas de caja blanca también llamadas
transparentes se concentran en lo que es el
código fuente.
Ph.D. Franklin Parrales 29
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
– Pruebas de segmentos: No se pueden tener
pruebas que abarquen el 100% de los casos
de uso. Se deben realizar pruebas de
segmentos.
• Las pruebas de segmentos son bloques de
instrucciones.
• Es recomendable realizar pruebas de trazado
(assert) para visualizar en donde ocurren los
errores.
• Se recomienda probar lo antes posible cualquier
fragmento de código.
Ph.D. Franklin Parrales 30
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
– Pruebas de caja negra: están orientadas a lo que se
espera realicen los componentes modulares del
sistema.
• Son pruebas funcionales y no interesa como se
realizan las cosas sólo que el resultado obtenido
sea el correcto.
• Se recomienda que sean los usuarios quienes las
realicen.
Ph.D. Franklin Parrales 31
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
– Pruebas de estrés se encargan de observar
el rendimiento de la aplicación sobre cargas
demandantes de trabajo: grandes volúmenes
de datos con poco espacio en disco, 90% de
uso de CPU, múltiples conexiones, etc.
Ph.D. Franklin Parrales 32
13/05/2021
Construcción de Software Carrera de Software
Tipos de prueba
• Existen otros tipos de prueba como:
– Pruebas de unidad: se encargan de un
módulo de software en particular.
– Pruebas de Integración: son pruebas que se
realizan con dos o más módulos trabajando
en conjunto.
– Pruebas de aceptación: están más
involucradas en el concepto en sí que en el
desarrollo.
Ph.D. Franklin Parrales 33
13/05/2021
Construcción de Software Carrera de Software
Recuerde que…
• Las pruebas ayudan al aseguramiento de
calidad pero no garantizan que un
software esté 100% libre de errores.
Ph.D. Franklin Parrales 34
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Prueba Unitaria
• Ejecutar cada módulo
• Particionar, definir los casos de prueba.
• Comparar el resultado
Prueba de Regresión
• Identificar errores introducidos por la
combinación de programas probados
unitariamente.
• Determina cómo la base de datos de
prueba será cargada
• Utilizar la técnica down-top.
Pruebas de Humo
• Detectar los errores en realeases
tempranos y de manera fácil
• su objetivo es probar el sistema
constantemente buscando que saque
“humo”
• Realizar una integración de todo el sistema
cada cierto periodo (se recomienda un día,
máximo una semana)
Pruebas del Sistema
• Asegurar la apropiada navegación dentro
del sistema, ingreso de datos,
procesamiento y recuperación.
• deben enfocarse en requisitos que puedan
ser tomados directamente de casos de uso
y reglas y funciones de negocios
• Ejecute cada caso de uso, flujo básico o
función utilizando datos válidos e inválidos
Ph.D. Franklin Parrales 35
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Pruebas de Stress
• Verificar que el sistema funciona
apropiadamente y sin errores
• Las pruebas de stress se proponen encontrar
errores debidos a recursos bajos o completitud
de recursos
• Use los scripts utilizados en las pruebas de
desempeño
Pruebas de desempeño
• Validar el tiempo de respuesta para las
transacciones
• Miden tiempos de respuesta, índices de
procesamiento de transacciones y otros
requisitos sensibles al tiempo
• Modifique archivos de datos (para incrementar
el número de transacciones) o los scripts para
incrementar el número de veces que ocurre
cada transacción
Pruebas de carga
• Validar el tiempo de respuesta para las
transacciones
• Miden tiempos de respuesta, índices de
procesamiento de transacciones y otros
requisitos sensibles al tiempo
• Modifique archivos de datos (para incrementar
el número de transacciones) o los scripts para
incrementar el número de veces que ocurre
cada transacción
Pruebas de volumen
• Verificar el tamaño de la BD, el equipo si es
suficiente etc.
• Las pruebas de volumen hacen referencia a
grandes cantidades de datos para determinar
los límites en que se causa que el Sistema
falle
• Deben usarse múltiples clientes, ya sea
corriendo las mismas pruebas o pruebas
complementarias para producir el peor caso
de volumen
Ph.D. Franklin Parrales 36
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Pruebas de Recuperación y Tolerancia a fallas
• Verificar que los procesos de recuperación
(manual o automática) restauran
apropiadamente la Base de datos
• Estas pruebas aseguran que una aplicación o
sistema se recupere de una variedad de
anomalías de hardware, software o red con
pérdidas de datos o fallas de integridad.
• Se deben utilizar las pruebas creadas para la
Funcionalidad del sistema y Procesos de
Negocios para crear una serie de
transacciones
Prueba de Múltiples Sitios
• Detectar fallas en configuraciones y
comunicaciones de datos entre múltiples sitios
• El propósito de esta prueba es evaluar el
correcto funcionamiento del sistema o
subsistema en múltiples instalaciones.
• Consistencia, empaquetamiento,
sincronización
Prueba de Compatibilidad y Conversión
• Buscar problemas de compatibilidad y
conversión en los sistemas
• El propósito es demostrar que los objetivos de
compatibilidad no han sido logrados y que los
procedimientos de conversión no funcionan.
• Compatibilidad entre programas y Conversión
de datos
Pruebas de Integridad de Datos y Base de
Datos
• Asegurar que los métodos de acceso y
procesos funcionan adecuadamente y sin
ocasionar corrupción de datos.
• La Base de datos y los procesos de Base de
datos deben ser probados como sistemas
separados del proyecto
• Invoque cada método de acceso y proceso de
la Base de datos, utilizando en cada uno datos
válidos e inválidos. Analizar la BD.
Ph.D. Franklin Parrales 37
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Pruebas de Seguridad y Control de Acceso
• Nivel de seguridad de la aplicación: Verifica
que un actor solo pueda acceder a las
funciones y datos que su usuario tiene
permitido
• Seguridad del sistema, incluyendo acceso a
datos o Funciones de negocios e incluyendo
accesos remotos
• Funciones / Seguridad de Datos: Identificar
cada tipo de usuario y las funciones y datos a
los que se debe autorizar.
Pruebas del Ciclo del Negocio
• Asegurar que el sistema funciona de acuerdo
con el modelo de negocios emulando todos
los eventos en el tiempo y en función del
tiempo.
• Deberían emular las actividades ejecutadas en
el a través del tiempo. Debería identificarse un
periodo, como por ejemplo un año, y las
transacciones y actividades que podrían
ocurrir durante un periodo
• Ejecute cada caso de uso, flujo básico o
función utilizando datos válidos e inválidos…
Pruebas de GUI
• La navegación, Los objetos de la ventana y
características, tales como menús, medidas,
posiciones, estados y focos
• La prueba de interfaz de usuario verifica la
interacción del usuario con el software
• Pruebas de crear / modificar cada ventana
para verificar la adecuada navegación y
estado de los objetos.
Pruebas de Configuración
• Validar y verificar que el cliente del sistema
funciona apropiadamente en las estaciones de
trabajo recomendadas.
• Estas pruebas verifican la operación del
sistema en diferentes configuraciones de
hardware y software
• Incluya la apertura o cierre de varias
aplicaciones Microsoft, como Excel y Word (o
algún tipo de software similar a la que se está
probando)
Ph.D. Franklin Parrales 38
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Prueba de Estilo
• Comprobar que la aplicación sigue los
estándares de estilo propios del cliente.
• Se entienden como tales el formato de las
ventanas, colores corporativos, tipos de letra
etc.
• Se realiza una navegación por la aplicación
verificando si se cumplen con los estándares
de GUI del cliente.
Prueba de Aceptación
• Determinación por parte del cliente de la
aceptación o rechazo del sistema
desarrollado.
• La prueba de aceptación es ejecutada antes
de que la aplicación sea instalada dentro de
un ambiente de producción
• Realización de los documentos de planes de
prueba de aceptación y especificación de los
mismos, basados en los criterios de
aceptación del cliente.
Prueba de Instalación
• Verificar y validar que el sistema se instala
apropiadamente en cada cliente, bajo las
siguientes condiciones: Instalaciones nuevas y
actualizaciones
• El primero es asegurar que el sistema puede
ser instalado en todas las configuraciones
posibles .El segundo propósito verificar que,
una vez instalado, el sistema opera
correctamente.
• Diseñar scripts para validar las condiciones de
la máquina a instalar.
Prueba de Documentación y Procedimiento
• Evaluar la documentación del usuario
• Evaluar la exactitud y claridad de la
documentación del usuario y para determinar
si el manual de procedimientos trabajará
correctamente como una parte integral del
sistema.
• Revisar la documentación del proyecto contra
las funcionalidades del sistema y su
configuración física.
Ph.D. Franklin Parrales 39
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Pruebas Funcionales
• Se asegura la trabajo apropiado de los
requisitos funcionales, incluyendo la
navegación, entrada de datos, procesamiento
y obtención de resultados
• Las pruebas Funcionales deben enfocarse en
los requisitos funcionales Diseñar scripts para
validar las condiciones de la máquina a
instalar
• Que los resultados esperados ocurran cuando
se usen datos válidos.
Prueba de Usabilidad
• Determinar la usabilidad del sistema.
• Determina cuán bien el usuario podrá usar y
entender la aplicación. Identifica las áreas de
diseño que hacen al sistema de difícil uso para
el usuario.
• Verificar que la aplicación no presenta los
siguientes problemas de usabilidad típicos:
sistema es demasiado complejo ,
recuperación de errores es pobre ,
procedimientos no son simples ni obvios
Prueba de Campo
• Correr el sistema en el ambiente real para
encontrar errores y validar el producto contra
sus especificaciones originales.
• Realizar un subconjunto válido de pruebas de
sistema.
• Determinar que pruebas de sistema serán
corridas para validar el sistema en producción.
Pruebas Alfa
• Prueba de aceptación para detectar errores en
el sistema bajo un ambiente controlado.
• La verificación involucra la ejecución de partes
o todo del sistema en ambientes simulados,
con el fin de encontrar errores.
• Se llevan a cabo en el lugar en donde fue
desarrollado el sistema
Ph.D. Franklin Parrales 40
13/05/2021
Construcción de Software Carrera de Software
Pruebas generales de software
Pruebas Beta
• Realizar la validación del sistema por parte del
usuario.
• Prueba de aceptación donde La validación (o
pruebas beta) involucra el uso del software en
un ambiente real.
• Se selecciona un grupo de usuarios que
ponen a trabajar el sistema en un ambiente
real. Usan el sistema en sus actividades
cotidianas, procesan transacciones y
producen salidas normales del sistema
Ph.D. Franklin Parrales 41
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 42
13/05/2021
Construcción de Software Carrera de Software
Repaso: Definiciones
• Requerimientos: “¿Qué hace el producto?”
– Expresado sin ambigüedad y de forma verificable
• Arquitectura: “¿Cómo está hecho?” (descripto en el
nivel de abstracción más alto)
– Ej.: Diagrama de bloques; flujo de datos entre estos
• Diseño Detallado: “¿Cómo está hecho?” (descripto en
un nivel de abstracción intermedio)
– Ej.: Especificación de las interfases; descripción detallada
de la operación
• Implementación: “¿Cómo está hecho?” (descripto en
nivel de abstracción bajo)
– Ej.: Código; esquemático; dibujo del circuito impreso
• Integración de módulos diseñados separadamente
– Ej.: Hardware y software
• Verificación: “¿Funciona como debe?”
Ph.D. Franklin Parrales 43
13/05/2021
Construcción de Software Carrera de Software
Repaso: Ciclo de Vida Tipo “V”
• Es una evolución del
anterior. En este, la
verificación se desglosa
en etapas de nivel de
abstracción creciente.
Análisis y
Definición de los
Requerimientos
Diseño de la
Arquitectura del
Sistema
Diseño Detallado Testeo de cada
unidad (unit test)
Instalación,
Operación y
Mantenimiento
Prueba de
Aceptación
Prueba de
Integración
Implementación de
cada unidad
Plan de Pruebas
para Cada Unidad
Plan de Pruebas
de Integración
Plan de Pruebas de
Aceptación
❑ En cada etapa de
diseño se crea un
plan de pruebas,
que es el que guía la
etapa de validación
que le corresponde.
Ph.D. Franklin Parrales 44
13/05/2021
Construcción de Software Carrera de Software
Niveles de Pruebas
• Prueba de unidad (unit testing)
– Se testean unidades individuales de código (software o
hardware) separadamente.
• …por medio de sus interfaces, en un lenguaje de programación
(C, etc.)
– Es el primer paso de un enfoque bottom-up de testeo,
como el que propone el modelo V.
• Prueba de integración (integration testing)
– Se testean los módulos anteriores en conjunto, o sea,
una vez “conectados” entre sí.
• …también por medio de sus interfaces en C u otro lenguaje.
• Prueba de aceptación (acceptance testing o system
testing)
– Se testea que el conjunto cumpla los requerimientos.
– Se lo hace por medio de las interfaces del producto final
• Interfaces al usuario, etc.
Ph.D. Franklin Parrales 45
13/05/2021
Construcción de Software Carrera de Software
Niveles de Pruebas
• También se pueden aplicar pruebas
aleatorias. Lo ideal es poder utilizar un
framework de pruebas.
Ph.D. Franklin Parrales 46
13/05/2021
Construcción de Software Carrera de Software
Niveles de prueba
P
r
o
c
e
s
o
d
e
d
e
s
a
r
r
o
l
l
o
P
r
o
c
e
s
o
d
e
p
r
u
e
b
a
Pruebas
unitárias
Pruebas de
integración
Pruebas de
sistema
Pruebas de
aceptación
Componentes
aislados
Verifican
Interacción
entre
componentes
Verifican
Requisitos del
sistema
Necesidades
de los
usuarios
Verifican
Verifican
Pruebas de
implantación
Paso a
producción
Verifican
Ph.D. Franklin Parrales 47
13/05/2021
Construcción de Software Carrera de Software
Pruebas unitarias
Cuando: Durante la
construcción del sistema.
Objetivo: Prueban el
diseño y el
comportamiento de cada
uno de los componentes
una vez construidos.
Cobertura
CruiseControl
XUnit
TestNG
Cactus
jMock
EasyMock
muJava
CoView
Herramientas:
Ph.D. Franklin Parrales 48
13/05/2021
Construcción de Software Carrera de Software
Pruebas unitarias
Técnicas:
– Análisis de caminos.
– Partición de categorías.
– Mutaciones.
– Algoritmos genéricos.
En general, han sido muy
estudiadas.
Ph.D. Franklin Parrales 49
13/05/2021
Construcción de Software Carrera de Software
Pruebas de integración
Herramientas:
Las mismas, vamos
sustituyendo los mocks
por las clases reales y, si
es necesario, escribiendo
más casos de prueba.
Cuando: Durante la
construcción del sistema
Objetivo: Comprueban la
correcta unión de los
componentes entre sí a través
de sus interfaces, y si cumplen
con la funcionalidad
establecida
Ph.D. Franklin Parrales 50
13/05/2021
Construcción de Software Carrera de Software
Pruebas de integración
Técnicas:
Arriba abajo:
El primer componente que se prueba es el primero
de la jerarquía (A). Una de las ventajas es que las
interfaces entre los distintos componentes se
prueban en una fase temprana y con frecuencia.
Abajo a arriba:
Se prueban primero los componentes de más bajo
nivel (E, F) Este tipo de enfoque permite un
desarrollo más en paralelo, pero presenta mayores
dificultades a la hora de planificar y de gestionar.
Ph.D. Franklin Parrales 51
13/05/2021
Construcción de Software Carrera de Software
Pruebas de sistema
Herramientas:
Cuando: Durante la
construcción del sistema
(partes completas).
Objetivo: Prueban a fondo el
sistema, comprobando su
funcionalidad e integridad
globalmente, en un entorno lo
más parecido posible al
entorno final de producción.
Herramientas:
Técnicas: probar el sistema como
lo hará el usuario final.
JMeter
The Grinch
Avignon
JWebTest Selenium
Abbot
Marathon
HttpUnit
GUItar
Ph.D. Franklin Parrales 52
13/05/2021
Construcción de Software Carrera de Software
Pruebas de implantación
Herramientas:
Cuando: Durante la implantación
en el entrono de producción.
.
Objetivo: Comprueban el correcto
funcionamiento del sistema dentro
del entorno real de producción
(rendimiento, copias de seguridad,
etc.).
Herramientas:
Las mismas. Las pruebas se vuelven
a ejecutar en el entorno real de
producción y se añaden nuevas
pruebas.
.
Ph.D. Franklin Parrales 53
13/05/2021
Construcción de Software Carrera de Software
Pruebas de aceptación
Herramientas:
Cuando: Después de la
implantación en el entorno de
producción.
Objetivo: Verifican que el
sistema cumple con todos los
requisitos indicados y permite
que los usuarios del sistema den
el visto bueno definitivo.
Herramientas:
Las mismas. Las pruebas se vuelven
a ejecutar en el entorno real de
producción y se añaden nuevas
pruebas.
Ph.D. Franklin Parrales 54
13/05/2021
Construcción de Software Carrera de Software
Pruebas de regresión
Cuando: Durante el
mantenimiento del sistema.
Objetivo: Comprobar que los
cambios sobre un componente
de un sistema de información,
no introducen un
comportamiento no deseado o
errores adicionales en otros
componentes no modificados
Herramientas:
Las mismas.
Ph.D. Franklin Parrales 55
13/05/2021
Construcción de Software Carrera de Software
Características de una buena
prueba
• Ha de tener una alta probabilidad de encontrar un fallo.
Cuanto más, mejor.
• No debe ser redundante. Si ya funciona, no lo
probamos más.
• Debe ser la “mejor de la cosecha”. Si tenemos donde
elegir, elegimos la mejor.
• No debería ser ni demasiado sencilla ni demasiado
compleja. Si es muy sencilla no aporta nada, si es
muy compleja a lo mejor no sabemos lo que ha
fallado.
Ph.D. Franklin Parrales 56
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 57
13/05/2021
Construcción de Software Carrera de Software
Pruebas de caja negra, gris y blanca
Caja negra
… requirimientos
Salida real
comparada
con la
salida requerida
Caja blanca
Caja gris
… requirimientos &
elementos claves de
diseño
Entrada determinada por.. Resultado
…elementos
del diseño
Confirmación del
comportamiento
esperado
Como para
las pruebas de
caja negra y
blanca
Ph.D. Franklin Parrales 58
13/05/2021
Construcción de Software Carrera de Software
Técnicas de Prueba
• Caja blanca o pruebas estructurales
– El conocimiento del diseño interno del
software se usa para desarrollar los casos de
pruebas
• Caja negra o pruebas funcionales
– Los casos de prueba son diseñados basados
sólo en la especificación externa del software
• Pruebas basadas en escenarios o casos
de uso
– Actuar como un usuario final y crear
escenarios reales para detectar errores
Ph.D. Franklin Parrales 59
13/05/2021
Construcción de Software Carrera de Software
Técnicas de Prueba (2)
• Pruebas Selectivas
– Generar más casos de prueba para las
funciones o componentes que son más
usados
– Probar más rigurosamente las funciones o
componentes más críticos
– Generar mas casos de prueba para las
funciones o componentes más complejos
Ph.D. Franklin Parrales 60
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 61
13/05/2021
Construcción de Software Carrera de Software
Conceptos
• Espacio de Prueba
– Conjunto de todos los posibles casos de
Prueba
• Pruebas de subdominios
– Subconjuntos del espacio de Prueba
• Línea de Prueba (Test Suite)
– Conjunto de casos de prueba que serán
ejecutados en una fase
Ph.D. Franklin Parrales 62
13/05/2021
Construcción de Software Carrera de Software
Conceptos (2)
• Testbed/Test Harness
– Software adicional desarrollado para soportar
la ejecución de los casos de prueba
• Prueba de Cubrimiento
– Grado en el cual los casos de prueba “pasan”
por el código siendo probado
Ph.D. Franklin Parrales 63
13/05/2021
Construcción de Software Carrera de Software
Posibilidades de entradas para las pruebas
0%
25%
principal
$100 $100M
1%
20%
Infinidad de valores ilegales:
elija una muestra finita.
Infinidad de valores legales:
elija una muestra finita.
estimación de
inflación
tasa de
interés
Ph.D. Franklin Parrales 64
13/05/2021
Construcción de Software Carrera de Software
Pruebas: particiones y límites de entrada
tasa de
interés
0%
25%
principal
$100 $100M
estimación de
inflación
límites (bordes)
1%
20%
Particiones
equivalentes
Una
región
ilegal
Rango de
entradas válidas
Ph.D. Franklin Parrales 65
13/05/2021
Construcción de Software Carrera de Software
Rangos de prueba: casos elementales
1. Dentro del rango
2. En los límites
del rango
3. Fuera del rango
(“illegal”)
rango
Ph.D. Franklin Parrales 66
13/05/2021
Construcción de Software Carrera de Software
Estructura del Espacio de Pruebas
• Taxonomía de los Casos de Prueba
– Pruebas Funcionales: considerar solamente entradas
válidas al sistema y condiciones normales de
operación.
– Pruebas de Robustez: considerar datos de entrada
inválidos, secuencias invalidas de
comandos/acciones, etc.
– Pruebas de Frontera: considerar valores/tamaños
mínimos y máximos para datos de entrada, carga del
sistema mínima y máxima, etc.
– Pruebas de tolerancia a fallas: considerar
condiciones anormales de operación, fallas hardware
y software de la plataforma computacional sobre la
que funciona el software en prueba.
Ph.D. Franklin Parrales 67
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba
• Hacer una lista de los propósitos de
Prueba
– Usar la taxonomía de los casos de prueba
como guía
Ph.D. Franklin Parrales 68
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (2)
• Por cada propósito de Prueba, hacer una
lista de casos de prueba
– Construir una versión preliminar de la lista de
casos de prueba a partir de los escenarios típicos
relacionados con el propósito de prueba
– Enriquecer la lista de casos de prueba,
analizando las posibles variaciones o casos
especiales de los escenarios considerados
– Complementar la lista de casos de prueba,
analizando posibles casos que puedan revelar
errores, usando como guía la siguiente lista de
chequeo:
Ph.D. Franklin Parrales 69
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (3)
– Cuales son los errores típicos encontrados en
productos similares probados en el pasado, y que
casos de prueba se usaron para revelarlos?
– En pruebas del sistema y pruebas de aceptación,
qué casos es probable que los desarrolladores
hubieran pasado por alto (desde el punto de vista
del experto del negocio o dominio de aplicación)?
– En pruebas de unidad y pruebas de integración,
qué características complejas del diseño
pudieron haber sido implementadas de forma
incorrecta?
Ph.D. Franklin Parrales 70
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (4)
– En pruebas del sistema y pruebas de
aceptación, qué aspectos complejos acerca
de los requerimientos pudieron haber sido
mal interpretados por los desarrolladores?
– Qué casos triviales pudieran haber sido no
tenidos en cuenta en la implementación?
Ph.D. Franklin Parrales 71
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (5)
• Para cada caso de prueba, especificar los
pasos para realizar la prueba y los
criterios de aceptación de la prueba, tal
como se indica en el formato:
Ph.D. Franklin Parrales 72
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (6)
• Caso de uso
– Procedimiento
• Criterios de aceptación
– Procedimiento
• Criterios de aceptación
– ...
• Caso de uso
– ...
• ...
Ph.D. Franklin Parrales 73
13/05/2021
Construcción de Software Carrera de Software
Diseño de los Casos de Prueba (7)
• Para cada caso de prueba se debe
especificar
– Instrucciones de prueba: lista de pasos a seguir
por los usuarios encargados de ejecutar la
prueba.
– Criterios de aceptación: lista de condiciones
(predicados) que deben satisfacerse para
determinar el éxito de la prueba, incluyendo
restricciones sobre los datos de salida
esperados, y condiciones que deben cumplirse
en el estado interno del sistema (ej. valores de
algunas tablas) después de ejecutar el caso de
prueba.
Ph.D. Franklin Parrales 74
13/05/2021
Construcción de Software Carrera de Software
Pruebas de software: revisión de tipos
de prueba
1. Introducción a las pruebas
2. Tipos de prueba
3. Niveles de prueba
4. Técnicas de pruebas
5. Diseño de Casos de Prueba
6. Automatización de las pruebas
Ph.D. Franklin Parrales 75
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
“No sirven para nada”
“Engaño”
“Pérdida de tiempo”
“Descartadas al primer cambio”
“Imposibles de mantener”
“Moda”
¿Por qué?.
Algunas palabras que hemos escuchado hablando de pruebas.
Ph.D. Franklin Parrales 76
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
Las pruebas son polémicas:
– No son parte de la solución.
– No se las entregamos a nuestros clientes.
– Incluso pueden darles a nuestros clientes una
mala impresión.
– Nuestros clientes no nos las pagan.
– Difíciles de mantener.
Sin embargo, las pruebas son
imprescindibles.
La automatización nos permite reducir costes.
Ph.D. Franklin Parrales 77
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
¿Qué significa automatizar?.
¿Qué podemos automatizar?.
En este caso concreto: realizar de manera
automática mediante herramientas software.
Diseño de las pruebas
Codificación de las pruebas
Ejecución de las pruebas
Evaluación de resultados
Lo más habitual, muchas
técnicas y herramientas
Menos habitual, pocas
técnicas y herramientas.
Ph.D. Franklin Parrales 78
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
Ventajas de la automatización:
– Mayor rapidez de ejecución.
– Menos recursos.
– Evitamos pruebas obsoletas
Ph.D. Franklin Parrales 79
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
Inconvenientes:
– ¡Muy pocas herramientas!.
– Necesitan una “base” a menudo inexistente.
– Un conjunto pobre de pruebas.
Ph.D. Franklin Parrales 80
13/05/2021
Construcción de Software Carrera de Software
Automatización de las pruebas
Cuando automatizar y cuando no
automatizar.
Bien Mal.
Gastamos más en la
automatización que en la
pruebas en sí.
No buscamos automatizarlo
absolutamente todo.
Tenemos modelos y
documentación del sistema.
Construimos el sistema
sobre la marcha.
Nosotros controlamos las
herramientas de prueba.
Las herramientas de prueba
nos controlan a nosotros.
Ph.D. Franklin Parrales 81
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
– Pruebas de software: revisión de tipos de prueba
– Pruebas unitarias
– Depuración del software: importancia, buenas
prácticas, herramientas
– Plan de pruebas y documentación de las pruebas
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 82
13/05/2021
Construcción de Software Carrera de Software
Pruebas Unitarias
Cuando: Durante la
construcción del sistema.
Objetivo: Prueban el
diseño y el
comportamiento de cada
uno de los componentes
una vez construidos.
Cobertura
CruiseControl
XUnit
TestNG
Cactus
jMock
EasyMock
muJava
CoView
Herramientas:
Ph.D. Franklin Parrales 83
13/05/2021
Construcción de Software Carrera de Software
Pruebas Unitarias
• Descripción
– Su propósito es encontrar errores en la
lógica, datos o algoritmos en componentes o
subsistemas individuales
– Realizado por los desarrolladores del
componente
– Técnica de prueba: Caja blanca
Ph.D. Franklin Parrales 84
13/05/2021
Construcción de Software Carrera de Software
Pruebas Unitarias
• Guías para generar casos de prueba
– Tratar de detectar errores en los algoritmos y la
lógica
– Tratar de detectar errores en la manipulación de
las estructuras de datos
– Tratar de detectar errores en el llamado a otros
módulos
– Identificar todos los caminos posibles del módulo
y tratar de hacer casos de prueba que los cubran
– Tratar de detectar errores usando datos límites
Ph.D. Franklin Parrales 85
13/05/2021
Construcción de Software Carrera de Software
Pruebas Unitarias
• Busca errores en un subsistema de forma aislada.
– Generalmente, un "subsistema" significa una clase u objeto en
particular.
– La biblioteca de Java JUnit nos ayuda a realizar fácilmente
pruebas unitarias.
• La idea básica:
– Para una clase determinada Foo, cree otra clase FooTest
para probarla, que contenga varios métodos de "caso de
prueba" para ejecutar.
– Cada método busca resultados particulares y pasa / falla.
• JUnit proporciona comandos "assert" para ayudarnos a
escribir pruebas.
– La idea: coloque llamadas de aserción en sus métodos de
prueba para verificar las cosas que espera que sean ciertas.
Si no es así, la prueba fallará.
Ph.D. Franklin Parrales 86
13/05/2021
Construcción de Software Carrera de Software
JUnit y Eclipse
• Para agregar JUnit a un Proyecto en Eclipse, haga
click en:
– Project → Properties → Build Path → Libraries →
Add Library... → JUnit → JUnit 4 → Finish
• Para crear un caso de test:
– Clic derecho sobre un
paquete y escoja New → Test
Case
– o clic File → New →
JUnit Test Case
– Eclipse puede crear stubs de
pruebas de métodos para
usted.
Ph.D. Franklin Parrales 87
13/05/2021
Construcción de Software Carrera de Software
Ejecutando una prueba en Eclipse
• Haga clic derecho en Eclipse
Package Explorer; escoger:
Run As → JUnit Test
• La barra JUnit mostrará green si
el código pasa todas las pruebas,
red si alguna falla.
• El seguimiento de fallas (Failure
Trace) muestra qué pruebas
fallaron, si las hubo, y por qué.
Ph.D. Franklin Parrales 88
13/05/2021
Construcción de Software Carrera de Software
La anotación @test
import org.junit.*;
import static org.junit.Assert.*;
public class name {
...
@Test
public void name() { // a test case method
...
}
}
– Un método con @Test se marca como un caso de prueba JUnit.
• Todos los métodos @Test se ejecutan cuando JUnit ejecuta su
clase de prueba.
– La anotación @test le dice a la JVM que el siguiente
método es una prueba. Esta anotación es necesaria antes
de cada método de prueba.
Ph.D. Franklin Parrales 89
13/05/2021
Construcción de Software Carrera de Software
La anotación @test
• Usaremos una clase calculator para demostrar las
capacidades básicas de JUnit. Por ahora, nuestra clase
calculator se ve así:
public class Calculator {
float add(float a, float b) {
return a + b;
}
int divide(int a, int b) {
return a/b;
}
}
• Esta clase no hace nada especial, pero nos permitirá
realizar las pruebas. Según las convenciones de
nomenclatura, nace la clase CalculatorTest:
class CalculatorTest {
@Test
void additionTest() {
Calculator calc = new Calculator();
assertEquals(2, calc.add(1,1), "The output should be the sum of the two arguments");
}
}
Ph.D. Franklin Parrales 90
13/05/2021
Construcción de Software Carrera de Software
El método assertEquals()
• Este y todos los métodos de "aserción" funcionan
de manera similar:
– afirman (es decir, se aseguran) de que todo lo que
estamos comprobando es cierto.
– En este caso, estamos afirmando que los dos
argumentos que pasamos son iguales, en caso de
que no lo sean, la prueba fallará.
– Es muy importante entender que assertEquals()
realmente usa el método .equals() y no el operador
==.
– Hay un método JUnit separado llamado
assertSame() que usa == en lugar de .equals().
Ph.D. Franklin Parrales 91
13/05/2021
Construcción de Software Carrera de Software
Un ejemplo de Java
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());
}
Ph.D. Franklin Parrales 92
13/05/2021
Construcción de Software Carrera de Software
Prueba unitaria add () con JUnit
La prueba unitaria MoneyTest prueba que la suma de
dos Moneys con la misma moneda contiene un valor que
es la suma de los valores de los dos Moneys
import org.junit.Test;
import static org.junit.Assert.*;
public class MoneyTest {
@Test public void simpleAdd() {
Money m12CHF= new Money(12, "CHF");
Money m14CHF= new Money(14, "CHF");
Money expected= new Money(26, "CHF");
Money observed= m12CHF.add(m14CHF);
assertTrue(expected.equals(observed));
}
}
Assertion: Returns True if parameter of
type Boolean evaluates to True
Calling the SUT
Method
Static import of Assertion package
(Older JUnit versions used inheritance)
Ph.D. Franklin Parrales 93
13/05/2021
Construcción de Software Carrera de Software
JUnit assertion methods
• A cada método también se le puede pasar una
cadena para mostrar si falla:
– Ej.: assertEquals("message", expected,
actual)
assertTrue(test) fails if the boolean test is false
assertFalse(test) fails if the boolean test is true
assertEquals(expected, actual) fails if the values are not equal
assertSame(expected, actual) fails if the values are not the same (by ==)
assertNotSame(expected, actual) fails if the values are the same (by ==)
assertNull(value) fails if the given value is not null
assertNotNull(value) fails if the given value is null
fail() causes current test to immediately fail
Ph.D. Franklin Parrales 94
13/05/2021
Construcción de Software Carrera de Software
ArrayIntList JUnit test
import org.junit.*;
import static org.junit.Assert.*;
public class TestArrayIntList {
@Test
public void testAddGet1() {
ArrayIntList list = new ArrayIntList();
list.add(42);
list.add(-3);
list.add(15);
assertEquals(42, list.get(0));
assertEquals(-3, list.get(1));
assertEquals(15, list.get(2));
}
@Test
public void testIsEmpty() {
ArrayIntList list = new ArrayIntList();
assertTrue(list.isEmpty());
list.add(123);
assertFalse(list.isEmpty());
list.remove(0);
assertTrue(list.isEmpty());
}
...
Ph.D. Franklin Parrales 95
13/05/2021
Construcción de Software Carrera de Software
¿Qué esta mal aquí?
public class DateTest {
@Test
public void test1() {
Date d = new Date(2050, 2, 15);
d.addDays(4);
assertEquals(d.getYear(), 2050);
assertEquals(d.getMonth(), 2);
assertEquals(d.getDay(), 19);
}
@Test
public void test2() {
Date d = new Date(2050, 2, 15);
d.addDays(14);
assertEquals(d.getYear(), 2050);
assertEquals(d.getMonth(), 3);
assertEquals(d.getDay(), 1);
}
}
Ph.D. Franklin Parrales 96
13/05/2021
Construcción de Software Carrera de Software
Assertions bien estructurados
public class DateTest {
@Test
public void test1() {
Date d = new Date(2050, 2, 15);
d.addDays(4);
assertEquals(2050, d.getYear()); // el valor esperado
assertEquals(2, d.getMonth()); // debe aparecer
assertEquals(19, d.getDay()); // a la DERECHA
}
@Test
public void test2() {
Date d = new Date(2050, 2, 15);
d.addDays(14);
assertEquals("year after +14 days", 2050, d.getYear());
assertEquals("month after +14 days", 3, d.getMonth());
assertEquals("day after +14 days", 1, d.getDay());
} // test cases should usually have messages explaining
} // what is being checked, for better failure output
Ph.D. Franklin Parrales 97
13/05/2021
Construcción de Software Carrera de Software
Objetos de respuesta esperados
public class DateTest {
@Test
public void test1() {
Date d = new Date(2050, 2, 15);
d.addDays(4);
Date expected = new Date(2050, 2, 19);
assertEquals(expected, d); // use an expected answer
} // object to minimize tests
// (Date must have toString
@Test // and equals methods)
public void test2() {
Date d = new Date(2050, 2, 15);
d.addDays(14);
Date expected = new Date(2050, 3, 1);
assertEquals("date after +14 days", expected, d);
}
}
Ph.D. Franklin Parrales 98
13/05/2021
Construcción de Software Carrera de Software
Nombrando los casos de prueba
public class DateTest {
@Test
public void test_addDays_withinSameMonth_1() {
Date actual = new Date(2050, 2, 15);
actual.addDays(4);
Date expected = new Date(2050, 2, 19);
assertEquals("date after +4 days", expected, actual);
}
// give test case methods really long descriptive names
@Test
public void test_addDays_wrapToNextMonth_2() {
Date actual = new Date(2050, 2, 15);
actual.addDays(14);
Date expected = new Date(2050, 3, 1);
assertEquals("date after +14 days", expected, actual);
}
// give descriptive names to expected/actual values
}
Ph.D. Franklin Parrales 99
13/05/2021
Construcción de Software Carrera de Software
¿Qué esta mal aquí?
public class DateTest {
@Test
public void test_addDays_addJustOneDay_1() {
Date actual = new Date(2050, 2, 15);
actual.addDays(1);
Date expected = new Date(2050, 2, 16);
assertEquals(
"should have gotten " + expected + "n" +
" but instead got " + actualn",
expected, actual);
}
...
}
Ph.D. Franklin Parrales 100
13/05/2021
Construcción de Software Carrera de Software
Buenos mensajes de retroalimentación
public class DateTest {
@Test
public void test_addDays_addJustOneDay_1() {
Date actual = new Date(2050, 2, 15);
actual.addDays(1);
Date expected = new Date(2050, 2, 16);
assertEquals("adding one day to 2050/2/15",
expected, actual);
}
...
}
// JUnit will already show
// the expected and actual
// values in its output;
//
// don't need to repeat them
// in the assertion message
Ph.D. Franklin Parrales 101
13/05/2021
Construcción de Software Carrera de Software
Tests con un límite de tiempo (timeout)
@Test(timeout = 5000)
public void name() { ... }
– El comportamiento del método anterior se considerará como
erroneo si no termina de ejecutarse dentro de 5000 ms
private static final int TIMEOUT = 2000;
...
@Test(timeout = TIMEOUT)
public void name() { ... }
– Times out / fails after 2000 ms
Ph.D. Franklin Parrales 102
13/05/2021
Construcción de Software Carrera de Software
Tiempos de espera generalizados
public class DateTest {
@Test(timeout = DEFAULT_TIMEOUT)
public void test_addDays_withinSameMonth_1() {
Date d = new Date(2050, 2, 15);
d.addDays(4);
Date expected = new Date(2050, 2, 19);
assertEquals("date after +4 days", expected, d);
}
@Test(timeout = DEFAULT_TIMEOUT)
public void test_addDays_wrapToNextMonth_2() {
Date d = new Date(2050, 2, 15);
d.addDays(14);
Date expected = new Date(2050, 3, 1);
assertEquals("date after +14 days", expected, d);
}
// almost every test should have a timeout so it can't
// lead to an infinite loop; good to set a default, too
private static final int DEFAULT_TIMEOUT = 2000;
}
Ph.D. Franklin Parrales 103
13/05/2021
Construcción de Software Carrera de Software
Prueba de excepciones
@Test(expected = ExceptionType.class)
public void name() {
...
}
– Pasará la prueba si se lanza la excepción dada.
• Si no se lanza la excepción, la prueba falla.
• Use esto para probar los errores esperados.
@Test(expected = ArrayIndexOutOfBoundsException.class)
public void testBadIndex() {
ArrayIntList list = new ArrayIntList();
list.get(4); // should fail
}
Ph.D. Franklin Parrales 104
13/05/2021
Construcción de Software Carrera de Software
Configuración y desmontaje
@Before
public void name() { ... }
@After
public void name() { ... }
– métodos para ejecutar antes / después de que se
llame a cada método de caso de prueba
@BeforeClass
public static void name() { ... }
@AfterClass
public static void name() { ... }
– métodos para ejecutar una vez antes / después de
que se ejecute toda la clase de prueba
Ph.D. Franklin Parrales 105
13/05/2021
Construcción de Software Carrera de Software
Consejos para las pruebas
• No puedes probar todas las posibles entradas,
valores de parámetros, etc.
– Por lo tanto, debe pensar en un conjunto limitado de
pruebas que probablemente expongan errores (bugs).
• Piense en casos límite
– positive; zero; negative numbers
– justo en el borde de una matriz o tamaño de colección
• Piense en casos vacíos y casos de error
– 0, -1, null; una empty list o array
• Pruebe combinaciones de comportamientos
– tal vez agregar generalmente funciona, pero falla después
de llamar a eliminar
– hacer múltiples llamadas; tal vez el tamaño falle solo la
segunda vez
Ph.D. Franklin Parrales 106
13/05/2021
Construcción de Software Carrera de Software
¿Qué esta mal aquí?
public class DateTest {
// test every day of the year
@Test(timeout = 10000)
public void tortureTest() {
Date date = new Date(2050, 1, 1);
int month = 1;
int day = 1;
for (int i = 1; i < 365; i++) {
date.addDays(1);
if (day < DAYS_PER_MONTH[month]) {day++;}
else {month++; day=1;}
assertEquals(new Date(2050, month, day), date);
}
}
private static final int[] DAYS_PER_MONTH = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
}; // Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
}
Ph.D. Franklin Parrales 107
13/05/2021
Construcción de Software Carrera de Software
Pruebas confiables
• Pruebe una cosa a la vez por método de prueba.
– 10 pruebas pequeñas son mucho mejores que 1 prueba
10 veces más grande.
• Cada método de prueba debe tener pocas (probablemente 1)
afirmaciones (asserts).
– Si afirmas muchas cosas, la primera que falla detiene la
prueba.
– No sabrá si fue una afirmación posterior la que ha fallado.
• Las pruebas deben evitar la lógica.
– Minimiza el uso de if/else, loops, switch, etc.
– Evita el try/catch
• Si se supone que debe lanzarse una excepción, use expected= ... si
no, deje que JUnit lo atrape (catch).
• Las pruebas de tortura están bien, pero solo además de las
pruebas simples.
Ph.D. Franklin Parrales 108
13/05/2021
Construcción de Software Carrera de Software
Aplastando la redundancia
public class DateTest {
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_withinSameMonth_1() {
addHelper(2050, 2, 15, +4, 2050, 2, 19);
}
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_wrapToNextMonth_2() {
addHelper(2050, 2, 15, +14, 2050, 3, 1);
}
// use lots of helpers to make actual tests extremely short
private void addHelper(int y1, int m1, int d1, int add,
int y2, int m2, int d2) {
Date act = new Date(y, m, d);
actual.addDays(add);
Date exp = new Date(y2, m2, d2);
assertEquals("after +" + add + " days", exp, act);
}
// can also use "parameterized tests" in some frameworks
...
Ph.D. Franklin Parrales 109
13/05/2021
Construcción de Software Carrera de Software
Ayudantes (helpers) flexibles
public class DateTest {
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_multipleCalls_wrapToNextMonth2x() {
Date d = addHelper(2050, 2, 15, +14, 2050, 3, 1);
addhelper(d, +32, 2050, 4, 2);
addhelper(d, +98, 2050, 7, 9);
}
// Helpers can box you in; hard to test many calls/combine.
// Create variations that allow better flexibility
private Date addHelper(int y1, int m1, int d1, int add,
int y2, int m2, int d2) {
Date date = new Date(y, m, d);
addHelper(date, add, y2, m2, d2);
return d;
}
private void addHelper(Date date, int add,
int y2, int m2, int d2) {
date.addDays(add);
Date expect = new Date(y2, m2, d2);
assertEquals("date after +" + add + " days", expect, d);
}
...
Ph.D. Franklin Parrales 110
13/05/2021
Construcción de Software Carrera de Software
Pruebas de regresión
• Regresión Cuando una característica que solía funcionar, ya
no funciona.
– Es probable que suceda cuando el código cambia y crece con el
tiempo.
– Una nueva función / corrección puede causar un nuevo error o
reintroducir un error antiguo.
• Pruebas de regresión: Volver a ejecutar pruebas unitarias
anteriores después de un cambio.
– A menudo se realiza mediante scripts durante las pruebas
automatizadas.
– Se utiliza para garantizar que los errores corregidos antiguos aún
se solucionen.
– Le da a su aplicación un nivel mínimo de funcionalidad de trabajo.
• Muchos productos tienen un conjunto de pruebas de registro
obligatorias que deben pasar antes de que se pueda agregar
el código a un repositorio de código fuente.
Ph.D. Franklin Parrales 111
13/05/2021
Construcción de Software Carrera de Software
Test-driven development
(Desarrollo impulsado por pruebas)
• Las pruebas unitarias se pueden escribir después,
durante o incluso antes de la codificación.
– test-driven development: Escribe pruebas, luego
escribe código para aprobarlas.
• Imagina que nos gustaría agregar un método
subtractWeeks para una clase Date, que
desplaza una fecha hacia atrás en el tiempo por el
número dado de semanas.
• Escriba código para probar este método antes de
que se haya escrito el código del comportamiento.
– Luego, una vez que implemente el método, ud. sabrá si
funciona.
Ph.D. Franklin Parrales 112
13/05/2021
Construcción de Software Carrera de Software
Tests y estructuras de datos
• ¿Necesita pasar muchos arrays? Usa array literals
public void exampleMethod(int[] values) { ... }
...
exampleMethod(new int[] {1, 2, 3, 4});
exampleMethod(new int[] {5, 6, 7});
• ¿Necesita un quick ArrayList? Pruebe Arrays.asList
List<Integer> list = Arrays.asList(7, 4, -2, 3, 9, 18);
• ¿Necesita un quick set, queue, etc.? Muchas colecciones
pueden tomar la forma de lista
Set<Integer> list = new HashSet<Integer>(
Arrays.asList(7, 4, -2, 9));
Ph.D. Franklin Parrales 113
13/05/2021
Construcción de Software Carrera de Software
Recordando: Arrays
• En Java, las matrices multidimensionales son en realidad matrices
de matrices. Estos, como era de esperar, se ven y actúan como
matrices multidimensionales regulares.
• Para declarar una variable de matriz multidimensional, especifique
cada índice adicional utilizando otro conjunto de corchetes. Por
ejemplo, lo siguiente declara una variable de matriz bidimensional
llamada twoDim. Esto creará una matriz del tamaño 2x3 en la
memoria.
int twoDim[][] = new int[2][3];
Valor del
elemento
índice del
elemento
Ph.D. Franklin Parrales 114
13/05/2021
Construcción de Software Carrera de Software
Recordando: Array literals
• El literal null utilizado para representar la ausencia de un objeto
también se puede utilizar para representar la ausencia de una
matriz. Por ejemplo:
String [] name = null;
• Además del literal null, Java también define una sintaxis especial
que le permite especificar valores de matriz literalmente en sus
programas. Esta sintaxis solo se puede utilizar cuando se declara
una variable de tipo matriz. Combina la creación del objeto de
matriz con la inicialización de los elementos de la matriz:
String[] daysOfWeek = {“Sunday”, “Monday”, “Tuesday”, “Wednesday”,
“Thursday”, “Friday”, “Saturday”};
– Esto crea una matriz que contiene el elemento de siete cadenas que
representan los días de la semana dentro de las llaves.
– Tenga en cuenta que no usamos la nueva palabra clave ni especificamos el tipo
de matriz en esta sintaxis literal de matriz. El tipo está implícito en la declaración
de variable de la que forma parte el inicializador.
– Además, la longitud de la matriz no se especifica explícitamente con esta
sintaxis; se determina implícitamente contando el número de elementos
enumerados entre las llaves.
Ph.D. Franklin Parrales 115
13/05/2021
Construcción de Software Carrera de Software
¿Qué esta mal aquí?
public class DateTest {
// shared Date object to test with (saves memory!!1)
private static Date DATE;
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_sameMonth() {
DATE = new Date(2050, 2, 15); // first test;
addhelper(DATE, +4, 2050, 2, 19); // DATE = 2/15 here
}
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_nextMonthWrap() { // second test;
addhelper(DATE, +10, 2050, 3, 1); // DATE = 2/19 here
}
@Test(timeout = DEFAULT_TIMEOUT)
public void addDays_multipleCalls() { // third test;
addDays_sameMonth(); // go back to 2/19;
addhelper(DATE, +1, 2050, 2, 20); // test two calls
addhelper(DATE, +1, 2050, 2, 21);
}
...
}
Ph.D. Franklin Parrales 116
13/05/2021
Construcción de Software Carrera de Software
Test case "smells"
• Las pruebas deben ser autónomas y no preocuparse entre
sí.
• "Smells" (bad things to avoid) in tests:
– Constrained test order: Test A must run before Test B.
(usually a misguided attempt to test order/flow)
– Tests call each other: Test A calls Test B's method
(calling a shared helper is OK, though)
– Mutable shared state: Tests A/B both use a shared
object.
(If A breaks it, what happens to B?)
Ph.D. Franklin Parrales 117
13/05/2021
Construcción de Software Carrera de Software
Test suites
• test suite: Una clase que ejecuta muchos JUnit tests.
– Una forma sencilla de ejecutar todas las pruebas de su aplicación a
la vez.
import org.junit.runner.*;
import org.junit.runners.*;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestCaseName.class,
TestCaseName.class,
...
TestCaseName.class,
})
public class name {}
Ph.D. Franklin Parrales 118
13/05/2021
Construcción de Software Carrera de Software
Test suite example
import org.junit.runner.*;
import org.junit.runners.*;
@RunWith(Suite.class)
@Suite.SuiteClasses({
WeekdayTest.class,
TimeTest.class,
CourseTest.class,
ScheduleTest.class,
CourseComparatorsTest.class
})
public class HW2Tests {}
Ph.D. Franklin Parrales 119
13/05/2021
Construcción de Software Carrera de Software
JUnit summary
• Tests need failure atomicity (ability to know exactly what
failed).
– Each test should have a clear, long, descriptive name.
– Assertions should always have clear messages to know what failed.
– Write many small tests, not one big test.
• Each test should have roughly just 1 assertion at its end.
• Always use a timeout parameter to every test.
• Test for expected errors / exceptions.
• Choose a descriptive assert method, not always assertTrue.
• Choose representative test cases from equivalent input
classes.
• Avoid complex logic in test methods if possible.
• Use helpers, @Before to reduce redundancy between tests.
Ph.D. Franklin Parrales 120
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
– Pruebas de software: revisión de tipos de prueba
– Pruebas unitarias
– Depuración del software: importancia, buenas
prácticas, herramientas
– Plan de pruebas y documentación de las pruebas
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 121
13/05/2021
Construcción de Software Carrera de Software
Depuración del software
• Una vez identificado los errores en la fase de pruebas,
se procede a corregirlos. A esta fase se le llama
depuración.
• Depuración: Es la detección, corrección y eliminación
de errores de software.
• En la fase de depuración también se arreglan detalles
superficiales del software además de optimizar y mejorar
algunos procesos.
• El proceso de depuración
1. Estudio de los síntomas del error
2. Determinación de las causas
3. Corrección
4. Prueba.
Ph.D. Franklin Parrales 122
13/05/2021
Construcción de Software Carrera de Software
Depuración
• El tener un plan de pruebas ayuda a clarificar el
proceso de depuración.
• El plan de pruebas debe de estar mucho antes
de la construcción del software.
• Al realizar la depuración de un programa existe
la posibilidad de un 50% de cometer otro error.
• Es recomendable realizar pruebas de trazado
(assert) para visualizar en donde ocurren los
errores.
• Se recomienda probar lo antes posible cualquier
fragmento de código.
Ph.D. Franklin Parrales 123
13/05/2021
Construcción de Software Carrera de Software
Depuración
• La mayoría de los IDEs modernos
presentan frameworks para la depuración
desde el clásico step by step o step over
sobre cada uno de los módulos hasta la
realización de pruebas de unidad.
• Entre las más famosas destacan JUnit
para realizar pruebas de unidad en Java.
Ph.D. Franklin Parrales 124
13/05/2021
Construcción de Software Carrera de Software
Depurador (debugger)
• Un depurador es una herramienta que permite
intervenir durante la ejecución de un programa, para
saber cómo se está ejecutando.
• El depurador permite:
– Ejecutar paso a paso un programa (stepping).
– Establecer puntos de detención (breakpoints).
– Examinar el contenido de las variables y objetos.
– Conocer el encadenamiento de llamadas de
procedimientos.
– Retomar la ejecución hasta un nuevo punto de detención.
• En este curso usaran el depurador que trae
incorporado el IDE de su preferencia (Netbeans,
Eclipse, etc).
Ph.D. Franklin Parrales 125
13/05/2021
Construcción de Software Carrera de Software
Depuración por Inducción
• Se siguen los siguientes pasos:
1. Localizar los datos pertinentes
2. Organizar los datos
3. Estudiar las relaciones
4. Divisar las hipótesis
5. Probar las hipótesis
6. Corregir el error
Ph.D. Franklin Parrales 126
13/05/2021
Construcción de Software Carrera de Software
Depuración por Deducción
• Se siguen los siguientes pasos:
1. Enumerar las posibles causas
2. Usar procedimientos de eliminación
3. Refinar las hipótesis restantes
4. Probar las hipótesis restantes
5. Si no se pueden probar las hipótesis entonces
coleccionar más datos y repetir el proceso
6. En caso contrario corregir el error
Ph.D. Franklin Parrales 127
13/05/2021
Construcción de Software Carrera de Software
Preparar Casos
de Prueba
Ejecutar Casos
de Prueba
Seleccionar y Priorizar los
errores para corrección
Corregir
Congelar versión del
Sw para Pruebas
Errors
Detectados?
Version
Acceptada
NO
SI
Verificar Correcciones Congelar versión
corregida del Sw
Hacer Pruebas Totales o
parciales de Regresión
Proceso de Pruebas de Programas
Ph.D. Franklin Parrales 128
13/05/2021
Construcción de Software Carrera de Software
Proceso de Pruebas de Programas:
Depuración
Diagnosticar
Error
Planificar Cambios
Actualizar Diseño Arquitec.
Actualizar Diseño Detallado
Actualizar
código
Actualizar Requerimientos
Probar los
Cambios
Seleccionar casos de
prueba para probar
los cambios
Selecionar casos de
Prueba para Pruebas de
Regresión
Pruebas de Regresión
?
Ph.D. Franklin Parrales 129
13/05/2021
Construcción de Software Carrera de Software
Depuración manual
• Cuando no se dispone de un depurador, se debe recurrir a la
depuración manual. Esta consiste en preparar el programa
para poder conocer como se está ejecutando el programa.
• La técnica más usual de depuración de programas consiste
en colocar println's en puntos estratégicos del programa para
desplegar el contenido de las variables.
• Siga las siguientes recomendaciones para establecer estos
puntos estratégicos:
– Dentro de un while, siempre coloque algún println que
permita detectar cuando cayó en un ciclo infinito su programa
(un loop). Despliegue el valor de contadores, datos leídos de un
archivo, acumuladores, etc.
– Al inicio de una función o procedimiento, despliegue el valor de
los parámetros recibidos y al retornar despliegue el valor
retornado (mediante return).
– En un if, despliegue cuál de las ramas se tomó: la que
corresponde a la condición verdadera o el else.
Ph.D. Franklin Parrales 130
13/05/2021
Construcción de Software Carrera de Software
Depuración manual
• Para que resulte más fácil la depuración, comience ejecutando su
programa con poquísimos datos. Nunca olvide, incluir datos que
representen las condiciones de borde del programa. Por ejemplo:
n=0, el archivo esta vacío, etc.
• La biblioteca del curso incluye mecanismos para poder grabar
todos los mensajes que aparecen en la pantalla. Para hacer
esto, utilice la opción -l al ejecutar su programa: java Run -l
MiPrograma
• Su programa se ejecutará igual que antes, pero además creará un
archivo de nombre console.log que contiene todos los mensajes
que aparecieron en pantalla durante la ejecución del programa.
Esto resulta muy útil, pues las 24 líneas de la pantalla se hacen
escasas con tanto despliegue con println.
• Cuando Ud. estime que su programa funciona adecuadamente,
comente los println que introdujo para efectos de depuración (es
decir agregue // para transformalos en comentarios). No los borre,
porque más tarde podría darse cuenta que su programa todavía no
funciona completamente como debería.
Ph.D. Franklin Parrales 131
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
– Pruebas de software: revisión de tipos de prueba
– Pruebas unitarias
– Depuración del software: importancia, buenas
prácticas, herramientas
– Plan de pruebas y documentación de las pruebas
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 132
13/05/2021
Construcción de Software Carrera de Software
Motivación
Toda actividad de construcción (codificación) es
susceptible de cometer errores dado que se trata de una
actividad humana.
https://www.youtube.com/watch?v=0R1dBtcvaiM
Ph.D. Franklin Parrales 133
13/05/2021
Construcción de Software Carrera de Software
Plan de pruebas: Introducción
Permite tener una planeación de la aplicación de las
pruebas y el tipo de pruebas que harán que el sistema
funcione correctamente
Al momento de liberarse por completo, se crea
seguridad en los usuarios finales de que el sistema no
fallará
Existen dos actividades fundamentales para la etapa
de pruebas: las pruebas de componentes y las
pruebas del sistema
• En la primera se prueban las partes del sistema por separado
• En la segunda se prueban los componentes ya integrados, el
sistema como un todo
Ph.D. Franklin Parrales 134
13/05/2021
Construcción de Software Carrera de Software
Plan de pruebas: objetivos
• Demostrar al desarrollador y al cliente que el
software satisface sus requerimientos. En este
caso, se debe tener por lo menos una prueba para
cada requerimiento que se haya documentado.
• Para describir defectos en el software en el que el
comportamiento de éste es incorrecto.
– Se contemplan comportamientos indeseables en el
sistema, tales como: caídas en el sistema, cálculos
incorrectos, entre otros.
Ph.D. Franklin Parrales 135
13/05/2021
Construcción de Software Carrera de Software
Plan de pruebas: Características deseables
• A continuación se mencionan algunas
características deseables que deben contener los
planes de prueba:
– Diseñar un caso de prueba para cada funcionalidad del
software.
– Establecer como mínimo un caso de prueba de datos
correcto.
– Establecer como mínimo un caso de prueba de datos
incorrecto.
• Ejemplo: Caso de Prueba de un módulo de raíz cuadrada.
– Qué el usuario ingrese un número mayor que 0.
– Qué el usuario ingrese un número 0
– Qué el usuario ingrese un número menor que 0.
Ph.D. Franklin Parrales 136
13/05/2021
Construcción de Software Carrera de Software
Estándar IEEE 829 para un plan de
pruebas
• Esta norma IEEE std. 829 – 2008 es
compatible con todos los procesos del ciclo
de vida del software, incluyendo las fases de
adquisición, suministro, desarrollo, operación
y mantenimiento.
• Esta norma es compatible con todos los
modelos de ciclo de vida del software.
Ph.D. Franklin Parrales 137
13/05/2021
Construcción de Software Carrera de Software
Estándar IEEE 829 para un plan de
pruebas
Temas IEEE 829 Contenido
Nombre del plan de pruebas:
• Ítems a probar
• Características a ser
probadas
• Características que no se
van a probar
Esta sección define el alcance del sistema bajo
prueba, si los componentes no son
completamente nuevos o es una versión
incompleta o un incremento. Es importante
especificar cuáles características o componentes
no van a ser probados.
Enfoque
Provee un overview de la estrategia a utilizar en
las pruebas y del proceso de pruebas.
Casos de prueba
Esta sección resume e incorpora por referencia el
plan de pruebas, diseño de pruebas individuales,
especificaciones de casos de prueba,
especificaciones de procedimientos y los
resultados de las pruebas.
Ph.D. Franklin Parrales 138
13/05/2021
Construcción de Software Carrera de Software
IEEE 829 Subject Contenido
Tareas
Consiste en la división de las tareas para aplicar
las pruebas al sistema
Requerimientos de ambiente
Define las herramientas necesarias para la
automatización de las pruebas, hardware,
software y lugar para aplicarlas.
Responsabilidades
Define a quién le pertenece cada parte del
proceso de pruebas
Personal necesario y
entrenamiento
Se necesitará entrenamiento de los inspectores /
desarrolladores en cuanto al diseño de pruebas,
herramientas, ambiente, etc.
Planificación Fechas de inicio, hitos, completaciones, etc.
Riesgos y contingencias
¿Qué puede fallar? ¿Qué cosas fueron
asumidas? ¿Qué se puede hacer si un problema
mayor ocurre?
Aprobación Determinar quién debe aprobar y revisar el plan
Ph.D. Franklin Parrales 139
13/05/2021
Construcción de Software Carrera de Software
Plantilla de casos
de prueba IEEE
829
Ph.D. Franklin Parrales 140
13/05/2021
Construcción de Software Carrera de Software
Aplicación del estándar
• Es genérico para cubrir todos los tipos de
prueba
• Los documentos pueden adaptarse
• La idea es que cualquiera que se una al
proyecto sepa qué documentos se usan y
para qué
Ph.D. Franklin Parrales 141
13/05/2021
Construcción de Software Carrera de Software
El Plan de pruebas incluye…
• Objetivo del Plan
• Objetivo de las Pruebas
• Marco del Plan de Pruebas
• Alcance del Plan de Pruebas
• Descripción del módulo para pruebas
• Definición y Desarrollo de pruebas
• Resultados de las Pruebas
• Casos de Prueba:
– Se le llama así al diseño de entradas y salidas esperadas
para probar el sistema. El objetivo de su diseño es crear
un conjunto de casos de prueba que sean efectivos para
descubrir defectos en los programas y muestren que el
sistema cumple con los requerimientos
Ph.D. Franklin Parrales 142
13/05/2021
Construcción de Software Carrera de Software
El Plan de pruebas incluye…
• Programación de la aplicación de las pruebas
– Cronograma en Project
• Seguimiento y reporte por defectos:
– Se debe contar con un formato en donde se vayan
anotando los defectos encontrados en cada uno de
los módulos del sistema y de forma global, también
se reportarán las correcciones realizadas así como el
responsable de hacerlo con la finalidad de dar un
correcto seguimiento a los resultados de las pruebas
Ph.D. Franklin Parrales 143
13/05/2021
Construcción de Software Carrera de Software
Guía para la elaboración del plan de
pruebas
• Se necesita especificar las salidas o resultados
esperados.
• Los casos de prueba deben escribirse con
condiciones de entrada que son inválidas e
inesperadas, así como también aquellas que son
válidas y esperadas.
• Examinar un programa para verificar que hace lo
que deba de hacer es sólo parte de la prueba, la
otra mitad es asegurarse que el programa no
haga lo que no deba de hacer.
• No realizar planeaciones asumiendo que no se
encontrarán errores.
Ph.D. Franklin Parrales 144
13/05/2021
Construcción de Software Carrera de Software
Guía para la elaboración del plan de
pruebas
Objetivo:
Condición de Entrada:
Fecha de Prueba: Ciclo de Prueba:
Escenario Nro. Paso Acción Datos de Entrada Resultado Esperado
Exito
Frascaso
Observación
Escenario 1 1
2
3
4
5
6
7
8
Escenario 2
Ph.D. Franklin Parrales 145
13/05/2021
Construcción de Software Carrera de Software
Guía para la elaboración del plan de
pruebas
Código CP-001
Caso de prueba Ingreso a la aplicación a través de un login
Responsable Desarrolladores
Descripción de la
prueba
• Se ingresa el correo electrónico valido.
• Se ingresa contraseña valida.
• Hacer clic en el botón entrar.
Requisito previo Haber creado un nuevo usuario.
Resultado
esperado
El usuario será redirigido a la página principal de la aplicación.
Resultado
obtenido
Se ha iniciado sesión correctamente.
Estado Exitoso
Observaciones
Más sencillo, este será el formato que utilizaremos…
Ph.D. Franklin Parrales 146
13/05/2021
Construcción de Software Carrera de Software
Guía para la elaboración del plan de
pruebas
• La probabilidad de la existencia de mas errores en
una sección de un programa es proporcional al
número de errores encontrados en esa sección.
• Se debe de realizar una lista de verificación para
inspecciones de prueba que contenga los siguientes
puntos:
– Datos
– Declaración de datos
– Errores computacionales
– Errores de comparación
– Errores de control de flujo
– Errores de Interface
– Errores de Entrada/Salida
Ph.D. Franklin Parrales 147
13/05/2021
Construcción de Software Carrera de Software
Guía para la elaboración del plan de
pruebas
• Se pueden utilizar métodos deductivos e
inductivos para la prueba de software.
• La realización de pruebas es una actividad
extremadamente creativa e intelectualmente
retadora.
– Un programador debe de evitar probar sus
propios programas.
– Una organización no debe de probar sus propios
programas.
– Inspeccionar los resultados obtenidos de cada
prueba.
Ph.D. Franklin Parrales 148
13/05/2021
Construcción de Software Carrera de Software
Plan de Pruebas
• Se recomienda utilizar la metodología y
formatos del estándar IEEE 829 para
documentación de pruebas de software:
• Pasos que incluye:
– Identificador de plan de pruebas (se muestra el
estándar a seguir para el nombre de las pruebas)
– Introducción (en que consiste las pruebas del
sistema)
– Elementos a probar
– Características a ser probadas
– Características que no se probarán
Ph.D. Franklin Parrales 149
13/05/2021
Construcción de Software Carrera de Software
Plan de Pruebas
– Enfoque
– Criterio de fallo o aceptación de los elementos
– Criterio de Suspensión y Reanudación de
requerimientos
– Entregables de las pruebas
– Tareas de las pruebas
– Necesidades del entorno
– Responsabilidades
– Equipo y necesidades de capacitación
– Agenda
– Riesgos y contingencias
– Acuerdos
Ph.D. Franklin Parrales 150
13/05/2021
Construcción de Software Carrera de Software
Plan de Pruebas
• A las pruebas se les ha empezado a
llamar de manera formal verificación y
validación (curso de octavo semestre XD).
• Existen metodologías más robustas como
el TMMI (Test Maturity Model)
Ph.D. Franklin Parrales 151
13/05/2021
Construcción de Software Carrera de Software
Plan de pruebas
Ph.D. Franklin Parrales 152
13/05/2021
Construcción de Software Carrera de Software
Tipos
de
documento
1. Preparación de
pruebas
1. Plan de pruebas
2. Especificación del diseño
de pruebas
3. Especificación de casos
de prueba
4. Procedimientos de
prueba
5. Reporte de transmisión
de ítems de pruebas
2. Ejecución de
las pruebas
6. Log de pruebas
7. Reporte de incidentes de
pruebas
3. Término de las
pruebas
Reporte de las pruebas
Ph.D. Franklin Parrales 153
13/05/2021
Construcción de Software Carrera de Software
Ejemplo
Ph.D. Franklin Parrales 154
13/05/2021
Construcción de Software Carrera de Software
Documento 1. Plan de pruebas
• Documento eje sobre el cual se desarrollan
las pruebas
• Describe:
– Alcance
– Enfoque
– Recursos
– Calendarización de actividades de prueba
• Identifica los ítems y características a probar
• Identifica las tareas de prueba a desarrollar,
los responsables de cada tarea y los riesgos
asociados
Ph.D. Franklin Parrales 155
13/05/2021
Construcción de Software Carrera de Software
Documento 2. Especificación del
diseño de pruebas
• Se determina QUÉ necesita ser probado
• Se determina cómo sería una prueba
exitosa
• Se deriva de los requerimientos
Ph.D. Franklin Parrales 156
13/05/2021
Construcción de Software Carrera de Software
Documento 3. Especificación de casos
de prueba
• Valores exactos de entrada y otros que se
requieran
• Valores exactos de salida y cambios del
sistema esperados
• Pasos para ejecutar las pruebas
Ph.D. Franklin Parrales 157
13/05/2021
Construcción de Software Carrera de Software
Documento 4. Procedimientos de
prueba
• Describe cómo el tester ejecutará
físicamente la prueba y los pasos
necesarios
Ph.D. Franklin Parrales 158
13/05/2021
Construcción de Software Carrera de Software
Documento 5. Reporte de transmisión
de ítems de pruebas
• Describe los ítems para prueba
– Dónde encontrarlos y da la aprobación para
su liberación
• Garantiza al tester de que los ítems están
listos para ser probados
Ph.D. Franklin Parrales 159
13/05/2021
Construcción de Software Carrera de Software
Documento 6. Log de pruebas
• Registra los detalles sobre qué casos de
pruebas se han ejecutado, en qué orden y
sus resultados (pass/fail)
• Si hay inconformidades, se levanta o
actualiza un reporte de incidentes
Ph.D. Franklin Parrales 160
13/05/2021
Construcción de Software Carrera de Software
Documento 7. Reporte de incidentes
de prueba
• Descripción de los detalles encontrados
cuando la prueba no pasó
Ph.D. Franklin Parrales 161
13/05/2021
Construcción de Software Carrera de Software
Documento 8. Reporte de pruebas
• Resume la información importante sobre
las pruebas:
– Evaluación de qué tan bien se realizaron las
pruebas
– Número de incidentes reportados
– Evaluación sobre la calidad del sistema
• Gracias a este documento se decide si la
calidad del sistema es suficiente para
continuar
Ph.D. Franklin Parrales 162
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
Ph.D. Franklin Parrales 163
13/05/2021
Construcción de Software Carrera de Software
Bibliografía consultada
• I. Sommerville, “Ingeniería
de software”, 7ma Edición,
Cap.20
Ph.D. Franklin Parrales 164
13/05/2021
Construcción de Software Carrera de Software
Objetivos
• Explicar cómo la tolerancia a fallos y la
prevención de defectos de contribuir al
desarrollo de sistemas confiables.
• Describir las características de los procesos
de software confiable.
• Introducir las técnicas de programación para
la prevención de defectos.
• Describir los mecanismos de tolerancia a
fallos y el uso de la diversidad y la
redundancia.
Ph.D. Franklin Parrales 165
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
– Seguridad, fiabilidad y confiabilidad
– Confiabilidad del software
– Programación confiable
– Prevención de fallos
– Manejo de excepciones
– Tolerancia a fallos
– Arquitecturas tolerante a fallos
Ph.D. Franklin Parrales 166
13/05/2021
Construcción de Software Carrera de Software
Seguridad y fiabilidad
◆ Un sistema es seguro si no se pueden producir situaciones que
puedan causar muertes, heridas, enfermedades, ni daños en los
equipos ni en el ambiente
Un accidente (mishap) es un suceso imprevisto que puede
producir daños inadmisibles
◆ Un sistema es fiable si cumple sus especificaciones
◆ Seguridad y fiabilidad pueden estar en conflicto
La seguridad es la probabilidad de que no se produzcan
situaciones que puedan conducir a accidentes,
independientemente de que se cumpla la especificación o no
Ph.D. Franklin Parrales 167
13/05/2021
Construcción de Software Carrera de Software
Confiabilidad
◆ La confiabilidad (dependability) es una propiedad de los
sistemas que permite confiar justificadamente en el servicio
que proporcionan
◆ Tiene varios aspectos
confiabilidad
disponibilidad
de utilización
disponibilidad
servicio
disponible
continuamente
fiabilidad
no hay
situaciones
catastróficas
seguridad
no hay fugas
de información
no autorizadas
confidencialidad
no hay
alteraciones
de información
integridad
aptitud para
reparaciones
y cambios
mantenibilidad
Ph.D. Franklin Parrales 168
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
– Seguridad, fiabilidad y confiabilidad
– Confiabilidad del software
– Programación confiable
– Prevención de fallos
– Manejo de excepciones
– Tolerancia a fallos
– Arquitecturas tolerante a fallos
Ph.D. Franklin Parrales 169
13/05/2021
Construcción de Software Carrera de Software
Confiabilidad del Software
• En general, los clientes de software esperan
que todos los software sean confiables.
• Sin embargo, para aplicaciones no críticas,
pueden estar dispuestos a aceptar algunas
fallas o defectos en el sistema.
• Para algunas aplicaciones, sin embargo, los
requerimientos de confiabilidad son muy
altos y las técnicas especiales de ingeniería
de software puede ser utilizado para lograr
este objetivo.
Ph.D. Franklin Parrales 170
13/05/2021
Construcción de Software Carrera de Software
Confiabilidad del Software
• Prevención de fallos:
– El sistema está desarrollado de tal manera que se evitan
errores humanos y, por lo tanto, se minimizan las fallas del
sistema.
– El proceso de desarrollo está organizado para que las
fallas en el sistema se detecten y reparen antes de la
entrega al cliente.
• Detección de fallos:
– Las técnicas de verificación y validación se utilizan para
descubrir y eliminar fallas en un sistema antes de su
implementación.
• Tolerancia a fallos:
– El sistema está diseñado para que las fallas en el software
entregado no provoquen fallas en el sistema.
Ph.D. Franklin Parrales 171
13/05/2021
Construcción de Software Carrera de Software
Diversidad y Redundancia
• Redundancia: mantener más de 1 versión de un
componente crítico disponibles para que si uno falla,
entonces esté disponible una copia de seguridad.
• Diversidad: proporcionar la misma funcionalidad de
diferentes maneras para que no falle de la misma
manera.
• Sin embargo, agregar la diversidad y la redundancia
añade complejidad, aumentando con ello las
posibilidades de error.
• Algunos ingenieros abogan por la simplicidad y usan
la V&V extensa como una ruta más efectiva hacia la
confiabilidad del software.
Ph.D. Franklin Parrales 172
13/05/2021
Construcción de Software Carrera de Software
Ejemplos de Diversidad y Redundancia
• Redundancia. Donde la disponibilidad es
crítica (por ejemplo, en sistemas de comercio
electrónico), las empresas suelen mantener
servidores de apoyo y cambian a estos de
forma automática si se produce un fallo.
• Diversidad. Para proporcionar la resistencia
contra los ataques externos, se puede
implementar diferentes servidores usando
diferentes sistemas operativos (por ejemplo,
Windows y Linux).
Ph.D. Franklin Parrales 173
13/05/2021
Construcción de Software Carrera de Software
Software Libre de Fallos
• Los métodos actuales de la ingeniería de software
permiten ahora a la producción de software libre de
defectos, al menos para los sistemas relativamente
pequeños.
• Fallos de software libre: un programa informático
que se ajuste a sus especificaciones.
– No significa que el software siempre se lleva a cabo
correctamente ya que puede haber errores de
especificación.
– El costo de producir de software libre de fallos es muy
alto. Sólo es rentable en situaciones excepcionales.
– A menudo es más barato que aceptar los defectos del
software y pagar por sus consecuencias de gastar los
recursos en el desarrollo de software libre de fallos.
Ph.D. Franklin Parrales 174
13/05/2021
Construcción de Software Carrera de Software
Costo de Eliminación de Errores
Ph.D. Franklin Parrales 175
13/05/2021
Construcción de Software Carrera de Software
Procesos confiables
• Para asegurar un número mínimo de fallas
de software, es importante tener un repetible
proceso de software bien definido.
• Un proceso repetible bien definido es aquel
que no depende enteramente de las
habilidades individuales; más bien puede ser
llevado a cabo por diferentes personas.
• Para la detección, es evidente que las
actividades del proceso debe incluir un
esfuerzo significativo dedicado a la
verificación y validación
Ph.D. Franklin Parrales 176
13/05/2021
Construcción de Software Carrera de Software
Características de Procesos confiables
Documentable El proceso debe tener un modelo de proceso definido que establece las
actividades en el proceso y la documentación que se vaya a producir
durante estas actividades.
Normalizado Es el conjunto completo de normas de desarrollo de software que define
cómo el software se va a producir y documentados deben estar
disponibles.
Auditables El proceso debe ser comprensible para la gente, aparte de los participantes
del proceso que se puede comprobar que las normas de procesos se están
siguiendo y hacer sugerencias para la mejora de procesos.
Diversos El proceso debe incluir la verificación de redundantes y diversas
actividades de validación.
Robusto El proceso debe ser capaz de recuperarse de los fracasos de las actividades
de proceso individual.
Ph.D. Franklin Parrales 177
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
– Seguridad, fiabilidad y confiabilidad
– Confiabilidad del software
– Programación confiable
– Prevención de fallos
– Manejo de excepciones
– Tolerancia a fallos
– Arquitecturas tolerante a fallos
Ph.D. Franklin Parrales 178
13/05/2021
Construcción de Software Carrera de Software
Programación confiable
• Usar construcciones y técnicas de
programación que contribuyan a evitar
fallas y tolerancia a fallas
– Diseño debe favorecer la simplicidad;
– Proteger la información del acceso no
autorizado;
– Minimizar el uso de construcciones de
programación inseguras.
Ph.D. Franklin Parrales 179
13/05/2021
Construcción de Software Carrera de Software
Protección de la información
• La información solo debe estar expuesta a aquellas
partes del programa que necesitan acceder a ella.
Esto implica la creación de objetos o tipos de datos
abstractos que mantienen el estado y que
proporcionan operaciones en ese estado.
• Esto evita fallas por tres razones:
– se reduce la probabilidad de corrupción accidental de
información;
– la información está rodeada de un “firewall" para que sea
menos probable que los problemas se propaguen a otras
partes del programa;
– como toda la información está localizada, es menos
probable que cometa errores y es más probable que los
revisores de código encuentren errores.
Ph.D. Franklin Parrales 180
13/05/2021
Construcción de Software Carrera de Software
Programación Segura
• Los fallos en los programas suelen ser una
consecuencia de los errores cometidos por
los programadores
• Estos errores se producen porque la gente
pierde la pista de las relaciones entre las
variables del programa.
• Algunas construcciones de programación son
más propensas a errores de los demás para
evitar su uso reduce los errores del
programador
Ph.D. Franklin Parrales 181
13/05/2021
Construcción de Software Carrera de Software
Programación Estructurada
• Se propuso por primera vez en 1968 como un enfoque
de desarrollo que hace que los programas más fácil
de entender y que evita errores de programación.
• Programación sin GOTO.
• Mientras que los bucles y si las declaraciones como
las declaraciones de control solamente.
• Diseño Top-down.
• Un hecho importante porque promueve el
pensamiento y la discusión acerca de la
programación.
Ph.D. Franklin Parrales 182
13/05/2021
Construcción de Software Carrera de Software
Construcción Propensa al Error
(programación estructurada)
• Números de punto flotante
– Inherentemente imprecisos. La imprecisión puede dar lugar a
comparaciones válidas.
• Punteros
– Los punteros que apuntan a áreas incorrectas de memoria puede dañar
los datos. El Aliasing puede hacer que los programas sean difíciles de
entender y cambiar.
• Aliasing
– El uso de más de 1 nombre para referirse a la variable de un mismo
estado.
• Asignación dinámica de memoria
– Asignación de tiempo de ejecución puede ocasionar desbordamiento de
memoria.
• Paralelismo
– Puede dar lugar a errores de sincronización sutil imprevistos debido a la
interacción entre los procesos paralelos.
Ph.D. Franklin Parrales 183
13/05/2021
Construcción de Software Carrera de Software
Construcción Propensa al Error
• Interrupciones
– Las interrupciones pueden causar una operación crítica que terminar y
hacer un programa difícil de entender.
• Herencia
– El código no es localizado. Esto puede resultar en comportamiento
inesperado cuando se realizan cambios y los problemas de
comprensión.
• Recursión
– Los errores en la recursividad puede causar una sobrecargar de
memoria
• Matrices sin límites
– Los fallos de desbordamiento de búfer puede producirse si no hay
control de la envolvente en las matrices.
• Procesamiento de entrada por defecto
– Una acción de entrada que se produce independientemente de la
entrada.
Ph.D. Franklin Parrales 184
13/05/2021
Construcción de Software Carrera de Software
Unidad 1: Principios básicos de construcción de
software y tratamiento de excepciones
• Principios básicos del desarrollo de software
• Refactorización del código
• Detección de errores
• Tolerancia a fallos y tratamiento de excepciones
– Seguridad, fiabilidad y confiabilidad
– Confiabilidad del software
– Programación confiable
– Prevención de fallos
– Manejo de excepciones
– Tolerancia a fallos
– Arquitecturas tolerante a fallos
Ph.D. Franklin Parrales 185
13/05/2021
Construcción de Software Carrera de Software
Objetivos de la prevención y tolerancia a Faltas
• Tratar de anticipar faltas y manejarlas de forma de
minimizar los efectos negativos y maximizar la
seguridad
Falta: el error cometido por una persona se traduce en una
falta en un producto de software (o productos)
Falla: desvío del sistema del comportamiento requerido
No toda falta produce una falla, las condiciones para que
una falta resulte en falla pueden no producirse nunca
• Prevenir o tolerar faltas para evitar fallas,
construyendo el sistema para que reaccione de
manera aceptable
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES

Más contenido relacionado

La actualidad más candente

IIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareIIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareFranklin Parrales Bravo
 
Ejemplo plan de_pruebas
Ejemplo plan de_pruebasEjemplo plan de_pruebas
Ejemplo plan de_pruebasnicolas2100
 
Especificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareEspecificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareJesús E. CuRias
 
42 preguntas que deberias hacerte antes de abordar un proyecto
42 preguntas que deberias hacerte antes de abordar un proyecto42 preguntas que deberias hacerte antes de abordar un proyecto
42 preguntas que deberias hacerte antes de abordar un proyectoBlogdelfreelance .com
 
Ejemplos de proyectos al modelo en cascada
Ejemplos de proyectos  al modelo en cascadaEjemplos de proyectos  al modelo en cascada
Ejemplos de proyectos al modelo en cascadaaics-1986-13-saraguro
 
7.modelado de los requerimientos escenarios y clases
7.modelado de los requerimientos  escenarios y clases7.modelado de los requerimientos  escenarios y clases
7.modelado de los requerimientos escenarios y clasesRamiro Estigarribia Canese
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosFranklin Parrales Bravo
 
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?Software Guru
 
Construccion y Pruebas de Software
Construccion y Pruebas de SoftwareConstruccion y Pruebas de Software
Construccion y Pruebas de SoftwareGustavo Bazan Maal
 
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010SaraEAlcntaraR
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionAbner Gerardo
 
Estudio de viabilidad de un proyecto informático
Estudio de viabilidad de un proyecto informáticoEstudio de viabilidad de un proyecto informático
Estudio de viabilidad de un proyecto informáticoTitiushko Jazz
 
Aseguramiento de la Calidad del Software
Aseguramiento de la Calidad del SoftwareAseguramiento de la Calidad del Software
Aseguramiento de la Calidad del SoftwareTensor
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Softwarearacelij
 

La actualidad más candente (20)

Tipos de-pruebas
Tipos de-pruebasTipos de-pruebas
Tipos de-pruebas
 
IIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de SoftwareIIS Unidad1: Introducción a la Ingeniería de Software
IIS Unidad1: Introducción a la Ingeniería de Software
 
DB1 Unidad 6: Indices
DB1 Unidad 6: IndicesDB1 Unidad 6: Indices
DB1 Unidad 6: Indices
 
Ejemplo plan de_pruebas
Ejemplo plan de_pruebasEjemplo plan de_pruebas
Ejemplo plan de_pruebas
 
Especificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareEspecificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de software
 
Modelo en cascada pemo
Modelo en cascada pemoModelo en cascada pemo
Modelo en cascada pemo
 
42 preguntas que deberias hacerte antes de abordar un proyecto
42 preguntas que deberias hacerte antes de abordar un proyecto42 preguntas que deberias hacerte antes de abordar un proyecto
42 preguntas que deberias hacerte antes de abordar un proyecto
 
Ejemplos de proyectos al modelo en cascada
Ejemplos de proyectos  al modelo en cascadaEjemplos de proyectos  al modelo en cascada
Ejemplos de proyectos al modelo en cascada
 
7.modelado de los requerimientos escenarios y clases
7.modelado de los requerimientos  escenarios y clases7.modelado de los requerimientos  escenarios y clases
7.modelado de los requerimientos escenarios y clases
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
 
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
¿Cómo realizar entrevistas eficaces para obtener requisitos de software?
 
Construccion y Pruebas de Software
Construccion y Pruebas de SoftwareConstruccion y Pruebas de Software
Construccion y Pruebas de Software
 
PSW Unidad 2 MODELOS DE PROCESO
PSW Unidad 2 MODELOS DE PROCESOPSW Unidad 2 MODELOS DE PROCESO
PSW Unidad 2 MODELOS DE PROCESO
 
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010
Tema N° 7 Atributos de Calidad del Software según Norma ISO 25010
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacion
 
Pruebas del Software
Pruebas del SoftwarePruebas del Software
Pruebas del Software
 
Ejemplo rup
Ejemplo rupEjemplo rup
Ejemplo rup
 
Estudio de viabilidad de un proyecto informático
Estudio de viabilidad de un proyecto informáticoEstudio de viabilidad de un proyecto informático
Estudio de viabilidad de un proyecto informático
 
Aseguramiento de la Calidad del Software
Aseguramiento de la Calidad del SoftwareAseguramiento de la Calidad del Software
Aseguramiento de la Calidad del Software
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Software
 

Similar a PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES

Similar a PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES (20)

Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
6.redes pruebas de software
6.redes pruebas de software6.redes pruebas de software
6.redes pruebas de software
 
Pruebas de software
Pruebas de softwarePruebas de software
Pruebas de software
 
Pruebas
PruebasPruebas
Pruebas
 
Introducción de pruebas de software
Introducción de pruebas de softwareIntroducción de pruebas de software
Introducción de pruebas de software
 
Unidad 2.3 Prueba De Programas
Unidad 2.3 Prueba De ProgramasUnidad 2.3 Prueba De Programas
Unidad 2.3 Prueba De Programas
 
5. Métodos de Prueba de Software
5. Métodos de Prueba de Software5. Métodos de Prueba de Software
5. Métodos de Prueba de Software
 
Exposición software.pptx
Exposición software.pptxExposición software.pptx
Exposición software.pptx
 
Exposición software.pptx
Exposición software.pptxExposición software.pptx
Exposición software.pptx
 
Testing - Ing. Gabriela Muñoz
Testing - Ing. Gabriela MuñozTesting - Ing. Gabriela Muñoz
Testing - Ing. Gabriela Muñoz
 
ejemplos.pdf
ejemplos.pdfejemplos.pdf
ejemplos.pdf
 
Unidad ii. tdd
Unidad ii. tddUnidad ii. tdd
Unidad ii. tdd
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
INDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptxINDUCCION A QA TESTER.pptx
INDUCCION A QA TESTER.pptx
 
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Fundamento pruebas Ingeniería del software
Fundamento pruebas Ingeniería del softwareFundamento pruebas Ingeniería del software
Fundamento pruebas Ingeniería del software
 
Practicas tecnicas
Practicas tecnicasPracticas tecnicas
Practicas tecnicas
 

Más de Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 

Más de Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 

Último

CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfpaola110264
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7luisanthonycarrascos
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023ANDECE
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfMIGUELANGELCONDORIMA4
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...SuannNeyraChongShing
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamientoRobertoAlejandroCast6
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdfAnthonyTiclia
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaANDECE
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.pptVitobailon
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdfFlorenciopeaortiz
 

Último (20)

CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
 
sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes Granada
 
Fe_C_Tratamientos termicos_uap _3_.ppt
Fe_C_Tratamientos termicos_uap   _3_.pptFe_C_Tratamientos termicos_uap   _3_.ppt
Fe_C_Tratamientos termicos_uap _3_.ppt
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdf
 

PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES

  • 1. Ph.D. Franklin Parrales 1 13/05/2021 Construcción de Software Carrera de Software PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES Unidad 1B Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Construcción de Software
  • 2. Ph.D. Franklin Parrales 2 13/05/2021 Construcción de Software Carrera de Software Objetivo general de la Unidad 1 Identificar los principios básicos del desarrollo de software y del tratamiento de excepciones en el desarrollo mediante la aplicación de técnicas usadas en la industria para construir software seguro.
  • 3. Ph.D. Franklin Parrales 3 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones Unidad 1B
  • 4. Ph.D. Franklin Parrales 4 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones
  • 5. Ph.D. Franklin Parrales 5 13/05/2021 Construcción de Software Carrera de Software Referencias • Myers, et al. (2004), “The Art of Software Testing”, Wiley, Estados Unidos, 2004, ISBN: 0- 471-46912-2
  • 6. Ph.D. Franklin Parrales 6 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores – Pruebas de software: revisión de tipos de prueba – Pruebas unitarias – Depuración del software: importancia, buenas prácticas, herramientas – Plan de pruebas y documentación de las pruebas • Tolerancia a fallos y tratamiento de excepciones
  • 7. Ph.D. Franklin Parrales 7 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 8. Ph.D. Franklin Parrales 8 13/05/2021 Construcción de Software Carrera de Software Temario FASES DE LA PRUEBA • Diseño de las pruebas (¿técnicas?) • Generación de casos de prueba (¿datos de prueba?) • Definición del procedimiento de la prueba (¿cómo, donde?) • Ejecución de la prueba • Informe de la prueba (¿resultados?) TÉCNICAS DE PRUEBA • Pruebas estructurales o de Caja Blanca. • Pruebas funcionales o de caja negra. NIVELES DE PRUEBA • Pruebas unitarias. • Pruebas de integración. • Pruebas de sistema. • Pruebas de aceptación. • Pruebas de regresión. Aspectos que trataremos hoy
  • 9. Ph.D. Franklin Parrales 9 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Objetivo: repasar las ideas principales sobre las pruebas del software.
  • 10. Ph.D. Franklin Parrales 10 13/05/2021 Construcción de Software Carrera de Software Bugs y testing • Confiabilidad (reliability): Probabilidad de que un sistema de software no cause fallas en condiciones específicas. – Medido por tiempo de actividad, MTTF (tiempo medio hasta la falla), datos de fallas. • Bugs son inevitables en cualquier sistema de software complejo. – Estimaciones de la industria: 10-50 errores por 1000 líneas de código. – Un error puede ser visible o puede esconderse en su código hasta mucho más tarde. • testing: Un intento sistemático de revelar errores. – Prueba fallida: se demostró un error. – Prueba aprobada: no se encontró ningún error (para esta situación particular).
  • 11. Ph.D. Franklin Parrales 11 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Ariane 5. Lanzado por primera vez el 4 de junio de 1996. Motivo: Fallo software. La programación no se había probado lo suficiente. Ariane 5. 36.7 segundos después explotó. En concreto el fallo fue un trozo de software que habían reutilizado del Ariane 4, pero que no lo habían probado en el Ariane 5
  • 12. Ph.D. Franklin Parrales 12 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Sistemas software: • Mayor tamaño. • Mayor complejidad. • Menor tiempo de desarrollo. • Mayor calidad. Pruebas: • Más importancia y protagonismo día a día. • Garantizan la calidad del software. • Garantizan la satisfacción de los requisitos. • Ahorran tiempo y recurso en el desarrollo. • Su objetivo: localizar, para subsanarlas, el mayor número de deficiencias lo antes posible. Un reto a la Ingeniería de Software.
  • 13. Ph.D. Franklin Parrales 13 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Verificación dinámica del comportamiento del software a partir de un conjunto finito de casos de prueba. Definición de prueba: Para probar un software necesitamos ejecutar ese software.
  • 14. Ph.D. Franklin Parrales 14 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Verificación dinámica del comportamiento del software a partir de un conjunto finito de casos de prueba. Definición de prueba: Dos conceptos muy relacionados: Validación: proceso de evaluar un sistema o componente durante o al final del proceso de desarrollo para determinar si satisface los requisitos especificados. 1 2 Verificación: proceso de evaluar un sistema o componente para determinar si los productos de una determinada fase satisfacen las condiciones impuestas al comienzo de la fase.
  • 15. Ph.D. Franklin Parrales 15 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Verificación dinámica del comportamiento del software a partir de un conjunto finito de casos de prueba. Para probar un programa tenemos que ejecutarlo. La prueba tiene un límite. No vale ejecutar el programa de cualquier manera.
  • 16. Ph.D. Franklin Parrales 16 13/05/2021 Construcción de Software Carrera de Software Pruebas de Programas • Pruebas de programas es el proceso de ejecutar programas con el propósito de encontrar errores • Se puede mostrar la presencia de un error pero no la ausencia [Dijkstra] • Debería ser visto como el último recurso para encontrar errores
  • 17. Ph.D. Franklin Parrales 17 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas Configurar partida:  El sistema muestra un formulario con todos los valores configurables.  El jugador introduce modifica los valores.  El sistema comprueba la validez de los valores y vuelve a la pantalla principal. Acciones Configuración: Intentos = 5 Valores = 8 Repetidos = cierto Valores del prueba Resultado Una prueba consta, al menos, de tres elementos:
  • 18. Ph.D. Franklin Parrales 18 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas ¿Funciona el teléfono?. Valores de prueba Acciones Resultado esperado 123-45-67-89 1. Descolgar auricular. 2. Marcar número de Pepote. 3. Esperar contestación. (Pepote): “Digameee”. Veamos un ejemplo sencillo:
  • 19. Ph.D. Franklin Parrales 19 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas ¿Me está bien esta camisa? Valores de prueba Acciones Resultado esperado Mi cuerpo. 1. Ponerme la camisa. 2. Abrochármela. 3. Moverme un poco. 4. Mirarme al espejo. Cuidado con la etiqueta o con arrugarla por si hay que devolverla Elegancia y confort. Veamos otro ejemplo sencillo:
  • 20. Ph.D. Franklin Parrales 20 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas public int suma(int a, int b) { return a + b; } ¿Qué casos de prueba podemos escribir?. Valores de prueba Acciones Resultado esperado ??? Suma(a, b) ??? Los casos de prueba son finitos (y cuantos menos, mejor).
  • 21. Ph.D. Franklin Parrales 21 13/05/2021 Construcción de Software Carrera de Software Introducción a las pruebas public int suma(int a, int b) { return a + b; } ¿Qué casos de prueba podemos escribir?. Valores de prueba Acciones Resultado esperado 0, 0 Suma(a, b) 0 0, b = no 0 Suma(a, b) b 3, 4 Suma(a, b) 7 -2, -8 Suma(a, b) -10 -3, 6 Suma(a, b) 3 Integer.MAX_V ALUE, 6 Suma(a, b) -2147483643 Y algunas permutaciones más.
  • 22. Ph.D. Franklin Parrales 22 13/05/2021 Construcción de Software Carrera de Software Fase de pruebas • La fase de pruebas se realiza una vez integrado cada uno de los módulos del sistema. • La fase de pruebas se realiza de distintas formas tratando de encontrar la mayoría de los errores que se encuentran de manera inherente en el software.
  • 23. Ph.D. Franklin Parrales 23 13/05/2021 Construcción de Software Carrera de Software Dificultades de las pruebas • Percepción de algunos desarrolladores y administradores: – Las pruebas se consideran un trabajo de novatos. – Asignado a los miembros del equipo con menos experiencia. – Hecho como una ocurrencia tardía (si es que se hace). • "Mi código es bueno; no tendrá errores. No necesito probarlo". • "Encontraré los errores ejecutando el programa cliente". • Limitaciones de lo que las pruebas pueden mostrarle: – Es imposible probar completamente un sistema. – Las pruebas no siempre revelan directamente los errores reales en el código. – Las pruebas no prueban la ausencia de errores en el software.
  • 24. Ph.D. Franklin Parrales 24 13/05/2021 Construcción de Software Carrera de Software En conclusión • Probar es ejecutar casos de prueba. • Caso de prueba: entrada + acciones + salida salida obtenida == salida esperada salida obtenida != salida esperada • ¿Un programa que pasa todos sus casos de prueba es un programa sin errores?.
  • 25. Ph.D. Franklin Parrales 25 13/05/2021 Construcción de Software Carrera de Software En conclusión No Las pruebas sólo pueden encontrar los errores que buscan. Por esto es tan importante un buen diseño de pruebas->Plan de pruebas
  • 26. Ph.D. Franklin Parrales 26 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 27. Ph.D. Franklin Parrales 27 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba • Existen muchos tipos de pruebas dependiendo de la labor y características de cada una de ellas. – Pruebas Alfa: se realizan por el usuario final en un ambiente controlado. – Pruebas Beta: se realizan por el usuario sin controlar el ambiente.
  • 28. Ph.D. Franklin Parrales 28 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba – Pruebas de caja blanca también llamadas transparentes se concentran en lo que es el código fuente.
  • 29. Ph.D. Franklin Parrales 29 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba – Pruebas de segmentos: No se pueden tener pruebas que abarquen el 100% de los casos de uso. Se deben realizar pruebas de segmentos. • Las pruebas de segmentos son bloques de instrucciones. • Es recomendable realizar pruebas de trazado (assert) para visualizar en donde ocurren los errores. • Se recomienda probar lo antes posible cualquier fragmento de código.
  • 30. Ph.D. Franklin Parrales 30 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba – Pruebas de caja negra: están orientadas a lo que se espera realicen los componentes modulares del sistema. • Son pruebas funcionales y no interesa como se realizan las cosas sólo que el resultado obtenido sea el correcto. • Se recomienda que sean los usuarios quienes las realicen.
  • 31. Ph.D. Franklin Parrales 31 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba – Pruebas de estrés se encargan de observar el rendimiento de la aplicación sobre cargas demandantes de trabajo: grandes volúmenes de datos con poco espacio en disco, 90% de uso de CPU, múltiples conexiones, etc.
  • 32. Ph.D. Franklin Parrales 32 13/05/2021 Construcción de Software Carrera de Software Tipos de prueba • Existen otros tipos de prueba como: – Pruebas de unidad: se encargan de un módulo de software en particular. – Pruebas de Integración: son pruebas que se realizan con dos o más módulos trabajando en conjunto. – Pruebas de aceptación: están más involucradas en el concepto en sí que en el desarrollo.
  • 33. Ph.D. Franklin Parrales 33 13/05/2021 Construcción de Software Carrera de Software Recuerde que… • Las pruebas ayudan al aseguramiento de calidad pero no garantizan que un software esté 100% libre de errores.
  • 34. Ph.D. Franklin Parrales 34 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Prueba Unitaria • Ejecutar cada módulo • Particionar, definir los casos de prueba. • Comparar el resultado Prueba de Regresión • Identificar errores introducidos por la combinación de programas probados unitariamente. • Determina cómo la base de datos de prueba será cargada • Utilizar la técnica down-top. Pruebas de Humo • Detectar los errores en realeases tempranos y de manera fácil • su objetivo es probar el sistema constantemente buscando que saque “humo” • Realizar una integración de todo el sistema cada cierto periodo (se recomienda un día, máximo una semana) Pruebas del Sistema • Asegurar la apropiada navegación dentro del sistema, ingreso de datos, procesamiento y recuperación. • deben enfocarse en requisitos que puedan ser tomados directamente de casos de uso y reglas y funciones de negocios • Ejecute cada caso de uso, flujo básico o función utilizando datos válidos e inválidos
  • 35. Ph.D. Franklin Parrales 35 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Pruebas de Stress • Verificar que el sistema funciona apropiadamente y sin errores • Las pruebas de stress se proponen encontrar errores debidos a recursos bajos o completitud de recursos • Use los scripts utilizados en las pruebas de desempeño Pruebas de desempeño • Validar el tiempo de respuesta para las transacciones • Miden tiempos de respuesta, índices de procesamiento de transacciones y otros requisitos sensibles al tiempo • Modifique archivos de datos (para incrementar el número de transacciones) o los scripts para incrementar el número de veces que ocurre cada transacción Pruebas de carga • Validar el tiempo de respuesta para las transacciones • Miden tiempos de respuesta, índices de procesamiento de transacciones y otros requisitos sensibles al tiempo • Modifique archivos de datos (para incrementar el número de transacciones) o los scripts para incrementar el número de veces que ocurre cada transacción Pruebas de volumen • Verificar el tamaño de la BD, el equipo si es suficiente etc. • Las pruebas de volumen hacen referencia a grandes cantidades de datos para determinar los límites en que se causa que el Sistema falle • Deben usarse múltiples clientes, ya sea corriendo las mismas pruebas o pruebas complementarias para producir el peor caso de volumen
  • 36. Ph.D. Franklin Parrales 36 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Pruebas de Recuperación y Tolerancia a fallas • Verificar que los procesos de recuperación (manual o automática) restauran apropiadamente la Base de datos • Estas pruebas aseguran que una aplicación o sistema se recupere de una variedad de anomalías de hardware, software o red con pérdidas de datos o fallas de integridad. • Se deben utilizar las pruebas creadas para la Funcionalidad del sistema y Procesos de Negocios para crear una serie de transacciones Prueba de Múltiples Sitios • Detectar fallas en configuraciones y comunicaciones de datos entre múltiples sitios • El propósito de esta prueba es evaluar el correcto funcionamiento del sistema o subsistema en múltiples instalaciones. • Consistencia, empaquetamiento, sincronización Prueba de Compatibilidad y Conversión • Buscar problemas de compatibilidad y conversión en los sistemas • El propósito es demostrar que los objetivos de compatibilidad no han sido logrados y que los procedimientos de conversión no funcionan. • Compatibilidad entre programas y Conversión de datos Pruebas de Integridad de Datos y Base de Datos • Asegurar que los métodos de acceso y procesos funcionan adecuadamente y sin ocasionar corrupción de datos. • La Base de datos y los procesos de Base de datos deben ser probados como sistemas separados del proyecto • Invoque cada método de acceso y proceso de la Base de datos, utilizando en cada uno datos válidos e inválidos. Analizar la BD.
  • 37. Ph.D. Franklin Parrales 37 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Pruebas de Seguridad y Control de Acceso • Nivel de seguridad de la aplicación: Verifica que un actor solo pueda acceder a las funciones y datos que su usuario tiene permitido • Seguridad del sistema, incluyendo acceso a datos o Funciones de negocios e incluyendo accesos remotos • Funciones / Seguridad de Datos: Identificar cada tipo de usuario y las funciones y datos a los que se debe autorizar. Pruebas del Ciclo del Negocio • Asegurar que el sistema funciona de acuerdo con el modelo de negocios emulando todos los eventos en el tiempo y en función del tiempo. • Deberían emular las actividades ejecutadas en el a través del tiempo. Debería identificarse un periodo, como por ejemplo un año, y las transacciones y actividades que podrían ocurrir durante un periodo • Ejecute cada caso de uso, flujo básico o función utilizando datos válidos e inválidos… Pruebas de GUI • La navegación, Los objetos de la ventana y características, tales como menús, medidas, posiciones, estados y focos • La prueba de interfaz de usuario verifica la interacción del usuario con el software • Pruebas de crear / modificar cada ventana para verificar la adecuada navegación y estado de los objetos. Pruebas de Configuración • Validar y verificar que el cliente del sistema funciona apropiadamente en las estaciones de trabajo recomendadas. • Estas pruebas verifican la operación del sistema en diferentes configuraciones de hardware y software • Incluya la apertura o cierre de varias aplicaciones Microsoft, como Excel y Word (o algún tipo de software similar a la que se está probando)
  • 38. Ph.D. Franklin Parrales 38 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Prueba de Estilo • Comprobar que la aplicación sigue los estándares de estilo propios del cliente. • Se entienden como tales el formato de las ventanas, colores corporativos, tipos de letra etc. • Se realiza una navegación por la aplicación verificando si se cumplen con los estándares de GUI del cliente. Prueba de Aceptación • Determinación por parte del cliente de la aceptación o rechazo del sistema desarrollado. • La prueba de aceptación es ejecutada antes de que la aplicación sea instalada dentro de un ambiente de producción • Realización de los documentos de planes de prueba de aceptación y especificación de los mismos, basados en los criterios de aceptación del cliente. Prueba de Instalación • Verificar y validar que el sistema se instala apropiadamente en cada cliente, bajo las siguientes condiciones: Instalaciones nuevas y actualizaciones • El primero es asegurar que el sistema puede ser instalado en todas las configuraciones posibles .El segundo propósito verificar que, una vez instalado, el sistema opera correctamente. • Diseñar scripts para validar las condiciones de la máquina a instalar. Prueba de Documentación y Procedimiento • Evaluar la documentación del usuario • Evaluar la exactitud y claridad de la documentación del usuario y para determinar si el manual de procedimientos trabajará correctamente como una parte integral del sistema. • Revisar la documentación del proyecto contra las funcionalidades del sistema y su configuración física.
  • 39. Ph.D. Franklin Parrales 39 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Pruebas Funcionales • Se asegura la trabajo apropiado de los requisitos funcionales, incluyendo la navegación, entrada de datos, procesamiento y obtención de resultados • Las pruebas Funcionales deben enfocarse en los requisitos funcionales Diseñar scripts para validar las condiciones de la máquina a instalar • Que los resultados esperados ocurran cuando se usen datos válidos. Prueba de Usabilidad • Determinar la usabilidad del sistema. • Determina cuán bien el usuario podrá usar y entender la aplicación. Identifica las áreas de diseño que hacen al sistema de difícil uso para el usuario. • Verificar que la aplicación no presenta los siguientes problemas de usabilidad típicos: sistema es demasiado complejo , recuperación de errores es pobre , procedimientos no son simples ni obvios Prueba de Campo • Correr el sistema en el ambiente real para encontrar errores y validar el producto contra sus especificaciones originales. • Realizar un subconjunto válido de pruebas de sistema. • Determinar que pruebas de sistema serán corridas para validar el sistema en producción. Pruebas Alfa • Prueba de aceptación para detectar errores en el sistema bajo un ambiente controlado. • La verificación involucra la ejecución de partes o todo del sistema en ambientes simulados, con el fin de encontrar errores. • Se llevan a cabo en el lugar en donde fue desarrollado el sistema
  • 40. Ph.D. Franklin Parrales 40 13/05/2021 Construcción de Software Carrera de Software Pruebas generales de software Pruebas Beta • Realizar la validación del sistema por parte del usuario. • Prueba de aceptación donde La validación (o pruebas beta) involucra el uso del software en un ambiente real. • Se selecciona un grupo de usuarios que ponen a trabajar el sistema en un ambiente real. Usan el sistema en sus actividades cotidianas, procesan transacciones y producen salidas normales del sistema
  • 41. Ph.D. Franklin Parrales 41 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 42. Ph.D. Franklin Parrales 42 13/05/2021 Construcción de Software Carrera de Software Repaso: Definiciones • Requerimientos: “¿Qué hace el producto?” – Expresado sin ambigüedad y de forma verificable • Arquitectura: “¿Cómo está hecho?” (descripto en el nivel de abstracción más alto) – Ej.: Diagrama de bloques; flujo de datos entre estos • Diseño Detallado: “¿Cómo está hecho?” (descripto en un nivel de abstracción intermedio) – Ej.: Especificación de las interfases; descripción detallada de la operación • Implementación: “¿Cómo está hecho?” (descripto en nivel de abstracción bajo) – Ej.: Código; esquemático; dibujo del circuito impreso • Integración de módulos diseñados separadamente – Ej.: Hardware y software • Verificación: “¿Funciona como debe?”
  • 43. Ph.D. Franklin Parrales 43 13/05/2021 Construcción de Software Carrera de Software Repaso: Ciclo de Vida Tipo “V” • Es una evolución del anterior. En este, la verificación se desglosa en etapas de nivel de abstracción creciente. Análisis y Definición de los Requerimientos Diseño de la Arquitectura del Sistema Diseño Detallado Testeo de cada unidad (unit test) Instalación, Operación y Mantenimiento Prueba de Aceptación Prueba de Integración Implementación de cada unidad Plan de Pruebas para Cada Unidad Plan de Pruebas de Integración Plan de Pruebas de Aceptación ❑ En cada etapa de diseño se crea un plan de pruebas, que es el que guía la etapa de validación que le corresponde.
  • 44. Ph.D. Franklin Parrales 44 13/05/2021 Construcción de Software Carrera de Software Niveles de Pruebas • Prueba de unidad (unit testing) – Se testean unidades individuales de código (software o hardware) separadamente. • …por medio de sus interfaces, en un lenguaje de programación (C, etc.) – Es el primer paso de un enfoque bottom-up de testeo, como el que propone el modelo V. • Prueba de integración (integration testing) – Se testean los módulos anteriores en conjunto, o sea, una vez “conectados” entre sí. • …también por medio de sus interfaces en C u otro lenguaje. • Prueba de aceptación (acceptance testing o system testing) – Se testea que el conjunto cumpla los requerimientos. – Se lo hace por medio de las interfaces del producto final • Interfaces al usuario, etc.
  • 45. Ph.D. Franklin Parrales 45 13/05/2021 Construcción de Software Carrera de Software Niveles de Pruebas • También se pueden aplicar pruebas aleatorias. Lo ideal es poder utilizar un framework de pruebas.
  • 46. Ph.D. Franklin Parrales 46 13/05/2021 Construcción de Software Carrera de Software Niveles de prueba P r o c e s o d e d e s a r r o l l o P r o c e s o d e p r u e b a Pruebas unitárias Pruebas de integración Pruebas de sistema Pruebas de aceptación Componentes aislados Verifican Interacción entre componentes Verifican Requisitos del sistema Necesidades de los usuarios Verifican Verifican Pruebas de implantación Paso a producción Verifican
  • 47. Ph.D. Franklin Parrales 47 13/05/2021 Construcción de Software Carrera de Software Pruebas unitarias Cuando: Durante la construcción del sistema. Objetivo: Prueban el diseño y el comportamiento de cada uno de los componentes una vez construidos. Cobertura CruiseControl XUnit TestNG Cactus jMock EasyMock muJava CoView Herramientas:
  • 48. Ph.D. Franklin Parrales 48 13/05/2021 Construcción de Software Carrera de Software Pruebas unitarias Técnicas: – Análisis de caminos. – Partición de categorías. – Mutaciones. – Algoritmos genéricos. En general, han sido muy estudiadas.
  • 49. Ph.D. Franklin Parrales 49 13/05/2021 Construcción de Software Carrera de Software Pruebas de integración Herramientas: Las mismas, vamos sustituyendo los mocks por las clases reales y, si es necesario, escribiendo más casos de prueba. Cuando: Durante la construcción del sistema Objetivo: Comprueban la correcta unión de los componentes entre sí a través de sus interfaces, y si cumplen con la funcionalidad establecida
  • 50. Ph.D. Franklin Parrales 50 13/05/2021 Construcción de Software Carrera de Software Pruebas de integración Técnicas: Arriba abajo: El primer componente que se prueba es el primero de la jerarquía (A). Una de las ventajas es que las interfaces entre los distintos componentes se prueban en una fase temprana y con frecuencia. Abajo a arriba: Se prueban primero los componentes de más bajo nivel (E, F) Este tipo de enfoque permite un desarrollo más en paralelo, pero presenta mayores dificultades a la hora de planificar y de gestionar.
  • 51. Ph.D. Franklin Parrales 51 13/05/2021 Construcción de Software Carrera de Software Pruebas de sistema Herramientas: Cuando: Durante la construcción del sistema (partes completas). Objetivo: Prueban a fondo el sistema, comprobando su funcionalidad e integridad globalmente, en un entorno lo más parecido posible al entorno final de producción. Herramientas: Técnicas: probar el sistema como lo hará el usuario final. JMeter The Grinch Avignon JWebTest Selenium Abbot Marathon HttpUnit GUItar
  • 52. Ph.D. Franklin Parrales 52 13/05/2021 Construcción de Software Carrera de Software Pruebas de implantación Herramientas: Cuando: Durante la implantación en el entrono de producción. . Objetivo: Comprueban el correcto funcionamiento del sistema dentro del entorno real de producción (rendimiento, copias de seguridad, etc.). Herramientas: Las mismas. Las pruebas se vuelven a ejecutar en el entorno real de producción y se añaden nuevas pruebas. .
  • 53. Ph.D. Franklin Parrales 53 13/05/2021 Construcción de Software Carrera de Software Pruebas de aceptación Herramientas: Cuando: Después de la implantación en el entorno de producción. Objetivo: Verifican que el sistema cumple con todos los requisitos indicados y permite que los usuarios del sistema den el visto bueno definitivo. Herramientas: Las mismas. Las pruebas se vuelven a ejecutar en el entorno real de producción y se añaden nuevas pruebas.
  • 54. Ph.D. Franklin Parrales 54 13/05/2021 Construcción de Software Carrera de Software Pruebas de regresión Cuando: Durante el mantenimiento del sistema. Objetivo: Comprobar que los cambios sobre un componente de un sistema de información, no introducen un comportamiento no deseado o errores adicionales en otros componentes no modificados Herramientas: Las mismas.
  • 55. Ph.D. Franklin Parrales 55 13/05/2021 Construcción de Software Carrera de Software Características de una buena prueba • Ha de tener una alta probabilidad de encontrar un fallo. Cuanto más, mejor. • No debe ser redundante. Si ya funciona, no lo probamos más. • Debe ser la “mejor de la cosecha”. Si tenemos donde elegir, elegimos la mejor. • No debería ser ni demasiado sencilla ni demasiado compleja. Si es muy sencilla no aporta nada, si es muy compleja a lo mejor no sabemos lo que ha fallado.
  • 56. Ph.D. Franklin Parrales 56 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 57. Ph.D. Franklin Parrales 57 13/05/2021 Construcción de Software Carrera de Software Pruebas de caja negra, gris y blanca Caja negra … requirimientos Salida real comparada con la salida requerida Caja blanca Caja gris … requirimientos & elementos claves de diseño Entrada determinada por.. Resultado …elementos del diseño Confirmación del comportamiento esperado Como para las pruebas de caja negra y blanca
  • 58. Ph.D. Franklin Parrales 58 13/05/2021 Construcción de Software Carrera de Software Técnicas de Prueba • Caja blanca o pruebas estructurales – El conocimiento del diseño interno del software se usa para desarrollar los casos de pruebas • Caja negra o pruebas funcionales – Los casos de prueba son diseñados basados sólo en la especificación externa del software • Pruebas basadas en escenarios o casos de uso – Actuar como un usuario final y crear escenarios reales para detectar errores
  • 59. Ph.D. Franklin Parrales 59 13/05/2021 Construcción de Software Carrera de Software Técnicas de Prueba (2) • Pruebas Selectivas – Generar más casos de prueba para las funciones o componentes que son más usados – Probar más rigurosamente las funciones o componentes más críticos – Generar mas casos de prueba para las funciones o componentes más complejos
  • 60. Ph.D. Franklin Parrales 60 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 61. Ph.D. Franklin Parrales 61 13/05/2021 Construcción de Software Carrera de Software Conceptos • Espacio de Prueba – Conjunto de todos los posibles casos de Prueba • Pruebas de subdominios – Subconjuntos del espacio de Prueba • Línea de Prueba (Test Suite) – Conjunto de casos de prueba que serán ejecutados en una fase
  • 62. Ph.D. Franklin Parrales 62 13/05/2021 Construcción de Software Carrera de Software Conceptos (2) • Testbed/Test Harness – Software adicional desarrollado para soportar la ejecución de los casos de prueba • Prueba de Cubrimiento – Grado en el cual los casos de prueba “pasan” por el código siendo probado
  • 63. Ph.D. Franklin Parrales 63 13/05/2021 Construcción de Software Carrera de Software Posibilidades de entradas para las pruebas 0% 25% principal $100 $100M 1% 20% Infinidad de valores ilegales: elija una muestra finita. Infinidad de valores legales: elija una muestra finita. estimación de inflación tasa de interés
  • 64. Ph.D. Franklin Parrales 64 13/05/2021 Construcción de Software Carrera de Software Pruebas: particiones y límites de entrada tasa de interés 0% 25% principal $100 $100M estimación de inflación límites (bordes) 1% 20% Particiones equivalentes Una región ilegal Rango de entradas válidas
  • 65. Ph.D. Franklin Parrales 65 13/05/2021 Construcción de Software Carrera de Software Rangos de prueba: casos elementales 1. Dentro del rango 2. En los límites del rango 3. Fuera del rango (“illegal”) rango
  • 66. Ph.D. Franklin Parrales 66 13/05/2021 Construcción de Software Carrera de Software Estructura del Espacio de Pruebas • Taxonomía de los Casos de Prueba – Pruebas Funcionales: considerar solamente entradas válidas al sistema y condiciones normales de operación. – Pruebas de Robustez: considerar datos de entrada inválidos, secuencias invalidas de comandos/acciones, etc. – Pruebas de Frontera: considerar valores/tamaños mínimos y máximos para datos de entrada, carga del sistema mínima y máxima, etc. – Pruebas de tolerancia a fallas: considerar condiciones anormales de operación, fallas hardware y software de la plataforma computacional sobre la que funciona el software en prueba.
  • 67. Ph.D. Franklin Parrales 67 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba • Hacer una lista de los propósitos de Prueba – Usar la taxonomía de los casos de prueba como guía
  • 68. Ph.D. Franklin Parrales 68 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (2) • Por cada propósito de Prueba, hacer una lista de casos de prueba – Construir una versión preliminar de la lista de casos de prueba a partir de los escenarios típicos relacionados con el propósito de prueba – Enriquecer la lista de casos de prueba, analizando las posibles variaciones o casos especiales de los escenarios considerados – Complementar la lista de casos de prueba, analizando posibles casos que puedan revelar errores, usando como guía la siguiente lista de chequeo:
  • 69. Ph.D. Franklin Parrales 69 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (3) – Cuales son los errores típicos encontrados en productos similares probados en el pasado, y que casos de prueba se usaron para revelarlos? – En pruebas del sistema y pruebas de aceptación, qué casos es probable que los desarrolladores hubieran pasado por alto (desde el punto de vista del experto del negocio o dominio de aplicación)? – En pruebas de unidad y pruebas de integración, qué características complejas del diseño pudieron haber sido implementadas de forma incorrecta?
  • 70. Ph.D. Franklin Parrales 70 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (4) – En pruebas del sistema y pruebas de aceptación, qué aspectos complejos acerca de los requerimientos pudieron haber sido mal interpretados por los desarrolladores? – Qué casos triviales pudieran haber sido no tenidos en cuenta en la implementación?
  • 71. Ph.D. Franklin Parrales 71 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (5) • Para cada caso de prueba, especificar los pasos para realizar la prueba y los criterios de aceptación de la prueba, tal como se indica en el formato:
  • 72. Ph.D. Franklin Parrales 72 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (6) • Caso de uso – Procedimiento • Criterios de aceptación – Procedimiento • Criterios de aceptación – ... • Caso de uso – ... • ...
  • 73. Ph.D. Franklin Parrales 73 13/05/2021 Construcción de Software Carrera de Software Diseño de los Casos de Prueba (7) • Para cada caso de prueba se debe especificar – Instrucciones de prueba: lista de pasos a seguir por los usuarios encargados de ejecutar la prueba. – Criterios de aceptación: lista de condiciones (predicados) que deben satisfacerse para determinar el éxito de la prueba, incluyendo restricciones sobre los datos de salida esperados, y condiciones que deben cumplirse en el estado interno del sistema (ej. valores de algunas tablas) después de ejecutar el caso de prueba.
  • 74. Ph.D. Franklin Parrales 74 13/05/2021 Construcción de Software Carrera de Software Pruebas de software: revisión de tipos de prueba 1. Introducción a las pruebas 2. Tipos de prueba 3. Niveles de prueba 4. Técnicas de pruebas 5. Diseño de Casos de Prueba 6. Automatización de las pruebas
  • 75. Ph.D. Franklin Parrales 75 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas “No sirven para nada” “Engaño” “Pérdida de tiempo” “Descartadas al primer cambio” “Imposibles de mantener” “Moda” ¿Por qué?. Algunas palabras que hemos escuchado hablando de pruebas.
  • 76. Ph.D. Franklin Parrales 76 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas Las pruebas son polémicas: – No son parte de la solución. – No se las entregamos a nuestros clientes. – Incluso pueden darles a nuestros clientes una mala impresión. – Nuestros clientes no nos las pagan. – Difíciles de mantener. Sin embargo, las pruebas son imprescindibles. La automatización nos permite reducir costes.
  • 77. Ph.D. Franklin Parrales 77 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas ¿Qué significa automatizar?. ¿Qué podemos automatizar?. En este caso concreto: realizar de manera automática mediante herramientas software. Diseño de las pruebas Codificación de las pruebas Ejecución de las pruebas Evaluación de resultados Lo más habitual, muchas técnicas y herramientas Menos habitual, pocas técnicas y herramientas.
  • 78. Ph.D. Franklin Parrales 78 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas Ventajas de la automatización: – Mayor rapidez de ejecución. – Menos recursos. – Evitamos pruebas obsoletas
  • 79. Ph.D. Franklin Parrales 79 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas Inconvenientes: – ¡Muy pocas herramientas!. – Necesitan una “base” a menudo inexistente. – Un conjunto pobre de pruebas.
  • 80. Ph.D. Franklin Parrales 80 13/05/2021 Construcción de Software Carrera de Software Automatización de las pruebas Cuando automatizar y cuando no automatizar. Bien Mal. Gastamos más en la automatización que en la pruebas en sí. No buscamos automatizarlo absolutamente todo. Tenemos modelos y documentación del sistema. Construimos el sistema sobre la marcha. Nosotros controlamos las herramientas de prueba. Las herramientas de prueba nos controlan a nosotros.
  • 81. Ph.D. Franklin Parrales 81 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores – Pruebas de software: revisión de tipos de prueba – Pruebas unitarias – Depuración del software: importancia, buenas prácticas, herramientas – Plan de pruebas y documentación de las pruebas • Tolerancia a fallos y tratamiento de excepciones
  • 82. Ph.D. Franklin Parrales 82 13/05/2021 Construcción de Software Carrera de Software Pruebas Unitarias Cuando: Durante la construcción del sistema. Objetivo: Prueban el diseño y el comportamiento de cada uno de los componentes una vez construidos. Cobertura CruiseControl XUnit TestNG Cactus jMock EasyMock muJava CoView Herramientas:
  • 83. Ph.D. Franklin Parrales 83 13/05/2021 Construcción de Software Carrera de Software Pruebas Unitarias • Descripción – Su propósito es encontrar errores en la lógica, datos o algoritmos en componentes o subsistemas individuales – Realizado por los desarrolladores del componente – Técnica de prueba: Caja blanca
  • 84. Ph.D. Franklin Parrales 84 13/05/2021 Construcción de Software Carrera de Software Pruebas Unitarias • Guías para generar casos de prueba – Tratar de detectar errores en los algoritmos y la lógica – Tratar de detectar errores en la manipulación de las estructuras de datos – Tratar de detectar errores en el llamado a otros módulos – Identificar todos los caminos posibles del módulo y tratar de hacer casos de prueba que los cubran – Tratar de detectar errores usando datos límites
  • 85. Ph.D. Franklin Parrales 85 13/05/2021 Construcción de Software Carrera de Software Pruebas Unitarias • Busca errores en un subsistema de forma aislada. – Generalmente, un "subsistema" significa una clase u objeto en particular. – La biblioteca de Java JUnit nos ayuda a realizar fácilmente pruebas unitarias. • La idea básica: – Para una clase determinada Foo, cree otra clase FooTest para probarla, que contenga varios métodos de "caso de prueba" para ejecutar. – Cada método busca resultados particulares y pasa / falla. • JUnit proporciona comandos "assert" para ayudarnos a escribir pruebas. – La idea: coloque llamadas de aserción en sus métodos de prueba para verificar las cosas que espera que sean ciertas. Si no es así, la prueba fallará.
  • 86. Ph.D. Franklin Parrales 86 13/05/2021 Construcción de Software Carrera de Software JUnit y Eclipse • Para agregar JUnit a un Proyecto en Eclipse, haga click en: – Project → Properties → Build Path → Libraries → Add Library... → JUnit → JUnit 4 → Finish • Para crear un caso de test: – Clic derecho sobre un paquete y escoja New → Test Case – o clic File → New → JUnit Test Case – Eclipse puede crear stubs de pruebas de métodos para usted.
  • 87. Ph.D. Franklin Parrales 87 13/05/2021 Construcción de Software Carrera de Software Ejecutando una prueba en Eclipse • Haga clic derecho en Eclipse Package Explorer; escoger: Run As → JUnit Test • La barra JUnit mostrará green si el código pasa todas las pruebas, red si alguna falla. • El seguimiento de fallas (Failure Trace) muestra qué pruebas fallaron, si las hubo, y por qué.
  • 88. Ph.D. Franklin Parrales 88 13/05/2021 Construcción de Software Carrera de Software La anotación @test import org.junit.*; import static org.junit.Assert.*; public class name { ... @Test public void name() { // a test case method ... } } – Un método con @Test se marca como un caso de prueba JUnit. • Todos los métodos @Test se ejecutan cuando JUnit ejecuta su clase de prueba. – La anotación @test le dice a la JVM que el siguiente método es una prueba. Esta anotación es necesaria antes de cada método de prueba.
  • 89. Ph.D. Franklin Parrales 89 13/05/2021 Construcción de Software Carrera de Software La anotación @test • Usaremos una clase calculator para demostrar las capacidades básicas de JUnit. Por ahora, nuestra clase calculator se ve así: public class Calculator { float add(float a, float b) { return a + b; } int divide(int a, int b) { return a/b; } } • Esta clase no hace nada especial, pero nos permitirá realizar las pruebas. Según las convenciones de nomenclatura, nace la clase CalculatorTest: class CalculatorTest { @Test void additionTest() { Calculator calc = new Calculator(); assertEquals(2, calc.add(1,1), "The output should be the sum of the two arguments"); } }
  • 90. Ph.D. Franklin Parrales 90 13/05/2021 Construcción de Software Carrera de Software El método assertEquals() • Este y todos los métodos de "aserción" funcionan de manera similar: – afirman (es decir, se aseguran) de que todo lo que estamos comprobando es cierto. – En este caso, estamos afirmando que los dos argumentos que pasamos son iguales, en caso de que no lo sean, la prueba fallará. – Es muy importante entender que assertEquals() realmente usa el método .equals() y no el operador ==. – Hay un método JUnit separado llamado assertSame() que usa == en lugar de .equals().
  • 91. Ph.D. Franklin Parrales 91 13/05/2021 Construcción de Software Carrera de Software Un ejemplo de Java 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()); }
  • 92. Ph.D. Franklin Parrales 92 13/05/2021 Construcción de Software Carrera de Software Prueba unitaria add () con JUnit La prueba unitaria MoneyTest prueba que la suma de dos Moneys con la misma moneda contiene un valor que es la suma de los valores de los dos Moneys import org.junit.Test; import static org.junit.Assert.*; public class MoneyTest { @Test public void simpleAdd() { Money m12CHF= new Money(12, "CHF"); Money m14CHF= new Money(14, "CHF"); Money expected= new Money(26, "CHF"); Money observed= m12CHF.add(m14CHF); assertTrue(expected.equals(observed)); } } Assertion: Returns True if parameter of type Boolean evaluates to True Calling the SUT Method Static import of Assertion package (Older JUnit versions used inheritance)
  • 93. Ph.D. Franklin Parrales 93 13/05/2021 Construcción de Software Carrera de Software JUnit assertion methods • A cada método también se le puede pasar una cadena para mostrar si falla: – Ej.: assertEquals("message", expected, actual) assertTrue(test) fails if the boolean test is false assertFalse(test) fails if the boolean test is true assertEquals(expected, actual) fails if the values are not equal assertSame(expected, actual) fails if the values are not the same (by ==) assertNotSame(expected, actual) fails if the values are the same (by ==) assertNull(value) fails if the given value is not null assertNotNull(value) fails if the given value is null fail() causes current test to immediately fail
  • 94. Ph.D. Franklin Parrales 94 13/05/2021 Construcción de Software Carrera de Software ArrayIntList JUnit test import org.junit.*; import static org.junit.Assert.*; public class TestArrayIntList { @Test public void testAddGet1() { ArrayIntList list = new ArrayIntList(); list.add(42); list.add(-3); list.add(15); assertEquals(42, list.get(0)); assertEquals(-3, list.get(1)); assertEquals(15, list.get(2)); } @Test public void testIsEmpty() { ArrayIntList list = new ArrayIntList(); assertTrue(list.isEmpty()); list.add(123); assertFalse(list.isEmpty()); list.remove(0); assertTrue(list.isEmpty()); } ...
  • 95. Ph.D. Franklin Parrales 95 13/05/2021 Construcción de Software Carrera de Software ¿Qué esta mal aquí? public class DateTest { @Test public void test1() { Date d = new Date(2050, 2, 15); d.addDays(4); assertEquals(d.getYear(), 2050); assertEquals(d.getMonth(), 2); assertEquals(d.getDay(), 19); } @Test public void test2() { Date d = new Date(2050, 2, 15); d.addDays(14); assertEquals(d.getYear(), 2050); assertEquals(d.getMonth(), 3); assertEquals(d.getDay(), 1); } }
  • 96. Ph.D. Franklin Parrales 96 13/05/2021 Construcción de Software Carrera de Software Assertions bien estructurados public class DateTest { @Test public void test1() { Date d = new Date(2050, 2, 15); d.addDays(4); assertEquals(2050, d.getYear()); // el valor esperado assertEquals(2, d.getMonth()); // debe aparecer assertEquals(19, d.getDay()); // a la DERECHA } @Test public void test2() { Date d = new Date(2050, 2, 15); d.addDays(14); assertEquals("year after +14 days", 2050, d.getYear()); assertEquals("month after +14 days", 3, d.getMonth()); assertEquals("day after +14 days", 1, d.getDay()); } // test cases should usually have messages explaining } // what is being checked, for better failure output
  • 97. Ph.D. Franklin Parrales 97 13/05/2021 Construcción de Software Carrera de Software Objetos de respuesta esperados public class DateTest { @Test public void test1() { Date d = new Date(2050, 2, 15); d.addDays(4); Date expected = new Date(2050, 2, 19); assertEquals(expected, d); // use an expected answer } // object to minimize tests // (Date must have toString @Test // and equals methods) public void test2() { Date d = new Date(2050, 2, 15); d.addDays(14); Date expected = new Date(2050, 3, 1); assertEquals("date after +14 days", expected, d); } }
  • 98. Ph.D. Franklin Parrales 98 13/05/2021 Construcción de Software Carrera de Software Nombrando los casos de prueba public class DateTest { @Test public void test_addDays_withinSameMonth_1() { Date actual = new Date(2050, 2, 15); actual.addDays(4); Date expected = new Date(2050, 2, 19); assertEquals("date after +4 days", expected, actual); } // give test case methods really long descriptive names @Test public void test_addDays_wrapToNextMonth_2() { Date actual = new Date(2050, 2, 15); actual.addDays(14); Date expected = new Date(2050, 3, 1); assertEquals("date after +14 days", expected, actual); } // give descriptive names to expected/actual values }
  • 99. Ph.D. Franklin Parrales 99 13/05/2021 Construcción de Software Carrera de Software ¿Qué esta mal aquí? public class DateTest { @Test public void test_addDays_addJustOneDay_1() { Date actual = new Date(2050, 2, 15); actual.addDays(1); Date expected = new Date(2050, 2, 16); assertEquals( "should have gotten " + expected + "n" + " but instead got " + actualn", expected, actual); } ... }
  • 100. Ph.D. Franklin Parrales 100 13/05/2021 Construcción de Software Carrera de Software Buenos mensajes de retroalimentación public class DateTest { @Test public void test_addDays_addJustOneDay_1() { Date actual = new Date(2050, 2, 15); actual.addDays(1); Date expected = new Date(2050, 2, 16); assertEquals("adding one day to 2050/2/15", expected, actual); } ... } // JUnit will already show // the expected and actual // values in its output; // // don't need to repeat them // in the assertion message
  • 101. Ph.D. Franklin Parrales 101 13/05/2021 Construcción de Software Carrera de Software Tests con un límite de tiempo (timeout) @Test(timeout = 5000) public void name() { ... } – El comportamiento del método anterior se considerará como erroneo si no termina de ejecutarse dentro de 5000 ms private static final int TIMEOUT = 2000; ... @Test(timeout = TIMEOUT) public void name() { ... } – Times out / fails after 2000 ms
  • 102. Ph.D. Franklin Parrales 102 13/05/2021 Construcción de Software Carrera de Software Tiempos de espera generalizados public class DateTest { @Test(timeout = DEFAULT_TIMEOUT) public void test_addDays_withinSameMonth_1() { Date d = new Date(2050, 2, 15); d.addDays(4); Date expected = new Date(2050, 2, 19); assertEquals("date after +4 days", expected, d); } @Test(timeout = DEFAULT_TIMEOUT) public void test_addDays_wrapToNextMonth_2() { Date d = new Date(2050, 2, 15); d.addDays(14); Date expected = new Date(2050, 3, 1); assertEquals("date after +14 days", expected, d); } // almost every test should have a timeout so it can't // lead to an infinite loop; good to set a default, too private static final int DEFAULT_TIMEOUT = 2000; }
  • 103. Ph.D. Franklin Parrales 103 13/05/2021 Construcción de Software Carrera de Software Prueba de excepciones @Test(expected = ExceptionType.class) public void name() { ... } – Pasará la prueba si se lanza la excepción dada. • Si no se lanza la excepción, la prueba falla. • Use esto para probar los errores esperados. @Test(expected = ArrayIndexOutOfBoundsException.class) public void testBadIndex() { ArrayIntList list = new ArrayIntList(); list.get(4); // should fail }
  • 104. Ph.D. Franklin Parrales 104 13/05/2021 Construcción de Software Carrera de Software Configuración y desmontaje @Before public void name() { ... } @After public void name() { ... } – métodos para ejecutar antes / después de que se llame a cada método de caso de prueba @BeforeClass public static void name() { ... } @AfterClass public static void name() { ... } – métodos para ejecutar una vez antes / después de que se ejecute toda la clase de prueba
  • 105. Ph.D. Franklin Parrales 105 13/05/2021 Construcción de Software Carrera de Software Consejos para las pruebas • No puedes probar todas las posibles entradas, valores de parámetros, etc. – Por lo tanto, debe pensar en un conjunto limitado de pruebas que probablemente expongan errores (bugs). • Piense en casos límite – positive; zero; negative numbers – justo en el borde de una matriz o tamaño de colección • Piense en casos vacíos y casos de error – 0, -1, null; una empty list o array • Pruebe combinaciones de comportamientos – tal vez agregar generalmente funciona, pero falla después de llamar a eliminar – hacer múltiples llamadas; tal vez el tamaño falle solo la segunda vez
  • 106. Ph.D. Franklin Parrales 106 13/05/2021 Construcción de Software Carrera de Software ¿Qué esta mal aquí? public class DateTest { // test every day of the year @Test(timeout = 10000) public void tortureTest() { Date date = new Date(2050, 1, 1); int month = 1; int day = 1; for (int i = 1; i < 365; i++) { date.addDays(1); if (day < DAYS_PER_MONTH[month]) {day++;} else {month++; day=1;} assertEquals(new Date(2050, month, day), date); } } private static final int[] DAYS_PER_MONTH = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec }
  • 107. Ph.D. Franklin Parrales 107 13/05/2021 Construcción de Software Carrera de Software Pruebas confiables • Pruebe una cosa a la vez por método de prueba. – 10 pruebas pequeñas son mucho mejores que 1 prueba 10 veces más grande. • Cada método de prueba debe tener pocas (probablemente 1) afirmaciones (asserts). – Si afirmas muchas cosas, la primera que falla detiene la prueba. – No sabrá si fue una afirmación posterior la que ha fallado. • Las pruebas deben evitar la lógica. – Minimiza el uso de if/else, loops, switch, etc. – Evita el try/catch • Si se supone que debe lanzarse una excepción, use expected= ... si no, deje que JUnit lo atrape (catch). • Las pruebas de tortura están bien, pero solo además de las pruebas simples.
  • 108. Ph.D. Franklin Parrales 108 13/05/2021 Construcción de Software Carrera de Software Aplastando la redundancia public class DateTest { @Test(timeout = DEFAULT_TIMEOUT) public void addDays_withinSameMonth_1() { addHelper(2050, 2, 15, +4, 2050, 2, 19); } @Test(timeout = DEFAULT_TIMEOUT) public void addDays_wrapToNextMonth_2() { addHelper(2050, 2, 15, +14, 2050, 3, 1); } // use lots of helpers to make actual tests extremely short private void addHelper(int y1, int m1, int d1, int add, int y2, int m2, int d2) { Date act = new Date(y, m, d); actual.addDays(add); Date exp = new Date(y2, m2, d2); assertEquals("after +" + add + " days", exp, act); } // can also use "parameterized tests" in some frameworks ...
  • 109. Ph.D. Franklin Parrales 109 13/05/2021 Construcción de Software Carrera de Software Ayudantes (helpers) flexibles public class DateTest { @Test(timeout = DEFAULT_TIMEOUT) public void addDays_multipleCalls_wrapToNextMonth2x() { Date d = addHelper(2050, 2, 15, +14, 2050, 3, 1); addhelper(d, +32, 2050, 4, 2); addhelper(d, +98, 2050, 7, 9); } // Helpers can box you in; hard to test many calls/combine. // Create variations that allow better flexibility private Date addHelper(int y1, int m1, int d1, int add, int y2, int m2, int d2) { Date date = new Date(y, m, d); addHelper(date, add, y2, m2, d2); return d; } private void addHelper(Date date, int add, int y2, int m2, int d2) { date.addDays(add); Date expect = new Date(y2, m2, d2); assertEquals("date after +" + add + " days", expect, d); } ...
  • 110. Ph.D. Franklin Parrales 110 13/05/2021 Construcción de Software Carrera de Software Pruebas de regresión • Regresión Cuando una característica que solía funcionar, ya no funciona. – Es probable que suceda cuando el código cambia y crece con el tiempo. – Una nueva función / corrección puede causar un nuevo error o reintroducir un error antiguo. • Pruebas de regresión: Volver a ejecutar pruebas unitarias anteriores después de un cambio. – A menudo se realiza mediante scripts durante las pruebas automatizadas. – Se utiliza para garantizar que los errores corregidos antiguos aún se solucionen. – Le da a su aplicación un nivel mínimo de funcionalidad de trabajo. • Muchos productos tienen un conjunto de pruebas de registro obligatorias que deben pasar antes de que se pueda agregar el código a un repositorio de código fuente.
  • 111. Ph.D. Franklin Parrales 111 13/05/2021 Construcción de Software Carrera de Software Test-driven development (Desarrollo impulsado por pruebas) • Las pruebas unitarias se pueden escribir después, durante o incluso antes de la codificación. – test-driven development: Escribe pruebas, luego escribe código para aprobarlas. • Imagina que nos gustaría agregar un método subtractWeeks para una clase Date, que desplaza una fecha hacia atrás en el tiempo por el número dado de semanas. • Escriba código para probar este método antes de que se haya escrito el código del comportamiento. – Luego, una vez que implemente el método, ud. sabrá si funciona.
  • 112. Ph.D. Franklin Parrales 112 13/05/2021 Construcción de Software Carrera de Software Tests y estructuras de datos • ¿Necesita pasar muchos arrays? Usa array literals public void exampleMethod(int[] values) { ... } ... exampleMethod(new int[] {1, 2, 3, 4}); exampleMethod(new int[] {5, 6, 7}); • ¿Necesita un quick ArrayList? Pruebe Arrays.asList List<Integer> list = Arrays.asList(7, 4, -2, 3, 9, 18); • ¿Necesita un quick set, queue, etc.? Muchas colecciones pueden tomar la forma de lista Set<Integer> list = new HashSet<Integer>( Arrays.asList(7, 4, -2, 9));
  • 113. Ph.D. Franklin Parrales 113 13/05/2021 Construcción de Software Carrera de Software Recordando: Arrays • En Java, las matrices multidimensionales son en realidad matrices de matrices. Estos, como era de esperar, se ven y actúan como matrices multidimensionales regulares. • Para declarar una variable de matriz multidimensional, especifique cada índice adicional utilizando otro conjunto de corchetes. Por ejemplo, lo siguiente declara una variable de matriz bidimensional llamada twoDim. Esto creará una matriz del tamaño 2x3 en la memoria. int twoDim[][] = new int[2][3]; Valor del elemento índice del elemento
  • 114. Ph.D. Franklin Parrales 114 13/05/2021 Construcción de Software Carrera de Software Recordando: Array literals • El literal null utilizado para representar la ausencia de un objeto también se puede utilizar para representar la ausencia de una matriz. Por ejemplo: String [] name = null; • Además del literal null, Java también define una sintaxis especial que le permite especificar valores de matriz literalmente en sus programas. Esta sintaxis solo se puede utilizar cuando se declara una variable de tipo matriz. Combina la creación del objeto de matriz con la inicialización de los elementos de la matriz: String[] daysOfWeek = {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}; – Esto crea una matriz que contiene el elemento de siete cadenas que representan los días de la semana dentro de las llaves. – Tenga en cuenta que no usamos la nueva palabra clave ni especificamos el tipo de matriz en esta sintaxis literal de matriz. El tipo está implícito en la declaración de variable de la que forma parte el inicializador. – Además, la longitud de la matriz no se especifica explícitamente con esta sintaxis; se determina implícitamente contando el número de elementos enumerados entre las llaves.
  • 115. Ph.D. Franklin Parrales 115 13/05/2021 Construcción de Software Carrera de Software ¿Qué esta mal aquí? public class DateTest { // shared Date object to test with (saves memory!!1) private static Date DATE; @Test(timeout = DEFAULT_TIMEOUT) public void addDays_sameMonth() { DATE = new Date(2050, 2, 15); // first test; addhelper(DATE, +4, 2050, 2, 19); // DATE = 2/15 here } @Test(timeout = DEFAULT_TIMEOUT) public void addDays_nextMonthWrap() { // second test; addhelper(DATE, +10, 2050, 3, 1); // DATE = 2/19 here } @Test(timeout = DEFAULT_TIMEOUT) public void addDays_multipleCalls() { // third test; addDays_sameMonth(); // go back to 2/19; addhelper(DATE, +1, 2050, 2, 20); // test two calls addhelper(DATE, +1, 2050, 2, 21); } ... }
  • 116. Ph.D. Franklin Parrales 116 13/05/2021 Construcción de Software Carrera de Software Test case "smells" • Las pruebas deben ser autónomas y no preocuparse entre sí. • "Smells" (bad things to avoid) in tests: – Constrained test order: Test A must run before Test B. (usually a misguided attempt to test order/flow) – Tests call each other: Test A calls Test B's method (calling a shared helper is OK, though) – Mutable shared state: Tests A/B both use a shared object. (If A breaks it, what happens to B?)
  • 117. Ph.D. Franklin Parrales 117 13/05/2021 Construcción de Software Carrera de Software Test suites • test suite: Una clase que ejecuta muchos JUnit tests. – Una forma sencilla de ejecutar todas las pruebas de su aplicación a la vez. import org.junit.runner.*; import org.junit.runners.*; @RunWith(Suite.class) @Suite.SuiteClasses({ TestCaseName.class, TestCaseName.class, ... TestCaseName.class, }) public class name {}
  • 118. Ph.D. Franklin Parrales 118 13/05/2021 Construcción de Software Carrera de Software Test suite example import org.junit.runner.*; import org.junit.runners.*; @RunWith(Suite.class) @Suite.SuiteClasses({ WeekdayTest.class, TimeTest.class, CourseTest.class, ScheduleTest.class, CourseComparatorsTest.class }) public class HW2Tests {}
  • 119. Ph.D. Franklin Parrales 119 13/05/2021 Construcción de Software Carrera de Software JUnit summary • Tests need failure atomicity (ability to know exactly what failed). – Each test should have a clear, long, descriptive name. – Assertions should always have clear messages to know what failed. – Write many small tests, not one big test. • Each test should have roughly just 1 assertion at its end. • Always use a timeout parameter to every test. • Test for expected errors / exceptions. • Choose a descriptive assert method, not always assertTrue. • Choose representative test cases from equivalent input classes. • Avoid complex logic in test methods if possible. • Use helpers, @Before to reduce redundancy between tests.
  • 120. Ph.D. Franklin Parrales 120 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores – Pruebas de software: revisión de tipos de prueba – Pruebas unitarias – Depuración del software: importancia, buenas prácticas, herramientas – Plan de pruebas y documentación de las pruebas • Tolerancia a fallos y tratamiento de excepciones
  • 121. Ph.D. Franklin Parrales 121 13/05/2021 Construcción de Software Carrera de Software Depuración del software • Una vez identificado los errores en la fase de pruebas, se procede a corregirlos. A esta fase se le llama depuración. • Depuración: Es la detección, corrección y eliminación de errores de software. • En la fase de depuración también se arreglan detalles superficiales del software además de optimizar y mejorar algunos procesos. • El proceso de depuración 1. Estudio de los síntomas del error 2. Determinación de las causas 3. Corrección 4. Prueba.
  • 122. Ph.D. Franklin Parrales 122 13/05/2021 Construcción de Software Carrera de Software Depuración • El tener un plan de pruebas ayuda a clarificar el proceso de depuración. • El plan de pruebas debe de estar mucho antes de la construcción del software. • Al realizar la depuración de un programa existe la posibilidad de un 50% de cometer otro error. • Es recomendable realizar pruebas de trazado (assert) para visualizar en donde ocurren los errores. • Se recomienda probar lo antes posible cualquier fragmento de código.
  • 123. Ph.D. Franklin Parrales 123 13/05/2021 Construcción de Software Carrera de Software Depuración • La mayoría de los IDEs modernos presentan frameworks para la depuración desde el clásico step by step o step over sobre cada uno de los módulos hasta la realización de pruebas de unidad. • Entre las más famosas destacan JUnit para realizar pruebas de unidad en Java.
  • 124. Ph.D. Franklin Parrales 124 13/05/2021 Construcción de Software Carrera de Software Depurador (debugger) • Un depurador es una herramienta que permite intervenir durante la ejecución de un programa, para saber cómo se está ejecutando. • El depurador permite: – Ejecutar paso a paso un programa (stepping). – Establecer puntos de detención (breakpoints). – Examinar el contenido de las variables y objetos. – Conocer el encadenamiento de llamadas de procedimientos. – Retomar la ejecución hasta un nuevo punto de detención. • En este curso usaran el depurador que trae incorporado el IDE de su preferencia (Netbeans, Eclipse, etc).
  • 125. Ph.D. Franklin Parrales 125 13/05/2021 Construcción de Software Carrera de Software Depuración por Inducción • Se siguen los siguientes pasos: 1. Localizar los datos pertinentes 2. Organizar los datos 3. Estudiar las relaciones 4. Divisar las hipótesis 5. Probar las hipótesis 6. Corregir el error
  • 126. Ph.D. Franklin Parrales 126 13/05/2021 Construcción de Software Carrera de Software Depuración por Deducción • Se siguen los siguientes pasos: 1. Enumerar las posibles causas 2. Usar procedimientos de eliminación 3. Refinar las hipótesis restantes 4. Probar las hipótesis restantes 5. Si no se pueden probar las hipótesis entonces coleccionar más datos y repetir el proceso 6. En caso contrario corregir el error
  • 127. Ph.D. Franklin Parrales 127 13/05/2021 Construcción de Software Carrera de Software Preparar Casos de Prueba Ejecutar Casos de Prueba Seleccionar y Priorizar los errores para corrección Corregir Congelar versión del Sw para Pruebas Errors Detectados? Version Acceptada NO SI Verificar Correcciones Congelar versión corregida del Sw Hacer Pruebas Totales o parciales de Regresión Proceso de Pruebas de Programas
  • 128. Ph.D. Franklin Parrales 128 13/05/2021 Construcción de Software Carrera de Software Proceso de Pruebas de Programas: Depuración Diagnosticar Error Planificar Cambios Actualizar Diseño Arquitec. Actualizar Diseño Detallado Actualizar código Actualizar Requerimientos Probar los Cambios Seleccionar casos de prueba para probar los cambios Selecionar casos de Prueba para Pruebas de Regresión Pruebas de Regresión ?
  • 129. Ph.D. Franklin Parrales 129 13/05/2021 Construcción de Software Carrera de Software Depuración manual • Cuando no se dispone de un depurador, se debe recurrir a la depuración manual. Esta consiste en preparar el programa para poder conocer como se está ejecutando el programa. • La técnica más usual de depuración de programas consiste en colocar println's en puntos estratégicos del programa para desplegar el contenido de las variables. • Siga las siguientes recomendaciones para establecer estos puntos estratégicos: – Dentro de un while, siempre coloque algún println que permita detectar cuando cayó en un ciclo infinito su programa (un loop). Despliegue el valor de contadores, datos leídos de un archivo, acumuladores, etc. – Al inicio de una función o procedimiento, despliegue el valor de los parámetros recibidos y al retornar despliegue el valor retornado (mediante return). – En un if, despliegue cuál de las ramas se tomó: la que corresponde a la condición verdadera o el else.
  • 130. Ph.D. Franklin Parrales 130 13/05/2021 Construcción de Software Carrera de Software Depuración manual • Para que resulte más fácil la depuración, comience ejecutando su programa con poquísimos datos. Nunca olvide, incluir datos que representen las condiciones de borde del programa. Por ejemplo: n=0, el archivo esta vacío, etc. • La biblioteca del curso incluye mecanismos para poder grabar todos los mensajes que aparecen en la pantalla. Para hacer esto, utilice la opción -l al ejecutar su programa: java Run -l MiPrograma • Su programa se ejecutará igual que antes, pero además creará un archivo de nombre console.log que contiene todos los mensajes que aparecieron en pantalla durante la ejecución del programa. Esto resulta muy útil, pues las 24 líneas de la pantalla se hacen escasas con tanto despliegue con println. • Cuando Ud. estime que su programa funciona adecuadamente, comente los println que introdujo para efectos de depuración (es decir agregue // para transformalos en comentarios). No los borre, porque más tarde podría darse cuenta que su programa todavía no funciona completamente como debería.
  • 131. Ph.D. Franklin Parrales 131 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores – Pruebas de software: revisión de tipos de prueba – Pruebas unitarias – Depuración del software: importancia, buenas prácticas, herramientas – Plan de pruebas y documentación de las pruebas • Tolerancia a fallos y tratamiento de excepciones
  • 132. Ph.D. Franklin Parrales 132 13/05/2021 Construcción de Software Carrera de Software Motivación Toda actividad de construcción (codificación) es susceptible de cometer errores dado que se trata de una actividad humana. https://www.youtube.com/watch?v=0R1dBtcvaiM
  • 133. Ph.D. Franklin Parrales 133 13/05/2021 Construcción de Software Carrera de Software Plan de pruebas: Introducción Permite tener una planeación de la aplicación de las pruebas y el tipo de pruebas que harán que el sistema funcione correctamente Al momento de liberarse por completo, se crea seguridad en los usuarios finales de que el sistema no fallará Existen dos actividades fundamentales para la etapa de pruebas: las pruebas de componentes y las pruebas del sistema • En la primera se prueban las partes del sistema por separado • En la segunda se prueban los componentes ya integrados, el sistema como un todo
  • 134. Ph.D. Franklin Parrales 134 13/05/2021 Construcción de Software Carrera de Software Plan de pruebas: objetivos • Demostrar al desarrollador y al cliente que el software satisface sus requerimientos. En este caso, se debe tener por lo menos una prueba para cada requerimiento que se haya documentado. • Para describir defectos en el software en el que el comportamiento de éste es incorrecto. – Se contemplan comportamientos indeseables en el sistema, tales como: caídas en el sistema, cálculos incorrectos, entre otros.
  • 135. Ph.D. Franklin Parrales 135 13/05/2021 Construcción de Software Carrera de Software Plan de pruebas: Características deseables • A continuación se mencionan algunas características deseables que deben contener los planes de prueba: – Diseñar un caso de prueba para cada funcionalidad del software. – Establecer como mínimo un caso de prueba de datos correcto. – Establecer como mínimo un caso de prueba de datos incorrecto. • Ejemplo: Caso de Prueba de un módulo de raíz cuadrada. – Qué el usuario ingrese un número mayor que 0. – Qué el usuario ingrese un número 0 – Qué el usuario ingrese un número menor que 0.
  • 136. Ph.D. Franklin Parrales 136 13/05/2021 Construcción de Software Carrera de Software Estándar IEEE 829 para un plan de pruebas • Esta norma IEEE std. 829 – 2008 es compatible con todos los procesos del ciclo de vida del software, incluyendo las fases de adquisición, suministro, desarrollo, operación y mantenimiento. • Esta norma es compatible con todos los modelos de ciclo de vida del software.
  • 137. Ph.D. Franklin Parrales 137 13/05/2021 Construcción de Software Carrera de Software Estándar IEEE 829 para un plan de pruebas Temas IEEE 829 Contenido Nombre del plan de pruebas: • Ítems a probar • Características a ser probadas • Características que no se van a probar Esta sección define el alcance del sistema bajo prueba, si los componentes no son completamente nuevos o es una versión incompleta o un incremento. Es importante especificar cuáles características o componentes no van a ser probados. Enfoque Provee un overview de la estrategia a utilizar en las pruebas y del proceso de pruebas. Casos de prueba Esta sección resume e incorpora por referencia el plan de pruebas, diseño de pruebas individuales, especificaciones de casos de prueba, especificaciones de procedimientos y los resultados de las pruebas.
  • 138. Ph.D. Franklin Parrales 138 13/05/2021 Construcción de Software Carrera de Software IEEE 829 Subject Contenido Tareas Consiste en la división de las tareas para aplicar las pruebas al sistema Requerimientos de ambiente Define las herramientas necesarias para la automatización de las pruebas, hardware, software y lugar para aplicarlas. Responsabilidades Define a quién le pertenece cada parte del proceso de pruebas Personal necesario y entrenamiento Se necesitará entrenamiento de los inspectores / desarrolladores en cuanto al diseño de pruebas, herramientas, ambiente, etc. Planificación Fechas de inicio, hitos, completaciones, etc. Riesgos y contingencias ¿Qué puede fallar? ¿Qué cosas fueron asumidas? ¿Qué se puede hacer si un problema mayor ocurre? Aprobación Determinar quién debe aprobar y revisar el plan
  • 139. Ph.D. Franklin Parrales 139 13/05/2021 Construcción de Software Carrera de Software Plantilla de casos de prueba IEEE 829
  • 140. Ph.D. Franklin Parrales 140 13/05/2021 Construcción de Software Carrera de Software Aplicación del estándar • Es genérico para cubrir todos los tipos de prueba • Los documentos pueden adaptarse • La idea es que cualquiera que se una al proyecto sepa qué documentos se usan y para qué
  • 141. Ph.D. Franklin Parrales 141 13/05/2021 Construcción de Software Carrera de Software El Plan de pruebas incluye… • Objetivo del Plan • Objetivo de las Pruebas • Marco del Plan de Pruebas • Alcance del Plan de Pruebas • Descripción del módulo para pruebas • Definición y Desarrollo de pruebas • Resultados de las Pruebas • Casos de Prueba: – Se le llama así al diseño de entradas y salidas esperadas para probar el sistema. El objetivo de su diseño es crear un conjunto de casos de prueba que sean efectivos para descubrir defectos en los programas y muestren que el sistema cumple con los requerimientos
  • 142. Ph.D. Franklin Parrales 142 13/05/2021 Construcción de Software Carrera de Software El Plan de pruebas incluye… • Programación de la aplicación de las pruebas – Cronograma en Project • Seguimiento y reporte por defectos: – Se debe contar con un formato en donde se vayan anotando los defectos encontrados en cada uno de los módulos del sistema y de forma global, también se reportarán las correcciones realizadas así como el responsable de hacerlo con la finalidad de dar un correcto seguimiento a los resultados de las pruebas
  • 143. Ph.D. Franklin Parrales 143 13/05/2021 Construcción de Software Carrera de Software Guía para la elaboración del plan de pruebas • Se necesita especificar las salidas o resultados esperados. • Los casos de prueba deben escribirse con condiciones de entrada que son inválidas e inesperadas, así como también aquellas que son válidas y esperadas. • Examinar un programa para verificar que hace lo que deba de hacer es sólo parte de la prueba, la otra mitad es asegurarse que el programa no haga lo que no deba de hacer. • No realizar planeaciones asumiendo que no se encontrarán errores.
  • 144. Ph.D. Franklin Parrales 144 13/05/2021 Construcción de Software Carrera de Software Guía para la elaboración del plan de pruebas Objetivo: Condición de Entrada: Fecha de Prueba: Ciclo de Prueba: Escenario Nro. Paso Acción Datos de Entrada Resultado Esperado Exito Frascaso Observación Escenario 1 1 2 3 4 5 6 7 8 Escenario 2
  • 145. Ph.D. Franklin Parrales 145 13/05/2021 Construcción de Software Carrera de Software Guía para la elaboración del plan de pruebas Código CP-001 Caso de prueba Ingreso a la aplicación a través de un login Responsable Desarrolladores Descripción de la prueba • Se ingresa el correo electrónico valido. • Se ingresa contraseña valida. • Hacer clic en el botón entrar. Requisito previo Haber creado un nuevo usuario. Resultado esperado El usuario será redirigido a la página principal de la aplicación. Resultado obtenido Se ha iniciado sesión correctamente. Estado Exitoso Observaciones Más sencillo, este será el formato que utilizaremos…
  • 146. Ph.D. Franklin Parrales 146 13/05/2021 Construcción de Software Carrera de Software Guía para la elaboración del plan de pruebas • La probabilidad de la existencia de mas errores en una sección de un programa es proporcional al número de errores encontrados en esa sección. • Se debe de realizar una lista de verificación para inspecciones de prueba que contenga los siguientes puntos: – Datos – Declaración de datos – Errores computacionales – Errores de comparación – Errores de control de flujo – Errores de Interface – Errores de Entrada/Salida
  • 147. Ph.D. Franklin Parrales 147 13/05/2021 Construcción de Software Carrera de Software Guía para la elaboración del plan de pruebas • Se pueden utilizar métodos deductivos e inductivos para la prueba de software. • La realización de pruebas es una actividad extremadamente creativa e intelectualmente retadora. – Un programador debe de evitar probar sus propios programas. – Una organización no debe de probar sus propios programas. – Inspeccionar los resultados obtenidos de cada prueba.
  • 148. Ph.D. Franklin Parrales 148 13/05/2021 Construcción de Software Carrera de Software Plan de Pruebas • Se recomienda utilizar la metodología y formatos del estándar IEEE 829 para documentación de pruebas de software: • Pasos que incluye: – Identificador de plan de pruebas (se muestra el estándar a seguir para el nombre de las pruebas) – Introducción (en que consiste las pruebas del sistema) – Elementos a probar – Características a ser probadas – Características que no se probarán
  • 149. Ph.D. Franklin Parrales 149 13/05/2021 Construcción de Software Carrera de Software Plan de Pruebas – Enfoque – Criterio de fallo o aceptación de los elementos – Criterio de Suspensión y Reanudación de requerimientos – Entregables de las pruebas – Tareas de las pruebas – Necesidades del entorno – Responsabilidades – Equipo y necesidades de capacitación – Agenda – Riesgos y contingencias – Acuerdos
  • 150. Ph.D. Franklin Parrales 150 13/05/2021 Construcción de Software Carrera de Software Plan de Pruebas • A las pruebas se les ha empezado a llamar de manera formal verificación y validación (curso de octavo semestre XD). • Existen metodologías más robustas como el TMMI (Test Maturity Model)
  • 151. Ph.D. Franklin Parrales 151 13/05/2021 Construcción de Software Carrera de Software Plan de pruebas
  • 152. Ph.D. Franklin Parrales 152 13/05/2021 Construcción de Software Carrera de Software Tipos de documento 1. Preparación de pruebas 1. Plan de pruebas 2. Especificación del diseño de pruebas 3. Especificación de casos de prueba 4. Procedimientos de prueba 5. Reporte de transmisión de ítems de pruebas 2. Ejecución de las pruebas 6. Log de pruebas 7. Reporte de incidentes de pruebas 3. Término de las pruebas Reporte de las pruebas
  • 153. Ph.D. Franklin Parrales 153 13/05/2021 Construcción de Software Carrera de Software Ejemplo
  • 154. Ph.D. Franklin Parrales 154 13/05/2021 Construcción de Software Carrera de Software Documento 1. Plan de pruebas • Documento eje sobre el cual se desarrollan las pruebas • Describe: – Alcance – Enfoque – Recursos – Calendarización de actividades de prueba • Identifica los ítems y características a probar • Identifica las tareas de prueba a desarrollar, los responsables de cada tarea y los riesgos asociados
  • 155. Ph.D. Franklin Parrales 155 13/05/2021 Construcción de Software Carrera de Software Documento 2. Especificación del diseño de pruebas • Se determina QUÉ necesita ser probado • Se determina cómo sería una prueba exitosa • Se deriva de los requerimientos
  • 156. Ph.D. Franklin Parrales 156 13/05/2021 Construcción de Software Carrera de Software Documento 3. Especificación de casos de prueba • Valores exactos de entrada y otros que se requieran • Valores exactos de salida y cambios del sistema esperados • Pasos para ejecutar las pruebas
  • 157. Ph.D. Franklin Parrales 157 13/05/2021 Construcción de Software Carrera de Software Documento 4. Procedimientos de prueba • Describe cómo el tester ejecutará físicamente la prueba y los pasos necesarios
  • 158. Ph.D. Franklin Parrales 158 13/05/2021 Construcción de Software Carrera de Software Documento 5. Reporte de transmisión de ítems de pruebas • Describe los ítems para prueba – Dónde encontrarlos y da la aprobación para su liberación • Garantiza al tester de que los ítems están listos para ser probados
  • 159. Ph.D. Franklin Parrales 159 13/05/2021 Construcción de Software Carrera de Software Documento 6. Log de pruebas • Registra los detalles sobre qué casos de pruebas se han ejecutado, en qué orden y sus resultados (pass/fail) • Si hay inconformidades, se levanta o actualiza un reporte de incidentes
  • 160. Ph.D. Franklin Parrales 160 13/05/2021 Construcción de Software Carrera de Software Documento 7. Reporte de incidentes de prueba • Descripción de los detalles encontrados cuando la prueba no pasó
  • 161. Ph.D. Franklin Parrales 161 13/05/2021 Construcción de Software Carrera de Software Documento 8. Reporte de pruebas • Resume la información importante sobre las pruebas: – Evaluación de qué tan bien se realizaron las pruebas – Número de incidentes reportados – Evaluación sobre la calidad del sistema • Gracias a este documento se decide si la calidad del sistema es suficiente para continuar
  • 162. Ph.D. Franklin Parrales 162 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones
  • 163. Ph.D. Franklin Parrales 163 13/05/2021 Construcción de Software Carrera de Software Bibliografía consultada • I. Sommerville, “Ingeniería de software”, 7ma Edición, Cap.20
  • 164. Ph.D. Franklin Parrales 164 13/05/2021 Construcción de Software Carrera de Software Objetivos • Explicar cómo la tolerancia a fallos y la prevención de defectos de contribuir al desarrollo de sistemas confiables. • Describir las características de los procesos de software confiable. • Introducir las técnicas de programación para la prevención de defectos. • Describir los mecanismos de tolerancia a fallos y el uso de la diversidad y la redundancia.
  • 165. Ph.D. Franklin Parrales 165 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones – Seguridad, fiabilidad y confiabilidad – Confiabilidad del software – Programación confiable – Prevención de fallos – Manejo de excepciones – Tolerancia a fallos – Arquitecturas tolerante a fallos
  • 166. Ph.D. Franklin Parrales 166 13/05/2021 Construcción de Software Carrera de Software Seguridad y fiabilidad ◆ Un sistema es seguro si no se pueden producir situaciones que puedan causar muertes, heridas, enfermedades, ni daños en los equipos ni en el ambiente Un accidente (mishap) es un suceso imprevisto que puede producir daños inadmisibles ◆ Un sistema es fiable si cumple sus especificaciones ◆ Seguridad y fiabilidad pueden estar en conflicto La seguridad es la probabilidad de que no se produzcan situaciones que puedan conducir a accidentes, independientemente de que se cumpla la especificación o no
  • 167. Ph.D. Franklin Parrales 167 13/05/2021 Construcción de Software Carrera de Software Confiabilidad ◆ La confiabilidad (dependability) es una propiedad de los sistemas que permite confiar justificadamente en el servicio que proporcionan ◆ Tiene varios aspectos confiabilidad disponibilidad de utilización disponibilidad servicio disponible continuamente fiabilidad no hay situaciones catastróficas seguridad no hay fugas de información no autorizadas confidencialidad no hay alteraciones de información integridad aptitud para reparaciones y cambios mantenibilidad
  • 168. Ph.D. Franklin Parrales 168 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones – Seguridad, fiabilidad y confiabilidad – Confiabilidad del software – Programación confiable – Prevención de fallos – Manejo de excepciones – Tolerancia a fallos – Arquitecturas tolerante a fallos
  • 169. Ph.D. Franklin Parrales 169 13/05/2021 Construcción de Software Carrera de Software Confiabilidad del Software • En general, los clientes de software esperan que todos los software sean confiables. • Sin embargo, para aplicaciones no críticas, pueden estar dispuestos a aceptar algunas fallas o defectos en el sistema. • Para algunas aplicaciones, sin embargo, los requerimientos de confiabilidad son muy altos y las técnicas especiales de ingeniería de software puede ser utilizado para lograr este objetivo.
  • 170. Ph.D. Franklin Parrales 170 13/05/2021 Construcción de Software Carrera de Software Confiabilidad del Software • Prevención de fallos: – El sistema está desarrollado de tal manera que se evitan errores humanos y, por lo tanto, se minimizan las fallas del sistema. – El proceso de desarrollo está organizado para que las fallas en el sistema se detecten y reparen antes de la entrega al cliente. • Detección de fallos: – Las técnicas de verificación y validación se utilizan para descubrir y eliminar fallas en un sistema antes de su implementación. • Tolerancia a fallos: – El sistema está diseñado para que las fallas en el software entregado no provoquen fallas en el sistema.
  • 171. Ph.D. Franklin Parrales 171 13/05/2021 Construcción de Software Carrera de Software Diversidad y Redundancia • Redundancia: mantener más de 1 versión de un componente crítico disponibles para que si uno falla, entonces esté disponible una copia de seguridad. • Diversidad: proporcionar la misma funcionalidad de diferentes maneras para que no falle de la misma manera. • Sin embargo, agregar la diversidad y la redundancia añade complejidad, aumentando con ello las posibilidades de error. • Algunos ingenieros abogan por la simplicidad y usan la V&V extensa como una ruta más efectiva hacia la confiabilidad del software.
  • 172. Ph.D. Franklin Parrales 172 13/05/2021 Construcción de Software Carrera de Software Ejemplos de Diversidad y Redundancia • Redundancia. Donde la disponibilidad es crítica (por ejemplo, en sistemas de comercio electrónico), las empresas suelen mantener servidores de apoyo y cambian a estos de forma automática si se produce un fallo. • Diversidad. Para proporcionar la resistencia contra los ataques externos, se puede implementar diferentes servidores usando diferentes sistemas operativos (por ejemplo, Windows y Linux).
  • 173. Ph.D. Franklin Parrales 173 13/05/2021 Construcción de Software Carrera de Software Software Libre de Fallos • Los métodos actuales de la ingeniería de software permiten ahora a la producción de software libre de defectos, al menos para los sistemas relativamente pequeños. • Fallos de software libre: un programa informático que se ajuste a sus especificaciones. – No significa que el software siempre se lleva a cabo correctamente ya que puede haber errores de especificación. – El costo de producir de software libre de fallos es muy alto. Sólo es rentable en situaciones excepcionales. – A menudo es más barato que aceptar los defectos del software y pagar por sus consecuencias de gastar los recursos en el desarrollo de software libre de fallos.
  • 174. Ph.D. Franklin Parrales 174 13/05/2021 Construcción de Software Carrera de Software Costo de Eliminación de Errores
  • 175. Ph.D. Franklin Parrales 175 13/05/2021 Construcción de Software Carrera de Software Procesos confiables • Para asegurar un número mínimo de fallas de software, es importante tener un repetible proceso de software bien definido. • Un proceso repetible bien definido es aquel que no depende enteramente de las habilidades individuales; más bien puede ser llevado a cabo por diferentes personas. • Para la detección, es evidente que las actividades del proceso debe incluir un esfuerzo significativo dedicado a la verificación y validación
  • 176. Ph.D. Franklin Parrales 176 13/05/2021 Construcción de Software Carrera de Software Características de Procesos confiables Documentable El proceso debe tener un modelo de proceso definido que establece las actividades en el proceso y la documentación que se vaya a producir durante estas actividades. Normalizado Es el conjunto completo de normas de desarrollo de software que define cómo el software se va a producir y documentados deben estar disponibles. Auditables El proceso debe ser comprensible para la gente, aparte de los participantes del proceso que se puede comprobar que las normas de procesos se están siguiendo y hacer sugerencias para la mejora de procesos. Diversos El proceso debe incluir la verificación de redundantes y diversas actividades de validación. Robusto El proceso debe ser capaz de recuperarse de los fracasos de las actividades de proceso individual.
  • 177. Ph.D. Franklin Parrales 177 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones – Seguridad, fiabilidad y confiabilidad – Confiabilidad del software – Programación confiable – Prevención de fallos – Manejo de excepciones – Tolerancia a fallos – Arquitecturas tolerante a fallos
  • 178. Ph.D. Franklin Parrales 178 13/05/2021 Construcción de Software Carrera de Software Programación confiable • Usar construcciones y técnicas de programación que contribuyan a evitar fallas y tolerancia a fallas – Diseño debe favorecer la simplicidad; – Proteger la información del acceso no autorizado; – Minimizar el uso de construcciones de programación inseguras.
  • 179. Ph.D. Franklin Parrales 179 13/05/2021 Construcción de Software Carrera de Software Protección de la información • La información solo debe estar expuesta a aquellas partes del programa que necesitan acceder a ella. Esto implica la creación de objetos o tipos de datos abstractos que mantienen el estado y que proporcionan operaciones en ese estado. • Esto evita fallas por tres razones: – se reduce la probabilidad de corrupción accidental de información; – la información está rodeada de un “firewall" para que sea menos probable que los problemas se propaguen a otras partes del programa; – como toda la información está localizada, es menos probable que cometa errores y es más probable que los revisores de código encuentren errores.
  • 180. Ph.D. Franklin Parrales 180 13/05/2021 Construcción de Software Carrera de Software Programación Segura • Los fallos en los programas suelen ser una consecuencia de los errores cometidos por los programadores • Estos errores se producen porque la gente pierde la pista de las relaciones entre las variables del programa. • Algunas construcciones de programación son más propensas a errores de los demás para evitar su uso reduce los errores del programador
  • 181. Ph.D. Franklin Parrales 181 13/05/2021 Construcción de Software Carrera de Software Programación Estructurada • Se propuso por primera vez en 1968 como un enfoque de desarrollo que hace que los programas más fácil de entender y que evita errores de programación. • Programación sin GOTO. • Mientras que los bucles y si las declaraciones como las declaraciones de control solamente. • Diseño Top-down. • Un hecho importante porque promueve el pensamiento y la discusión acerca de la programación.
  • 182. Ph.D. Franklin Parrales 182 13/05/2021 Construcción de Software Carrera de Software Construcción Propensa al Error (programación estructurada) • Números de punto flotante – Inherentemente imprecisos. La imprecisión puede dar lugar a comparaciones válidas. • Punteros – Los punteros que apuntan a áreas incorrectas de memoria puede dañar los datos. El Aliasing puede hacer que los programas sean difíciles de entender y cambiar. • Aliasing – El uso de más de 1 nombre para referirse a la variable de un mismo estado. • Asignación dinámica de memoria – Asignación de tiempo de ejecución puede ocasionar desbordamiento de memoria. • Paralelismo – Puede dar lugar a errores de sincronización sutil imprevistos debido a la interacción entre los procesos paralelos.
  • 183. Ph.D. Franklin Parrales 183 13/05/2021 Construcción de Software Carrera de Software Construcción Propensa al Error • Interrupciones – Las interrupciones pueden causar una operación crítica que terminar y hacer un programa difícil de entender. • Herencia – El código no es localizado. Esto puede resultar en comportamiento inesperado cuando se realizan cambios y los problemas de comprensión. • Recursión – Los errores en la recursividad puede causar una sobrecargar de memoria • Matrices sin límites – Los fallos de desbordamiento de búfer puede producirse si no hay control de la envolvente en las matrices. • Procesamiento de entrada por defecto – Una acción de entrada que se produce independientemente de la entrada.
  • 184. Ph.D. Franklin Parrales 184 13/05/2021 Construcción de Software Carrera de Software Unidad 1: Principios básicos de construcción de software y tratamiento de excepciones • Principios básicos del desarrollo de software • Refactorización del código • Detección de errores • Tolerancia a fallos y tratamiento de excepciones – Seguridad, fiabilidad y confiabilidad – Confiabilidad del software – Programación confiable – Prevención de fallos – Manejo de excepciones – Tolerancia a fallos – Arquitecturas tolerante a fallos
  • 185. Ph.D. Franklin Parrales 185 13/05/2021 Construcción de Software Carrera de Software Objetivos de la prevención y tolerancia a Faltas • Tratar de anticipar faltas y manejarlas de forma de minimizar los efectos negativos y maximizar la seguridad Falta: el error cometido por una persona se traduce en una falta en un producto de software (o productos) Falla: desvío del sistema del comportamiento requerido No toda falta produce una falla, las condiciones para que una falta resulte en falla pueden no producirse nunca • Prevenir o tolerar faltas para evitar fallas, construyendo el sistema para que reaccione de manera aceptable