En computación, el antipatrón de diseño lava flow o lava seca ocurre cuando un software es entregado antes de ser completado o antes de ser completamente probado y al ser expuesto, ya no es posible cambiar sus características, como cuando un flujo de lava se seca por fuera.

El antipatrón flujo de lava se encuentra comúnmente en los sistemas que inicialmente tenían como fin la investigación, pero que se acabaron produciendo. Se caracteriza por los trozos de código (flujos de lava) de versiones anteriores que quedaron esparcidas por el código de la aplicación, y ahora, se encuentran inamovibles (flujo de lava seco y endurecido) ya que nadie recuerda muy bien para que sirven o si se utilizan en el código.

Este es el resultado de un desarrollo previo en el que durante la fase de investigación, los desarrolladores probaron varias formas de resolver un problema, por lo general, en algún tipo de “carrera” para emitir algún tipo de demostración, provocando esto que creasen un código mal estructurado ( en forma de Código spaghetti) y mal documentado.

/**
 * 
 * @author Empresa Ficticia
 *
 */
public class Antigua {
	
	/**
	 * Cuando me encontré este método no tenía javadoc.
	 * Creo que lo hizo Pedro, pero no estoy muy seguro, además ya no está en la empresa.
	 * No se muy bien si lo estamos utilizando, pero parece ser un método importante ya que tiene muchas
	 * líneas de código así que es mejor que nadie lo toque.
	 * El nombre tampoco ayuda a entenderlo
	 */
	public void hacerAlgo(){
		// Infinitas líneas de código
		// ....
		// ....
		// ....
		// ....
		
		
		// ....
		// FIN
	}

}

El resultado del Flujo de Lava es muchos fragmentos de código, clases inexplicables y procedimientos que no están relacionados con el resto del programa. De hecho, muchos de esos trozos tienen una apariencia tan complicada que hace que parezcan importantes.

Estos códigos no suelen ser analizados debido al gran coste que tiene su análisis y verificación. Realmente en la práctica la verificación y la prueba rara vez son posibles.

Síntomas editar

  • Frecuentes variables y fragmentos de código injustificados.
  • Funciones indocumentadas
  • Trozos de código o clases que no se sabe de forma clara que hacen.
  • Grandes bloques de código sin explicación ni documentación.
  • Muchas partes del código con la etiqueta “se debe remplazar”.
  • Interfaces obsoletos, sin uso o inexplicables puestos en archivos de cabecera.

Consecuencias editar

  • El sistema deja de tener un diseño orientado a objetos, lo que implica poder perder alguna de las propiedades que ellos conllevan. En este caso se pierde la modularidad siendo un grave inconveniente para la reutilización. Además puede promover la aparición de otros Lava Flow.
  • A medida que este tipo de código aumenta en un sistema, este se hace mucho más difícil de documentar o de entender su funcionamiento para hacer mejoras.
  • Alto coste para cargar en la memoria, por lo que puedes tener una pérdida importante de recursos lo que nos lleva a un deterioro del rendimiento.

Causas Típicas editar

  • Un código puesto en producción con prisas sin que pudiera ser verificado ni documentado.
  • Único (y poco amigable) desarrollador.
  • Implementación de muchos métodos de prueba para añadir una funcionalidad al sistema.
  • Incumplimiento de las políticas de la empresa en cuanto a estilo y documentación del código.
  • Poca continuidad en los equipos de desarrollo.
  • Procesos de desarrollo altamente repetitivos.
  • Constante corrección de las funcionalidades del sistema.

Solución editar

Una manera de evitar el lava Flow es seguir un desarrollo estructurado y documentado.

Cuando el código está en continuo cambio es necesario quitar las partes desactualizadas para evitar código muerto.

Una vez aparece este antipatrón, la solución es realmente costosa ya que es difícil saber cuales son los componentes que se utilizan en un código que apenas conoces.

Excepción editar

No siempre es un mal desarrollo seguir una estructura poco documentada y no pensada para la gestión. En pequeña escala suele utilizarse este tipo de mecanismo para el desarrollo y la investigación ya que permite ir de una manera más rápida.

Enlaces externos editar