Académique Documents
Professionnel Documents
Culture Documents
Grupo #4 nocturno
Integrantes:
Coello Blgica
Chvez Edwin
Gurumendi David
Soto Carlos
2015-2016
podemos capturarlo (equivaldra a capturar el ladrn) o lanzarlo (equivaldra a tratar de hacer huir al
ladrn, de hacer que salga fuera del lugar donde se encuentra).
BLOQUE TRY
Try en ingls es el verbo intentar, as que todo el cdigo que vaya dentro de esta sentencia ser el cdigo
sobre el que se intentar capturar el error si se produce y una vez capturado hacer algo con l. Lo ideal es
que no ocurra un error, pero en caso de que ocurra un bloque try nos permite estar preparados para
capturarlo y tratarlo. As un ejemplo sera:
try {
System.out.println(bloque de cdigo donde pudiera saltar un error es
este);
}
BLOQUE CATCH
En este bloque definimos el conjunto de instrucciones necesarias o de tratamiento del problema
capturado con el bloque try anterior. Es decir, cuando se produce un error o excepcin en el cdigo que se
encuentra dentro de un bloque try, pasamos directamente a ejecutar el conjunto de sentencias que
tengamos en el bloque catch. Esto no es exactamente as pero ya explicaremos ms adelante todo el
funcionamiento. De momento para una mejor comprensin vamos a considerar que esto es as.
catch (Exception e) {
System.out.println(bloque de cdigo donde se trata el problema);
}
Fjate que despus de catch hemos puesto unos parntesis donde pone Exception e. Esto significa que
cuando se produce un error Java genera un objeto de tipo Exception con la informacin sobre el error y
este objeto se enva al bloque catch.
BLOQUE FINALLY
Y para finalizar tenemos el bloque finally que es un bloque donde podremos definir un conjunto de
instrucciones necesarias tanto si se produce error o excepcin como si no y que por tanto se ejecuta
siempre.
finally {
System.out.println(bloque de cdigo ejecutado siempre);
}
try{
System.out.println("Intentamos ejecutar el bloque de instrucciones:");
System.out.println("Instruccin 1.");
System.out.println("Instruccin 2.");
System.out.println("Instruccin 3, etc.");
}
catch (Exception e) { System.out.println("Instrucciones a ejecutar cuando se produce un
error"); }
finally{ System.out.println("Instrucciones a ejecutar finalmente tanto si se producen errores
como si no."); }
}
}
Como podemos observar, se han ejecutado todas las instrucciones del bloque try y finalmente se ejecut
la instruccin del bloque finally. No se ejecuta el bloque catch porque no hubo error.
EJEMPLO CON ERROR
A continuacin vamos a ver cmo se comporta un programa con tratamiento de errores cuando se
produce un error y cmo afecta al control de flujo del programa. Escribe este cdigo en tu editor.
try {
System.out.println("Intentamos ejecutar el bloque de instrucciones:");
System.out.println("Instruccin 1.");
int n = Integer.parseInt("M"); //error forzado en tiempo de ejecucin.
System.out.println("Instruccin 2.");
System.out.println("Instruccin 3, etc.");
}
catch (Exception e) {
System.out.println("Instrucciones a ejecutar cuando se produce un error");
}
finally {
System.out.println("Instrucciones a ejecutar finalmente tanto si se producen errores como si
no.");
}
}
}
Se produce un error porque el mtodo parseInt de la clase Integer espera que dentro de las comillas
llegue un nmero y no una letra. Por ejemplo int n = Integer.parseInt("65"); sirve para transformar el String
65 en un int de valor 65. Al no encontrar un valor vlido se produce un error de tipo
java.lang.NumberFormatException.
La salida obtenida en este caso donde se produce error es:
Prueba a escribir dentro del bloque catch lo siguiente: System.out.println("Se ha producido un error "+ e );
Trata de interpretar lo que se visualiza en pantalla. Si tienes dudas consulta en los foros de
aprenderaprogramar.com.
Como podemos observar, ejecutamos las instrucciones del bloque try que no dan errores, pero cuando en
una instruccin se produce un error o excepcin inesperada se deja de ejecutar el cdigo del bloque try, y
pasamos a ejecutar el cdigo del bloque catch. Hay un salto o cambio en el flujo del programa.
Finalmente se ejecutan, en todo caso, las instrucciones del bloque finally como hemos comentado
anteriormente. El bloque finally no es obligatorio, es decir, puede existir un bloque try catch y no existir
bloque finally.
Estrategia de transaccin
La clave para la captacin de transacciones de Spring es la nocin de una estrategia de operacin. Una
estrategia
de
operacin
se
define
por
la
interfaz
de
Aislamiento: el grado de aislamiento de esta transaccin sobre otras transacciones. Por ejemplo, esta
transaccin puede verse comprometida por la escritura de otras transacciones?
Propagacin: en general, todo cdigo que se ejecuta dentro de un mbito de transaccin se ejecutar
en esa transaccin. Sin embargo, hay varias opciones que especifican el comportamiento si se ejecuta un
mtodo de transaccin cuando el contexto de la transaccin ya existe: por ejemplo, slo tiene que seguir
corriendo en la operacin existente (el caso ms comn), o la suspensin de la operacin existente y la creacin
de una nueva transaccin. Spring ofrece todas las opciones de transaccin de propagacin familiares de EJB
CMT.
Tiempo de espera: cunto tiempo tiene la transaccin para ejecutarse antes del tiempo de espera (y
automticamente se deshace de la infraestructura de transaccin subyacente).
Estado de slo lectura: una transaccin de lectura nica no puede modificar ningn dato. Las
transacciones de slo lectura pueden ser una optimizacin de utilidad en algunos casos (como cuando se utiliza
Hibernate).
La interfaz de TransactionStatus proporciona una forma sencilla para el cdigo de transaccin para controlar la
ejecucin de transacciones y estado de la transaccin de consulta. Los conceptos deben estar familiarizados, ya
que son comunes a todas las API de transacciones:
Prueba unitaria
En programacin, una prueba unitaria es una forma de comprobar el correcto
funcionamiento de un mdulo de cdigo. Esto sirve para asegurar que cada uno de los
mdulos funcione correctamente por separado. Luego, con las Pruebas de Integracin, se
podr asegurar el correcto funcionamiento del sistema o subsistema en cuestin.
La idea es escribir casos de prueba para cada funcin no trivial o mtodo en el mdulo, de
forma que cada caso sea independiente del resto.
Caractersticas
Para que una prueba unitaria tenga la calidad suficiente se deben cumplir los siguientes
requisitos:
Automatizable
No
debera
requerirse
una
intervencin
manual.
Esto
es
especialmente
til
Ventajas
El objetivo de las pruebas unitarias es aislar cada parte del programa y mostrar que las
partes individuales son correctas. Proporcionan un contrato escrito que el trozo de cdigo
debe satisfacer. Estas pruebas aisladas proporcionan cinco ventajas bsicas:
Fomentan el cambio
Las pruebas unitarias facilitan que el programador cambie el cdigo para mejorar su
estructura (lo que se ha dado en llamar refactorizacin), puesto que permiten hacer
pruebas sobre los cambios y as asegurarse de que los nuevos cambios no han
introducido errores.
Simplifica la integracin
Puesto que permiten llegar a la fase de integracin con un grado alto de seguridad de que
el cdigo est funcionando correctamente. De esta manera se facilitan laspruebas de
integracin.
Documenta el cdigo
Las propias pruebas son documentacin del cdigo puesto que ah se puede ver cmo
utilizarlo.
Separacin de la interfaz y la implementacin
Dado que la nica interaccin entre los casos de prueba y las unidades bajo prueba son
las interfaces de estas ltimas, se puede cambiar cualquiera de los dos sin afectar al otro,
a veces usando objetos mock (mock object) para simular el comportamiento de objetos
complejos.
Los errores estn ms acotados y son ms fciles de localizar
Dado que tenemos pruebas unitarias que pueden desenmascararlos.
Limitaciones
Es importante darse cuenta de que las pruebas unitarias no descubrirn todos los errores
del cdigo. Algunos enfoques se basan en la generacin aleatoria de objetos para
amplificar el alcance de las pruebas de unidad. 1 Esta tcnica se conoce como testing
aleatorio (RT, por random testing). Por definicin, slo prueban las unidades por s solas.
Por lo tanto, no descubrirn errores de integracin, problemas de rendimiento y otros
problemas que afectan a todo el sistema en su conjunto. Adems, puede no ser trivial
anticipar todos los casos especiales de entradas que puede recibir en realidad la unidad de
programa bajo estudio. Las pruebas unitarias slo son efectivas si se usan en conjunto con
otras pruebas de software.