Plettfri kode

Page 1

PLETTFRI KODE

Harald Heimtun Soleng og Eva Hadler Vihovde Hvordan forhindre feil i programvare?

Plettfrikode

HaraldHeimtunSolengogEvaHadlerVihovde

Plettfrikode

Hvordanforhindrefeiliprogramvare?

Universitetsforlaget

©Universitetsforlaget2022 ISBN978-82-15-06020-0

Materialetidennepublikasjoneneromfattetavåndsverklovensbestemmelser. Utensærskiltavtalemedrettighetshaverneerenhvereksemplarfremstillingog tilgjengeliggjøringbaretillattidenutstrekningdeterhjemletilovellertillatt gjennomavtalemedKopinor,interesseorganforrettighetshaveretilåndsverk. Utnyttelseistridmedlovelleravtalekanmedføreerstatningsansvarog inndragningogkanstraffesmedbøterellerfengsel.

Henvendelseromdenneutgivelsenkanrettestil: UniversitetsforlagetAS Postboks508Sentrum 0105Oslo www.universitetsforlaget.no

DeleravdennebokabaserersegpåISTQB,SertifisertTesterPensumfor grunnivå(FoundationLevel)norskversjon28.04.2019avHansSchaefer,Berit KristineHatten,ErnstvonDüring,MonikaStöcklein-Olsen,TorKjetilMoseng ogFransDijkmansomigjenerbasertpåCertifiedTesterFoundationLevel2018 V1.0.ISTQBharopphavsrettentilpensumforgrunnivå,ogtillatelseerblittgitt avISTQBtilåbrukedettematerialetiboka.

HaraldH.SolengharmottattstøttefraDetfaglitterærefond.

Omslag:EllenLorenzen

Illustrasjoner:ArnvidMoholt Sats:HaraldH.Soleng Trykk:07Media–07.no Innbinding:BokbinderietJohnsenAS Papir:100gArcticMatt1,0

Forord

Vårtmålmeddennebokaeråbidratilhøyerekvalitetiprogramvarevedå økebevissthetenomtestingensbetydning,samttilføreutvikleregrunnleggende kunnskapomtesting.Vigirrådogprinsipperforåskrivekodesomervedlikeholdbarogenkelåteste,ogpresentererviktigeprinsipperfordetålageutfyllende ogdekkendetester.Bokaerspesieltrettetmotdatateknologistudenter,ogkanmed fordelbrukessomlærebokifagsomprogrammering,programvareutvikling,testingavprogramvare,ogikkeminstunderarbeidetmedbachelor-ogmasterprosjekter.Bokaerimidlertidaktuellogsåutenforutdanningsinstitusjonene.Alleinvolverteparterietprogramvareprosjektbørettervårmeninghagodforståelsefor betydningenavtesting.Bådeoppdragsgiverenogprosjektledelsenmågiressurser ogtidtiltilstrekkeligkvalitetskontrollgjennomallefaseravutviklingen.

Selvomnoeavinnholdetidennebokakanvirkeselvsagt,tilsierlikevelerfaring atmangeprogrammerereogselskaperburdetakvalitetskontrollogtestingmye meralvorligennhvadegjøridag.Vihåperatdennebokaogeksempleneden inneholder,kanhjelpeprogrammerereogindustrientilåforbedreutviklingsprosessenslikatfærrefeilslippergjennomtildetendeligeproduktet.

Tiltrossforatmangeavtestteknikkenevigjennomgåriboka,kanbidratil åreduseresåvelutviklingskostnadersomutviklingstid,erdetviktigåforstå atdetåforhindreprogramvarefeilikkeergratis.Ibegynnelsenvildetforsinke utviklingsprosessen,ogdetkoster.Åignorererisikoenoglettepåtestregimet kosterimidlertidmyemeridetlangeløp.Nårfeilenetilsluttslårtilbakeetterå hablittfeietunderteppet,biterdehardere.Åfikseenbugikvalitetssikringstadietkosteristørrelsesordentigangermerennåoppdagedenunderutviklingen.Å rettedenetteratprogrammeterrulletut,ertypiskrundthundregangerdyrere.

