PDF de programación - Tema 4: Corrección y Robustez en Java

Imágen de pdf Tema 4: Corrección y Robustez en Java

Tema 4: Corrección y Robustez en Javagráfica de visualizaciones

Publicado el 24 de Enero del 2017
1.038 visualizaciones desde el 24 de Enero del 2017
133,5 KB
55 paginas
Creado hace 15a (11/11/2008)
Tema 4: Corrección y Robustez en Java

Programación Orientada a Objetos

Curso 2008/2009
Begoña Moros Valle

Contenido

Introducción
Corrección:

Asertos
Pruebas unitarias

Robustez:

Excepciones

Diseño por contrato
Consejos uso de excepciones

Tema4

Corrección y Robustez

2

Introducción

Corrección:

Es la capacidad de los productos software de realizar

con exactitud su tarea (cumplir su
especificación).

Robustez:

Es la capacidad de los productos software de
reaccionar adecuadamente ante situaciones
excepcionales.

La reutilización y extensibilidad no deben

lograrse a expensas de la fiabilidad (corrección
y robustez).

Tema4

Corrección y Robustez

3

Especificación

La especificación (formal) de la semántica de

una rutina está definida por:
Precondiciones: condiciones para que una rutina

funcione correctamente.

Postcondiciones: describen el efecto de la rutina.

El estado que deben cumplir los objetos de una

clase se denomina invariante.
Restricciones que deben ser satisfechas por cada

objeto tras la ejecución de los métodos y
constructores.

Tema4

Corrección y Robustez

4

Asertos y excepciones

Java proporciona dos herramientas para

tratar con la corrección y robustez del
código:
Aserto: condición que debe cumplirse en el

código.

Excepción: mecanismo para notificar un

error durante la ejecución.

Tema4

Corrección y Robustez

5

Caso de estudio
Clase Cuenta:

El estado de una cuenta es correcto si tiene un
titular (referencia no nula) invariante
El método ingreso() incrementa el saldo de la
cuenta postcondición
El parámetro del método ingreso() debe ser
siempre positivo precondición
El método ingreso() sólo se puede ejecutar en
estado OPERATIVA precondición
Cada cuenta tiene un código diferente.

¿Cómo comprobamos la corrección del código?

Tema4

Corrección y Robustez

6

Clase Cuenta

public class Cuenta {

private static int ultimoCodigo = 0;
private int codigo;
private double saldo;
private final Persona titular;
private EstadoCuenta estado;
public Cuenta(Persona persona, int saldoInicial) {

codigo = ++ultimoCodigo;
saldo = saldoInicial;
titular = persona;

estado = EstadoCuenta.OPERATIVA;
}
public void ingreso(double cantidad) {

}

}


Tema4

saldo = saldo + cantidad;

Corrección y Robustez

7

Asertos

Construcción proporcionada por el lenguaje que

permite comprobar si una condición se cumple en
el código.

Declaración de un aserto:

assert expresión booleana;
assert expresión booleana: “mensaje de error”;

La violación de un aserto (evaluación false)

provoca un error en la aplicación notificado con una
excepción (AssertError).

Se pueden incluir asertos en cualquier punto del

código donde queramos asegurar que se cumple una
condición útil para depuración.

Tema4

Corrección y Robustez

8

Asertos

Los asertos puede utilizarse para comprobar la
Pre y postcondiciones del método ingreso():

corrección del código.

/**
* Ingresa una cantidad en una cuenta operativa
* @param cantidad valor mayor o igual que cero.
*/
public void ingreso (double cantidad) {
assert cantidad >= 0: "cantidad negativa";
assert estado == EstadoCuenta.OPERATIVA: "estado incorrecto";
saldo = saldo + cantidad;
assert saldo == old saldo + cantidad: "Fallo postcondición";
}

Tema4

Corrección y Robustez

9

Asertos

Postcondición:

El código anterior no compila, ya que no es posible

expresar con un aserto el antiguo valor de un
atributo (old saldo).

Para expresar correctamente el aserto deberíamos

declarar una variable local para almacenar el
antiguo valor del atributo.

Invariante:

Podría definirse en un método privado que sea

comprobado al final de cada método y constructor.

private boolean invariante() {

}

return titular != null;

Tema4

Corrección y Robustez

10

Asertos

/**
* Ingresa una cantidad en una cuenta operativa.
* @param cantidad valor mayor o igual que cero.
*/
public void ingreso (double cantidad) {
assert cantidad >= 0: "cantidad negativa";
assert estado == EstadoCuenta.OPERATIVA: "estado incorrecto";
double oldSaldo = saldo;
saldo = saldo + cantidad;
assert saldo == oldSaldo + cantidad: "Fallo postcondición";
assert invariante(): "Fallo invariante";
}

Tema4

Corrección y Robustez

11

Asertos. Inconvenientes
Los asertos en Java son pobres.

Por ejemplo, no podemos establecer en un aserto el

