SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
EJEMPLO DE PRUEBAS UNITARIAS Y DE INTEGRACIÓN.




              Escuela Superior de Informática (UCLM)
        Ingeniería Técnica en Informática de Sistemas.
                              Ingeniería del Software.




                         1
Se desean realizar las pruebas unitarias y de integración de las 3 clases cuyo
código se ofrece a continuación:
Cliente.java:
import java.util.Vector;


public class Cliente {
    String mNIF, mNombre;
    Vector mFacturas;


    public Cliente(String nif, String nombre) {
        mNIF=nif; mNombre=nombre; mFacturas=new Vector();
    }


    public void add(Factura f) {
        mFacturas.addElement(f);
    }


    public void show() {
        System.out.println("Facturas del cliente " + mNombre + ":");
        for (int i=0; i<mFacturas.size(); i++) {
            System.out.println("Factura " + (i+1));
            ((Factura) mFacturas.elementAt(i)).show();
            System.out.println("-------------------nn");
        }
    }
}


Factura.java:
import java.util.Vector;


public class Factura implements Euro {
Macario Polo Usaola                                2         Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                           Ingeniería del Software.
String mNumero, mFecha;
    Linea mLineas[];


    public Factura(String n, String f) {
        mNumero=n; mFecha=f;
        mLineas=new Linea[10];
    }


    public void add(Linea l) {
        int i=0;
        for (i=0; mLineas[i]!=null; i++) ;
        mLineas[i]=l;
    }


    public void quitar(int i) {
        mLineas[i].mArticulo=null;
        mLineas[i].mPrecio=0;
    }


    public void show() {
        double total=0;
        System.out.println(mNumero + "; " + mFecha);
        for (int i=0; mLineas[i]!=null; i++) {
            mLineas[i].show();
            total+=mLineas[i].mPrecio;
        }
        System.out.println("tTotal .... " + total + " pts.");
        System.out.println("t           " + (total/kCambio) + " euros");
    }
}


Macario Polo Usaola                              3       Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                       Ingeniería del Software.
Linea.java:
public class Linea {
    String mArticulo;
    double mPrecio;


    public Linea(String a, double p) {
        mArticulo=a;
        mPrecio=p;
    }


    public void show() {
        System.out.println("t" + mArticulo + " ..... " + mPrecio + " pts");
    }
}


Euro.java:
interface Euro {
    final double kCambio = 166.386;
}




Macario Polo Usaola                            4       Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                     Ingeniería del Software.
MATRICES DE USO DE MIEMBROS DE DATOS.


Cliente          Cliente add show

mNIF              t

mNombre           t               o

mFacturas t                   t       o


Factura      Factura add quitar show

mNumero t                                 o

mFecha        t                           o

mLineas       t           t       t       o


Línea       Linea show

mArticulo t           o

mPrecio      t        o




Macario Polo Usaola                           5   Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                Ingeniería del Software.
PRUEBAS UNITARIAS
1. Pruebas unitarias de Cliente:
1.1 Corte de mNIF:
El único método que hay en este corte es el constructor. Para comprobar el
funcionamiento de este constructor podemos hacer dos cosas:
        a) Añadir un método getNIF() para ver que devueleva mNIF
        b) Construir una clase con permiso para acceder a los atributos de Cliente,
            de manera que muestre el valor de mNIF.


Si optamos por la 2ª opción, dicha clase podría ser la siguiente:
public class Principal {
      public static void main(String args[]) throws Exception {
          Cliente c=new Cliente(null, null);
          System.out.println("NIF: " + c.mNIF);
          System.in.read();
      }
}


    •    Caso de prueba 111: El resultado de la ejecución del fragmento de código
        anterior, que ejecuta el caso de prueba en el que mNIF=null, es el de la
        siguiente figura:




    •    Caso de prueba 112: Otra prueba puede ser la siguiente:
Cliente c=new Cliente(new String(), null); ß Nótese que el valor del 2º parámetro
no me importa, ya que estoy en el corte correspondiente a mNIF, al que se le da
valor en el primer parámetro del constructor.




Macario Polo Usaola                          6   Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                               Ingeniería del Software.
1.2. Corte de mNombre:
Cliente(String, String)
show()


