Revisjonen av programvare er en viktig del av utviklingssyklusen, og den utføres av en person som ikke er forfatteren, for å sikre at retningslinjene og kvalitetsstandardene er fulgt. Dette gjelder også når programvaren blir modifisert på en eller annen måte. Å vurdere kvaliteten på programvaren er en krevende og kontinuerlig prosess, som ble tydelig fremhevet i tidligere diskusjoner om gjenbruk. Det er viktig å merke seg at kvaliteten på programvaren ikke kun handler om den tekniske implementeringen, men også om hvordan den passer inn i det større systemet og de kravene som stilles i de nye kontekstene den blir brukt i.

Når en utvikler skaper et programvaresystem basert på en opprinnelig spesifikasjon, benytter de seg av veiledninger og retningslinjer for å lage et fungerende produkt. Dette produktet blir deretter vurdert av en kvalitetsrevisor, som sammenligner det med de opprinnelige retningslinjene og vurderer hvor godt det oppfyller kriteriene som er satt for kvalitet og funksjonalitet. Denne revisjonen kan avdekke både styrker og svakheter ved løsningen, og det er et sentralt element for å sikre at programvaren er på høyde med de nødvendige standardene.

Når programvare gjenbrukes, møter utviklingsteamet imidlertid en rekke utfordringer. En erfaring som belyser vanskelighetene ved gjenbruk, er et prosjekt som forsøkte å gjenbruke tre standardkomponenter: en objektorientert database, et verktøysett for grafiske brukergrensesnitt og et hendelsesbasert integreringsverktøy for systemer. Selv om disse komponentene ble valgt fordi de skulle fungere godt sammen, og fordi de benyttet samme kompilator som prosjektets øvrige programvare, endte resultatet med et system som var stort, tregt og vanskelig å vedlikeholde.

De største utfordringene ved integreringen kom fra uforenelige antakelser om systemenes strukturer og modeller. Hver komponent ble laget med spesifikke forutsetninger om datamodeller, kontrollmodeller, protokoller og systemtopologi som ikke nødvendigvis var tilpasset den nye bruken. Dette førte til at de antakelsene som ble gjort på forhånd, ofte ikke var tilstrekkelig dokumentert i beskrivelsene av de gjenbrukte komponentene. Det er gjennom denne prosessen at teamet oppdaget, noen ganger på en tungvint måte, hva som måtte tilpasses for at systemet skulle fungere effektivt.

Dette understreker behovet for en grundig og målrettet tilnærming til gjenbruk. Å velge komponenter fra et godt forstått bibliotek av deler som er harmoniske med utviklingsmiljøet, er avgjørende. Tilpasningen av disse komponentene til nye miljøer er kanskje den mest kritiske fasen i hele gjenbruksprosessen. Likevel er det paradoksalt nok denne fasen som er minst godt utforsket i forskningen og tilgjengelige verktøy. Reorganisering av komponenter kan ikke skje før det har vært både organisering og gjenfinning av de relevante ressursene, og disse trinnene er fortsatt gjenstand for mye diskusjon.

Reorganisering er en kompleks og vanskelig oppgave, og den kan ikke automatiseres på samme måte som andre deler av programvareutviklingen. Spørsmål som oppstår i reorganiseringsfasen kan være komplekse og uten klare svar. For eksempel: Er den hentede koden skrevet på riktig språk? Hvordan er kvaliteten på testene som er utført på koden? Er dokumentasjonen tilstrekkelig for å forstå de antakelsene som ligger til grunn for bruken av komponentene? Disse spørsmålene må besvares før det kan vurderes om gjenbruksstrategiene har ført til forbedringer i utviklingsprosessen.

Når reorganisering er fullført, kan utviklingsteamet vurdere hvorvidt gjenbruken har vært vellykket. En vellykket gjenbruk kan gi flere fordeler, inkludert kortere utviklingstid, lavere krav til spesialisert kompetanse blant teammedlemmene og økt pålitelighet av komponentene som kan brukes i fremtidige prosjekter.

