stringtranslate.com

Reutilización de código

En el desarrollo de software (y en la programación informática en general), la reutilización de código , también llamada reutilización de software , es el uso de software existente , o conocimiento de software, para construir nuevo software, [1] [2] : 7  siguiendo los principios de reutilización .

La reutilización de código se puede lograr de diferentes maneras dependiendo de la complejidad del lenguaje de programación elegido y varía desde enfoques de nivel inferior como copiar y pegar código (por ejemplo, a través de fragmentos ), [3] funciones simples ( procedimientos o subrutinas ) o un grupo de objetos o funciones organizados en módulos (por ejemplo, bibliotecas ) [4] [2] : 7  o espacios de nombres personalizados , y paquetes , marcos o suites de software en niveles superiores.

La reutilización de código implica dependencias que pueden dificultar el mantenimiento del código . [ cita requerida ] Al menos un estudio encontró que la reutilización de código reduce la deuda técnica . [5]

Descripción general

La reutilización de código ad hoc se ha practicado desde los primeros días de la programación . Los programadores siempre han reutilizado secciones de código, plantillas, funciones y procedimientos. Sin embargo, la reutilización de software como un área de estudio reconocida en ingeniería de software data de 1968, cuando Douglas McIlroy de Bell Laboratories propuso basar la industria del software en componentes reutilizables.

La reutilización de código tiene como objetivo ahorrar tiempo y recursos y reducir la redundancia aprovechando los activos que ya se han creado de alguna forma dentro del proceso de desarrollo del producto de software. [6] La idea clave de la reutilización es que partes de un programa informático escrito en un momento dado pueden o deben usarse en la construcción de otros programas escritos en un momento posterior.

La reutilización de código puede implicar la creación de una versión mantenida por separado de los activos reutilizables. Si bien el código es el recurso más común seleccionado para la reutilización, otros activos generados durante el ciclo de desarrollo pueden ofrecer oportunidades de reutilización: componentes de software, suites de pruebas, diseños, documentación, etc. [7]

La biblioteca de software es un buen ejemplo de reutilización de código. Los programadores pueden decidir crear abstracciones internas para que se puedan reutilizar ciertas partes de su programa, o pueden crear bibliotecas personalizadas para su propio uso. Algunas características que hacen que el software sea más fácilmente reutilizable son la modularidad , el acoplamiento flexible , la alta cohesión , el ocultamiento de información y la separación de intereses .

Para que un código recién escrito utilice un fragmento de código existente, se debe definir algún tipo de interfaz o medio de comunicación. Estos suelen incluir una "llamada" o el uso de una subrutina , un objeto , una clase o un prototipo . En las organizaciones, estas prácticas se formalizan y estandarizan mediante la ingeniería de dominio , también conocida como ingeniería de línea de productos de software .

La práctica general de utilizar una versión anterior de un programa existente como punto de partida para la próxima versión también es una forma de reutilización de código.

Algunas de las denominadas "reutilizaciones" de código implican simplemente copiar parte o la totalidad del código de un programa existente en uno nuevo. Si bien las organizaciones pueden obtener beneficios en cuanto al tiempo de comercialización de un nuevo producto con este enfoque, pueden verse posteriormente afectadas por muchos de los mismos problemas de duplicación de código que causa la programación de copiar y pegar .

Muchos investigadores han trabajado para hacer que la reutilización sea más rápida, más sencilla, más sistemática y una parte integral del proceso normal de programación. Estos son algunos de los principales objetivos detrás de la invención de la programación orientada a objetos , que se convirtió en una de las formas más comunes de reutilización formalizada. Una invención algo posterior es la programación genérica .

Otro método más novedoso es el uso de " generadores " de software, programas que pueden crear nuevos programas de un tipo determinado, basándose en un conjunto de parámetros que el usuario elija. Los campos de estudio de estos sistemas son la programación generativa y la metaprogramación .

Tipos de reutilización

En cuanto a la motivación y los factores impulsores, la reutilización puede ser:

La reutilización se puede clasificar además:

En cuanto a la forma o estructura de la reutilización, el código puede ser: [9]

La reutilización de bifurcaciones suele desaconsejarse porque es una forma de duplicación de código, que requiere que cada error se corrija en cada copia y las mejoras realizadas al código reutilizado deben fusionarse manualmente en cada copia o se vuelven obsoletas. Sin embargo, la reutilización de bifurcaciones puede tener beneficios como el aislamiento, la flexibilidad para cambiar el código reutilizado, un empaquetado, una implementación y una gestión de versiones más sencillos. [9]

Sistemático

La reutilización sistemática de software es una estrategia para aumentar la productividad y mejorar la calidad de la industria del software. Aunque su concepto es simple, en la práctica es difícil implementarla con éxito. Una razón que se esgrime para ello es que la reutilización de software depende del contexto en el que se implementa. Algunos problemas que deben abordarse en relación con la reutilización sistemática de software son: [10]

Ejemplos

Bibliotecas de software

Un ejemplo muy común de reutilización de código es la técnica de utilizar una biblioteca de software . Muchas operaciones comunes, como convertir información entre diferentes formatos conocidos, acceder a almacenamiento externo, interactuar con programas externos o manipular información (números, palabras, nombres, ubicaciones, fechas, etc.) de formas comunes, son necesarias para muchos programas diferentes. Los autores de nuevos programas pueden utilizar el código de una biblioteca de software para realizar estas tareas, en lugar de "reinventar la rueda", escribiendo código completamente nuevo directamente en un programa para realizar una operación. Las implementaciones de bibliotecas a menudo tienen la ventaja de estar bien probadas y cubrir casos inusuales o arcanos. Las desventajas incluyen la incapacidad de ajustar detalles que pueden afectar el rendimiento o el resultado deseado, y el tiempo y el costo de adquirir, aprender y configurar la biblioteca. [11]

Patrones de diseño

Un patrón de diseño es una solución general a un problema recurrente. Los patrones de diseño son más conceptuales que tangibles y pueden modificarse para adaptarse a una necesidad específica. Sin embargo, las clases abstractas y las interfaces pueden reutilizarse para implementar determinados patrones.

Marcos

Los desarrolladores generalmente reutilizan grandes piezas de software a través de aplicaciones y marcos de terceros, aunque los marcos suelen ser específicos del dominio y aplicables solo a familias de aplicaciones [ cita requerida ] .

Función de orden superior

En la programación funcional, se pueden utilizar funciones de orden superior en muchos casos en los que antes se utilizaban patrones o marcos de diseño.

Retrocomputación

La retrocomputación abarca la reutilización de código, simplemente porque los programas retro se ejecutan en computadoras más antiguas o en emuladores de ellas.

Seguridad informática

En seguridad informática, la reutilización de código se emplea como método de explotación de software. [12] Cuando un atacante no puede ingresar código directamente para modificar el flujo de control de un programa, por ejemplo en presencia de defensas de inyección de código como W^X , puede redirigir el flujo de control a secuencias de código existentes en la memoria.

Algunos ejemplos de ataques de reutilización de código son el ataque de retorno a libc , la programación orientada al retorno y la programación orientada al salto. [12] [13]

Componentes

Un componente, en una medida orientada a objetos, representa un conjunto de clases colaborativas (o solo una clase) y sus interfaces. Las interfaces son responsables de permitir el reemplazo de componentes. Los componentes reutilizables también se pueden aislar y sincronizar entre repositorios SCM utilizando tecnologías de administración de código fuente de componentes (CSCM). [ cita requerida ]

Computadoras externas

El concepto de "reutilización de código" también puede abarcar aplicaciones de ingeniería fuera del software. Por ejemplo, el modelado paramétrico en el diseño asistido por computadora permite crear diseños reutilizables. La estandarización da como resultado la creación de piezas interoperables que luego pueden reutilizarse en muchos contextos. [ cita requerida ]

Crítica

La reutilización de código genera dependencia del componente que se reutiliza. Rob Pike opinó que "un poco de copia es mejor que un poco de dependencia". Cuando se unió a Google , la empresa estaba poniendo mucho énfasis en la reutilización de código. Cree que la base de código de Google aún sufre los resultados de esa política anterior en términos de velocidad de compilación y facilidad de mantenimiento. [14]

