Detección de errores Java con FindBugs

Os mostramos como instalar y utilizar FindBugs, una excelente herramienta para analizar, de un modo estático, posibles problemas en vuestro código Java

Determinación de errores con FindBugs

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.

Descarga

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";
       }
    } 

Correcció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 ….

Sobre el
Autor ..

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Profesor asociado en IE Business School, inversor en StartUps y mentor de emprendedores. Ingeniero Técnico de Telecomunicaciones y Executive MBA por IE Business School 2007. Twitter: Follow @rcanalesmora Autor de los Libros: Planifica tu éxito: de aprendiz a empresario, Informática profesional, las reglas no escritas para triunfar en la empresa, Conceptos ágiles aplicados a distintas áreas de una empresa y Conversaciones con CEOs y CIOs sobre Transformación Digital y Metodologías Ágiles. ¡Descárgalos gratis aquí! Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Tutoriales
La segmentación predictiva en tiempo real optimiza la publicidad digital con IA y datos masivos, mejorando conversión y eficiencia en la inversión publicitaria.
Tutoriales
Desarrollo de apps en Android Automotive OS: configuración, interacción con el Host, UI con Car App Library, navegación y pruebas en emulador
Tutoriales
Aprende a implementar un Outbox Transaccional con AsyncAPI, SpringModulith y ZenWaveSDK, garantizando la consistencia y externalización eficiente de eventos en arquitecturas distribuidas.