Vés al contingut

Reutilització de codi

De la Viquipèdia, l'enciclopèdia lliure

La reutilització de codi és la pràctica d'utilitzar codi font existent per desenvolupar programari en lloc d'escriure codi nou. La reutilització de programari és un terme més ampli que implica utilitzar qualsevol actiu de programari existent per desenvolupar programari en lloc de desenvolupar-lo de nou.:[1][2] 7 Un actiu que és relativament fàcil de reutilitzar i ofereix un valor significatiu es considera que té una alta reutilització.

La reutilització de codi es pot aconseguir de diferents maneres segons la complexitat del llenguatge de programació escollit i va des d'enfocaments de nivell inferior com ara copiar i enganxar codi (per exemple, mitjançant fragments de codi),[3] funcions simples (procediments o subrutines) o un conjunt d'objectes o funcions organitzats en mòduls (per exemple, biblioteques)[4] o espais de noms personalitzats, i paquets, frameworks o suites de programari en nivells superiors.

La reutilització de codi implica dependències que poden dificultar el manteniment del codi. Almenys un estudi va trobar que la reutilització de codi a nivell de classe redueix el deute tècnic.[5]

Visió general

[modifica]

La reutilització de codi ad hoc s'ha practicat des dels primers dies de la programació. Els programadors sempre han reutilitzat seccions de codi, plantilles, funcions i procediments. La reutilització de programari com a àrea d'estudi reconeguda en enginyeria de programari, però, data només del 1968, quan Douglas McIlroy de Bell Laboratories va proposar basar la indústria del programari en components reutilitzables.

La reutilització de codi té com a objectiu estalviar temps i recursos i reduir la redundància aprofitant els actius que ja s'han creat d'alguna manera dins del procés de desenvolupament de productes de programari.[6] La idea clau de la reutilització és que les parts d'un programa informàtic escrites alhora poden o s'han d'utilitzar en la construcció d'altres programes escrits posteriorment.

La reutilització de codi pot implicar la creació d'una versió mantinguda per separat dels actius reutilitzables. Tot i que el codi és el recurs més comú seleccionat per a la reutilització, altres actius generats durant el cicle de desenvolupament poden oferir oportunitats de reutilització: components de programari, conjunts de proves, dissenys, documentació, etc.[7]

La biblioteca de programari és un bon exemple de reutilització de codi. Els programadors poden decidir crear abstraccions internes perquè certes parts del seu programa es puguin reutilitzar, o poden crear biblioteques personalitzades per al seu propi ús. Algunes característiques que fan que el programari sigui més fàcilment reutilitzable són la modularitat, l'acoblament fluix, l'alta cohesió, l'ocultació d'informació i la separació de funcions.

Perquè el codi recentment escrit utilitzi un fragment de codi existent, cal definir algun tipus d' interfície o mitjà de comunicació. Aquests inclouen normalment una "crida" o l'ús d'una subrutina, objecte, classe o prototip. En les organitzacions, aquestes pràctiques es formalitzen i estandarditzen mitjançant l'enginyeria de domini, també coneguda com a enginyeria de línia de productes de programari.

La pràctica general d'utilitzar una versió anterior d'un programa existent com a punt de partida per a la següent versió també és una forma de reutilització de codi.

Alguns dels anomenats "reutilització" de codi impliquen simplement copiar una part o la totalitat del codi d'un programa existent a un de nou. Si bé les organitzacions poden obtenir beneficis en el temps de comercialització d'un producte nou amb aquest enfocament, posteriorment poden tenir molts dels mateixos problemes de duplicació de codi causats per la programació de tallar i enganxar.

Molts investigadors han treballat per fer que la reutilització sigui més ràpida, fàcil, sistemàtica i una part integral del procés normal de programació. Aquests són alguns dels principals objectius darrere de la invenció de la programació orientada a objectes, que es va convertir en una de les formes més comunes de reutilització formalitzada. Una invenció una mica posterior és la programació genèrica.

Un altre mitjà més nou és utilitzar "generadors" de programari, programes que poden crear nous programes d'un cert tipus, basats en un conjunt de paràmetres que trien els usuaris. Els camps d'estudi sobre aquests sistemes són la programació generativa i la metaprogramació.

Tipus de reutilització

[modifica]

Pel que fa a la motivació i els factors impulsors, la reutilització pot ser:

  • Oportunista: mentre es prepara per començar un projecte, l'equip s'adona que hi ha components existents que poden reutilitzar.
  • Planificat: un equip dissenya estratègicament els components perquè puguin ser reutilitzats en projectes futurs.