Como en show() se utiliza el atributo mFacturas, que es de un tipo no básico, lo
obviamos en este tipo de pruebas.
Casos de prueba:
    •    121: Cliente c=new Cliente(null, null); c.show()




    •    122: Cliente c=new Cliente(new String(), new String()); c.show();




    •    123: Cliente c=new Cliente(“5.655.999J”, “Paco Pil”); c.show();




Macario Polo Usaola                        7      Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                Ingeniería del Software.
1.3. Corte de mFacturas.
Puesto que éste es un atributo que representa un objeto agregado, y que además
no es de un tipo básico, y que además no ha sido probado, no probamos este
corte.


2. Pruebas unitarias de Factura.
2.1 Corte de mNumero.
Influyen aquí Factura(String, String) y show().
    •    Caso de prueba 211.
Factura f=new Factura(null, null); f.show();




    •    Caso de prueba 212.
Factura f=new Factura(new String(), null); f.show();




    •    Caso de prueba 213.
Factura f=new Factura(“1/2001”, null); f.show();



Macario Polo Usaola                        8       Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                 Ingeniería del Software.
2.2. Corte de mFecha.
Los casos de prueba del corte de mNumero pueden probarse para este corte con
resultados satisfactorios.


2.3. Corte de mLineas.
Como este atributo representa una colección de objetos agregados, que no son de
un tipo básico (int, float...) y no ha sido probado, no realizamos pruebas de unidad
para este corte.


3. Pruebas de unitarias de Linea.
3.1. Corte de mArticulo
    •    Caso de prueba 311.
Linea l=new Linea(null, 0); l.show();




    •    Caso de prueba 312.
Linea l=new Linea(new String(), 0); l.show();




    •    Caseo de prueba 313.
Linea l=new Linea(“Agua fresca”, 0); l.show();




3.2. Corte de mPrecio.
    •    Caso de prueba 321.


Macario Polo Usaola                       9      Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                               Ingeniería del Software.
Sirve el caso de prueba 311, en el que esperamos el valor 0 y obtenemos el valor
0.
     •   Caso de prueba 322.
Linea l=new Linea(“Agua fresca”, null); l.show();




Conclusiones sobre los resultados de las pruebas unitarias:
No se ha realizado interpretación de los resultados de las pruebas porque
carecemos de requisitos funcionales y no sabemos, por tanto, cómo debe
comportarse este sistema ante los valores 0, null, etc.
Podemos suponer que el cliente nos ha pedido como único requisito que no haya
errores en tiempo de ejecución, con lo que todos los casos de prueba han
resultado satisfactorios.




Macario Polo Usaola                      10         Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                  Ingeniería del Software.
PRUEBAS DE INTEGRACIÓN
A la hora de realizar estas pruebas, debemos tener en cuenta el nivel de
complejidad de cada integración, en lo que influye mucho el grado de
interdependencia.
En nuestro sencillo ejemplo, parece claro que debemos comenzar probando la
integración de Factura con Linea.
1. Pruebas de integración de Factura con Linea.




                                         Factura add quitar show
                           show
                                             X                      X       mNumero
                Linea              X         X                      X        mFecha

                      X            X
   mArticulo
                                                              X
                      X
   mPrecio




En la matriz anterior notamos cosas raras que impiden seguir ejecutando las
pruebas de integración: los métodos Factura(String, String) y quitar(int) acceden a
mLineas directamente a los atributos de la clase Linea, lo cual está prohibido.
Deberíamos, por tanto, tener métodos get() y set(--) para todos los atributos de
Linea.


Los añadimos y volvemos a realizar pruebas de unidad en Linea. Hemos añadido
los métodos siguientes:

Macario Polo Usaola                        11    Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                               Ingeniería del Software.
public void setArticulo(String a) { mArticulo=a; }
                public String getArticulo() { return mArticulo; }
                public void setPrecio(double p) { mPrecio=p; }
                public double getPrecio() { return mPrecio; }


      Funcionan perfectamente, con lo cual volvemos a las pruebas de integración.




                                               show        Factura add quitar show
                        getPrecio
                                                                X                         X       mNumero
                                       Linea     X
                                                                X                         X         mFecha
                setPrecio
                                         X
                                                 X
       getArtic.

