1. Softwarekrisen i historisk perspektiv

1.1 Softwarekrisen

Begrebet softwarekrisen blev første gang brugt på en NATO konference om Software Engineering i 1968.

Begrebet softwarekrise indebærer, at der er mangel på software, at software er for kostbar og af for dårlig kvalitet, og at softwareudviklingen er vanskelig at planlægge og næsten umulig at styre.

1.2 Forsøg på løsning af softwarekrisen

Den følgende historiske gennemgang af nogle forsøg på løsning af softwarekrisen er i hovedtrækkene baseret på James A. Kowal "Analyzing Systems" s. 10-17.

1.2.1 Strukturerede teknikker

Siden begrebet opstod i 1968, har der været gjort mange forsøg på at afhjælpe softwarekrisen. Det første forsøg, struktureret programmering, blev baseret på undersøgelser af Dijkstra (1966) samt Bohm og Jacopini (1966), der påviste, at alle problemer kunne løses med tre grundlæggende konstruktionselementer:

På basis af disse teorier blev der op igennem 1970'erne udviklet en række metoder, hvis formål var at forbedre produktiviteten og kvaliteten i softwareudviklingen:

Hermed var grundlaget for den strukturerede systemudviklingsmodel komplet omkring indgangen til 1980'erne.

I midten af 1980'erne har McMenamin og Palmer tilføjet begreberne essentiel modellering og hændelsesopdeling til de strukturerede teknikker; men siden er der ikke sket afgørende nytænkning.

1.2.2 Software Engineering

Op igennem 1970'erne blev det på trods af introduktionen af de strukturerede metoder gradvist vanskeligere at kontrollere omkostningerne i forbindelse med softwareudvikling - især på grund af at det kræver mange menneskers indsats og deltagelse.

En anden årsag var, at man var tilbøjelige til at betragte udviklingen af ethvert nyt system som en enestående begivenhed, hvor man hver gang begyndte forfra med analyse og softwareudvikling.

Med det formål at forsøge på at kontrollere omkostningerne, give ledelsen bedre strategiske styringsmuligheder og øge produktiviteten blandt programmører, blev teorierne om software engineering udviklet.

Nogle af nøgleordene i software engineering er kvalitetssikring, opfølgning, genbrug og standardisering.

1.2.3 Information Engineering

Et alternativt forsøg på at skabe højere produktivitet og bedre kvalitet blev i 1981 introduceret af bl.a. James Martin. Det fundamentale princip i Information Engineering er, at der i enhver virksomhed eksisterer data, som kan beskrives uafhængigt af, hvordan de anvendes.

Det er således vigtigt at man strukturerer sine data og lagrer dem i databaser, så man har hurtig og bekvem tilgang til dem.

Hvis man ydermere bruger non-procedurale sprog (4. generations sprog), kan brugeren selv generere sine egne rapporter og søgeprogrammer uden behov for hjælp fra programmører og systemudviklere.

1.2.4 CASE værktøjer

Op igennem 1980'erne er der blevet introduceret en række CASE (Computer-Aided Software Engineering) værktøjer, som automatiserer anvendelsen af de forskellige metoder og værktøjer, som tidligere var blevet udviklet.

Der blev også lanceret CASE værktøjer, som tillod automatisk kode-generering. Det blev herved gjort lettere at sikre, at metoderne blev anvendt korrekt, og lettere at ændre i specifikationerne.

1.2.5 Eksperimentel systemudvikling

Eksperimentel systemudvikling er en iterativ fremgangsmåde for systemudvikling, hvor praktiske eksperimenter udføres på modeller.

Modellerne fremstilles med aktiv medvirken fra de kommende brugere af systemet. Gennem eksperimenter med modellerne får brugerne indsigt i og forståelse for det nye systems konsekvenser og muligheder.

Eksperimentel systemudvikling udføres ikke med traditionel faseopdeling. I stedet benyttes en iterativ fremgangsmåde, hvor praktiske eksperimenter udføres på gradvist mere udbyggede modeller af det ønskede system.

Den mest generelle beskrivelse af eksperimentel systemudvikling indeholder følgende fire trin:

  1. Identifikation af brugerkrav
  2. Udvikling af modellen
  3. Eksperimenteren med modellen
  4. Justering eller idriftsætning af modellen

I begyndelsem resulterer eksperimenterne med modellen krav fra brugerne om ændringer. Disse krav fører så til justering af modellen efterfulgt af fornyet eksperimenteren.

Når modellen opfylder brugerens krav, sættes den i egentlig drift.

[Beyer m.fl. "Systemudvikling og forandring" s. 203-208]

1.2.6 Objekt-orienteret systemudvikling

Objekt-orienteret systemudvikling er i kommerciel henseende en relativt ny teknik, som er baseret på opbygningen af biblioteker med genbrugelige moduler.

Objekterne er abstraktioner baseret på datastrukturer med et tilhørende sæt funktioner til manipulation af datastrukturen. Der er derfor en vis lighed mellem et objekt og det abstrakte begreb en tilstandsmaskine.

Princippet er genstand for stor interesse i tidsskrifter og litteratur; men det er endnu for tidligt at give et bud på princippets succes i relation til afskaffelse af softwarekrisen.

For nuværende kan man dog konstatere, at de objekt-orienterede principper har bevirket en udbredt refleksion over de metoder, man hidtil har anvendt, således som også denne hovedopgave er et udtryk for, og måske vil man om nogle år blot huske de objekt-orienterede principper, fordi de netop satte denne nye skepsis i gang.

