Estimering av kostnader og fordeler ved programvaregjenbruk er en utfordrende, men essensiell prosess for å avgjøre om det er økonomisk fordelaktig å bruke eksisterende komponenter i et nytt prosjekt. Gjenbruk er kun kostnadseffektivt dersom det faktisk finner sted. Dersom et prosjekt undersøker mulighetene for gjenbruk, for eksempel ved å formulere forespørsler om tilgjengelige komponenter, og ingen egnet komponent blir funnet, kan dette føre til et betydelig tidstap for utviklerne. I slike tilfeller har biblioteket mislykkes i å leve opp til forventningene, og de midlene som ble brukt til å sette opp og drifte gjenbrukssystemet, har ikke blitt tilbakebetalt.

For et nytt gjenbrukssystem, med mindre betydelige beløp er brukt på å utvikle biblioteket, bør man forvente lav avkastning på gjenbruk i begynnelsen. Komponentene som skapes (når gjenbrukbare komponenter ikke finnes) bør legges til biblioteket, men dette vil ofte være mer kostbart enn å utvikle komponentene spesifikt for det aktuelle prosjektet. Beregningsmetoden for gjenbrukskostnader og -fordeler bør være kompatibel med metodene som benyttes i resten av selskapet.

To viktige faktorer bør vurderes:
• Netto besparelse for den enkelte brukeren ved hver gjenbruk av en komponent.
• Netto besparelse for selskapet ved alle gjenbruk av komponenten.

Fordelene ved gjenbruk kan kategoriseres som følger:
• Besparelser på grunn av gjenbruk, SR, er summen av kostnadene som unngås hver gang komponenten gjenbrukes.
• Levetid, L, er komponentens nyttige livslengde, uttrykt i år.
• Etterspørsel, N, er antall ganger komponenten sannsynligvis vil bli brukt i løpet av sin levetid. Hvis kostnader og fordeler varierer fra år til år, bør etterspørselen fordeles på år, altså N y der y = 1, 2, ..., L.

Kostnadene knyttet til en komponent kan formaliseres som:
• Kostnaden for gjenbruk, CR, er kostnaden som påløper hver gang komponenten gjenbrukes, inkludert henting og tilpasning av komponenten.
• Tilgangstiden, TA, er tiden fra beslutningen om å skaffe komponenten til den er tilgjengelig i biblioteket.
• Tilgangskostnaden, CA, er kostnaden ved å legge til komponenten i biblioteket.
• Vedlikeholdskostnaden, CM, er kostnaden for å opprettholde komponenten i biblioteket.

Risikoene som kan oppstå, bør også estimeres. Dette kan inkludere avhengighet av et spesifikt miljø eller konfigurasjon, foreldelse av design eller kode, og juridiske hindringer. Disse risikoene kan integreres i de foregående variablene etter behov.

Netto besparelse for den enkelte, NSR, ved hver gjenbruk er differansen mellom besparelsen som oppnås ved unngåtte kostnader og kostnaden for gjenbruk, altså NSR = SR - CR. De totale besparelsene fra alle gjenbruk er NSR multiplisert med antall gjenbruk. Så, netto besparelse fra alle gjenbruk, NSP, er den totale besparelsen minus tilgangs- og vedlikeholdskostnadene, NSP = (NSR x N) - (CA + CM). NSP kan beregnes på årlig basis. For hvert år, NSPy = (NSR x Ny) - CMy.

Denne beregningen forutsetter at tilgangskostnaden påløper før starten på det første året av tjenestetiden, og at den blir registrert separat. Kostnadsestimeringsmetoden kan inkludere en justering for at fremtidige kontantstrømmer mister verdi over tid, med en rabattfaktor i. Den årlige diskonterte NSP kan derfor beregnes som DNSPy = ((NSR x Ny) - CMy) / (1 + i)y.

For å sammenligne to potensielle gjenbrukbare komponenter og avgjøre hvilken som skal anskaffes til biblioteket og hvilken som ikke skal, vil den kumulative diskonterte kontantstrømmen (CDCF) for hver komponent beregnes. Komponenten med høyere CDCF vil bli valgt. CDCF = DNSP1 + DNSP2 + ... + DNSPl - CA.

Med riktig data og disse formlene kan et selskap bedre planlegge sine investeringer i gjenbruk. Avhengig av strategien som er valgt av programvareutviklingsselskapet, kan gjenbrukskostnadene absorberes av utvikleren, med håp om å skape lignende prosjekter senere og dermed hente inn investeringen på den måten. Alternativt kan utvikleren danne et partnerskap med kunden, hvor de innledende oppstartskostnadene og eventuelle senere fordeler deles mellom partene.

Juridiske problemer ved programvaregjenbruk
Et viktig aspekt ved gjenbruk er de juridiske problemene som kan oppstå. Dersom en programvareutvikler får tillatelse fra en kunde til å gjenbruke komponenter utviklet for deres prosjekt til andre kunder som trenger lignende systemer, er det flere juridiske spørsmål som må adresseres. Hvem eier en komponent som er utviklet for et prosjekt? Trenger utvikleren tillatelse for å inkludere en komponent utviklet for et spesifikt prosjekt i et bibliotek? Skal kunden som bestilte komponenten få betaling for at komponenten blir gjenbrukt?

Juridiske spørsmål som dette kan løses ved skriftlige avtaler som fastsetter vilkår og betingelser mellom kunden og utviklerne. Gjenbruk av programvare kan bli påvirket av lovgivning om intellektuell eiendom og opphavsrett. Selv om opphavsretten til programvare er et uklart juridisk område i mange land, har det i EU vært arbeidet for å standardisere lovgivningen om dette på tvers av medlemslandene. I de fleste land anses programvare som intellektuell eiendom og kan beskyttes av opphavsrett og patentlovgivning.

Programvarebeskyttelse gjennom opphavsrett betyr at forfatteren har enerett til å kopiere eller tilpasse sitt verk. Patenter på programvare kan gi beskyttelse utover kun koden, og kan også omfatte flodesign eller pseudokode. Ved å søke om patent får forfatteren mer beskyttelse enn opphavsretten gir, da det ikke er nødvendig å bevise kopiering. Ulempen med patenter er at prosessen kan ta lang tid, og at informasjonen om oppfinnelsen blir offentlig.

Hvordan effektivisere programvareutvikling gjennom gjenbruk: En praktisk tilnærming

Gjenbruk av programvare har lenge vært ansett som en naturlig løsning for effektiv programvareutvikling, men i praksis ser vi at det sjelden skjer. Utfordringene er mange, og de krever en ny tilnærming til hele spekteret av aktiviteter som er involvert i programvareutvikling. Hver gang det er behov for ny programvare, har utviklere en tendens til å skrive koden fra bunnen av, i stedet for å benytte seg av komponenter som har blitt utviklet gjennom tidligere prosjekter. Å forstå hvorfor dette skjer og hvordan det kan endres, er en viktig del av diskusjonen rundt programvaregjenbruk.

Boken utforsker ulike aspekter av programvaregjenbruk, fra de underliggende prinsippene til konkrete eksempler fra industrien. Den tar for seg både dokumentorienterte og objektorienterte tilnærminger til gjenbruk og sammenligner disse. Den ser på ulike systemer som støtter programvaregjenbruk, og understreker viktigheten av standardisering i prosessen. Et annet aspekt som belyses er hvordan den økte tilgjengeligheten av informasjon på nettet har fremmet gjenbruk av både programvare og dokumentasjon. Verden over har mulighetene for gjenbruk vokst betydelig på grunn av utbredelsen av World Wide Web og utviklingen av systemer som kan integrere gjenbrukbare komponenter.

I den første utgaven av denne boken, som ble utgitt i 1995, var fokuset på en systematisk tilnærming til dokumentgjenbruk. Tanken var å vise hvordan en strukturert metode for gjenbruk kan føre til gode resultater i programvareutviklingen. Flere personer fra ulike deler av verden, som for eksempel Roy Rada og Hafedh Mili, bidro sterkt til prosjektet, og deres arbeid er en viktig del av boken. Et sentralt poeng i boken er at gjenbruk er en grunnleggende del av programvareingeniørfaget, men at det ofte undervurderes og ikke praktiseres i stor nok grad.

Mange av de utfordringene som ble identifisert i førsteutgaven, gjelder fortsatt. Reuse handler ikke nødvendigvis om å finne den beste teknologien, men om å forstå når og hvordan gjenbruk er praktisk mulig og effektivt. Det krever et klart ledelsesfokus og et sterkt samarbeid mellom utviklingsteamene. Gjennom de påfølgende årene har det kommet flere bøker om emnet, som har utvidet perspektivet på gjenbruk og brakt nye tilnærminger til diskusjonen. Den andre utgaven av boken reflekterer blant annet den økte betydningen av webbaserte arkiver og verktøy for gjenbruk, som har gjort programvaregjenbruk mer tilgjengelig og gjennomførbart enn noen gang.

Mens mange av de tekniske aspektene rundt programvaregjenbruk har blitt bedre forstått og dokumentert, er det fremdeles viktig å understreke at implementeringen av gjenbruk krever mer enn bare tekniske verktøy. Effektiv gjenbruk av programvare krever også en kultur og en struktur som fremmer samarbeid og kommunikasjon mellom ulike team. Ledelse spiller en viktig rolle, ikke bare i å definere mål og standarder, men også i å fasilitere informasjonsdeling og kontinuerlig læring innenfor organisasjonen. Gjenbruk bør sees på som en langsiktig investering, hvor tid og ressurser brukes på å bygge et solid fundament for fremtidig programvareutvikling.

Det er også viktig å forstå at gjenbruk ikke nødvendigvis fører til umiddelbare gevinster. Mens enkelte deler av programvaren kan gjenbrukes relativt enkelt, er det ofte utfordringer knyttet til tilpasning og integrasjon med eksisterende systemer. Derfor er det avgjørende at utviklere har tilgang til verktøy og ressurser som kan hjelpe til med å identifisere hvilke komponenter som er egnet for gjenbruk og hvordan disse kan integreres på en effektiv måte.

I lys av den raske utviklingen av teknologi og det stadig mer komplekse programvarelandskapet, er det klart at gjenbruk er en nødvendighet for å opprettholde både effektivitet og kvalitet i programvareutviklingen. Ved å forstå og implementere riktige tilnærminger til programvaregjenbruk kan utviklingsteam både redusere utviklingstid og kostnader, samtidig som de sikrer høyere kvalitet på sluttproduktet.

Endtext

Hvordan kan vi utvikle og organisere systemer for gjenbruk av programvarekomponenter?

I arbeidet med gjenbruk av programvarekomponenter er en sentral utfordring hvordan man kan organisere og klassifisere komponentene på en effektiv måte for at de skal kunne hentes og gjenbrukes av utviklere på tvers av prosjekter. Dette innebærer ikke bare tekniske utfordringer knyttet til utformingen av selve komponentene, men også hvordan man kan bygge et bibliotek av gjenbrukbare komponenter som er lett tilgjengelig og vedlikeholdes effektivt.

Den største hindringen i arbeidet med programvaregjenbruk er kanskje at utviklerne ofte velger å skrive om komponentene fra bunnen av fremfor å hente eksisterende ressurser fra et bibliotek. Dette skjer når metoder for å identifisere og hente de riktige komponentene ikke er tilstrekkelig enkle og effektive. Utviklere kan føle at det er raskere og mer praktisk å skrive ny kode i stedet for å bruke tid på å lete gjennom et bibliotek. Derfor er det viktig at klassifiseringen av komponentene er både enkel og kostnadseffektiv, samtidig som systemet for henting er kraftig nok til å spare tid i prosessen.

Gjenbruk av programvare krever en grundig tilnærming til både organisering og indeksering av materialet. Etter at komponentene er samlet og analysert, må de lagres på en måte som gjør det mulig for utviklerne å finne dem når det er nødvendig. Organisering handler om å samle, analysere, indeksere og lagre informasjon på en strukturert måte. Dette kan gjøres ved å bruke ulike metoder, fra enkle filbaserte systemer til mer komplekse kunnskapsbaserte systemer. For at komponentene skal være nyttige, må de være riktig kategorisert og dokumentert, slik at de kan hentes effektivt når de trengs.

To hovedmetoder for indeksering brukes: den tolkende og den strukturelle metoden. Den tolkende indekseringen krever at dokumentet leses og forstås før indeksering, og dermed tildeles passende indekseringsbegreper. Dette kan være en rask tilnærming, men den er ofte inkonsistent, spesielt hvis flere personer er involvert i indekseringen. På den annen side benytter den strukturelle metoden et mer automatisk system der ord hyppig brukt i dokumentet blir sett på som indikatorer for relevans, uten at en dypere semantisk tolkning blir utført. Begge tilnærmingene har sine fordeler og ulemper, og den rette metoden må velges ut fra behovene til systemet og de involverte brukerne.

En annen viktig fase i utviklingen av et gjenbruksbibliotek er gjenhentingen av komponentene. Gjenbruken vil kun være effektiv dersom utviklerne kan finne de komponentene de trenger uten å bruke for mye tid på å lete. Her er det viktig at bibliotekene er godt indeksert, og at det finnes effektive mekanismer for å hente ut komponentene på en rask og presis måte. Dette er spesielt utfordrende ettersom gjenbruksbibliotekene kan bli svært store, og dermed kan det være vanskelig å opprettholde en oversikt over hva som finnes og hvordan det er organisert.

En annen utfordring er vedlikeholdet av biblioteket. Komponentene som lagres i et gjenbruksbibliotek kan komme fra mange forskjellige kilder, som programvarehus, offentlige kilder eller prosjekter som utvikler nye komponenter som egner seg for gjenbruk. Alle komponentene må gjennomgå en prosess for å sikre at de er av høy kvalitet og at de kan gjenbrukes på en pålitelig måte. For å oppnå dette er det nødvendig med strenge retningslinjer og prosedyrer for hvordan komponentene skal vurderes og godkjennes før de kan legges til i biblioteket.

Det er også viktig å merke seg at standarder for gjenbruk av programvarekomponenter fortsatt er under utvikling. På tross av at gjenbruk av programvare er ansett som en kostnadseffektiv og fordelaktig praksis, er det fortsatt ingen internasjonalt anerkjente standarder for hvordan gjenbruk skal gjennomføres i praksis. De eksisterende standardene fokuserer enten på tekniske aspekter ved komponentene eller på de sosiale aspektene ved gjenbruk, som hvordan mennesker og organisasjoner skal tilpasse seg og bruke gjenbrukbare komponenter på en effektiv måte. Begge disse tilnærmingene har sine egne utfordringer, og en integrert standard som både adresserer den tekniske og den menneskelige siden av gjenbruk er nødvendig.

For utvikling og implementering av et gjenbruksbibliotek er det viktig å forstå at både den tekniske infrastrukturen og de menneskelige faktorene må tas i betraktning. Utviklerne må være motivert til å bruke biblioteket, og organisasjonen må sørge for at systemet for gjenbruk er tilstrekkelig støtte for deres arbeidsflyt. Gjenbruk krever en balansegang mellom effektivitet og kvalitet, og for å oppnå dette må biblioteket være både lett tilgjengelig og pålitelig i sin organisering.

Hvordan Softwaregjenbruk Verktøy Hjelper Utviklere i Programvareutvikling

PRESSTO og PRESSTIGE er to verktøy som ble utviklet for å støtte gjenbruk av programvarekomponenter og effektivisere utviklingsprosessen. Begge verktøyene benytter seg av forskjellige tilnærminger for å muliggjøre enkel tilgang til eksisterende programvarekomponenter og organisere informasjon på en strukturert måte.

PRESSTO, det enkleste av de to, er et verktøy som hovedsakelig håndterer ren tekst med viss støtte for et tesaurusverktøy. Hovedfunksjonaliteten til PRESSTO ligger i evnen til å søke gjennom dokumenter og hente ut komponenter som kan gjenbrukes. Dette er mulig gjennom indeksering av ord i tekstfiler, som deretter kan brukes til å finne filer som inneholder spesifikke nøkkelord. PRESSTO er sterkt knyttet til UNIX-operativsystemet og benytter seg ikke av en tradisjonell database. I stedet henter det informasjon fra filer som er lagret i kataloger på vertsmaskinen.