setArtic.                                X                                         X

                   X             X
mArticulo
                        X                                           X
                                                                              getPrecio
mPrecio                                               X
            X

                   X                     X
                                                           setArtic.




      Con la matriz de ahora, sí que podemos continuar las pruebas de integración de
      Factura con Linea. Siguiendo los pasos que vimos en clase, tras dibujar la “matriz
      3D”, determinamos los casos de prueba, que, en principio, serán los mismos que
      al realizar las pruebas de unidad de la clase Factura.
      Igual que con las pruebas de unidad, probamos corte a corte.
      2.1. Corte de mNumero.
      En las pruebas de unidad, ejecutamos estos casos de prueba:

      Macario Polo Usaola                             12     Ingeniería Técnica en Informática de Sistemas.
      Escuela Superior de Informática (UCLM)                                     Ingeniería del Software.
211: Factura f=new Factura(null, null); f.show();
212: Factura f=new Factura(new String(), null); f.show();
213: Factura f=new Factura(“1/2001”, null); f.show();


Los tres casos consisten en una llamada al constructor de Factura y una llamada a
su método show(). Para continuar, miramos qué métodos de Linea son llamados
desde los métodos de Factura que pertenecen a este corte:
    •    Factura(String, String) llama a setArticulo(double)
    •    show() llama a show() y a setPrecio(double)
Podríamos volver a ejecutar los casos de prueba 211 a 213. Sin embargo,
debemos dar valores de prueba al atributo mLineas, añadiendo objetos de clase
Linea mediante el método add(Linea):
    •    Caso de prueba I-211-1.
Factura f=new Factura(null, null);
Linea l=new Linea(null, 0);
f.add(l);
f.show();


    •    Caso de prueba I-211-2.
Factura f=new Factura(null, null);
Linea l=new Linea(null, 0); Linea l2=new Linea(“Coca cola”, 1000);
f.add(l); f.add(l2);
f.show();




    •    Caso de prueba I-211-3.
Factura f=new Factura(null,
null);
Linea l=new Linea(null, 0);
Linea l2=new Linea(null, 0.001);
Macario Polo Usaola                        13       Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                  Ingeniería del Software.
f.add(l); f.add(l2);
f.show();


        •    Caso de prueba I-211-4.
Linea lineas[]={
    new Linea("Agua", 25), new Linea("Leche", 85),
    new Linea("Pan", 50), new Linea("Mistol", 240),
    new Linea("Gel", 195), new Linea("Tomates", 70),
    new Linea("Agua 2", 25), new Linea("Leche 2", 85),
    new Linea("Pan 2", 50), new Linea("Mistol 2", 240),
    new Linea("Gel 2", 195), new Linea("Tomates 2", 70)
};
Factura f=new Factura(null, null);
try {
    for (int i=0; i<lineas.length; i++)
            f.add(lineas[i]);
            f.show();
}
catch (Exception e) {System.out.println(e);}




Macario Polo Usaola                        14     Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                Ingeniería del Software.
APÉNDICE.
a) Código de Factura tras añadir métodos set y get a Linea:
import java.util.Vector;
public class Factura implements Euro {
   String mNumero, mFecha;
   Linea mLineas[];


   public Factura(String n, String f) {
       mNumero=n; mFecha=f;
       mLineas=new Linea[10];
   }


   public void add(Linea l) {
       int i=0;
       for (i=0; mLineas[i]!=null; i++) ;
       mLineas[i]=l;
   }


   public void quitar(int i) {
       mLineas[i].setArticulo(null);
       mLineas[i].setPrecio(0);
   }


   public void show() {
       double total=0;
       System.out.println(mNumero + "; " + mFecha);
       for (int i=0; mLineas[i]!=null; i++) {
           mLineas[i].show();
           total+=mLineas[i].getPrecio();
       }
       System.out.println("tTotal .... " + total + " pts.");
Macario Polo Usaola                             15      Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                      Ingeniería del Software.
System.out.println("t           " + (total/kCambio) + " euros");
    }
}


