Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

Ancla de barco.

Un ancla de barco es código o hardware que se conserva en un sistema aunque ya no sirve para nada; confunde a quien lo mantiene y alarga la compilación.

En ingeniería de software, un ancla de barco (en inglés, boat anchor) es un fragmento de código —o, con menos frecuencia, un equipo— que se mantiene en un sistema aunque ya no cumple ninguna función. El nombre es una metáfora de algo obsoleto, inútil y aparatoso, cuyo único uso productivo sería arrojarlo al agua como amarre de un barco. El término se aplicó primero a equipos de radio e informáticos antiguos y pesados; términos como ladrillo, tope de puerta y pisapapeles son similares.

En el software

El término ancla de barco se ha extendido al código de software que se deja en la base de código de un sistema, normalmente por si se necesita más adelante. Esto es un ejemplo de antipatrón y, por tanto, puede causar muchos problemas a las personas que intentan mantener el programa que contiene el código obsoleto. El problema clave surge del hecho de que a los programadores les costará distinguir entre el código obsoleto, que no hace nada, y el código operativo, que sí lo hace.

Por ejemplo, un programador podría estar investigando un error en el sistema de gestión de entradas del programa, así que rastrea el código en busca del que se conecta con la API de gestión de entradas. Obviamente, si el programador se topa con código obsoleto de gestión de entradas, bien podría empezar a editarlo y depurarlo, malgastando un tiempo valioso antes de darse cuenta de que el código con el que está trabajando nunca se ejecuta y, por tanto, no forma parte del problema que está intentando resolver. Otros problemas incluyen tiempos de compilación más largos y el riesgo de que los programadores enlacen accidentalmente código operativo con el código en desuso, resucitándolo sin querer.

Una solución recomendada para tratar las anclas de barco en el código fuente es eliminarlas de la base de código y colocarlas en una ubicación separada para que puedan consultarse si es necesario, pero no se compilen ni se confundan con código «operativo». (Por ejemplo, borrarlas, sabiendo que quedan almacenadas en el control de versiones del proyecto).

Ejemplo

El envío por fax se desactivó hace años, pero el campo con la pasarela y el método que la usaba siguen en la clase. Cada lector tiene que averiguar que sendByFax nunca se llama, y la clase sigue arrastrando la dependencia de LegacyFaxGateway.

class InvoiceService {
    // el envío por fax se desactivó en 2019
    private final LegacyFaxGateway faxGateway = new LegacyFaxGateway();

    String send(Invoice invoice) {
        return EmailSender.send(invoice);
    }

    // se conserva «por si acaso»; nadie lo llama
    String sendByFax(Invoice invoice) {
        return faxGateway.transmit(invoice.toFaxPage());
    }
}

El código sin uso se elimina en lugar de comentarlo; si alguna vez vuelve a necesitarse, puede recuperarse del control de versiones (véase también Código muerto).

class InvoiceService {
    String send(Invoice invoice) {
        return EmailSender.send(invoice);
    }
}

Adaptado del artículo de Wikipedia “Boat anchor (metaphor)” (revisión 1258854358), disponible bajo la licencia CC BY-SA 4.0; el texto ha sido traducido y editado, y se han añadido ejemplos.