Vihåperdufinnerbokainteressantognyttig.Skulledukommeoverfeileller mangler,ervitakknemligeforkommentarer.

VivilførstogfremsttakkeUniversitetsforlagetogjuryenikåringenav«Beste lærebokidé2021»foråhagittossmulighetentilåskriveogutgiboka.Dernest takkerviRoyM.Istadforkonstruktivekommentareroginnspill.HaraldH.Soleng takkerNorskfaglitterærforfatter-ogoversetterforeningforstøtteogNorskRegnesentralforensabbatsperiodeiettidligstadiumavarbeidetmedboka.Vitakker StormJaranBruvollWestlie,MajaWawrzyniakSolengogDanielBakkelundforå

i

hatattsegtidtilålesemanuskriptetogforåhakommetmednyttigekommentarer ogforslag. Oslo,oktober2022

HaraldHeimtunSoleng og EvaHadlerVihovde

ii

Innhold

Forordi 1Dødeligetegnogkommafeil1 1.1Kjentekatastrofer.......................... 1 1.2Feilsparterpengertjent...................... 4 1.3Leserveiledning........................... 4 2Kildertilfeil7 2.1Dårligproblemforståelse...................... 7 2.2Kryptiskkode............................ 8 2.3Dårligfundamentering....................... 9 2.4Åstolepådebuggere........................ 9 2.5Behandlesymptomeneistedetforsykdommen.......... 10 2.6Refaktorering............................ 11 2.7Oppsummering........................... 11 3Syvprinsipperfortesting13 3.1Prinsipp1.Testingkanikkebeviseatkodenerfeilfri....... 13 3.2Prinsipp2.Fullstendigtestingerumulig.............. 14 3.3Prinsipp3.Tidligtestingsparertidogpenger........... 15 3.4Prinsipp4.Feilsamlersegiklynger................ 15 3.5Prinsipp5.Passpåsprøytemiddel-paradokset........... 16 3.6Prinsipp6.Testingeravhengigavkonteksten........... 16 3.7Prinsipp7.Feilslutningvedrørendefraværavfeil......... 17 3.8Oppsummering........................... 17 4Arbeidsprosessen19 4.1Utviklingsprosessenforprogramvare................ 19 4.2Versjonskontroll........................... 21 4.3Oppsummering........................... 22 iii
5Testingiproduktetslivssyklus25 5.1Sentralebegreperogtestaktiviteter................. 25 5.2AktiviteteneihenholdtilV-modellen................ 30 5.3Defiretestnivåene......................... 32 5.4Defiretesttypene.......................... 38 5.5Oppsummering........................... 40 6Åforhindrefeil41 6.1Fagfellevurderingavkoden..................... 41 6.2Statiskkildekodeanalyse...................... 42 6.3Tilstandskontroll.......................... 44 6.4Versjonskontroll........................... 44 6.5Verktøyforåfinneminnefeil.................... 45 6.6Enhetstester............................. 45 6.7Integrasjonstesting......................... 49 6.8Systemtester............................. 50 6.9Akseptansetester.......................... 50 6.10Kontinuerligintegrasjonogautomatisktesting........... 51 6.11Avsluttendebemerkningerombug-feller.............. 51 7Solidogtestbarkode53 7.1Enkeltansvarsprinsippet:Enklasse,ettansvar........... 53 7.2Åpen/lukket-prinsippet....................... 56 7.3Liskovssubstitusjonsprinsipp.................... 56 7.4Prinsippetomseperasjonavgrensesnitt.............. 57 7.5Prinsippetominversjonavavhengigheter............. 57 7.6Avhengighetsinjeksjon....................... 60 7.7Veientilsolidkode......................... 60 7.8Oppsummering........................... 62 8Testprosessen63 8.1Planogkontroll........................... 64 8.2Analyseogdesign.......................... 65 8.3Testimplementeringogutførelse.................. 69 8.4Evalueringavutgangskriterierograpportering........... 71 8.5Avsluttendetestaktiviteter...................... 72 8.6Avsluttendeord........................... 73 9Statisketestteknikker75 9.1Granskninger............................ 76 9.2Statiskanalyse........................... 77 9.3Oppsummering........................... 77 iv

80

80

83

84

85

92

96

100

101

106

110