b) Código de Linea tras añadirle métodos set y get.
public class Linea {
    private String mArticulo;
    private double mPrecio;


    public Linea(String a, double p) {
        mArticulo=a;
        mPrecio=p;
    }


    public void setArticulo(String a) { mArticulo=a; }


    public String getArticulo() { return mArticulo; }


    public void setPrecio(double p) { mPrecio=p; }


    public double getPrecio() { return mPrecio; }


    public void show() {
        System.out.println("t" + mArticulo + " ..... " + mPrecio + " pts");
    }
}




Macario Polo Usaola                              16     Ingeniería Técnica en Informática de Sistemas.
Escuela Superior de Informática (UCLM)                                      Ingeniería del Software.

Más contenido relacionado

La actualidad más candente

Diagrama de flujos de datos
Diagrama de flujos de datosDiagrama de flujos de datos
Diagrama de flujos de datosOryanaEG
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionAbner Gerardo
 
Tecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareTecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareJennifer Andrea Cano Guevara
 
2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de usoSaul Mamani
 
Implementacion de software
Implementacion de softwareImplementacion de software
Implementacion de softwareTom Rodriguez
 
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
 
Modelado de requisitos
Modelado de requisitosModelado de requisitos
Modelado de requisitosKleo Jorgee
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 
Evaluación calidad productos de software
Evaluación calidad productos de softwareEvaluación calidad productos de software
Evaluación calidad productos de softwareJorge Maturana Palma
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1Clara Patricia Avella Ibañez
 
UISRAEL-Control de Estacionamientos
UISRAEL-Control de EstacionamientosUISRAEL-Control de Estacionamientos
UISRAEL-Control de EstacionamientosPataclown
 

La actualidad más candente (20)

Diagrama de flujos de datos
Diagrama de flujos de datosDiagrama de flujos de datos
Diagrama de flujos de datos
 
Diseño caso de pruebas
Diseño caso de pruebasDiseño caso de pruebas
Diseño caso de pruebas
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacion
 
Tecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto softwareTecnicas de estimacion de costos de proyecto software
Tecnicas de estimacion de costos de proyecto software
 
2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso
 
Implementacion de software
Implementacion de softwareImplementacion de software
Implementacion de software
 
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
 
Modelado de requisitos
Modelado de requisitosModelado de requisitos
Modelado de requisitos
 
técnicas estáticas
técnicas estáticastécnicas estáticas
técnicas estáticas
 
Diagramas de Secuencia.
Diagramas de Secuencia.Diagramas de Secuencia.
Diagramas de Secuencia.
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
Evaluación calidad productos de software
Evaluación calidad productos de softwareEvaluación calidad productos de software
Evaluación calidad productos de software
 
Uml
UmlUml
Uml
 
Pruebas del software
Pruebas del softwarePruebas del software
Pruebas del software
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1
 
Fundamentos de ingenieria del software (2)
Fundamentos de ingenieria del software (2)Fundamentos de ingenieria del software (2)
Fundamentos de ingenieria del software (2)
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
UISRAEL-Control de Estacionamientos
UISRAEL-Control de EstacionamientosUISRAEL-Control de Estacionamientos
UISRAEL-Control de Estacionamientos
 
Metodologia orientada a objeto
Metodologia orientada a objetoMetodologia orientada a objeto
Metodologia orientada a objeto
 

Destacado

Estrategias de aplicaciones para las pruebas de integración
Estrategias  de aplicaciones para las pruebas de integraciónEstrategias  de aplicaciones para las pruebas de integración
Estrategias de aplicaciones para las pruebas de integraciónPablo Navarrete
 
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...carlblakc
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de softwarexpjair
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blancaStudentPc
 
Plan de Pruebas
Plan de PruebasPlan de Pruebas
Plan de Pruebaschoselin
 
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NET
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NETPruebas Unitarias - Uso de NUnit dentro de proyectos .NET
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NETLa Red DBAccess
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Softwarearacelij
 
Estrategias de aplicacion de las pruebas
Estrategias  de aplicacion de las pruebasEstrategias  de aplicacion de las pruebas
Estrategias de aplicacion de las pruebasJaimeTepancalcoPoblano
 