For å sette opp PRESSTO, må utvikleren opprette to spesifikke filer: en 'Ts-fil', som inneholder en liste over filer som inneholder gjenbrukbare komponenter, og en 'talc-fil' som inneholder relevante indekseringsord på et naturlig språk. Når disse filene er opprettet, kan PRESSTO brukes til å hente ut spesifikke symboler fra programmer, for eksempel fra C-kode, eller kun de termene som finnes i talc-filen og dokumentene.

En av de mest sentrale funksjonene i PRESSTO er indekseringsverktøyet som muliggjør gjenfinning av informasjon. Verktøyet opererer i to moduser: "File Mode" og "Index Term Mode". I sistnevnte kan brukeren klikke på et indekseringsord (for eksempel 'giraff') for å få opp en liste over alle filer som inneholder dette ordet. Dette gjør det lettere å finne frem til dokumenter som inneholder relevante komponenter, som kan gjenbrukes i nye prosjekter.

PRESSTIGE, på den annen side, er mer avansert og har som hovedmål å hjelpe utviklere med å bygge et konseptuell modell som kalles en ‘spørreskjema’ for å hente ut informasjon relatert til programvarekomponenter. Dette verktøyet tillater utvikleren å skape en strukturert form for informasjon om programvaren som gjør det enklere å analysere dokumentene som legges til, samt hente ut informasjon som kan være nyttig for gjenbruk senere. En konseptuell modell kan inneholde informasjon om programvarens funksjon, hvem som opprettet den, og hvilken spesifikk informasjon som kan være relevant for fremtidige brukere.

Et viktig aspekt ved PRESSTIGE er at det tilbyr verktøy for å organisere programvarekomponenter på en hierarkisk måte, og det kan være mulig å generere noen av modellene automatisk gjennom funksjoner i programvareutviklingsverktøy. Modellen bør være fleksibel nok til å lagre informasjon både om selve komponentene og om modellens egen struktur. På denne måten kan PRESSTIGE bidra til å bygge et system som både organiserer og gir nødvendig informasjon for å gjøre gjenbruk av komponenter enklere i fremtiden.

Konseptmodellen er bygget rundt spørreskjemaer som strukturerer informasjon på en måte som gir en semantisk nettstruktur, noe som gjør det lettere å forstå relasjonene mellom ulike deler av programvaren. Dette kan hjelpe utviklere med å finne komponenter som kan integreres i nye prosjekter uten å måtte bygge alt fra bunnen av. Et slikt system gjør det mulig å spare tid og ressurser, samtidig som det sikrer høyere kvalitet på programvaren, ettersom gjenbrukte komponenter ofte er grundig testet og optimalisert.

Videre kan PRESSTIGE bidra til bedre samarbeid mellom utviklingsteam ved å tilby et felles rammeverk for hvordan programvarekomponenter skal beskrives og brukes. Denne strukturen kan føre til en mer systematisk tilnærming til programvareutvikling, der utviklere har tilgang til verktøy som lar dem finne og bruke eksisterende komponenter i sine prosjekter på en mer effektiv måte.

I tillegg til de tekniske aspektene, er det viktig å merke seg at bruken av disse verktøyene forutsetter en kultur for gjenbruk og en systematisk tilnærming til programvareutvikling. Det er ikke nok bare å ha de rette verktøyene; det er også nødvendig at utviklere har en forståelse for hvordan disse verktøyene kan integreres i arbeidsprosessen. Verktøy som PRESSTO og PRESSTIGE kan hjelpe til med å etablere en arbeidsflyt som fremmer gjenbruk, men uten en kultur som oppmuntrer til deling av informasjon og kunnskap, vil potensialet for gjenbruk aldri fullt ut bli realisert.

Gjenbruk av programvare er en av de mest effektive metodene for å redusere utviklingstid og forbedre kvaliteten på programvaren. Ved å bruke verktøy som PRESSTO og PRESSTIGE, kan utviklere lage mer robuste, fleksible og skalerbare systemer, samtidig som de reduserer behovet for å lage alt fra bunnen av. Dette er et mål som mange programvareutviklingsteam streber etter, og som kan gi store gevinster på lang sikt.