10Spesifikasjonsbaserteteknikker79 10.1Svartboks-testing..........................
10.2Ekvivalensklasseinndeling.....................
10.3Grenseverdianalyse.........................
10.4Grenseverdianalyseogekvivalensklasser..............
10.5Beslutningstabelltesting.......................
10.6Tilstandsbaserttesting........................
10.7Testingbasertpåbrukstilfeller...................
10.8Oppsummering...........................
11Strukturbasertetestteknikker101 11.1Testdekning.............................
11.2Oppsummering...........................
12Erfaringsbasertetestteknikker109 12.1Feilgjetting.............................
12.2Utforskendetesting......................... 110 12.3Oppsummering........................... 113 13Kildekodedokumentasjon115 13.1Ekstraherbardokumentasjon.................... 115 13.2Litterærprogrammering....................... 116 13.3Hvorfordokumentere?....................... 117 14Praktisktesting119 14.1Testrammeverk........................... 119 14.2Kontraktsrammeverk........................ 120 14.3Enhetstesteripraksis........................ 123 14.4Eksempelpåbrukavstatiskassert................. 126 15Testingenspsykologi129 15.1Utviklingversustesting—touliketankesett............ 129 15.2Uavhengigtesting.......................... 130 15.3Kunstenåformidleogmottanegativkritikk............ 132 15.4Testorganisering........................... 134 15.5Oppsummering........................... 135 16Automatiserttesting137 16.1Hvaerettestverktøy?........................ 137 16.2Potensiellefordelervedbrukavtestverktøy............ 138 16.3Risikofaktorerknyttettilbrukavtestverktøy............ 139 16.4Testautomatisering......................... 140 16.5Valgavtestverktøy......................... 144 v

145

17Testguideforstudentprosjekter147 17.1Generelleråd............................ 148 17.2Startfasen.............................. 149 17.3Programmetsfundament–kravspesifikasjonen.......... 151 17.4Analysertestforholdeneogdesigntesttilfellene.......... 152 17.5Dynamisktestinggjennomfiretestnivåer............. 153 17.6Regresjonstesting.......................... 155 17.7Ensistetest............................. 155 17.8Testingkanikkebeviseatkodenerfeilfri............. 156 17.9Avsluttendeord........................... 156

AEnfikspunktimplementering157 A.1Flyttallogfikspunkttall....................... 157 A.2Implementeringavfikspunktklasse................. 159 A.3Enhetstester............................. 174 A.4TestdekningforFixedPoint-klassen................. 186 A.5Matematiskefunksjoner....................... 197 A.6Testdekningformatematiskefunksjoner.............. 217 A.7Kildekodedokumentasjon...................... 226

Norsk–engelskordliste227 Engelsk–norskordliste231 Bibliografi235 Stikkordregister239

16.6Oppsummering...........................
vi

Kapittel1

Dødeligetegnogkommafeil

Åfeileermenneskelig,åtilgierguddommelig.

AlexanderPope

Sidendatamaskinenvilutføreordreslavisk,ogbrukerneneppeerguddommelige, såkandusomprogrammererikkeforventeåslippeunnamedfeil.Destoverreer atnoenbrukeresynesåglemmeatdatasystemerermenneskeskapteogderforkan inneholdefeil.Derforkannoentrafikanterfinnepååsettebileniautopilotmodus ogleseavisenmenssensorerogdataprogrammerovertarstyringen.

Vanligereerdetatdatafeilførertilirritasjon.Faktiskeretavdestørsteirritasjonsmomentenepånorskearbeidsplasserdatasystemersomikkevirker.Det kanværeprogrammersomerunødvendigtregeellersomregelrettkrasjerogførertiltaptarbeid.

Historienharimidlertidflereeksemplerpåkatastrofalekonsekvenseravdatafeil.Noenavdemestkjenteernevntnedenfor.

1.1 Kjentekatastrofer

Eksemplenesomfølger,viserattilsynelatendebagatellmessigefeilidataprogrammerkanfåalvorligefølger.

Mariner1-krasj

Mariner-programmet(1959–1963)tilNASAskjøtoppenserieinterplanetariske romsonderforåundersøkeMars,VenusogMerkur.I1962feiletoppskytingenav Mariner1pågrunnavenprogrammeringsfeil[1].Forfatterenavspesifikasjonsdokumentetforstyringssystemetoversåsymboletforgjennomsnitt,enstripe,ien håndskrevetformel,slikat rn bleerstatetmed rn.Istedetforåkorrigereutfra variasjoneriengjennomsnittsverdi,forsøktestyringssystemetåkorrigereforhver lilletilfeldigevariasjon.Alledemeningsløsekorreksjoneneendtemedatraketten havarerte[2].

1

Nesten-ulykkeibemannetromrakett

Mercury-programmetvardetførstebemannedeamerikanskeromprogrammet. Programmeringsspråketsomblebruktdengang,hetFortran,ogikodensom beregnetrakettensbane,fantesfølgendelinje: DO 17I=1.100

CONTINUE istedetfor DO 17I=1,100

CONTINUE

Haddeikkepunktumetblittrettettiletkomma,villeenkatastrofeskjedd.Fordet blotteøyevarforskjellenmellompunktumogkommabareenpikselpådataskjermen,menispråketFortranerdetforskjellenmellomtilordningavenverditilen variabelkalt DO17I (sidenFortrankanignoreremellomrom)ogdetågjentakodenfremtilmerkelappen 17 hundreganger[3].Dyptinneietdataprogramkan derforenlitentegnsettingsfeilfåfatalekonsekvenser.Heldigvisbledennefeilen funnetitide.

Ulikbrukavdesimaltegniulikespråkerforøvrigenhyppigkildetilfeil;engelskspråkligebrukerdesimalpunktogkommasomtusenskilletegn,mensman pådeflestespråkgjørdetomvendt(jf.tabell1.1).Pånorskbrukesdesimalkomma,meninnennorskakademiaerlikeveldesimalpunktpåfremmarsj.Sidende flesteprogrammeringsspråkerbasertpåengelsk,erdetdesimalpunktsomgjelder ikildekode.

Tabell1.1:Desimal-ogtusenskilletegn

TapavMars-sondenPhobos1

Iseptember1988mistetrussernesinPhobos1Mars-sondepågrunnavenfeili kommandoersomblelastetoppibegynnelsenavmåneden.Vanligvisskulleall kommunikasjonmedromsondengågjennomenautomatisksyntakskontrollsom sjekketatkommandoenefulgtedespesiellespråkreglenesomgjaldtfordatamaskinenisonden,menkorrekturlesersystemetvariustand,ogoperatørenmåttelaste oppkommandoeneutendennesjekken.DessverreresultertedetteiatPhobos1 mottoken avslutt-kommando somresulterteiatdatamaskinenbleskruddavog

21.Dødeligetegnogkommafeil
:: 17
:: 17
Engelskonemillion1,000,000.00 Norskenmillion1.000.000,00

detbleumuligåfåkontaktmedromsondenigjen[4].

Ariane5-krasjtilenhalvmilliarddollar

Somkjenterdatamaskinensminnekunistandtilålagreinformasjonbinært, somtallitotallsystemet.Heltallkanlagrespåulikemåteridataminnet.Erman sikkerpåattalletf.eks.ermellom0og255,klarermansegmedåttesifferitotallsystemet.Dakanmanbrukedetsomkalleset8-bitersusignerttall.

Den4.juni1996krasjetenAriane5-rakettpågrunnavdatakonverteringfraet 64-bitersdesimaltalltilet16-bitersheltallmedfortegn.Datalletblestørreenn 32767,somerdetstørste16-biterssignerteheltallet,fikkmandetsomkalles heltallsoverflyt.Datatypenvarikkeistandtilålagredetriktigetalletogdermed mistetmanstyrings-oghøydeinformasjon[5].Resultatetvaratrakettenskarut avbanenogeksploderte(figur1.1).

Rakettenognyttelastenvarverdsatttil500millionerdollar.Idettetilfelletvar detbarematerielletap,menandregangerharprogrammeringsfeilgittdødelige resultater.

Figur1.1:Ariane5-raketteneksplodertesomfølgeavheltallsoverflyt.Foto:ESA.

Menneskelivtaptdaluftvernmissilfeilet

Programmeringsfeilharogsåførttiltapavmenneskeliv.Eteksempelvar25.februar1991daetPatriot-missilikkeklarteåavskjæreetirakiskScud-missil,som derettertraffenamerikanskbaseogdrepte100soldaterogskadet100andre. Feilenskyldtesaritmetiskefeilitidsberegninger[6].Multipliseringavdeninterne klokketidenmed1/10foråfåtidenisekunderblegjortiet24-bitersregistermed tallmedetfastantalldesimaler.Dettegavenavrundingsfeilpå 0,000000095 s hverttiendedelssekund.Etter100timeroperasjonstidhaddedeninterneklokken tikket 100 t 60 min/t 60 s/min 10 (tiendedelssekund)/s =3600000 tiendedels sekunder.Dahaddefeilenakkumulerttil 3600000 tiendedelss · 0,000000095 s/(tiendedelss) =0,34 sekunder

3

41.Dødeligetegnogkommafeil

DettevarnoktidtilatScud-missilethaddebevegetsegmerennenhalvkmslikat Patriot-missiletmistetmålet.Ivirkelighetenskulleimidlertidikkemåletsposisjon avhengeavabsoluttklokketid,menavtidenmellomtoradarpulser,såavrundingsfeilenskulleuansettværtneglisjerbar.Problemetvaratenmernøyaktigfunksjon foråoversetteklokketidentilflyttallhaddeblittintrodusertidet20årgamlesystemetslikatdetkunnehanskesmedhurtigere,modernemål,menmanhaddeoversettåintroduseredennyefunksjonenoveralt.Ensubtraksjonavtotiderberegnet pånyoggammelmåtegavdenstorefeilenpå 0,34 sekunder.

Oljeplattformsankog2,3milliarderkronergikktapt

Iaugust1991sankSleipnerA-plattformeniGandsfjordenetteratetavplattformbeinaspranglekk.Ulykkenskyldtesalvorligefeiliennumeriskstyrkeberegning [7].Beregningeneundervurderteskjærkreftenemed47%iveggenetilplattformbeina.Detteresulterteiensprekk,slikatplattformensank[8].Heldigvisslapp allede22ombordfradetmedlivetibehold,menforsikringsutbetalingeneblepå 2,3milliarderkroner[9].

1.2 Feilsparterpengertjent

Selvomikkealledatamaskinfeilharkatastrofalekonsekvenser,hardeflestebrukerneerfartirriterendedatafeilsomharkostettidogpenger.Forutviklereerdet spesieltirriterendenårkodemanharskrevet,feilerpågrunnavfeilieldrekode.Å feilsøkeogrettekodemanikkeerkjentmed,erbådetidkrevendeogrisikabelt,og kantilogmedføretilnyefeil.Derforerdetiallesinteresseatutviklerefokuserer pååunngåfeil,ogatdebrukermetodersomredusererfeilrisikoentiletminimum.

Førvikansikreossmotatdetlagesslikefeil,måvifordetførsteforståhvordanfeiloppstår,ogdernesthvordanvikanfinneogrettedisseførdeledertil katastrofer.Denestekapitlenevilbidratildette.

1.3 Leserveiledning

Dennebokavendersegmotallesomerinvolvertiprogramvareutikling.Noen kapitlerermestrelevanteforprogrammererne,mensandreerrettetmermotprofesjonelletestere.Prosjektledereogoppdragsgiverevilogsåhanytteavboka.

Kapitlene1til6børlesesavalle.Kapittel7,somhandleromåskrivesolidog testbarkode,erhovedsakeligrettetmotutvikleresomselvskriverkode.Eksempleneidettekapitleterbasertpåprogrammeringsspråket C++,mendeflesteav prinsippeneeroverførbaretilandreprogrammeringsspråk.Kapitlene8til12går gjennomtestprosessenogdeuliketestteknikkeneogkreveringenforkunnskaper iprogrammering.Kapittel13ogkapittel14omhandlerkildekodedokumentasjon ogpraktiskimplementeringavtesterogermestrelevantfordesomselvskal skrivekildekode.Kapittel15omtestingenspsykologibørlesesavalle,mens