La reutilització es pot classificar encara més:

  • Reutilització interna: un equip reutilitza els seus propis components. Això pot ser una decisió empresarial, ja que l'equip pot voler controlar un component crític per al projecte.
  • Reutilització externa: un equip pot optar per llicenciar un component de tercers. Llicenciar un component de tercers normalment costa a l'equip entre l'1 i el 20 per cent del que costaria desenvolupar-lo internament.[8] L'equip també ha de tenir en compte el temps que es triga a trobar, aprendre i integrar el component.

Pel que fa a la forma o estructura de reutilització, el codi pot ser:[9]

  • Referenciat: el codi del client conté una referència a codi reutilitzat i, per tant, tenen cicles de vida diferents i poden tenir versions diferents.
  • Bifurcat: el codi del client conté una còpia local o privada del codi reutilitzat i, per tant, comparteixen un únic cicle de vida i una única versió.

Sovint es desaconsella la reutilització de forks perquè és una forma de duplicació de codi, que requereix que cada error es corregeixi a cada còpia, i les millores fetes al codi reutilitzat s'han de fusionar manualment a cada còpia o queden obsoletes. Tanmateix, la reutilització de forks pot tenir beneficis com ara l'aïllament, la flexibilitat per canviar el codi reutilitzat, un empaquetament, un desplegament i una gestió de versions més fàcils.[10]

Exemples

[modifica]

Biblioteques de programari

[modifica]

Un exemple molt comú de reutilització de codi és la tècnica d'utilitzar una biblioteca de programari. Moltes operacions comunes, com ara convertir informació entre diferents formats coneguts, accedir a emmagatzematge extern, interactuar amb programes externs o manipular informació (nombres, paraules, noms, ubicacions, dates, etc.) de maneres comunes, són necessàries per a molts programes diferents. Els autors de nous programes poden utilitzar el codi d'una biblioteca de programari per realitzar aquestes tasques, en lloc de "reinventar la roda", escrivint codi completament nou directament en un programa per realitzar una operació. Les implementacions de biblioteques sovint tenen l'avantatge d'estar ben provades i cobrir casos inusuals o arcaics. Els desavantatges inclouen la incapacitat de modificar detalls que poden afectar el rendiment o el resultat desitjat, i el temps i el cost d'adquirir, aprendre i configurar la biblioteca.[11]

Patrons de disseny

[modifica]

Un patró de disseny és una solució general a un problema recurrent. Els patrons de disseny són més conceptuals que tangibles i es poden modificar per adaptar-se a la necessitat exacta. Tanmateix, les classes i les interfícies abstractes es poden reutilitzar per implementar certs patrons.

Marcs

[modifica]

Els desenvolupadors generalment reutilitzen grans peces de programari a través d'aplicacions i frameworks de tercers, tot i que els frameworks solen ser específics del domini i aplicables només a famílies d'aplicacions.

Funció d'ordre superior

[modifica]

En la programació funcional, les funcions d'ordre superior es poden utilitzar en molts casos on abans s'utilitzaven patrons de disseny o marcs de treball.

Referències

[modifica]
  1. Frakes, W.B.; Kyo Kang IEEE Transactions on Software Engineering, 31, 7, 7-2005, pàg. 529–536. DOI: 10.1109/TSE.2005.85.
  2. Reddy, Martin. API design for C++ (en anglès). Boston: Morgan Kaufmann, 2011. ISBN 978-0-12-385004-1. OCLC 704559821. 
  3. Selaolo, Karabo; Hlomani, Hlomani Advances in Computer Science, 5, 2016, pàg. 63.
  4. «4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]» (en anglès). www.oreilly.com. [Consulta: 26 gener 2022].
  5. Feitosa, Daniel; Ampatzoglou, Apostolos; Gkortzis, Antonios; Bibi, Stamatia; Chatzigeorgiou, Alexander (en anglès) Journal of Systems and Software, 167, 9-2020. DOI: 10.1016/j.jss.2020.110618.
  6. Lombard Hill Group. «What Is Software Reuse?» (en anglès). lombardhill.com. Lombard Hill Group. Arxivat de l'original el 23 January 2019. [Consulta: 22 octubre 2014].
  7. Lombard Hill Group. «What Is Software Reuse?» (en anglès). Arxivat de l'original el 23 January 2019. [Consulta: 22 octubre 2014].
  8. McConnell, Steve. Rapid Development: Taming Wild Software Schedules. Pearson Education, 1996. ISBN 978-1-55615-900-8. 
  9. Colombo, F. «It's not just reuse» (en anglès). SharedNow.blogspot.
  10. Colombo, F. «It's not just reuse» (en anglès). SharedNow.blogspot.
  11. «Code reuse» (en anglès). DocForge. Arxivat de l'original el 2011-07-10. [Consulta: Plantilla:TODAY].