Está en la página 1de 4

TÉCNICAS DE CONSTRUCCIÓN DE PRUEBAS ORIENTADAS AL CONTROL DEL FLUJO Y AL FLUJO DE DATOS

Flujo de Control
 Se usan criterios que buscan cubrir todas las sentencias o bloques de sentencias de un programa
 El criterio más fuerte es la prueba de caminos (testing path)
• Ejecución de todos los caminos de flujo de control entrada-salida
 Otros criterios menos exigentes:
• Prueba de sentencias
• Prueba de ramas (branch)
• Prueba de condiciones/decisiones
 Los resultados de estas pruebas se establecen en porcentaje de cobertura.
Flujo de Datos
Es una técnica empleada para que el emisor no sobrecargue al receptor al enviarle más datos de los que pueda procesar. El
receptor tiene un buffer de una cierta capacidad para ir guardando los datos recibidos y tras procesarlos, enviarlos a capas
superiores. Las tramas recibidas llegan con un poco de retardo pero sin errores y sin adelantarse unas a otras.
 El diagrama de flujo de control es anotado con información sobre cómo se definen, usan y eliminan las variables del
programa
 El criterio más fuerte busca probar todos los caminos de definición-uso:
• Para cada variable, se debe ejecutar cada segmento de camino de flujo de control desde la definición de la variable a su
uso
 Criterios menos exigentes:
• Prueba de todas las definiciones
• Prueba de todos los usos

INSPECCIONES Y REVISIONES DE SOFTWARE


Se define completamente el proceso como: Revisión en detalle, por una persona o grupo distintos del autor, para:
• Verificar si el producto se ajusta a sus especificaciones o atributos de calidad y a los estándares utilizados en la empresa
• Señalar las desviaciones sobre los estándares y las especificaciones
• Recopilar datos que realimenten inspecciones posteriores defectos recogidos, esfuerzo empleado, etc.)
Una revisión es una forma de aprovechar la diversidad de un grupo de personas para:
1. Señalar la necesidad de mejoras en el producto de una sola persona o de un equipo
2. Confirmar las partes del producto en las que no es necesaria o no es deseable una mejora.
3. Conseguir un trabajo de mayor calidad maximizando los criterios de Correctitud y Completitud principalmente.
Existen muchos tipos diferentes de revisiones que se pueden llevar adelante como parte de la ingeniería del software. Cada
una tiene su lugar.
Las inspecciones de software se pueden utilizar en todas las etapas del proceso. Las técnicas de inspección incluyen
inspección de programas, análisis automatizado de código fuente y verificación formal.
Consisten en revisiones sistemáticas tanto de los documentos generados como de los códigos fuentes con el único objetivo
de detectar fallos.
􀂄 Las inspecciones se pueden aplicar a la detección de fallos en cualquiera de los documentos generados
􀂄 Permiten detectar entre un 60 y un 90% de los fallos a unos costes mucho más bajos que las pruebas dinámicas.
􀂄 Permiten detectar múltiples defectos en una simple inspección, mientras que las pruebas solo suelen detectar un fallo
por prueba.
􀂄 Permite utilizar el conocimiento del dominio y del lenguaje, que determinan los principales tipos de fallos que se suelen
cometer.
􀂄 Las inspecciones son útiles para detectar los fallos de módulos, pero no detectan fallos a nivel de sistema, que ha de
hacerse con pruebas.
􀂄 La inspecciones no son útiles para la detección de niveles de fiabilidad y evaluación de fallos no funcionales.
La inspección del software no requiere que el programa se ejecute cono lo que se puede utilizar como técnica de
verificación antes de que el sistema esté totalmente implementado. Durante una inspección, se examina el código fuente
del sistema y se compara con la especificación del mismo que se dispone.
Se ha comprobado estadísticamente que la inspección es una técnica mucho más eficiente para la detección de errores que
la verificación basada en pruebas. Es más barato encontrar errores a través de la inspección que con pruebas, y además se
considera que el 60% de los errores se detectan mediante una inspección rutinaria, y hasta un 90% de los errores se
detectan mediante una inspección sistemática.
Existen dos razones por las que las inspecciones son más efectivas que las pruebas:
• Varios defectos se detectan en una sola inspección. El problema con las pruebas es que sólo pueden detectar único fallo
por prueba, ya que los defectos de la primera que se detecte pueden afectar a la detección de las siguientes.
•Usa el conocimiento del dominio y del lenguaje de programación que se utiliza. En esencia, es más probable que los
revisores vean los tipos de errores que comúnmente ocurre el lenguaje de programación particulares y en los tipos
particulares de la aplicación.
El proceso de inspección siempre se realiza utilizando una lista de los errores comunes de los programadores. Esta se
somete a discusión por el personal con experiencia y se actualiza frecuentemente según se vaya teniendo experiencia.
La lista de errores debe ser función del lenguaje de programación que se utilice. La cantidad de código que se puede
inspeccionar debe estar limitado, ya que a partir de un tiempo de inspección se baja la atención y se hace ineficaz. Existen
estudios que establecen que no deberían examinarse más de 125 líneas de código por sesión, y no más de 2 horas.
Las inspecciones de software analizan y comprueban las representaciones del sistema tales como el documento de
requerimientos, los diagramas de diseño y el código fuente del programa. Puede usarse la inspección en todas las etapas
del proceso. Las inspecciones puedes ser complementadas con algún tipo de análisis automático del código fuente de un
sistema o de los documentos asociados. Las inspecciones de software y los análisis automáticos son técnicas de validación y
verificación estáticas, ya que no se necesita ejecutar el software en una computadora.