kapittel16omautomatiseringernokmestrelevantfortestereogprosjektledere. Testguidenikapittel17ermyntetpåstudenterogandresomharsmåprogramvareprosjekter.IappendiksAutviklervien C++20 klasseforåhåndterefikspunkttall. Dettetilleggetpasserforleseremedgodkunnskaptil C++ somvilseendetaljert implementasjonogenhetstestsuitesombenyttersegavteknikkenesomeromtalt iboka.

5

Kapittel2

Kildertilfeil

Hvemsomhelstkantafeil,menbaretåpenholderfastvedsin feiltagelse.

MarcusTulliusCicero Tenkpåprogramvaresomenproblemløser.Forenspesiellklasseavproblemer skalprogramvarenværeistandtilåfinneenløsning.Feiliprogramvarefører ententilfeilløsningelleringenløsningidetheletatt.Selvomprogrammetprodusererriktigresultat,kandetlikevelbrytemedkravenesomoppdragsgiverhar satt,dersomresultatetblirfunnetførstetterlangtid.Ofteertregprogramvare bareetirritasjonsmoment—entimeglassmarkørsomvarerforlenge—meni sanntidsapplikasjonerkantreghetværelivstruende.Hvaomdukommerutforen bilulykkeogprogramvarenibilendinersåtregatkollisjonsputeneikkeutløsesi tide?

Førvikanhåpepååredusereantalletogalvorlighetsgradentilprogramvarefeil ikodensomviskriver,trengerviåforståhvorforprogramvarefeiloppstår.Nårde vanligekildenetilproblemeneerkjent,erdetlettereåtagrepforåtaondetved roten.

SomCiceropåpekte,kanhvemsomhelstfeile,ogderforkanprogramvarefeil oppståheleveieniutviklingsprosessen,heltframanførstinnseratdetfinneset problemsomtrengerenprogramvareløsning,tildesistestegeneiprogrammeringen.Detkanværefeiliproblemforståelsen,feilispesifikasjonenogsist,menikke minst,iimplementeringen.Feilenekanoppståpåmangemåter.Idettekapitletgår vigjennomhyppigforekommendekildertilfeil.

2.1 Dårligproblemforståelse

Enforutsetningforkorrektproblemløsningeråhatilstrekkeligforståelseavproblemet.Dettekanvirkeselvsagt,menuheldigviserdetikkeuvanligiindustrien atmankastersegoverproblemetogbegynnerproblemløsningførmanvethva

7

problemeter,ogendamindrehvakriterietforsuksessvilvære.Dethenderat oppdragsgivermanglerforståelseforproblemetsomskalløses,ogdermedblir spesifikasjonenuklar.Altforoftestarterstoreprogramvareprosjekterutenatde involverteharforståelseavdegrunnleggendesidenevedproblemet.Selvomden fundamentaleforståelsenvanligviserder,eroftespesifikasjonenvagogmangelfullnårdetgjeldertestbarekrav.Nårprosjektteametomsidernårenbedre forståelse,børprosjektettakostnadenvedårettedårligedesignbeslutningerfattet påsviktendegrunnlagtidligidenforvirredeoppstartsfasen.Hvisikkevildisse designfeileneforplantesegiprogramvaresomblirvanskeligåvedlikeholdeog videreutvikle.Detteviluvilkårligledetilprogramvarefeilisluttproduktet.

Enannenkildetilfeilerprogrammeringmotet bevegeligmål.Problemetoppstårnårspesifikasjonenendressentiutviklingsløpet,ogutviklernemåhackemodifikasjonerisisteøyeblikk.Dettekanskjeomikkesluttbrukerensbehovharvært tilstrekkeligivaretattidenopprinneligespesifikasjonen,ogmanfinnerutatdesignetmåendresmotsluttenavutviklingen.Selvfølgeligmåmanværeistandtil ågjøresmåjusteringerheltopptilendeligkodeleveranse,mennoengangerkan tilsynelatendesmåforandringertvingefremstørredesignendringer.Isliketilfeller erdetbedreåtakostnadenmedåredesigne,hellerennåarbeidesegrundtdesignbegrensningermed adhoc snarveierbareforåfåsisteendringtilåvirke.Selvom detkanimplementeresraskt,erslikeløsningerofteineffektive,liteelegante,ogtil ogmedvanskeligeforandreåforstå,ogledertypisktilbug-infisertkodesomblir vanskeligåvedlikeholde.Josenerespesifikasjonsendringerkommer,dessstørre errisikoenforåproduserehekkeplasserforprogramvarefeil.

Nåretteamavsmartemenneskerstårfastogikkekommervidereietprosjekt, erdetvanligvisfordiproblemeterdårligformulert,ogikkeforditeametersvake påproblemløsning.Islikesituasjonerharmanallgrunntilåbegynnedenkreative prosessenmedådefinereproblemetutenåfalletilbakepådeopprinneligeuklare problembeskrivelseneogvagesuksesskriteriene.Førstnårproblemeterveldefinertogtestbarekriterierforsuksessforeligger,vilteametkunnesemåletmed prosjektet.Fordiåforståeråoppnå,girdetteenutroligsamlendeenergioget bestemtdrivmotdetåfullføreprosjektet.

2.2 Kryptiskkode

Enhverprogrammererbørhuskeenting:Duskriverikkekodeforkompilatoren. Ganskeriktigkommerduingenveiførkompilatorenakseptererdetduharskrevet, menmedmindreduskriversmåtrivielleprogrammer,vildevirkeligebrukerne avdinkodeværefremtidigekollegaersomfårioppgaveåutvideogvedlikeholde systemet.Hvisdeikkekanforståkoden,såerdetgodtmuligduhellerikkegjorde det.Selvomenprogrammerermåværesværtpresisnårdetgjelderåforholdeseg tildatamaskinspråketsgrammatikk,såerinnholdetfritt.Misvisendevariabel-og funksjonsnavneringenhindringforenkompilator,menkryptiskkodeerofte

82.Kildertilfeil

tegnpådårligproblemforståelseellerslurveteformuleringavidéer.Selvomprogrammetvirkersomforutsatt,vildinefremtidigekollegaerkanskjeblinødttilå kastedetduharskrevet,oggjørejobbenpånytt,hvilketselvfølgeligertapttid ogpengerforselskapet,ellersåmisforstårdekodenogintroduserernyefeilnår kodenskalendresellerutvides.

Uansettbørdustreveetteråskrivekodesomkanbliforståttavandremennesker. Detharstorverdiågivariabler,klasserogfunksjonernavnsombeskriverhvade representerer,oghvilkeoppgaverdeutfører.Pådenannensidekanikkenavnbli altforlangeogomstendeligeutenatdetskaderkodenslesbarhet.Derforkanet navnsjeldenforklarelikegodthvanoeer,somenutfyllendetekstligforklaring, envisualiseringellerenmatematiskformel.

Manhøreroftefolksiatdeskriverselvdokumentertkode.Noesliktfinnes ikke.Utenmedfølgendedokumentasjoneringenprogramvareselvforklarende. Ordenesbetydningavhengeravkonteksten,ogsammeordkanbetyforskjellige tingforfolkmedulikbakgrunn.Tadetengelskeordet map.Detkantolkespå mangemåter.Forenmatematikererdetenfunksjonelleravbildning,forenC++ programmerererdetenklasseiSTL(StandardTemplateLibrary),ogformange andreerdetetkartmanbrukerinavigasjon.

Storesoftwareprosjekterinvolverersomregelfolkframangeulikedisipliner.Du finnermatematikere,fysikere,statistikere,programvareingeniørerogsystemingeniører,somjobbersammenpåsammesoftwaresystem.Selvforklarendekode formenneskerfraéndisiplinkanværekryptiskforfolkmedenannenbakgrunn. Skikkeligdokumentasjonmedreferansertilandredokumenterkanbidratilåunngåmisforståelser.

2.3 Dårligfundamentering

DetskjevetårnetiPisaeretgodteksempelpåkonsekvenseneavåbyggepå utilstrekkeligsolidfundament(figur2.1).SelvomPisabynåtjenergodepenger påskjevheten,erdetaldrigodtnårdårligfundamenteringvelterprogramvare. Ietprogramvareprosjekterfundamenteringenspesifikasjonen(ognoenganger dematematiskemodellene)sombyggeroppunderimplementeringen,systemarkitekturen,kompilatorenogbibliotekersombrukesforåutviklesystemet.