Reorganisering, som er den mest krevende delen av gjenbrukssyklusen, er avhengig av en god organisering og gjenfinning av komponenter. Dette innebærer at gjenbrukens suksess avhenger sterkt av hvordan komponentene er organisert og hvordan de gjenfinnes for det spesifikke formålet. Derfor er det viktig at systemene som støtter denne prosessen, er godt tilpasset utviklingsbehovene.

Verktøyene som benyttes for å organisere og administrere programvareutviklingen, som CASE (Computer Aided Software Engineering) verktøy, spiller en viktig rolle i å opprettholde kvalitet og effektivitet i gjenbruksprosesser. Ved å bruke slike verktøy kan man sikre at alle komponentene er konsistente og at utviklingen skjer på en strukturert og effektiv måte. I tillegg gir de utviklerne mulighet til å jobbe uavhengig, samtidig som de kan integrere sitt arbeid i et større prosjekt uten problemer.

Suksessen med gjenbruk av programvare er ikke bare avhengig av de tekniske verktøyene som brukes, men også av hvordan komponentene er valgt, tilpasset og integrert i nye utviklingsmiljøer. Denne prosessen krever både teknisk kompetanse og en forståelse av de underliggende forutsetningene og antakelsene som ligger til grunn for komponentene som gjenbrukes.

Hvordan domenanalyse fremmer gjenbruk i programvareutvikling

Domenanalyse kan være et grunnleggende skritt i skapelsen av virkelig gjenbrukbare komponenter. Organisasjoner som har utført domenanalyse før de opprettet gjenbrukbare komponenter, har hatt langt større suksess med programvaregjenbruk. Domenanalyse er en metode for å analysere et programvareområde ved å studere eksisterende programvaresystemer, fremvoksende teknologi og utviklingen innen terminologi i programvarefeltet (Lung og Urban, 1993). I domenanalyse generaliseres felles kjennetegn fra lignende systemer, objekter og operasjoner som er felles for alle systemene innen samme domene, blir identifisert, og en domenemodell defineres for å beskrive forholdet mellom objektene.

Domenemodellering i programvaregjenbruk har som mål å gi et rammeverk for identifisering av objekter, operasjoner og andre strukturer som kan fanges som gjenbrukbare programvarekonsepter. Både domenekunnskap og ekspertise i design med gjenbruk benyttes for effektiv domenemodellering. Enten domenanalytikeren er ekspert på domenet eller ikke, vil hun måtte ha tilgang til og erfaring med bruk av verktøy som kan hjelpe med å gi et overblikk over domenet. Slike verktøy og teknikker er utviklet innen områder som systemanalyse og kunnskapsteknologi, hvor problemet med domeneforståelse også er et sentralt tema.

Konseptene «domenanalyse» og «domenemodellering» er grunnleggende for alle objektorienterte tilnærminger til programvaremodellering. Et ofte sitert og godt forstått eksempel på et domene er matematikkapplikasjoner. Temaene innen dette området kan modelleres i klasser som «likninger», «mengdelære», «kalkulus» og så videre. Klassen «likninger» kan for eksempel deles videre opp i underklasser som «simultanlikninger», «differensialligninger», og så videre, som også kan deles opp i flere underklasser. Denne hierarkiske organiseringen er et typisk eksempel på domenemodellering i praksis.

Når man arbeider med et langt dokument som skal leses av folk, finnes det vanligvis en innholdsfortegnelse eller et omriss. Denne innholdsfortegnelsen tilsvarer et hierarki av overskrifter i dokumentet og gir leseren et overblikk over innholdet, slik at de kan finne tematiske seksjoner. På samme måte er en godt organisert oversikt en forhåndsdefinert form for domenemodell. Dette er et eksempel på gjenbruk av informasjon som allerede finnes i dokumenter og som hjelper gjenbruksprosessen.

Hypertekst er et rikt lenket dokumentlignende informasjonssystem som gjør det mulig for leseren å få tilgang til informasjon lagret i et dokument fra mange ulike synsvinkler og i hvilken som helst rekkefølge. I et hyperteksts system lagres informasjon i «klumper», eller noder, som kan lenkes sammen for å danne et dokument. Hyperteksts systemer er nyttige i et gjenbrukslandskap fordi for å forstå et programvarekonsept som skal gjenbrukes, må utvikleren ofte gjennomgå store mengder informasjon som finnes i ethvert godt dokumentert programvareprosjekt. Å få tilgang til relevant informasjon manuelt er tidkrevende og kan være svært tungvint. Gode hyperteksts systemer gjør denne oppgaven enklere og mer nøyaktig.

Et kjent eksempel på dokumentasjon som kunne forbedres med hypertekst, er UNIX-dokumentasjonssystemet «man» (for manual). Unix man-systemet tilbyr online-dokumentasjon som forklarer funksjonen og bruken av programmer tilgjengelig for brukere av systemet. Et eksempel er «man-siden» for kommandoen Is. Denne man-siden beskriver hvordan man får opp lister over forskjellige kataloger og hvilke tilgangsrettigheter hver fil har. For å hjelpe brukeren med å forstå hva disse konseptene betyr og hvilke kommandoer som er nødvendige for å påvirke disse attributtene, inneholder man-siden referanser til relaterte kommandoer. I et hyperteksts system ville en referanse til en av disse kommandoene automatisk føre brukeren til den aktuelle man-siden. Denne tilnærmingen kan brukes rekursivt, slik at man kan følge referanser videre, frem og tilbake gjennom dokumentasjonen etter behov.

Hypertekstteknikker er også nyttige når man arbeider med programkode. Når man prøver å forstå hva et kodesegment betyr, trenger utvikleren å vite hvordan hver variabel i segmentet er definert. Den eneste måten å finne dette ut på er vanligvis å lese gjennom listen systematisk, merke hvor variabler er definert og endret, og lete gjennom dokumentasjonen for å finne en beskrivelse av variabelen. Dette er tidkrevende, og med uklar kode kan det være en svært vanskelig oppgave. Et hypertektsystem kan automatisk analysere programmet for å finne definisjoner og referanser til variabler og søke i dokumentasjonen etter definisjoner. Hvis koden ble sett på gjennom et slikt system, kunne variablene for eksempel være uthevet med fet skrift, og ved å klikke på en variabel, ville man få opp definisjonen og en liste over referanser til den i programmet.

Hypertekst kan også støtte samarbeid. Hypertekstsystemer kan konfigureres til å logge tilgang til hver informasjonselement, og på denne måten kan systemet holde oversikt over hvem som har fått tilgang til hva og når. Dette kan være nyttig for å forstå hvilke deler av dokumentene som er mest viktige, hvem i teamet som forstår hvilke deler av systemet, og så videre.

I dagens programvareutvikling er behovet for pålitelige og komplekse dataprogrammer som leveres til rett tid og som er kostnadseffektive å vedlikeholde mer presserende enn noen gang. Tradisjonelle programvareteknikker er ikke tilstrekkelige for å møte disse behovene. Programvaregjenbruksteknikker kan bidra til å imøtekomme disse utfordringene. Hindringer for bred aksept av gjenbruk er både av administrativ og teknologisk karakter. Dette emnet får større betydning ettersom programvareutvikling blir mer kompleks og tverrfaglig, og forståelsen av hvordan domenanalyse og relaterte metoder kan støtte utviklingen av gjenbrukbare komponenter blir stadig viktigere.

Hvordan EOE-modellen kan stimulere vekst i utdanningsressurser

I den moderne utdanningsverdenen er det en økende interesse for Open Educational Resources (EOE), og hvordan disse kan fremme både tilgjengelighet og økonomisk bærekraft. Den langsiktige utviklingen av EOE er ikke bare et spørsmål om å tilby gratis ressurser, men også om å stimulere vekst i relaterte kommersielle aktiviteter og bedrifter. Dette kan sammenlignes med hvordan bibliotekene ikke nødvendigvis konkurrerer med bokhandler, men heller fremmer etterspørselen etter bøker ved å bidra til en mer litterær befolkning. På samme måte kan EOE-modellen skape et større marked for betalte utdanningsressurser.