Estrategias de prueba de software
Estrategias de prueba de softwareEstrategias de prueba de software
Estrategias de prueba de softwarejtapiac
 
Estrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareEstrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareLucia Gasperin
 
Introducción de pruebas de software
Introducción de pruebas de softwareIntroducción de pruebas de software
Introducción de pruebas de softwareMarta Silvia Tabares
 
Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeansbachispasaca
 
Act 4.3 pruebas de software
Act 4.3 pruebas de softwareAct 4.3 pruebas de software
Act 4.3 pruebas de softwareRodrigo Santiago
 

Destacado (20)

Estrategias de aplicaciones para las pruebas de integración
Estrategias  de aplicaciones para las pruebas de integraciónEstrategias  de aplicaciones para las pruebas de integración
Estrategias de aplicaciones para las pruebas de integración
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
Estrategias de aplicación de prueba de unidad ,integración, sistema, y de ace...
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Software
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blanca
 
Plan de Pruebas
Plan de PruebasPlan de Pruebas
Plan de Pruebas
 
Casos de pruebas
Casos de pruebasCasos de pruebas
Casos de pruebas
 
Pruebas funcionales
Pruebas funcionalesPruebas funcionales
Pruebas funcionales
 
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NET
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NETPruebas Unitarias - Uso de NUnit dentro de proyectos .NET
Pruebas Unitarias - Uso de NUnit dentro de proyectos .NET
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Software
 
Plan de pruebas
Plan de pruebasPlan de pruebas
Plan de pruebas
 
Plan de pruebas_inces
Plan de pruebas_incesPlan de pruebas_inces
Plan de pruebas_inces
 
Estrategias de aplicacion de las pruebas
Estrategias  de aplicacion de las pruebasEstrategias  de aplicacion de las pruebas
Estrategias de aplicacion de las pruebas
 
Estrategias de prueba de software
Estrategias de prueba de softwareEstrategias de prueba de software
Estrategias de prueba de software
 
Estrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareEstrategias de Pruebas de Software
Estrategias de Pruebas de Software
 
8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
Introducción de pruebas de software
Introducción de pruebas de softwareIntroducción de pruebas de software
Introducción de pruebas de software
 
Junit con netbeans
Junit con netbeansJunit con netbeans
Junit con netbeans
 
Act 4.3 pruebas de software
Act 4.3 pruebas de softwareAct 4.3 pruebas de software
Act 4.3 pruebas de software
 

Similar a ejemplos de pruebas unitarias y de integracion

Java problems
Java problemsJava problems
Java problemsNoe Lopez
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con javadiegocastro1234
 
Manual de prácticas java 2015
Manual de prácticas java 2015Manual de prácticas java 2015
Manual de prácticas java 2015Ulises_312
 
Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Gustavo Macias
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacionJaime amambal
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacionJaime amambal
 
UNIDAD III - ACTIVIDAD III
UNIDAD III - ACTIVIDAD IIIUNIDAD III - ACTIVIDAD III
UNIDAD III - ACTIVIDAD IIIMaiky Kobatakane
 
Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Gustavo Macias
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Jose Ponce
 
Ucv 2014 1_ads clase 15
Ucv 2014 1_ads clase 15Ucv 2014 1_ads clase 15
Ucv 2014 1_ads clase 15Taringa!
 
Ejercicios
EjerciciosEjercicios
EjerciciosEzmee XD
 
Recuperacion programas
Recuperacion programasRecuperacion programas
Recuperacion programasgidemon
 

Similar a ejemplos de pruebas unitarias y de integracion (20)

Sof rest 1
Sof rest 1Sof rest 1
Sof rest 1
 
Cecytem
CecytemCecytem
Cecytem
 
Java problems
Java problemsJava problems
Java problems
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
 
Ejercicios3
Ejercicios3Ejercicios3
Ejercicios3
 
Manual de prácticas java 2015
Manual de prácticas java 2015Manual de prácticas java 2015
Manual de prácticas java 2015
 
Practicas
PracticasPracticas
Practicas
 
Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
 