antiguo valor de un atributo (old saldo).

No permite utilizar cuantificadores lógicos

ni condiciones globales a una clase.
Por ejemplo, “cada cuenta debe tener un código

único”.

Un aserto sólo es comprobado durante la

ejecución del código.

Los asertos no se heredan.
Por defecto, los asertos están desactivados.
Se activan con el parámetro -ea de la máquina
No podemos confiar en los asertos para
controlar las precondiciones!!
Tema4
Corrección y Robustez

virtual.

12

Verificación y Pruebas

Verificación: proceso que comprueba que el

La verificación puede ser formal (lenguajes

código sea correcto.

algebraicos, Maude)

Las pruebas del software permiten realizar la

verificación no formal del código.

Hay varios tipos de pruebas. Las más

relevantes para las clases son las pruebas
unitarias.

Java no incluye en el lenguaje soporte para

pruebas unitarias.
Se utiliza una herramienta externa encargada
de hacer las pruebas: JUnit.

Tema4

Corrección y Robustez

13

Pruebas Unitarias

Pruebas encargadas de probar el funcionamiento de

un módulo (clase) de la aplicación.

Una prueba unitaria adopta el rol del cliente de la

clase y comprueba si los constructores y métodos
realizan lo que se espera de ellos (postcondiciones).

La ejecución de las pruebas puede ser

automatizada.

Es posible definir baterías de pruebas (suite) que

ejecuten todas las pruebas de una aplicación.

Habitualmente se define una prueba unitaria (clase de

pruebas) por cada clase de la aplicación.

Tema4

Corrección y Robustez

14

JUnit- Asertos
La herramienta JUnit define métodos para

establecer asertos sobre el código:
assertEquals() : comprueba que dos valores sean

iguales.

assertNotEquals() : dos valores son distintos.
assertSame() : dos objetos son idénticos.
assertTrue() : validez de una expresión booleana.
assertNotNull() : referencia no nula.


Tema4

Corrección y Robustez

15

JUnit- Pruebas de la clase Cuenta

Se crean métodos de prueba para los constructores y

métodos que cambien el estado del objeto.

import junit.framework.TestCase;
public class CuentaTest extends TestCase {

public void testIngreso() {

Persona cliente =

new Persona ("Juan González",

Cuenta cuenta = new Cuenta (cliente, 100);
cuenta.ingreso(100);
assertEquals(200, cuenta.getSaldo());

Corrección y Robustez

16

}

}

Tema4

JUnit – Objetos de prueba
Para evitar la repetición del código que

construye los objetos de prueba:
Se declaran como atributos de la clase de pruebas.
El método setUp() se encarga de construir los
objetos de prueba.
El método setUp() se ejecuta antes de cada
método de prueba.

Se asegura que los objetos de prueba siempre
estén recién construidos antes de cada prueba.

Los métodos de prueba no interfieren entre sí.

Tema4

Corrección y Robustez

17

JUnit – Método setUp()
public class CuentaTest extends TestCase {

private Cuenta cuenta;
@Override
protected void setUp() {
Persona cliente =

new Persona ("Juan González", "33435332

cuenta = new Cuenta (cliente, 100);

}
public void testIngreso() {
cuenta.ingreso(100);
assertEquals(200, cuenta.getSaldo());

}

Tema4

Corrección y Robustez

18

JUnit – Batería de pruebas
Se añaden todas las clases de pruebas de la

aplicación.

import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {

public static Test suite() {

TestSuite suite =

new TestSuite("Test aplicación bancaria"

suite.addTestSuite(CuentaTest.class);
suite.addTestSuite(DepositoTest.class);
return suite;

Corrección y Robustez

19

}

}

Tema4

Beneficios de las pruebas

Las pruebas se ejecutan automáticamente:
No es necesario que una persona interaccione con la

interfaz de la aplicación introduciendo valores de
prueba.

Las pruebas comprueban el

comportamiento esperado de una operación
sin importar cómo ha sido implementada.
Los cambios en la implementación que mejoren la calidad

del código (refactorización) no afectan a las pruebas.

Soporte para la extensibilidad:

Tras añadir una nueva funcionalidad a la aplicación
las pruebas permiten comprobar que todo el código
anterior funciona correctamente.

Tema4

Corrección y Robustez

20

Excepciones

Mecanismo proporcionado por el lenguaje de

programación para notificar errores en
tiempo de ejecución.

Soporte para la robustez del código.
La información del error, excepción, es un
objeto que se propaga a todos los objetos
afectados por el error.

Las excepciones pueden tratarse con el
propósito de dar una solución al error:
recuperación de errores.

Tema4

Corrección y Robustez

21

Situaciones de error

Habitualmente las excepciones se utilizan en
situaciones de error que no pueden ser
resueltas por el programador:
(cid:13
  • Links de descarga
http://lwp-l.com/pdf2100

Comentarios de: Tema 4: Corrección y Robustez en Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad