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 software nuevo, [1] [2] :7  siguiendo los principios de reutilización .

La reutilización del código se puede lograr de diferentes maneras dependiendo de la complejidad del lenguaje de programación elegido y abarca desde enfoques de nivel inferior como copiar y pegar código (por ejemplo, mediante fragmentos ), [3] funciones simples ( procedimientos o subrutinas ) o un montón 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 área de estudio reconocida en la ingeniería de software data sólo 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 de productos de software. [6] La idea clave en la reutilización es que partes de un programa de computadora escrito en un momento pueden o deben usarse en la construcción de otros programas escritos en un momento posterior.

La reutilización del 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 su reutilización, otros activos generados durante el ciclo de desarrollo pueden ofrecer oportunidades de reutilización: componentes de software, conjuntos 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 ciertas partes de su programa puedan reutilizarse, 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 , la ocultación de información y la separación de preocupaciones .

Para que el 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 comúnmente incluyen una "llamada" o el uso de una subrutina , objeto , clase o prototipo . En las organizaciones, estas prácticas están formalizadas y estandarizadas 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 siguiente versión también es una forma de reutilización de código.

La llamada "reutilización" de código implica simplemente copiar parte o la totalidad del código de un programa existente a uno nuevo. Si bien las organizaciones pueden obtener beneficios en el tiempo de comercialización de un nuevo producto con este enfoque, posteriormente pueden enfrentarse a muchos de los mismos problemas de duplicación de código causados ​​por la programación de cortar y pegar .

Muchos investigadores han trabajado para hacer que la reutilización sea más rápida, más fácil, 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 medio más nuevo es utilizar " generadores " de software, programas que pueden crear nuevos programas de un determinado tipo, basándose en un conjunto de parámetros que eligen los usuarios. Los campos de estudio sobre dichos 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 aún más:

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

A menudo se desaconseja la reutilización de bifurcaciones 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 quedan obsoletas. Sin embargo, la reutilización de la bifurcación puede tener beneficios como aislamiento, flexibilidad para cambiar el código reutilizado, empaquetado, implementación y 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 es simple en concepto, la implementación exitosa de la reutilización de software es difícil en la práctica. Una razón esgrimida para esto es la dependencia de la reutilización del software del contexto en el que se implementa. Algunas cuestiones problemáticas 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 maneras comunes, son necesarias para muchos procesos diferentes. programas. 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 biblioteca a menudo tienen la ventaja de estar bien probadas y cubrir casos inusuales o arcanos. Las desventajas incluyen la incapacidad de modificar detalles que pueden afectar el rendimiento o el resultado deseado, y el tiempo y 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 la necesidad exacta. Sin embargo, las clases e interfaces abstractas se pueden reutilizar para implementar ciertos patrones.

Marcos

Los desarrolladores generalmente reutilizan grandes piezas de software a través de aplicaciones y marcos de terceros. Aunque los marcos suelen ser de dominio específico y aplicables sólo a familias de aplicaciones [ cita requerida ] .

Función de orden superior

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

Retrocomputación

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

La seguridad informática

En seguridad informática, la reutilización de códigos 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. .

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 a saltos. [12] [13]

Componentes

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

Computadoras exteriores

Todo 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 necesaria ]

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 ponía gran énfasis en la reutilización de código. Él cree que el código base de Google todavía sufre los resultados de esa política anterior en términos de velocidad de compilación y mantenibilidad. [14]

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

Ver también

Referencias

  1. ^ Fracas, WB; Kyo Kang (julio de 2005). "Investigación sobre reutilización de software: estado y futuro". Transacciones IEEE sobre ingeniería de software . 31 (7): 529–536. CiteSeerX  10.1.1.75.635 . doi :10.1109/TSE.2005.85. S2CID  14561810.
  2. ^ ab Reddy, Martín (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 grupo de ontologías 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, segunda edición [libro]". www.oreilly.com . Consultado el 26 de enero de 2022 .
  5. ^ Feitosa, Daniel; Ampatzoglou, Apostolos; Gkortzis, Antonios; Bibi, Estamatia; Chatzigeorgiou, Alexander (septiembre de 2020). "Reutilización de CÓDIGOS en la práctica: beneficiar o perjudicar la deuda técnica" (PDF) . Revista de Sistemas y Software . 167 : 110618. doi : 10.1016/j.jss.2020.110618. S2CID  219502749.
  6. ^ Grupo Lombard Hill. "¿Qué es la reutilización de software?". lombardhill.com . Grupo Lombard Hill. Archivado desde el original el 23 de enero de 2019 . Consultado el 22 de octubre de 2014 .
  7. ^ Grupo Lombard Hill. "¿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: domesticar programas de software salvajes ". Educación Pearson. ISBN 978-1-55615-900-8.
  9. ^ ab Colombo, F. (2011). "No se trata sólo de reutilizar". SharedNow.blogspot .
  10. ^ Champman, M.; Van der Merwe, Alta (2008). "Contemplación de 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 la investigación de TI en los 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 8 de febrero 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 VI Simposio 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-8. Archivado desde el original (PDF) el 7 de agosto de 2017 . Consultado el 7 de agosto de 2017 .
  14. ^ The Go Programming Language (1 de diciembre de 2015), Go Proverbs – Rob Pike – Gopherfest – 18 de noviembre de 2015, archivado desde el original el 22 de diciembre de 2021 , consultado el 26 de febrero de 2016

enlaces externos