Ejemplo Pruebas Unitarias e Integración PDF
Ejemplo Pruebas Unitarias e Integración PDF
Ejemplo Pruebas Unitarias e Integración PDF
Escuela Superior de Informtica (UCLM) Ingeniera Tcnica en Informtica de Sistemas. Ingeniera del Software.
Se desean realizar las pruebas unitarias y de integracin de las 3 clases cuyo cdigo se ofrece a continuacin: 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("-------------------\n\n"); } } } Factura.java: import java.util.Vector; public class Factura implements Euro {
Macario Polo Usaola Escuela Superior de Informtica (UCLM)
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");
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; }
MATRICES DE USO DE MIEMBROS DE DATOS. Cliente mNIF mNombre Cliente add show t t t o o
mFacturas t
Factura
Lnea
Linea show o o
mArticulo t mPrecio t
PRUEBAS UNITARIAS 1. Pruebas unitarias de Cliente: 1.1 Corte de mNIF: El nico mtodo que hay en este corte es el constructor. Para comprobar el funcionamiento de este constructor podemos hacer dos cosas: a) Aadir un mtodo 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 opcin, dicha clase podra 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 ejecucin del fragmento de cdigo anterior, que ejecuta el caso de prueba en el que mNIF=null, es el de la siguiente figura:
Cliente c=new Cliente(new String(), null); Ntese que el valor del 2 parmetro no me importa, ya que estoy en el corte correspondiente a mNIF, al que se le da valor en el primer parmetro del constructor.
1.2. Corte de mNombre: Cliente(String, String) show() Como en show() se utiliza el atributo mFacturas, que es de un tipo no bsico, lo obviamos en este tipo de pruebas. Casos de prueba: 121: Cliente c=new Cliente(null, null); c.show()
1.3. Corte de mFacturas. Puesto que ste es un atributo que representa un objeto agregado, y que adems no es de un tipo bsico, y que adems 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();
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 coleccin de objetos agregados, que no son de un tipo bsico (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();
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 interpretacin de los resultados de las pruebas porque carecemos de requisitos funcionales y no sabemos, por tanto, cmo 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 ejecucin, con lo que todos los casos de prueba han resultado satisfactorios.
10
PRUEBAS DE INTEGRACIN A la hora de realizar estas pruebas, debemos tener en cuenta el nivel de complejidad de cada integracin, en lo que influye mucho el grado de interdependencia. En nuestro sencillo ejemplo, parece claro que debemos comenzar probando la integracin de Factura con Linea. 1. Pruebas de integracin de Factura con Linea.
En la matriz anterior notamos cosas raras que impiden seguir ejecutando las pruebas de integracin: los mtodos Factura(String, String) y quitar(int) acceden a mLineas directamente a los atributos de la clase Linea, lo cual est prohibido. Deberamos, por tanto, tener mtodos get() y set(--) para todos los atributos de Linea. Los aadimos y volvemos a realizar pruebas de unidad en Linea. Hemos aadido los mtodos siguientes:
Macario Polo Usaola Escuela Superior de Informtica (UCLM)
11
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 integracin.
show Linea X X X
X X
getPrecio
setArtic.
Con la matriz de ahora, s que podemos continuar las pruebas de integracin de Factura con Linea. Siguiendo los pasos que vimos en clase, tras dibujar la matriz 3D, determinamos los casos de prueba, que, en principio, sern 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 Escuela Superior de Informtica (UCLM)
12
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 mtodo show(). Para continuar, miramos qu mtodos de Linea son llamados desde los mtodos de Factura que pertenecen a este corte: Factura(String, String) llama a setArticulo(double) show() llama a show() y a setPrecio(double)
Podramos volver a ejecutar los casos de prueba 211 a 213. Sin embargo, debemos dar valores de prueba al atributo mLineas, aadiendo objetos de clase Linea mediante el mtodo 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();
null);
Factura f=new Factura(null, Linea l=new Linea(null, 0); Linea l2=new Linea(null, 0.001);
Macario Polo Usaola Escuela Superior de Informtica (UCLM)
13
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);}
14
APNDICE. a) Cdigo de Factura tras aadir mtodos 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 Escuela Superior de Informtica (UCLM)
15
System.out.println("\t } }
b) Cdigo de Linea tras aadirle mtodos 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"); } }
16