Verificación y Validación de Software: Tipos de Pruebas y Casos Prácticos

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 6,56 KB

Verificación y Validación de Software

Mediante la realización de pruebas de software, se van a llevar a cabo las tareas de verificación y validación del mismo.

  • Verificación: Proceso por el que se comprueba que el software cumple los requisitos especificados. Con la verificación se comprueba si la aplicación se está construyendo correctamente.
  • Validación: Proceso que comprueba si el software hace lo que el usuario deseaba (tiene que estar verificado). La validación es el proceso de evaluación del sistema, o de uno de sus componentes, para determinar si satisface los requisitos especificados.

Caso de Prueba

Un caso de prueba es un conjunto de entradas, condiciones de ejecución y resultados esperados, desarrollado para conseguir un objetivo particular o condición de prueba.

Tipos de Pruebas de Software

Prueba de Caja Negra

Se centran en validar los requisitos funcionales sin fijarse en el funcionamiento interno del programa (necesitan saber la funcionalidad que el código ha de proporcionar).

Prueba de Caja Blanca

Se centra en validar la estructura interna del programa (necesita conocer los detalles procedimentales del código).

Enfoque de las Pruebas

Caja Blanca

Las pruebas de caja blanca deben garantizar que:

  • Se ejecuten al menos una vez todos los caminos independientes de cada módulo.
  • Se ejecuten todas las sentencias al menos una vez.
  • Se ejecuten todas las decisiones lógicas en su parte verdadera y en su parte falsa.
  • Se ejecuten todos los bucles en sus límites.
  • Se utilicen todas las estructuras de datos internas para asegurar su validez.

Caja Negra

Con este tipo de pruebas se intenta encontrar errores de las siguientes categorías:

  • Funcionalidades incorrectas o ausentes.
  • Errores de interfaz.
  • Errores en estructuras de datos o en accesos a bases de datos externas.
  • Errores de rendimiento.
  • Errores de inicialización y finalización.

Pruebas Funcionales

Particiones Equivalentes

La idea de este tipo de pruebas funcionales es considerar el menor número posible de casos de prueba. Para ello, cada caso de prueba tiene que abarcar el mayor número posible de entradas diferentes.

Análisis de Valores Límite

En este caso, a la hora de implementar un caso de prueba, se van a elegir como valores de entrada aquellos que se encuentran en el límite de las clases de equivalencia.

Pruebas Aleatorias

Consiste en generar entradas aleatorias para la aplicación que hay que probar. Se suelen utilizar generadores de prueba.

Procedimientos y Casos de Prueba

Un caso de prueba es un conjunto de entradas, condiciones de ejecución y resultados esperados, desarrollados para un objetivo particular.

Procedimientos para el Diseño de los Casos de Prueba

  • Enfoque funcional o de caja negra: En este tipo de prueba, nos centramos en que el programa, o parte del programa que estamos probando, reciba una entrada de forma adecuada y se produzca una salida correcta.
  • Enfoque estructural o caja blanca: En este tipo de pruebas, debemos centrarnos en la implementación interna del programa. Se trata de comprobar que la operación interna se ajusta a las especificaciones.
  • Enfoque aleatorio: A partir de modelos obtenidos estadísticamente, se elaboran casos de prueba que prueben las entradas del programa.

Ejemplo de Código en Java: Clase CCuenta

package practicaunidad3;

public class CCuenta {

    // Propiedades de la Clase Cuenta
    private String nombre;
    private String cuenta;
    private double saldo;
    private double tipoInteres;

    /* Constructor sin argumentos */
    public CCuenta() {
    }

    public CCuenta(String nom, String cue, double sal, double tipo) {
        nombre = nom;
        cuenta = cue;
        saldo = sal;
        tipoInteres = tipo;
    }

    public void asignarNombre(String nom) {
        nombre = nom;
    }

    public String obtenerNombre() {
        return nombre;
    }

    public double estado() {
        return saldo;
    }

    public void ingresar(double cantidad) {
        if (cantidad < 0) {
            System.out.println("No se puede ingresar una cantidad negativa");
        } else {
            saldo = saldo + cantidad;
        }
    }

    public void retirar(double cantidad) {
        if (cantidad < 0) {
            System.out.println("No se puede retirar una cantidad negativa");
        } else {
            if (estado() < cantidad) {
                System.out.println("No hay suficiente saldo");
            } else {
                saldo = saldo - cantidad;
            }
        }
    }

    public String obtenerCuenta() {
        return cuenta;
    }
}

Clase Main para Pruebas

package practicaunidad3;

public class Main {

    public static void main(String[] args) throws Exception {
        CCuenta miCuenta;
        double saldoActual;

        miCuenta = new CCuenta("Juan López", "1000-2365-85-123456789", 2500, 0);
        miCuenta.retirar(2300);
        System.out.println("Ingreso en cuenta");
        miCuenta.ingresar(-1695);
        saldoActual = miCuenta.estado();
        System.out.println("El saldo actual es " + saldoActual);
    }
}

Clase de Prueba con JUnit

package practicaunidad3;

import org.junit.Test;
import static org.junit.Assert.*;

public class CCuentaTest {

    public CCuentaTest() {
    }

    @Test
    public void testIngresar() {
        System.out.println("ingresar");
        double cantidad = 2500;
        CCuenta instance = new CCuenta("", "", 10000, 0.0);
        instance.ingresar(cantidad);
        assertEquals("Error en el calculo", 12500f, instance.estado(), 8f);
    }

    @Test
    public void testRetirar() throws Exception {
        System.out.println("retirar");
        double cantidad = 1000f;
        CCuenta instance = new CCuenta("", "", 10000, 0);
        instance.retirar(cantidad);
        assertEquals(9000f, instance.estado(), 8f);
    }

    @Test
    public void testIngresarRetirar() {
        System.out.println("ingresar-retirar");
        double cantidad = 1000;
        CCuenta instance = new CCuenta();
        instance.ingresar(cantidad);
        instance.retirar(cantidad);
        assertEquals("Error en el calculo", 0f, instance.estado(), 8f);
    }
}

Entradas relacionadas: