Derfor opstår der fejl i softwareudvikling
Udgivet: July 19, 2018
Senest opdateret: December 08, 2022
Udgivet: July 19, 2018
Senest opdateret: December 08, 2022
Estimeret læsetid: 13 minutter
Du undrer dig måske over, hvorfor mennesker kan lykkes med at gennemføre store og komplekse byggeprojekter, og alligevel kæmper it-virksomheder med at levere softwareprojekter uden fejl. Her vil vi drøfte nogle grunde til, at der opstår fejl i softwareudvikling samt forslag til, hvad der kan gøres for at reducere eller helt undgå disse fejl.
I grove træk så kan “programmeringsfejl” opdeles i to kategorier:
Den første består i egentlige fejl, hvorved noget ikke fungerer, mens den anden mere er en "forståelsesfejl", hvor kunden forventede et andet resultat, end dét han eller hun modtog.
Vi gennemgår mulige årsager til begge disse kategorier. Disse årsager er ikke stillet op for at indgyde tolerance overfor sløset softwareudviklingspraksis - men snarere for at sige, at selv når alt vedrørende processen er godt på plads, så er softwareudvikling stadig et meget udfordrende område.
En programmeringsfejl er en fejl, der får en hjemmeside, webshop, app eller anden software til pludselig ikke at virke eller at opføre sig underligt i forskellige situationer. Dette sker normalt på grund af en fejl i koden, eller fordi et eksternt system ikke fungerer som forventet.
Programmeringsfejl kan være særdeles frustrerende, fordi de ofte forekommer på de mest ubelejlige tidspunkter og i uventede “hjørner” af dit system.
Typisk opstår der fejl fordi udvikleren:
Når alt kommer til alt, så skabes software af mennesker, og mennesker vil uvægerligt begå fejl. Da mennesker udvikler software, vil det være irrationelt at forvente fejlfri software.
Når det så er sagt, er det også en kendsgerning, at al software, der er udviklet til at fungere med bestemte formål, er ekstremt kompleks, og ingen enkeltperson kan let overskue det hele.
Hver kodelinje kan have tusinder af mulige inputs, outputs, tilstande eller afhængigheder at holde styr på. Man kan sige, at hvor vi ganske vist kan dokumentere alle eventualiteter for hver kodelinje, så kan vi alligevel ikke være sikre på, at der ikke er nogen ukendt faktor, der kan forårsage en fejl. En kodelinje er en del af et helt system, og hele systemet skal testes for at sikre, at alle dele af applikationen fungerer korrekt.
Ud over den kode som udgør et stykke software, er der også mange eksterne faktorer, der kan påvirke dets kvalitet. Disse faktorer ligger udenfor udviklerens kontrol, og forsøg på at rette systemet ind efter udfordringerne, som disse eksterne faktorer medfører, kan forårsage øget tidsforbrug og udviklingsomkostninger. Her er nogle ting, der skal med i overvejelserne:
Hvordan udfører din softwareudvikler tests?
Det er vigtigt at forstå og være enige om, hvordan dit softwarehus skal udføre deres softwaretest, så du ikke ender med at være nødt til at teste systemet selv.
Mange virksomheder hyrer freelancere, der ofte ikke har den infrastruktur eller tid, der er nødvendig for at kunne teste deres eget output. Desuden overser mange udviklere fejl, når de selv er dem, der tester det, de har udviklet. Problemet hér er, at når du er den, der har udviklet systemet, tester du ofte med de samme data og på samme måde. Det er dermed let at overse fejl, som måske havde været mere indlysende for andre personer, som ikke var en del af udviklingen fra starten.
Test skal udføres af personer, hvis eneste job det er at teste, og som har erfaring med, det de laver. For det første vil de være meget hurtigere til det. For det andet gør deres erfaring dem i stand til hurtigt at opdage fejl og dokumentere dem korrekt, så udviklerne kan rette fejlene.
Softwares kompleksitet betyder, at det er umuligt at teste det i alle retninger. Softwarefirmaer løser dette problem ved at implementere forskellige processer, såsom at sætte standarder for kodning og benytte forskellige testmetoder.
Automatiseret test er én praksis, som virksomheder kan implementere for at spare tid og gøre tingene hurtigere. Det er imidlertid vigtigt først at overveje omkostningerne ved dens implementering, før det sættes i værk.
Hvis du kun opdaterer din software en eller to gange om året, vil det sandsynligvis blive for dyrt at udvikle automatiserede tests - medmindre det er til applikationer, hvor omkostningerne ved fejl er så høje, at de overstiger omkostningerne ved at udvikle automatiserede tests.
Automatiseret test er især gavnligt til software, hvor du konstant foretager små ændringer og opdateringer måske 3-4 gange om ugen. Desuden er det nærmest umuligt at teste et system 3-4 gange om ugen, så det bliver da ligefrem nødvendigt med automatiserede tests.
Udviklere indarbejder også "programbidder" i deres kode, som automatisk tester dele af systemet. Det er noget af en kompliceret proces, men det er dybest set et stykke software, der automatisk validerer et andet stykke software, når det bliver leveret. Hvis resultaterne ikke stemmer overens, bliver udvikleren underrettet om den fejl, der skal rettes.
Unit test og automatiseret test er to elementer, der bruges i Continuous Integration (CI), hvor en udvikler - i en perfekt verden - blot skal trykke på en knap, når han eller hun afslutter en opgave, hvorefter den automatisk testes og installeres.
Man tester hver gang en udvikler har foretaget en ændring eller opdatering af systemet.
Softwaretest er en opgave, der tager tid. Det er en almindelig fejltagelse ikke at teste nok eller helt at se bort fra testfasen, fordi tests forbindes med høje omkostninger og stort tidsforbrug. Dette resulterer imidlertid i, at der kæmpes med fejl, og alle involveret i projektet frustreres, når dét bliver endnu dyrere, og ender med at tage endnu længere tid.
Her er nogle tilgængelige metoder:
De fleste kunder eller brugere ved ikke, hvad de vil have, før de ser det. Sandheden er ofte, at det først er, når de rent faktisk begynder at bruge softwaren, at de begynder at forstå, hvad de har brug for. På grund af dette ændrer krav og specifikationer sig konstant gennem udviklingsforløbet, hvilket også kan bidrage til de fejl, der dukker op i det endelige produkt.
Undersøgelser har vist, at et gennemsnitligt softwareudviklingsprojekt undergår cirka 25% ændringer i kravene fra “requirements of completion”-stadiet til dets første udgivelse. Dette er et almindeligt snigende og omsiggribende problem, der tynger næsten alle projekter. Almindeligvis begynder kunder eller deres brugere at snige nye krav ind, når de første designs er gjort færdige. Designet fungerer som et visuelt grundlag for dem til, at tænke dybere over hvad de i egentlig gerne vil have - og dermed lave ændringer.
Ændring af ethvert softwarekrav, selv en lille ændring, kan have utilsigtede konsekvenser. Høj grad af indbyrdes afhængighed mellem modulerne gør systemet fejlbarligt. Her er nogle eksempler:
Fejl opstår også som følge af misforståelser eller fejlkommunikation mellem kunden og udvikleren.
Udviklere er ikke tankelæsere, så du kan ikke forvente, at de forstår alt, hvad der skal gøres, og hvordan tingene fungerer i din branche, uden at alle detaljerne er forklaret. Der er ting, der kan være helt logiske for dig, men være volapyk for udviklere uden dit branchekendskab.
Her er nogle tips til minimering af denne type fejl:
Der er ingen stensikre regler, der kan udrydde softwarebugs, og som du har læst, er der mange faktorer, der spiller ind. Det betyder imidlertid ikke, at softwarefirmaer bare kan læne sig tilbage. I sidste ende er det kvaliteten af deres arbejde - og deres forretning - der står på spil her. Dét er grunden til, at softwareudviklingsfirmaer opretholder processer og indfører kvalitetssikring eller test-units. De investerer også i værktøjer og medarbejdere til at fange fejl, og i sidste ende forbedre kvaliteten af den software, de producerer.
AUTHOR
Peter Skouhus
En dansk iværksætter, der ejer 1902 Software Development, et it-selskab på Filippinerne, hvor han har boet siden 1998. Peter har stor erfaring inden for IT-udvikling, strategisk it-ledelse og salg.