UNIDAD III - ACTIVIDAD III
UNIDAD III - ACTIVIDAD IIIUNIDAD III - ACTIVIDAD III
UNIDAD III - ACTIVIDAD III
 
Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402Practicas java gustavo carbajal macias 402
Practicas java gustavo carbajal macias 402
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005
 
Tutorial de MatLab
Tutorial de MatLabTutorial de MatLab
Tutorial de MatLab
 
Introduccion a C++.pdf
Introduccion a C++.pdfIntroduccion a C++.pdf
Introduccion a C++.pdf
 
Unidad temática v
Unidad temática vUnidad temática v
Unidad temática v
 
Ucv 2014 1_ads clase 15
Ucv 2014 1_ads clase 15Ucv 2014 1_ads clase 15
Ucv 2014 1_ads clase 15
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Funciones
FuncionesFunciones
Funciones
 
Recuperacion programas
Recuperacion programasRecuperacion programas
Recuperacion programas
 

Último

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 

Último (10)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

ejemplos de pruebas unitarias y de integracion

  • 1. EJEMPLO DE PRUEBAS UNITARIAS Y DE INTEGRACIÓN. Escuela Superior de Informática (UCLM) Ingeniería Técnica en Informática de Sistemas. Ingeniería del Software. 1
  • 2. Se desean realizar las pruebas unitarias y de integración de las 3 clases cuyo código se ofrece a continuación: Cliente.java: import java.util.Vector; public class Cliente { String mNIF, mNombre; Vector mFacturas; public Cliente(String nif, String nombre) { mNIF=nif; mNombre=nombre; mFacturas=new Vector(); } public void add(Factura f) { mFacturas.addElement(f); } public void show() { System.out.println("Facturas del cliente " + mNombre + ":"); for (int i=0; i<mFacturas.size(); i++) { System.out.println("Factura " + (i+1)); ((Factura) mFacturas.elementAt(i)).show(); System.out.println("-------------------nn"); } } } Factura.java: import java.util.Vector; public class Factura implements Euro { Macario Polo Usaola 2 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 3. String mNumero, mFecha; Linea mLineas[]; public Factura(String n, String f) { mNumero=n; mFecha=f; mLineas=new Linea[10]; } public void add(Linea l) { int i=0; for (i=0; mLineas[i]!=null; i++) ; mLineas[i]=l; } public void quitar(int i) { mLineas[i].mArticulo=null; mLineas[i].mPrecio=0; } public void show() { double total=0; System.out.println(mNumero + "; " + mFecha); for (int i=0; mLineas[i]!=null; i++) { mLineas[i].show(); total+=mLineas[i].mPrecio; } System.out.println("tTotal .... " + total + " pts."); System.out.println("t " + (total/kCambio) + " euros"); } } Macario Polo Usaola 3 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 4. Linea.java: public class Linea { String mArticulo; double mPrecio; public Linea(String a, double p) { mArticulo=a; mPrecio=p; } public void show() { System.out.println("t" + mArticulo + " ..... " + mPrecio + " pts"); } } Euro.java: interface Euro { final double kCambio = 166.386; } Macario Polo Usaola 4 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 5. MATRICES DE USO DE MIEMBROS DE DATOS. Cliente Cliente add show mNIF t mNombre t o mFacturas t t o Factura Factura add quitar show mNumero t o mFecha t o mLineas t t t o Línea Linea show mArticulo t o mPrecio t o Macario Polo Usaola 5 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 6. PRUEBAS UNITARIAS 1. Pruebas unitarias de Cliente: 1.1 Corte de mNIF: El único método que hay en este corte es el constructor. Para comprobar el funcionamiento de este constructor podemos hacer dos cosas: a) Añadir un método getNIF() para ver que devueleva mNIF b) Construir una clase con permiso para acceder a los atributos de Cliente, de manera que muestre el valor de mNIF. Si optamos por la 2ª opción, dicha clase podría ser la siguiente: public class Principal { public static void main(String args[]) throws Exception { Cliente c=new Cliente(null, null); System.out.println("NIF: " + c.mNIF); System.in.read(); } } • Caso de prueba 111: El resultado de la ejecución del fragmento de código anterior, que ejecuta el caso de prueba en el que mNIF=null, es el de la siguiente figura: • Caso de prueba 112: Otra prueba puede ser la siguiente: Cliente c=new Cliente(new String(), null); ß Nótese que el valor del 2º parámetro no me importa, ya que estoy en el corte correspondiente a mNIF, al que se le da valor en el primer parámetro del constructor. Macario Polo Usaola 6 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 7. 1.2. Corte de mNombre: Cliente(String, String) show() Como en show() se utiliza el atributo mFacturas, que es de un tipo no básico, lo obviamos en este tipo de pruebas. Casos de prueba: • 121: Cliente c=new Cliente(null, null); c.show() • 122: Cliente c=new Cliente(new String(), new String()); c.show(); • 123: Cliente c=new Cliente(“5.655.999J”, “Paco Pil”); c.show(); Macario Polo Usaola 7 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 8. 1.3. Corte de mFacturas. Puesto que éste es un atributo que representa un objeto agregado, y que además no es de un tipo básico, y que además no ha sido probado, no probamos este corte. 2. Pruebas unitarias de Factura. 2.1 Corte de mNumero. Influyen aquí Factura(String, String) y show(). • Caso de prueba 211. Factura f=new Factura(null, null); f.show(); • Caso de prueba 212. Factura f=new Factura(new String(), null); f.show(); • Caso de prueba 213. Factura f=new Factura(“1/2001”, null); f.show(); Macario Polo Usaola 8 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 9. 2.2. Corte de mFecha. Los casos de prueba del corte de mNumero pueden probarse para este corte con resultados satisfactorios. 2.3. Corte de mLineas. Como este atributo representa una colección de objetos agregados, que no son de un tipo básico (int, float...) y no ha sido probado, no realizamos pruebas de unidad para este corte. 3. Pruebas de unitarias de Linea. 3.1. Corte de mArticulo • Caso de prueba 311. Linea l=new Linea(null, 0); l.show(); • Caso de prueba 312. Linea l=new Linea(new String(), 0); l.show(); • Caseo de prueba 313. Linea l=new Linea(“Agua fresca”, 0); l.show(); 3.2. Corte de mPrecio. • Caso de prueba 321. Macario Polo Usaola 9 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 10. Sirve el caso de prueba 311, en el que esperamos el valor 0 y obtenemos el valor 0. • Caso de prueba 322. Linea l=new Linea(“Agua fresca”, null); l.show(); Conclusiones sobre los resultados de las pruebas unitarias: No se ha realizado interpretación de los resultados de las pruebas porque carecemos de requisitos funcionales y no sabemos, por tanto, cómo debe comportarse este sistema ante los valores 0, null, etc. Podemos suponer que el cliente nos ha pedido como único requisito que no haya errores en tiempo de ejecución, con lo que todos los casos de prueba han resultado satisfactorios. Macario Polo Usaola 10 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 11. PRUEBAS DE INTEGRACIÓN A la hora de realizar estas pruebas, debemos tener en cuenta el nivel de complejidad de cada integración, en lo que influye mucho el grado de interdependencia. En nuestro sencillo ejemplo, parece claro que debemos comenzar probando la integración de Factura con Linea. 1. Pruebas de integración de Factura con Linea. Factura add quitar show show X X mNumero Linea X X X mFecha X X mArticulo X X mPrecio En la matriz anterior notamos cosas raras que impiden seguir ejecutando las pruebas de integración: los métodos Factura(String, String) y quitar(int) acceden a mLineas directamente a los atributos de la clase Linea, lo cual está prohibido. Deberíamos, por tanto, tener métodos get() y set(--) para todos los atributos de Linea. Los añadimos y volvemos a realizar pruebas de unidad en Linea. Hemos añadido los métodos siguientes: Macario Polo Usaola 11 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 12. public void setArticulo(String a) { mArticulo=a; } public String getArticulo() { return mArticulo; } public void setPrecio(double p) { mPrecio=p; } public double getPrecio() { return mPrecio; } Funcionan perfectamente, con lo cual volvemos a las pruebas de integración. show Factura add quitar show getPrecio X X mNumero Linea X X X mFecha setPrecio X X getArtic. setArtic. X X X X mArticulo X X getPrecio mPrecio X X X X setArtic. Con la matriz de ahora, sí que podemos continuar las pruebas de integración de Factura con Linea. Siguiendo los pasos que vimos en clase, tras dibujar la “matriz 3D”, determinamos los casos de prueba, que, en principio, serán los mismos que al realizar las pruebas de unidad de la clase Factura. Igual que con las pruebas de unidad, probamos corte a corte. 2.1. Corte de mNumero. En las pruebas de unidad, ejecutamos estos casos de prueba: Macario Polo Usaola 12 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 13. 211: Factura f=new Factura(null, null); f.show(); 212: Factura f=new Factura(new String(), null); f.show(); 213: Factura f=new Factura(“1/2001”, null); f.show(); Los tres casos consisten en una llamada al constructor de Factura y una llamada a su método show(). Para continuar, miramos qué métodos de Linea son llamados desde los métodos de Factura que pertenecen a este corte: • Factura(String, String) llama a setArticulo(double) • show() llama a show() y a setPrecio(double) Podríamos volver a ejecutar los casos de prueba 211 a 213. Sin embargo, debemos dar valores de prueba al atributo mLineas, añadiendo objetos de clase Linea mediante el método add(Linea): • Caso de prueba I-211-1. Factura f=new Factura(null, null); Linea l=new Linea(null, 0); f.add(l); f.show(); • Caso de prueba I-211-2. Factura f=new Factura(null, null); Linea l=new Linea(null, 0); Linea l2=new Linea(“Coca cola”, 1000); f.add(l); f.add(l2); f.show(); • Caso de prueba I-211-3. Factura f=new Factura(null, null); Linea l=new Linea(null, 0); Linea l2=new Linea(null, 0.001); Macario Polo Usaola 13 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 14. f.add(l); f.add(l2); f.show(); • Caso de prueba I-211-4. Linea lineas[]={ new Linea("Agua", 25), new Linea("Leche", 85), new Linea("Pan", 50), new Linea("Mistol", 240), new Linea("Gel", 195), new Linea("Tomates", 70), new Linea("Agua 2", 25), new Linea("Leche 2", 85), new Linea("Pan 2", 50), new Linea("Mistol 2", 240), new Linea("Gel 2", 195), new Linea("Tomates 2", 70) }; Factura f=new Factura(null, null); try { for (int i=0; i<lineas.length; i++) f.add(lineas[i]); f.show(); } catch (Exception e) {System.out.println(e);} Macario Polo Usaola 14 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 15. APÉNDICE. a) Código de Factura tras añadir métodos set y get a Linea: import java.util.Vector; public class Factura implements Euro { String mNumero, mFecha; Linea mLineas[]; public Factura(String n, String f) { mNumero=n; mFecha=f; mLineas=new Linea[10]; } public void add(Linea l) { int i=0; for (i=0; mLineas[i]!=null; i++) ; mLineas[i]=l; } public void quitar(int i) { mLineas[i].setArticulo(null); mLineas[i].setPrecio(0); } public void show() { double total=0; System.out.println(mNumero + "; " + mFecha); for (int i=0; mLineas[i]!=null; i++) { mLineas[i].show(); total+=mLineas[i].getPrecio(); } System.out.println("tTotal .... " + total + " pts."); Macario Polo Usaola 15 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.
  • 16. System.out.println("t " + (total/kCambio) + " euros"); } } b) Código de Linea tras añadirle métodos set y get. public class Linea { private String mArticulo; private double mPrecio; public Linea(String a, double p) { mArticulo=a; mPrecio=p; } public void setArticulo(String a) { mArticulo=a; } public String getArticulo() { return mArticulo; } public void setPrecio(double p) { mPrecio=p; } public double getPrecio() { return mPrecio; } public void show() { System.out.println("t" + mArticulo + " ..... " + mPrecio + " pts"); } } Macario Polo Usaola 16 Ingeniería Técnica en Informática de Sistemas. Escuela Superior de Informática (UCLM) Ingeniería del Software.