A la hora de desarrollar aplicaciones Java es interesante disponer de un conjunto de herramientas para ayudarnos a no cometer equivocaciones básicas.
He probado la herramienta FindBugs y me he quedado impresionado por su sencillez y aparente potencia.
Vamos a ver, sobre uno de los códigos de uno de nuestros recientes tutoriales, cómo nos puede ayudar a anticipar errores.
Podemos ir al Web del producto y conseguir el zip con los binarios http://findbugs.sourceforge.net/
Arrancamos el producto
Una vez descomprimido, solo tenemos que arrancar el fichero por lotes (en entorno Windows)
Configuramos el proyecto
Pulsado el botón, encontramos el resumen y lo dice todo:
Vemos la porción de código que se ve afectada
Identificación del error
La descripción del error es bastante buena, incluida la proposición del arreglo. Básicamente nos esta comentando que tenemos un bloque de código que, en caso de producirse una excepción dejaría un Stream abierto y nos propone que incluyamos un bloque finally, para evitarlo.
Vemos el detalle del código afectado:
// esta función recupera el texto de la página String recuperaContenido(HttpURLConnection enlace) { try { String respuesta = ""; BufferedReader in = new BufferedReader (new InputStreamReader(enlace.getInputStream())); String cadena = ""; while (cadena != null) { cadena = in.readLine(); if (cadena != null) { respuesta+=("n" + cadena); } } return respuesta; } catch(Exception e) { return "Error " + e.getMessage() + "n"; } } |
Podemos codificar el cambio propuesto y comprobar que se soluciona el problema…
// esta función recupera el texto de la página String recuperaContenido(HttpURLConnection enlace) { BufferedReader in = null; try { String respuesta = ""; in = new BufferedReader (new InputStreamReader(enlace.getInputStream())); String cadena = ""; while (cadena != null) { cadena = in.readLine(); if (cadena != null) { respuesta+=("n" + cadena); } } return respuesta; } catch(Exception e) { return "Error " + e.getMessage() + "n"; } finally { if(in != null) { try { in.close(); } catch (Exception ignorada) {} } } } |
Conclusiones
Los jefes de proyecto tenemos habitualmente un problema crítico y consiste en que las posibles variables que nos pueden dar juego, las tenemos ya definidas:
- Duración: Ya se ha negociado la fecha limite
- Alcance: Se han negociado los requisitos
- Coste: El presupuesto esta acotado
- Calidad: La calidad la define la metodología (en el mejor de los casos)
Entonces, bajo esta coyuntura, solo podemos jugar con la productividad:
- Sistematización: Disponer de plantillas y procedimientos que nos guíen en los procesos (valoración rápida, análisis, diseño, construcción, etc.)
- Reutilización: No reinventar la rueda y reaprovechar lo ya construido.
- Automatización: Capacidad de evitar labores mecánicas (pruebas, documentación, compilación, empaquetamiento, etc.)
- Anticipación de errores: Utilización de herramientas que nos ayuden a analizar nuestro código sin ejecutar las pruebas
Esta herramienta, FindBugs, puede ayudarnos parcialmente a mejorar nuestro trabajo aunque debemos combinarla con otras y buenas prácticas y plantillas.
El día a día probablemente nos impida elevarnos al problema y optimizar nuestra productividad. Es posible que necesitemos gente no contaminada de nuestra realidad para ayudarnos a mejorar….. Para eso es posible que me podáis contratar ….
Roberto Canales Mora
www.adictosaltrabajo.com