PRUEBAS DE VERIFICACIÓN Y VALIDACIÓN


Verificación y Validación (V&V): Conjunto de procesos de comprobación y análisis que aseguran que el software que se
desarrolla está acorde a su especificación y cumple las necesidades de los clientes. Existen actividades de V&V en cada
etapa del proceso de desarrollo del software
Verificación:
o ¿Estamos construyendo el producto correctamente?
o Se comprueba que el software cumple los requisitos funcionales y no funcionales
o de su especificación.
Validación:
o ¿Estamos construyendo el producto correcto?
o Comprueba que el software cumple las expectativas que el cliente espera
o Importante: Nunca se va a poder demostrar que el software está
o completamente libre de defectos
La verificación y validación es el nombre que se da a los procesos de comprobación y análisis que aseguran que el software
que se desarrolla está acorde a su especificación y cumple las necesidades de los clientes. La V&V es un proceso de ciclo de
vida completo. Inicia con las revisiones de los requerimientos y continúa con las revisiones del diseño y las inspecciones del
código hasta la prueba del producto. Existen actividades de V&V en cada etapa del proceso de desarrollo del software. La
verificación y la validación no son la misma cosa, aunque es muy fácil confundirlas,
Boehm (1979) expresó la diferencia entre ellas de forma sucinta:
•Verificación: ¿Estamos construyendo el producto correctamente? El papel de la verificación comprende comprobar que el
software está de acuerdo con su especificación. Se comprueba que el sistema cumple los requerimientos funcionales y no
funcionales que se le han especificado.
•Validación: ¿Estamos construyendo el producto concreto? La validación es un proceso mas general. Se debe asegurar que
el software cumple las expectativas del cliente. Va más allá de comprobar si el sistema está acorde con su especificación,
para probar que el software hace lo que el usuario espera a diferencia de lo que se ha especificado. Es importante llevar a
cabo la validación de los requerimientos del sistema de forma inicial. Es fácil cometer errores y omisiones durante la fase de
análisis de requerimientos del sistema y, en tales casos, el software final no cumplirá las expectativas de los clientes. Sin
embargo, en la realidad, la validación de los requerimientos no puede descubrir todos los problemas que presenta la
aplicación. Algunos defectos en los requerimientos solo pueden descubrirse cuando la implementación del sistema es
completa.
TÉCNICAS DE VERIFICACIÓN Y VALIDACIÓN
Dentro del proceso de Verificación y validación se utilizan dos técnicas de comprobación y análisis de sistemas:
1.- Inspecciones del Software: analizan y comprueban las representaciones del sistema como el documento de
requerimientos, los diagramas de diseño y el código fuente del programa. Se aplica a todas las etapas del proceso de
desarrollo. Las inspecciones se complementan con algún tipo de análisis automático del texto fuente o de los documentos
asociados. Las inspecciones del software y los análisis automatizados son técnicas de verificación y validación estáticas
puesto que no requieren que el sistema se ejecute.
􀂄 Se analizan las diferentes representaciones del sistema (diagramas de requerimientos, diagramas de diseño y código
fuente) en búsqueda de defectos.
􀂄 Son técnicas de validación estática => No requieren que el código se ejecute
􀂄 Debe realizarse durante todo el ciclo de desarrollo.
2.- Pruebas del Software: consiste en contrastar las respuestas de una implementación del software a series de datos de
prueba y examinar las respuestas del software y su comportamiento operacional, para comprobar que se desempeñe
conforme a lo requerido. Llevar a cabo las pruebas es una técnica dinámica de la verificación y validación ya que requiere
disponer de un prototipo ejecutable del sistema.
􀂄 Se contrasta dinámicamente la respuesta de prototipos ejecutables del sistema con el comportamiento operacional
esperado.
􀂄 Técnicas de validación dinámicas => El sistema se ejecuta
􀂄 Requiere disponer de prototipo ejecutables, por lo que sólo pueden utilizarse en ciertas fases del proceso.

