Una abstracción con fugas en el desarrollo de software se refiere a un defecto de diseño en el que una abstracción , destinada a simplificar y ocultar la complejidad subyacente de un sistema, no logra hacerlo por completo. Esto da como resultado que algunos de los detalles de implementación queden expuestos o se "filtren" a través de la abstracción, lo que obliga a los usuarios a tener conocimiento de estas complejidades subyacentes para usar o solucionar problemas del sistema de manera efectiva. [1]
El concepto fue popularizado por Joel Spolsky , quien acuñó el término Ley de Abstracciones con Fugas que establece: [2]
Todas las abstracciones no triviales, hasta cierto punto, tienen fugas.
Esto significa que incluso las abstracciones bien diseñadas pueden no ocultar por completo su funcionamiento interno y, a medida que los sistemas informáticos se vuelven más complejos, aumenta la probabilidad de que se produzcan dichas filtraciones. Estas filtraciones pueden provocar problemas de rendimiento, comportamientos inesperados y una mayor carga cognitiva para los desarrolladores de software , que se ven obligados a comprender tanto la abstracción como los detalles subyacentes que se suponía que debía ocultar. Esto pone de relieve una causa de los defectos del software: la confianza del desarrollador de software en la infalibilidad de una abstracción. A pesar de sus imperfecciones, las abstracciones son cruciales en el desarrollo de software para gestionar la complejidad, aunque no siempre sean perfectas.
El término "abstracción con fugas" fue popularizado en 2002 por Joel Spolsky . [2] [3] Un artículo de 1992 de Kiczales describe algunos de los problemas con las abstracciones imperfectas y presenta una posible solución al problema al permitir la personalización de la abstracción misma. [4]
A medida que los sistemas se vuelven más complejos, los desarrolladores de software deben recurrir a más abstracciones. Cada abstracción intenta ocultar la complejidad, lo que permite al desarrollador escribir software que "maneje" las muchas variaciones de la informática moderna.
Sin embargo, esta ley establece que los desarrolladores de software confiable deben de todas formas aprender los detalles subyacentes de la abstracción.
El artículo de Spolsky cita muchos ejemplos de abstracciones con fugas que crean problemas para el desarrollo de software:
<a>
) y el código para controlar los clics en un botón. Sin embargo, ASP.NET necesita ocultar el hecho de que en HTML no hay forma de enviar un formulario desde un hipervínculo. Lo hace generando unas pocas líneas de JavaScript y adjuntando un controlador onclick al hipervínculo. Sin embargo, si el usuario final tiene JavaScript deshabilitado, la aplicación ASP.NET funciona mal. Además, no se puede pensar ingenuamente en los controladores de eventos en ASP.NET de la misma manera que en un marco de interfaz gráfica de usuario de escritorio como Windows Forms ; debido a la naturaleza asincrónica de la Web, el procesamiento de controladores de eventos en ASP.NET requiere intercambiar datos con el servidor y volver a cargar el formulario.En 2020, Anish, Jose y Jon, profesores de informática del Instituto Tecnológico de Massachusetts, argumentaron que la interfaz de línea de comandos para Git es una abstracción permeable, en la que es necesario comprender el "hermoso diseño" subyacente del modelo de datos de Git para un uso eficaz de Git. [5]