Kodenbliraldrimersolidennfundamentetdenbyggerpå.Derforskalmanikke stolepåspesifikasjoner,matematiskemodellerellerprogramvarebibliotekersom ikkeergrundigkontrollertogtestet.Ellersrisikerermanåbyggeenkolosspå leirføtter.

2.4 Åstolepådebuggere

Åslurvemedkodenogtroatdebuggerevilglatteoveralleproblemene,ersomå væreenuansvarligbilkjørersomhåperpååreddesavelektroniskstabilitetskon-

9

Figur2.1:Dårligfundamenterttårn.

troll,blokkeringsfriebremserelleriverstefallavkollisjonsputene.Debuggereer nyttigeforåfinneogkorrigerefeil,mendevirkerbaredersomnoenfaktiskvetat feilenfinnes.Defarligstefeileneergjernedemanikkevetom.Slurveteprogrammeringledertilmangeflerefeilenndunoensinnevilvite.Sikkerhetssystemer kanreddedegimangetilfeller,mendeterfåidiotsikresystemer,ogprogrammeringerabsoluttikkeenavdem.Derforkrevesdetstorgradavnøyaktighetog ansvarlighetnårduskriverprogrammer.

2.5 Behandlesymptomeneistedetforsykdommen

Innenformedisinerdetgodtkjentatsymptombehandlingrettogslettkanvære farlig,ogatmanalltidbørsøkeåfinneogkurereårsakentilproblemeneogikke baredempesymptomene.Sammeregelgjelderiprogrammering.Åfåetsystemtil åpassereenspesielltestved adhoc parameterjusteringellervilkårligeendringer ialgoritmerkanskjulesymptomerpåalvorligeproblemer.

EdwardAloysiusMurphyJr.varenflyingeniørsomarbeidetmedsikkerhetskritiskesystemer.Ifølgehanssønnskalhanhasagt:

Hvisdeterfleremåterågjøreentingpå,ogenavdemvilføretil katastrofe,daerdetdetsomvilbligjort.

Skjultesymptomerpåproblemerledergjernetilstørrefeileller–ihenholdtil Murphyslov–enkatastrofepåetseneretidspunkt.Udokumenterteogdårlig

102.Kildertilfeil

Programvarefeil skaper i beste fall irritasjon hos brukeren. I verste fall fører de til katastrofale ulykker og enorme kostnader. Testing av programvare er dermed en avgjørende kompetanse i utviklingen av de datasystemene vårt samfunn er blitt så avhengig av i dag.

I Plettfri kode får du en engasjerende innføring i sentrale temaer som: Ulike kilder til feil i programvare Prinsipper for testing Ulike testdesign og testteknikker Arbeidsprosess og dokumentasjon

Du lærer konkrete strategier, testteknikker og retningslinjer for utvikling av kvalitetssikret kode. Kodeeksemplene i boka er skrevet i C++ 20, men prinsippene er overførbare til andre programmeringsspråk.

Plettfri kode er læreboka om testing av programvare, skrevet for program vareutviklere, programmerere og testere, enten de er studenter eller i jobb. Den er også nyttig for prosjektledere, da den gir verdifull informasjon om hvordan testing øker kvaliteten på sluttproduktet, og bidrar til å spare tid og penger.

Harald Heimtun Soleng jobber i Kongsberg Defence & Aerospace der han utvikler programvare for autonom ruteplanlegging og målgjenkjennelse for missilsystemer. Han er utdannet fysiker fra Universitetet i Oslo, med en dr.philos. i gravitasjonsteori, men siden 1997 har han jobbet med programvareutvikling og programvaretesting for instituttsektoren og industrien.

Eva Hadler Vihovde er førstelektor ved Institutt for informasjonsteknologi ved OsloMet – storbyuniversitetet, der hun har undervist i programmering og programmeringsrelaterte fag, kunstig intelligens og diskret matematikk siden 1992. Hun underviser også i emnet «Testing av programvare» ved Universitetet i Oslo. I 2021 ble hun tildelt status som merittert underviser ved OsloMet.

82 15 06020 0

ISBN 978

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.