INSTRUMENTOS Y HERRAMIENTAS PARA PRUEBAS


􀂉 JUnit (http://www.junit.org/)
􀂃 Las pruebas se escriben en Java
􀂃 Clases derivadas de TestCase
􀂃 Comparación salidas (assertXXX)
􀂃 Automatización prueba de regresión
􀂃 Pruebas autodocumentadas (en el código)
􀂃 Independiente e Integrado en Eclipse
􀂉 NUnit (entorno .NET) (http://www.nunit.org/)
􀂃 Equivalente a Junit, diversos lenguajes
􀂃 Menor nivel de integración.
􀂉 Extensiones Junit (Xunit)
􀂃 Interfaz de usuario swing: JFCUnit (http://jfcunit.sourceforge.net/)
o Identificar e interactuar con objetos gráficos
􀂃 Interfaz Web: HttpUnit (http://httpunit.sourceforge.net/) y
JWebUnit (http://jwebunit.sourceforge.net/)
o Identificar e interactuar con objetos de la página
o Manejo de request/response
􀂃 Datos: DBUnit (http://dbunit.sourceforge.net/)
o Conexión con la base de datos
o Diversos formatos para cargar datos (XML, base de datos, CSV, etc.)
o Métodos assertXXX para comparar las estructuras de tablas
􀂃 Cargas masivas de datos: DBMonster (http://dbmonster.kernelpanic.pl/).
Análisis de cobertura de código: Clover (http://www.cenqua.com)
􀂃 Integración con Eclipse
􀂃 Cobertura de líneas y decisiones. Estadísticas
􀂉 Carga y Stress: OpenSTA (http://www.opensta.org/).
􀂃 Registro de una sesión interactiva
􀂃 Lenguaje de programación, modificar script
􀂃 Ejecutar, simulando usuarios y controlando la carga
􀂃 Estadísticas
􀂉 Seguimiento de defectos: Bugzilla (http://www.bugzilla.org/).
􀂉 Muchas otras comerciales.
􀂉 Links de interés:
􀂃 “Software testing tools FAQ” (http://www.testingfaqs.org/)
􀂃 “Software QA Testing and Test Tool Resources” (http://www.aptest.com/resources.html).

También podría gustarte