El código reutilizable requiere generalmente un mayor esfuerzo de escritura y diseño. Fred Brooks analiza el costo significativamente más alto asociado con ese esfuerzo en sus ensayos "The Tar Pit" y " No Silver Bullet ". La falacia es que el esfuerzo se suele dedicar sin una comprensión cuidadosa de los mecanismos a través de los cuales se recuperará ese costo. La justificación a menudo proviene de establecer paralelos incorrectos con las piezas reutilizables en un proceso de fabricación física. Incorrecto porque escribir código es análogo al diseño de un solo producto en lugar de la producción de múltiples unidades.

Véase también

Referencias

  1. ^ Frakes, WB; Kyo Kang (julio de 2005). "Investigación sobre reutilización de software: situación y futuro". IEEE Transactions on Software Engineering . 31 (7): 529–536. CiteSeerX  10.1.1.75.635 . doi :10.1109/TSE.2005.85. S2CID  14561810.
  2. ^ ab Reddy, Martin (2011). Diseño de API para C++. Boston: Morgan Kaufmann. ISBN 978-0-12-385004-1.OCLC 704559821  .
  3. ^ Selaolo, Karabo; Hlomani, Hlomani (2016). "Hacia un clúster de ontología de algoritmos: para la reutilización de código modular y la programación políglota". Avances en Ciencias de la Computación . 5 : 63 – vía Researchgate.
  4. ^ "4. Reutilización de código: funciones y módulos - Head First Python, 2.ª edición [Libro]". www.oreilly.com . Consultado el 26 de enero de 2022 .
  5. ^ Feitosa, Daniel; Ampatzoglou, Apostolos; Gkortzis, Antonios; Bibi, Stamatia; Chatzigeorgiou, Alexander (septiembre de 2020). "Reutilización de código en la práctica: beneficios o perjuicios de la deuda técnica" (PDF) . Journal of Systems and Software . 167 : 110618. doi :10.1016/j.jss.2020.110618. S2CID  219502749.
  6. ^ Lombard Hill Group. "¿Qué es la reutilización de software?". lombardhill.com . Lombard Hill Group. Archivado desde el original el 23 de enero de 2019 . Consultado el 22 de octubre de 2014 .
  7. ^ Lombard Hill Group. «¿Qué es la reutilización de software?». Archivado desde el original el 23 de enero de 2019. Consultado el 22 de octubre de 2014 .
  8. ^ McConnell, Steve (1996). Desarrollo rápido: cómo dominar los cronogramas de software salvajes . Pearson Education. ISBN 978-1-55615-900-8.
  9. ^ ab Colombo, F. (2011). "No es sólo reutilización". SharedNow.blogspot .
  10. ^ Champman, M.; Van der Merwe, Alta (2008). "Contemplando la reutilización sistemática de software en una pequeña empresa centrada en proyectos" . Actas SAICSIT '08 Actas de la conferencia anual de investigación de 2008 del Instituto Sudafricano de Científicos Informáticos y Tecnólogos de la Información sobre investigación en TI en países en desarrollo: aprovechando la ola de la tecnología . doi :10.1145/1456659.1456662. ISBN 978-1-60558-286-3.
  11. ^ "Reutilización de código". DocForge . Archivado desde el original el 10 de julio de 2011 . Consultado el 5 de septiembre de 2024 .
  12. ^ ab Bletsch, Tyler (2011). Ataques de reutilización de código: nuevas fronteras y defensas. Universidad Estatal de Carolina del Norte. ISBN 978-1-124-75297-6.
  13. ^ Bletsch, Tyler; Jiang, Xuxian; Freeh, Vince W; Liang, Zhenkai (2011). "Programación orientada a saltos: una nueva clase de ataque de reutilización de código" (PDF) . Actas del 6.º Simposio de la ACM sobre seguridad de la información, las computadoras y las comunicaciones . ACM. págs. 30-40. doi :10.1145/1966913.1966919. ISBN. 978-1-4503-0564-8Archivado desde el original (PDF) el 7 de agosto de 2017. Consultado el 7 de agosto de 2017 .
  14. ^ El lenguaje de programación Go (1 de diciembre de 2015), Go Proverbs – Rob Pike – Gopherfest – 18 de noviembre de 2015, archivado del original el 22 de diciembre de 2021 , consultado el 26 de febrero de 2016

Enlaces externos