En interessant implikasjon av dette er hvordan lærere som tar i bruk EOE-ressurser kan få muligheten til å knytte disse ressursene direkte til lærebøkene de bruker i undervisningen. For eksempel kan forlag tilby indekser fra sine lærebøker som fritt tilgjengelige ressurser, samtidig som de tilbyr betalte nettbaserte ressurser som kan supplere de trykte bøkene. Dette åpner for en mer dynamisk integrasjon mellom gratis og betalte utdanningsressurser, og skaper dermed et mer omfattende og effektivt læringsmiljø.

For å støtte slike forretningsmodeller, utvikles infrastrukturen rundt EOE med blant annet metadata og mikropayment-systemer. Dette gjør det mulig for utviklere å lage lisensavtaler som muliggjør deling av kildekode. For eksempel, hvis en utvikler ønsker å bruke et objekt fra EOE (kanskje utviklet på et universitet) og inkorporere det i et produkt, kan en spesifikk lisens som «Intellectual Capital Appreciation License» være ideell. Denne lisensen tillater at kildekoden deles, så lenge feilrettelser og tilpasninger også deles tilbake med fellesskapet.

Ulike modeller for kursvareutvikling har blitt testet, og erfaringene har vist at verktøyene for gjenbruk av kursmateriell kan være enkle å integrere i arbeidsflyten, spesielt for de første forsøksfasene. Modellen for kursvareutvikling via gjenbruk fra en kursvarebibliotek kan være mer effektiv enn tradisjonell utvikling av kursmateriell uten gjenbruk. Den største utfordringen med kursvaregjenbruk er de ulike og ofte inkompatible medieformatene som brukes i dagens utdanningsverden. Løsninger som konverteringsverktøy har imidlertid i stor grad løst dette problemet.

Videre er det viktig å forstå at for at en kursvarebibliotek skal være virkelig effektiv, må det ikke bare brukes av én forfatter til å lage et enkelt kurs. For å oppnå høyest mulig effektivitet, bør biblioteket brukes til å utvikle et bredt spekter av kurs. Kostnadene for utvikling og vedlikehold av et multimediabasert kursvarebibliotek kan være høye, og derfor vil små firmaer kanskje velge en enklere løsning som raskt kan gi fordeler. Større firmaer har derimot ofte muligheten til å investere mer i etableringen av et større bibliotek. Uansett, den kritiske faktoren for kostnadseffektivitet er hvor ofte biblioteket blir brukt, noe som delvis avhenger av firmaets ledelsespolitikk.

Et mer helhetlig syn på programvaregjenbruk viser at både tekniske og ledelsesmessige faktorer spiller en avgjørende rolle. Det handler ikke bare om den tekniske representasjonen og manipuleringen av programvarekomponentene, men også om hvordan en organisasjon håndterer sine menneskelige ressurser og planlegging. I programvareutvikling har erfaring vist at utfordringen ikke nødvendigvis ligger i utviklingen av nye programmeringsspråk eller teknologier, men i hvordan organisasjoner belønner programvaregjenbruk blant sine utviklere. For eksempel ga Motorola økonomiske insentiver til sine programvareutviklere for å lagre komponenter i et bibliotek, og deretter belønnet de utviklerne hver gang en komponent ble brukt på nytt i et annet produkt. Dette incentivsystemet bidro til å gjøre Motorola et ledende eksempel på programvaregjenbruk.

For utdanningssektoren innebærer dette at utviklingen av effektive verktøy og infrastrukturer for gjenbruk ikke bare er teknisk nødvendig, men også må tilrettelegges gjennom riktig ledelse og insentiver. Utdanningssystemene bør derfor fokusere på hvordan de kan integrere både gratis og betalte ressurser på en måte som fremmer læring og samtidig støtter økonomisk bærekraft. Samtidig bør de være oppmerksomme på de utfordringer som kan oppstå ved å bruke flere forskjellige medieformater og programvareplattformer.

For å oppnå dette er det nødvendig med en klar forståelse av at gjenbruk ikke kun handler om å bruke eksisterende komponenter, men også om å utvikle nye som kan gjenbrukes i fremtiden. Gjennom dette kan utdanningssektoren både møte behovene til dagens elever og lærere, samtidig som den legger grunnlaget for en bærekraftig fremtid.