1.2.7 Funktionel programmering

Et andet radikalt forsøg på at afskaffe softwarekrisen er baseret på anvendelsen af meget formalistiske principper, som indebærer krav om at softwares korrekthed skal bevises i forbindelse med udviklingen.

Programbeviset er baseret på opstilling af prædikater, der beskriver de betingelser, som de enkelte dele af programmet skal opfylde. Prædikaterne består af matematiske og logiske udtryk, som principielt skal kunne reduceres til det logiske udtryk "sand", for at programmets korrekthed er bevist.

Metoden må stadig betegnes som værende på et eksperimentelt stade; men den har ført til udvikling af en række konkrete såkaldt funktionelle programmeringssprog, hvor programmeringen sker i form af matematiske og logiske udtryk.

Som vi senere skal komme ind på, er der dog alvorlige brister indbygget i det teoretiske grundlag for dette paradigme, som gør, at man har svært ved at fæste lid til denne metodes generelle anvendelighed.

1.3 Men softwarekrisen er der endnu

I bogen "The Mythical Man-month" af Fred Brooks formuleres Brooks lov, som siger, at "hvis man tilfører mere mandskab til et forsinket projekt, gør man bare det hele endnu værre."

Brooks har siden (1987) i en artikel fremsat nogle dystre profetier om muligheden for at eliminere softwarekrisen. Konklusionen er, at softwarekrisen er en karakteristisk snarere end en tilfældig egenskab ved softwareudvikling, og at man lige så godt kan vænne sig til det som en permanent tilstand. [Brooks "No Silver Bullet"]

1.4 Kulturel revolution

En anden forfatter, Brad. J. Cox, mener dog, at en sådan konklusion er for pessimistisk.

Cox mener, at der måske alligevel er en mulighed for at komme over softwarekrisen; men det kræver nytænkning - en kulturel revolution - i stedet for de evindelige forsøg på at løse krisen med større eller mindre forbedringer af den hidtil anvendte teknologi.

Der har flere gange i historien været behov for nytænkning af hele grundlaget for den viden eller teknologi, man beherskede, når f.eks. denne viden ikke længere kunne bruges til at forklare de ting, man kunne observere.

Det er den samme tankegang, der ligger bag Thomas Kuhn's teori om videnskabelige revolutioner. Kuhn hævder, at videnskabens udvikling er karakteriseret ved en række revolutioner, hvor nye toretiske rammer og forudsætninger (paradigmer) indføres for derefter indtil den næste revolution at dominere videnskabsprocessen.

I disse perioder med normal videnskab er man først og fremmest optaget af at anvende det opstillede paradigme på forskellige områder uden at drage de forudsætninger, man arbejder ud fra, i tvivl.

Paradigmet er bestemmende for, hvilke spørgsmål man stiller sig, hvilke eksperimenter man gennemfører, og hvilke kriterier på korrekt videnskabelig aktivitet man anvender.

I en sådan periode vil vanskeligheder normalt blive forsøgt elimineret uden at foretage afgørende teoretiske forandringer. Først når der ophober sig en mængde anomalier, paradoksale forhold som man ikke kan forklare ved hjælp af det accepterede paradigme, sker der en videnskabelig revolution. [Jensen "Videnskabsteori" s. 210ff]

Et eksempel på en videnskabelig revolution var f.eks. da det Ptolemæiske verdensbillede med jorden som centrum i 1500-tallet blev erstattet af det Kopernikanske verdensbillede med solen som centrum.

En tilsvarende teknologisk-kulturel nytænkning kan blive aktuel, når vi mennesker ikke kan skaffe os føde, tøj på kroppen eller varme i vores bolig.

Overgangen fra jæger- og samlerkulturen til agerdyrkningskulturen i stenalderen er et eksempel på en sådan revolution, som på én gang kunne mangedoble det antal mennesker, som et givet område kunne brødføde.

Tættere på vor egen tid har vi i begyndelsen af 1800 tallet oplevet det, som er blevet betegnet den industrielle revolution, som på dramatisk vis har ændret mulighederne for at fremstille store mængder varer med en ensartet kvalitet.

Cox foreslår et paradigmeskift , som også indebærer en revolution, hvorefter softwareudvikling vil være baseret på genbrugelige og udskiftelige dele.

Cox har den vision, at software i fremtiden vil blive opbygget af standardelementer, som kan hentes ud fra et bibliotek, ligesom færdigproducerede varer kan hentes fra et lager.

Der er dog en række barrierer, som først skal overvindes, før visionen kan blive gjort til virkelighed. Et af nøgleproblemerne bliver således opbygningen af et marked for software standardelementer. [Cox "There IS a Silver Bullet"]

Den vision, Cox har, er forankret i de objekt-orienterede principper. Selvom denne vision er udganspunktet for denne hovedopgave, er visionen nok for snæversynet, hvis den alene skal opbygges på principperne bag objekt-orienteret programmering.

Den grundlæggende idé om behovet for et paradigmeskift, fordi de nu anerkendte metoder har spillet fallit, kan man dog nok blive enige om.

I stedet for blot at tale om en kulturel revolution er det mere relevant at tale om en kultursociologisk revolution. Målet med revolutionen er herefter ønsket om at se softwareudvikling i et større perspektiv.

Det nye perspektiv skal ikke kun være tværfagligt, det skal være flerfagligt. Især er det vigtigt, at man inddrager flere humanistiske discipliner til supplement af de naturvidenskabelige discipliner som grundlag for softwareudvikling.

Indlagt 27. april 1997