Experimentell verifiering av feldetektering och feltolerans. Inledande prov med felinjicering på gränssnitt

Storlek: px
Starta visningen från sidan:

Download "Experimentell verifiering av feldetektering och feltolerans. Inledande prov med felinjicering på gränssnitt"

Transkript

1 Experimentell verifiering av feldetektering och feltolerans Projekt P9 inom Forskning och teknikutveckling för anpassning Inledande prov med felinjicering på gränssnitt Författare Håkan Edler Siv Hermansson Jan Sinclair Dokument Id WP3 0_5.doc Version 0.5 Datum 14 november 2001 Tillgänglighet Status FoTA P9 Slutligt utkast för godkännande Granskad av Datum HiSafe AB Östra Palettgatan 5 Tel GSM V FRÖLUNDA e-post hisafe@hisafe.se

2 Sammanfattning FoTA P9 syftar till att introducera automatisk provning med felinjicering som ett effektivt verktyg för att verifiera och validera datorprogram. I tidigare arbetspaket inom projektet har vi byggt upp en provningsmiljö för flygdatorn MACS från Ericsson Microwave Systems. Den är baserad på utvecklingsmiljön SEEMACS. Provningsmiljön är ett programsystem, som vi kallar FINT Fault Injection for Testing. I tidigare arbetspaket har vi också analyserat arkitekturen för programmen i SD Gripen och gjort modeller av tänkbara fel. FINT ger en systemutvecklare möjligheter att automatiskt prova funktioner och begränsningar i programenheter genom anrop av deras operationer med systematisk variation av värden på parametrarna. FINT genererar automatiskt provfall genom kombination av värden ur parametrarnas värdeförråd. Ett stort antal provfall kan skapas automatiskt, där såväl giltiga som ogiltiga värden tas med. FINT initierar och exekverar provfallen samt loggar resultaten. I de nu genomförda arbetspaketen har vi använt FINT för prov på programenheter, som är i drift för MACS. Rapporten behandlar uppläggning och genomförande av de prov vi gjort, diskuterar resultaten och ger förslag till hur det fortsatta arbetet skall läggas upp. Resultaten visar, att man med vår metod på ett mycket effektivt sätt kan verifiera och validera funktioner och begränsningar hos programenheter. Det är ett nytt sätt att prova program och som ger en utvecklare nya insikter i hur program kan konstrueras och byggas.? HiSafe AB WP3 0_5.doc av 21

3 Dokumentets historik Version Författare Datum Ändringsinformation 0.1 HE, SH, JS 12 dec 2000 Ny 0.2 HE, SH, JS 15 dec 2000 Kompletteringar 0.3 HE 15 dec 2000 Kompletteringar 0.4 HE 9 jan 2001 Remiss HE 18 feb 2001 Justeringar efter EMW påpekanden 0.5 HE 14 nov 2001 Justeringar före slutremiss? HiSafe AB WP3 0_5.doc av 21

4 Innehållsförteckning 1. BAKGRUND TIDIGARE ARBETE Forskning i feltolerant programvara på Chalmers Arbete inom FoTA P PROV I EXISTERANDE PROVMILJÖER METODFÖRSÖK PÅ PROGRAM FRÅN SAAB Använd teknik för källkodsprov Prov av GES_EIU_TEST Genomförande och resultat METODFÖRSÖK PÅ PROGRAM FRÅN ERICSSON MICROWAVE SYSTEMS Använd teknik för prov av programenheter Komplettering för FINT Genomförande och resultat RESULTAT AV METODFÖRSÖKEN FORTSÄTTNING REFERENSER... 21? HiSafe AB WP3 0_5.doc av 21

5 1. Bakgrund FoTA P9 är ett projekt för överföring av ny teknik från forskningen vid institutionen för Datorteknik vid Chalmers tekniska högskola till praktisk användning i svensk industri. Pålitliga datorsystem har sedan halvtannat decennium varit ett huvudområde för forskningen vid institutionen, främst med inriktning på datorers maskinvara. Sedan början av 90-talet har intresset breddats till att också omfatta programvaran och Håkan Edler har drivit ett projekt för forskning på pålitlig programvara. Syftet med forskningen har varit att studera:?? metoder att analysera tillförlitligheten i programsystem,?? metoder att kvantifiera tillförlitligheten,?? algoritmer för att konstruera feltoleranta program och?? mekanismer att realisera dem. Forskningsprojektet har skapat en mängd ny kunskap, som publicerats på internationella konferenser och i vetenskapliga tidskrifter. Som en del i det projektet har vi på institutionen byggt en experimentmiljö för att kunna verifiera funktionerna hos provade algoritmer och mekanismer för feltolerans och för att kunna validera tillförlitligheten. Fel är sällsynta i beprövade program. För att kunna prova programmens förmåga att hantera fel måste man därför forcera feltillstånden. Det gör man genom att artificiellt införa fel i programmen under exekvering och det kallar vi felinjicering. För att få statistiskt säkra resultat räcker det inte med injicering av enskilda fel, utan ett stort antal fel injiceras under ett experiment. Den experimentmiljö vi byggt är därför en speciell form av system för automatisk provning av program, där ett stort antal fel genereras automatiskt och injiceras i de provade programmen. Beteendet hos det provade systemet loggas och analyseras i efterhand. I de system vi kört på institutionen har vi injicerat fel och observerat deras effekt på systemnivå. I stora system har ett sådant förfarande troligen begränsad användning, då sambanden mellan ett injicerat fel och systemets felbeteende kan vara svåra att förstå, då systemet är oöverblickbart. Därför gör vi också försök med att injicera fel i gränssnitten på programenheter och observera deras beteende. Ett sådant system kan vara användbart för att:?? Prova funktionerna hos en programenhet automatiskt med ett stort antal värden på automatiskt genererade provdata.?? Vara en provbänk för regressionsprov av en programenhet, då proven och deras sekvens är förutbestämd och resultat från nya prov kan jämföras med gamla.?? Prova robustheten hos en programenhet genom att genererade provdata ges ogiltiga värden.?? Prova feltoleransen hos det system modulen ingår i genom att forcera ett felbeteende hos den provade programenheten. Det blir en felkälla i det överordnade systemet. På våra forskningsresultat har vi i FoTA P9 byggt en provbänk för automatisk provning av programenheter för datorsystemet MACS från Ericssons Microwave Systems. Provbänken utnyttjar dess utvecklingsmiljö SEEMACS. I provbänken kan man definiera de variabler som finns i gränssnittet till en programenhet och vilka värden de skall ha som provdata. För anrop av en provad programenhet kan man också definiera ett godtyckligt prefix för att sätta programenheten i ett givet tillstånd före ett prov och ett suffix för att ta hand om resultatet av provet. Den tillämpning vi inriktat arbetet på är programvaran i systemdatorn för JAS 39 Gripen. Vi har kört prov på några programenheter, dels ur den generella programvaran för MACS, dels på en del av provningsprogrammen för systemdatorn. Det vi kört hittills är enbart funktionsprov och prov av robusthet. Resultaten av proven är mycket lovande och visar att man kan ha stor nytta av tekniken för verifiering av programenheter.? HiSafe AB WP3 0_5.doc av 21

6 2. Tidigare arbete 2.1 Forskning i feltolerant programvara på Chalmers Forskningen på Chalmers har främst inriktats på studier av felhantering och felpropagering. Som försöksobjekt har vi använt ett tämligen litet, inbyggt system och gjort en omvärldssimulator till det. I en inledande serie försök gjordes felinjicering i källtexten till programmen [Chr98]. 100 fel fördes in i var sin variant av programmet och samtliga programvarianter kompilerades. Ett antal provfall med varierande omvärldbetingelser definierades för varje fel och lagrades för att användas som styrdata. Provningssystemet läste dessa styrdata, laddade ned program i måldatorn och startade den. Provningssystemet satte sedan parametrarna för omvärldssimulatorn och startade den och därigenom exekverades provet. Resultaten av varje prov lagrades för senare utvärdering innan nästa provfall initierades och kördes. På så sätt körde vi ett mycket stort antal provfall automatiskt. I senare försök i samma provningssystem med mindre ändringar har forskargruppen sedan studerat effekten av att injicera feltillstånd direkt i exekverande program i stället för de felkällor ändringarna i källtexten ger [CRH98]. Vidare har man studerat effekten av att göra programmen robusta med hjälp av exekverbara utsagor [Hil98] och hur fel fortplantar sig genom systemet [Hil00]. För att studera möjligheter och begränsningar med injicering av fel i programenheters gränssnitt byggde vi ett nytt provningssystem för systemanropen till ett realtidssystem [Car00]. Den fundamentala principen är att man provar varje systemanrop för sig med en stor mängd automatiskt skapade provfall. Provningssystemet genererar provfallen genom att systematiskt välja alla kombinationer av värden ur tabeller med provdata för varje parameter. Provdata får man fram genom att studera parametrarnas datatyper. Två grundläggande principer för val av provdata är [WP2]:?? uppdelning i ekvivalensklasser och?? gränsvärdesanalys. Kännetecknande för en ekvivalensklass är, att alla datavärden inom klassen hanteras på samma sätt av det anropade programmet. Om förutsättningen om likartad hantering är sann, räcker det med att välja ett värde inom varje klass. Gränsvärdesanalys grundar sig på erfarenheten att fel hopar sig på gränserna mellan ekvivalensklasser. Provdata bör därför väljas på dessa gränser och så nära dem som möjligt. Med det system vi byggt är det möjligt, att definiera:?? ett anrop till realtidssystemet och dess parametrar,?? de datatyper varje parameter tillhör och?? en värdetabell för varje datatyp. Provningssystemet kan sedan generera provfall genom att cykliskt permutera parametervärden, initiera prov som gör anropen, övervaka dem och logga resultaten [Car00]. Det körs på en simulerad variant av realtidssystemet, som exekveras i en NT-dator. Systemet är sedan vidareutvecklat till att kunna köras i en målmaskin med en PPC 603e-processor [Dum00].? HiSafe AB WP3 0_5.doc av 21

7 2.2 Arbete inom FoTA P9 Forskningen på Chalmers med injicering av fel i exekverande program syftar till att studera beteendet hos ett system när inneslutna felkällor aktiveras. Det har skapat en hel del ny kunskap om hur fel uppträder och kan hanteras i programsystem. I försöken har ett komplett system använts som försöksobjekt, vilket kan bli oöverblickbart i större system. Därför byggde vi systemet som provar systemanrop. I FoTA P9 bygger vi vidare på det senare provningssystemet och inriktar oss på att studera beteendet hos programkomponenter när man injicerar fel i deras gränssnitt. I en tidigare etapp av projektet [WP1] har vi byggt en prototyp för provning av program till MACS och som utnyttjar SEEMACS. Vi har därmed haft en väl beprövad utvecklingsmiljö att bygga på. Systemet kallar vi FINT Fault INjection for Testing. Det skapar program i Pascal D80, som provar anrop av programenheter. Det är konstruerat och byggt för att kunna hantera även andra blockstrukturerade programspråk som Ada och C++. Den nuvarande versionen har ingen styrning av en omvärldssimulator, så bara programenheter utan interaktion med omgivningen kan provas. FINT är dock konstruerat för att också kunna styra en omvärldssimulator. I FINT definierar man den programenhet och det anrop, som skall provas. I ett anrop samverkar den anropade programenheten med sin omgivning via ett antal variabler. Dessa variabler är parametrar, funktionsvärden och globala variabler. Parametrar kan referensanropas eller värdeanropas. Varje variabel tillhör en given datatyp och datatypen har ett givet definitionsområde. Definitionsområdet kan delas in i ett antal ekvivalensklasser. Den indelningen och gränsvärdesanalys ger ett antal värden på provdata för varje datatyp, som kan lagras i en tabell med provvärden. Ett anrop av en programenhet kan ha flera provmönster. Ett mönster innehåller en text för att kunna generera direktiv för kompilering, länkning, laddning och exekvering samt de texter som behövs för att skapa programtexten med prefix, anrop och suffix. Prefixet behövs för att kunna sätta programenheten i ett givet tillstånd före ett prov. Suffixet behövs för att kunna ta hand om resultatet och återställa systemet. Programenhet Prefix Anrop Provmönster Suffix Variabel Direktiv Datatyp Programtext Direktiv Värdetabell Fig 1. Datastruktur för generering av provfall i FINT? HiSafe AB WP3 0_5.doc av 21

8 Generatorn för provfall använder ett provmönster för att skapa en programtext och tillhörande direktiv för varje provfall. Direktiven styr kompilering, länkning, laddning och exekvering av programmen i SEEMACS. Exekveringen kan ske i såväl den simulerade målmaskin, som ingår i SEEMACS eller en fysisk målmaskin. I de inledande prov vi gjort har vi använt den simulerade målmaskinen och Ericsson har för ett av proven gjort motsvarande prov i den fysiska målmaskinen. Prefix Anrop Variabel Generator Programtext Kompilator Länkare Laddare Laddmodul Målsystem Logg Direktiv Värdetabell Suffix Fig. 2. Förenklat dataflöde för generering och körning av prov. Styrtransformationerna är utelämnade. Som underlag för felinjiceringsförsöken studerade vi också felmodeller för programvaran i SD Gripen [WP2]. Generellt sett gäller, att möjliga fel vid anrop av en funktion i en tillämpning är:?? Fel värden på parametrar.?? Fel ordning på parametrar.?? För få parametrar.?? För många parametrar. Endast den första är aktuell i de provade tillämpningarna, då utvecklingssystemet skall upptäcka de övriga. Fel värde på en parameter är i det enklaste fallet, att det ligger utanför definitionsområdet för parameterns datatyp. Som resultat av studien av felmodeller [WP2] fick vi bara ett fåtal möjliga feltillstånd i en subrutin efter anrop med fel i parametrarna:?? Adressfel i process. Subrutinen refererar till en adress, som ligger utanför processens tillåtna minnesrymd. Minnesskyddet skall upptäcka detta och ge avbrott.?? Adressfel i stack. Subrutinen refererar till en adress utanför det tillåtna området för stacken. Stackskyddet skall upptäcka detta och ge avbrott.?? Fel värde och ogiltigt. Parameterns värde är fel och ligger utanför definitionsområdet för dess datatyp. Ett sådant fel skall ett robust program klara av att upptäcka.?? Fel värde men giltigt. Parameterns värde är fel, men ligger inom definitionsområdet för dess datatyp. Ett sådant fel kan möjligen upptäckas av någon feltoleransmekanism i subrutinen eller dess anropande program.? HiSafe AB WP3 0_5.doc av 21

9 I de tidigare arbetspaketen har vi alltså fått fram ett system som ger möjlighet att beskriva omfattande provningssserier. Vi har också hittat modelle r för fel i anrop av de provade programmen, vilket behövs som underlag för val av provdata.? HiSafe AB WP3 0_5.doc av 21

10 3. Prov i existerande provmiljöer Enligt det ursprungliga förslaget till FoTA projekt [Edl98] var innehållet i de nu genomförda arbetspaketen: WP3 Bestämma provfall baserade på felmodellen. Köra driftsystemet med konstlaster. Injicera fel automatiskt enligt provfallen. Logga och analysera. WP4 Bestäm en felmodell för tillämpningsprogrammen. Vi avser prova programmen i gränssnitten mot driftsystemet och injicera fel dels i indata, dels i programmen. Resultaten från tillämpningsprogrammen loggas. WP3 är genomfört i huvudsak enligt ursprungligt förslag. Vi har dock inte haft tillgång till en målmaskin, som var tänkt från början. Eftersom tillgängliga MACS målmaskiner utnyttjats för annat arbete, så har ingen målmaskin kunnat dediceras helt för användning inom FoTA P9. Vi har därför varit hänvisade till att köra försöken i den simulator för målmaskinen, som ingår i SEEMACS. Det har fungerat alldeles utmärkt och körningarna kan direkt flyttas över till en målmaskin, som Ericsson gjort i ett av försöken. Det har däremot inte varit möjligt, att köra experiment mot en verklig omgivning eller mot en omgivningssimulator. Konstlasterna och styrning av en omgivningssimulator har därigenom inte varit relevanta. Delar av WP4 är gjorda redan i WP2. I det nu avrapporterade arbetet har vi provat programenheter på deras gränssnitt och injicerat fel i anropen. Vi har inte injicerat fel i själva programmen, då felinjiceringsmekanismer inte finns i MACS och vi har inte heller byggt några. Möjligheterna för oss att pröva våra metoder skiljer sig avsevärt mellan Saabs och Ericssons programvara. Ericssons programvara är generell med oftast självständiga programelement, som påverkas av få parametrar. Den existerande provmiljön hos Ericsson är uppbyggd för att kunna köra ett antal i förväg definierade provfall för varje programenhet [EMW]. De ligger som färdiga programtexter, som enkelt kan kompileras, länkas, laddas och köras. De är samtliga framtagna var för sig genom omfattande manuellt programmeringsarbete. Principen stämmer i huvudsak med arkitekturen hos FINT och det var relativt enkelt, att automatisera generering och exekvering av provfall. Saabs programvara är självklart tätt knuten till användningen i flygplanets systemdator. Vi har tidigare [WP2] beskrivit arkitekturen hos programvarusystemet, som uppdelad i realtidsexekutiv RTE och systemenheter SU. Exekveringen av tillämpningarna är indelad i ett antal frekvenser och för varje frekvens exekveras ett antal procedurkedjor. Anropen av de enskilda programele - menten är beroende av den sekvens av händelser, som sker i verkligheten eller i en simulerad verklighet. För en del av den mycket omfattande provning man utvecklat vid Saab har man skrivit program för köra ett antal provfall för varje procedur i en SU. Dessa program kallar man Ktest-skal. För varje provfall har man ett prefix och ett suffix. Med prefixet sätter man det provade systemet i ett givet tillstånd genom att ge variabler i systemet givna värden. Därefter anropas proceduren. Suffixet tar hand om resultatet och återställer systemet [Saab]. I grunden är förfarandet samma som hos Ericsson och i FINT. Den stora skillnaden är, att kommunikationen mellan procedurerna till stor del sker med globala variabler och att prefixen och suffixen till provfallen är unika för varje provfall. Ett Ktest-skal blir därför ett stort program, som i sig inkluderar alla provfall för en SU. Provningsmiljön från Saab var därför betydligt svårare att samordna med automatprovning enligt FINT. Med några tillägg till Ktest-skalet kunde vi dock köra ett antal provfall för ett av Saabs provfall, där vi varierade variabelvärden enligt de principer, som är bärande för FINT.? HiSafe AB WP3 0_5.doc av 21

11 4. Metodförsök på program från Saab 4.1 Använd teknik för källkodsprov Vi använder en del av programvaran för SD programavsnitt grundflygplan, (GES), som används för säkerhetskontroll, funktionskontroll och fellokalisering på marken. Vid ett besök på Saab fick vi en genomgång hur Saab gör sina prov av programmens källkod. Programmen i SD är uppdelade i 13 enheter av programvara, SU (Software Unit). Exempel på SU är Primary Flight Data PDF, Mission Data Management MDM och FLight Control FLC. GES som är en akronym av GEneral Systems är också en sådan SU. Se beskrivning av arkitekturen hos programvaran i SD Gripen från tidigare arbetspaket [WP2]. För att prova att programkoden går att löpa igenom och är fri från abnormiteter i de olika SUna har Saab gjort en testmiljö. Där kan varje SU kan etableras på ett enhetligt sätt i det som kallas KTEST-skalet (KTEST står för KällkodsTEST). Detta är tester som endast berör källkoden och omvärlden simuleras i en för varje SU speciellt skriven modul. I KTESTet provoceras inte programvaran, utan genom att efterlikna sekvenser av händelser från verkligheten är målet att all kod skall vara genomgången. Vi förstår KTESTet på så sätt att programvaran skall vara fri från programmeringsfel (buggfri), innan man påbörjar den verkliga provningen. 4.2 Prov av GES_EIU_TEST1 OBS att TEST1 i namnet syftar på de tester som görs då tändningen slås på i flygplanet. Det innebär att vi nu beskriver hur en SU som heter GES_EIU_TEST1 testas i KTEST. I vårt metodförsök har vi fått från Saab och etablerat på vår SUN-Solaris den del av KTEST som gör att SU GES_EIU_TEST1 går att prova med simulatorn för MACS. GES_EIU_TEST1 är den SU som automatiskt går igång då tändningen slås på i flygplanet och som frågar de olika delarna av planet att de är med och att de är ok. Programmet som vi kan köra omfattar GES_EIU_TEST1 och en omgivande miljö som gör det möjligt att köra många testfall. Förenklat för att inte säga stiliserat visas programmets arbetsgång i figur 3. Figuren symboliserar att programmet på ett styrt sätt går igenom testfall efter testfall i en loop. I programmets uppstart initieras de variabler som styr vilka testfall som skall initieras och genomlöpas i loopen. Inför varje testfall räknas testfallsräknaren upp ett steg, men det behöver inte finnas programkod för alla testfall. Luckor för framtida behov förekommer. I varje testfall initieras för sekvensen relevanta variabler, GES_EIU_TEST1 anropas med denna simulerade tillståndsbeskrivning och därefter kontrolleras och loggas resultatet. Figur 4 visar våra tillägg som beskrivs i ? HiSafe AB WP3 0_5.doc av 21

12 Starta och initiera test. Gör att testfallen kan köras igenom från början. Starta och initiera test. Gör att testfallen kan köras igenom från början. Om FINT-variant: Sätt tillbaka testfall ett steg och fortsätt Initiera för nästa testfall, så att programmets gång leder till ett bestämt kodområde. Initiera för nästa testfall, så att programmets gång leder till ett bestämt kodområde. Initiera parametrarna till programenheten som skall testas med nästa variant. Här är SU GES_EIU_TEST1 där den koden som testas finns. Här är SU GES_EIU_TEST1 där den koden som testas finns. Tag hand om testresultat. Tag hand om testresultat. Figur 3. Figur 4. Avsluta när alla testfall har gåtts igenom Avsluta när alla testfall har gåtts igenom Som den kursiverade texten i figur 4 visar ligger tilläggen för FINT-proven i KTEST-skalet och inte i GESens SU. Vi använder loopkonstruktionen i sin ursprungliga form. Fördelerna är uppenbara. Det gör att den sekvens som skapats för ett specifikt testfall bibehålls och vi inte behöver införa någon ny otestad programkod i SUn. Då en variant ger ett fel av dignitet finns det en stor risk att också den skapade sekvensen förstörs och provet måste avbrytas. Det skulle gå att förhindra genom att man för in ny programkod i KTESTen som sparar undan alla berörda variablers värden innan GES_EIU_TEST1 anropas.? HiSafe AB WP3 0_5.doc av 21

13 4.3 Genomförande och resultat Att varje kompilering och länkning av GESen tar ca 10 minuter omöjliggör den raka och enkla lösningen att kompilera och länka för varje provfall som genereras av FINT. För att kunna köra systematiska prov med automatskapade provfall med olika provvärden i KTEST-miljön måste man arbeta på en bestämd plats i sekvensen. Med FINT genererar vi programkod som innehåller en case-sats. Den procedur som vi provar får sina in-parametrar/variabler initierade i case-satsen. Programkoden från FINT flyttas in i ett testfall som leder till att proceduren som skall provas anropas. För att gå igenom samtliga fall i FINTs case-sats med samma tillstånd på alla andra variabler använder vi den ursprungliga loopen i KTEST, men stoppar den ursprungliga uppräkningen av testfallsräknaren tills samtliga FINTs varianter är genomgångna, se figur 4. Det betyder att alla provfall från FINT i ett prov genomförs på en bestämd plats i sekvensen. När det var dags för prov i full skala var vi tvungna att begränsa antalet provfall till 294 stycken. För det första får en case-sats inte vara större än 2048 fall. För det andra tillät inte kompilatorn att vi överskred dess maximala kodmängd i programmet, som sedan tidigare omfattande på grund av alla testfall som redan finns där. Med samtliga in och in/ut variabler varierade enligt ekvivalensmetoden skulle antalet provfall bli * antal värden i en styrparameter för provning. För enbart de variabler som är av typen integer skulle antalet provfall bli Med hänsyn tagen till nedanstående tre punkter visar de prov vi har gjort att det är möjligt att komma mycket långt med systematiskt uppbyggda prov enligt metoderna i FINT. 1. Det behövs ingående kunskaper om vilka variabler som bör varieras mot varandra och hur variablerna i Saabs nuvarande testfall skall placeras för att ge bästa utfall. Det visste vi givetvis före försöket, men vikten av det har accentuerats. 2. Ett stort antal provfall, tiotusental, kan åstadkommas genom att i FINTs generator skapa flera procedurer med 2048 stycken provfall i varje case-sats. De körs igenom med hjälp av en intelligentare algoritm än den uppräkning vi har lagt in i försöket. 3. Om man använder FINT-metoden på detta sätt är det viktigt att tänka ut sätt för återstart av såväl provprogrammet som simulatorn (macssim), eftersom vi avsiktligt misshandlar systemet med felaktiga och provocerande provvärden. Man kan förvänta, att allvarliga fel uppstår. Metoderna i FINT ersätter inte de nuvarande testfallen men tillför mervärde och kanske kan antalet befintliga testfall reduceras.? HiSafe AB WP3 0_5.doc av 21

14 5. Metodförsök på program från Ericsson Microwave Systems 5.1 Använd teknik för prov av programenheter Vi har haft två möten med Ericsson. Det första var en genomgång av hur Ericsson genomför några typiska tester på en programenhet i SEEMACS. Det resulterade i att vi fick några exempel på rutiner, att använda i FINT-proven. Det andra var ett avstämningsmöte efter att vi genomfört några prov. Den valda programenheten i SEEMACS är skriven för att vara generell och generell programvara består oftast av självständiga programelement, som påverkas av få parametrar i rena gränssnitt. Ericsson använder i sina egna tester relativt små och raka program för att testa att deras program är korrekta. Testprogrammen hos Ericsson är gjorda för white-box testing. Med få varianter på ingångsvärden till programmodulens parametrar verifieras att den testade modulen uppträder som förväntat. De moduler vi har testat kräver inte ämneskunskaper med sådant innehåll som vi saknar. Vi kunde genomföra proven i full skala med ett stort antal provfall mycket nära den verkliga användning vi tror på för denna del av FoTA P Komplettering för FINT Proven följer den arbetsgång som också beskrivs i [WP2]. Dess mest uppenbara fördel är att varje provfall startar i en ren omgivning, utan påverkan från vad som skett i tidigare provfall. För varje provfall finns ett program från vilket den enhet som skall provas anropas. Programmen genereras av FINT. Varje program är sammansatt av fyra delar, enligt figur 5. Ett program till varje provfall. Prefix: Programmets start med alla deklarationer och error prelude. Kod för att förbereda/möjliggöra anrop av den enhet som skall testas. Det är bäst om prefixet är från den beprövade miljö där enheten används. Kod som skapas av generatorn för att initiera gränssnittsvariablerna med provvärden. Här görs också utskrifter till loggen om hur det ser ut före anropet. Anropet av enheten som skall testas. Suffix: Programmets avslutning. Kod för att ta hand om resultatet från anropet. Utskrift till loggen. Utför eventuell städning samt avslutar programmet. Det är bäst om det mesta av suffixet är från den beprövade miljö där enheten används. Fig 5. Generell programstruktur för provfallen När samtliga program som ett i sänder utgör provfallen har genererats skapas direktiven för hela provet. Direktivet är i det här fallet ett rakt script, som för varje provfall:? HiSafe AB WP3 0_5.doc av 21

15 ?? Kopierar in källtexten för det aktuella provfallet till rätt bibliotek.?? Kompilerar, länkar och exekverar provfallet.?? Tar bort det provade programmet och återställer simulatorn när provfallet avslutats.?? Separerar utskrifterna i två loggfiler, en fil med utdata från programmen som är provfallen och en fil med utdata från SEEMACS och Solaris. Provningen sker som Black-box testing av de anropade enheterna i ett självständigt program för varje provfall, se figur 6. För varje provfall Direktiv Kompilering Länkning Laddning/körning i simulatorn för MACS Programtext Fig 6. Automatisk körning av provfall. 5.3 Genomförande och resultat Följande prov har genomförts: 1. Kopiering av minnesblock, med 3328 provfall, parametrarna är två adresser och ett heltal. 2. Flyttalskonvertering mellan MACS och D80E, med 22 provfall. Parametrarna är ett flyttal. 3. Sättning av datum och klocka, med 1080 provfall, parametrarna ligger i en datapost. Vi har kört alla provfallen i simulatorn och framkallat felbeteende i ett antal fall. Dessa felbeteenden är förväntade, då vi medvetet valt provfall, som provocerar programmen och som de kanske inte är konstruerade för? HiSafe AB WP3 0_5.doc av 21

16 Vid prov 1 erhölls många "hängningar" av simulatorn. Eftersom simulatorn inte fullt ut motsvarar målmaskinen, så har Ericsson även kört dessa provfall på målmaskinen. Även då erhölls många "hängningar", om än inte i lika många fall. Provfallen visar att rutinen (minneskopiering) inte har en fullständig felhantering, eftersom den inte tar hand om alla de felaktiga minnesreferenser som genereras. Detta bekräftas av Ericsson och förklaras med att användarna efterfrågat en minneskopieringsfunktion som är optimerad för prestanda och inte för robusthet. I användarinstruktionen påpekas bl a "These procedures must be used with care since the addresses can't be supervised by the compiler." För rutinen i prov 1 kördes tidigare ett likadant prov då med 2240 provfall utan "hängningar" men med provvärden som inte var lika genomtänkta. Provvärdena påminde mer om slumpvis valda provvärden och visar hur otillräckligt slumpvis valda provvärden är. Vid prov 2 och 3 har rutinerna visat på ett robust beteende genom att ge korrekt resultat eller ett fördefinierat felmeddelande. För dessa rutiner finns referensprov golden run som kan användas vid regressionsprov i framtiden.? HiSafe AB WP3 0_5.doc av 21

17 6. Resultat av metodförsöken Syftet med provning är att verifiera att en programenhet uppträder enligt specifikationer och att validera att en programenhet svarar mot en användares förväntningar. Dijkstra skrev: Testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence [Dij72]. Den metod för provning av program vi använt betonar verifiering och validering. Genom ett genomtänkt val av provdata kan vi automatiskt generera och exekvera ett stort antal provfall, som fokuserar på en programenhets funktioner och begränsningar. Självklart kommer man vid tillämpning av metoden att hitta ett antal provfall, där resultatet avviker från det förväntade. Den stora vinsten är dock att?? Man får en god täckning av giltiga och ogiltiga anrop till en programenhet.?? Man får en provbänk, där man kan prova en programenhet med ett stort antal provfall ett stort antal gånger under dess uppbyggnad.?? Man får en uppsättning referensprov att utnyttjas vid regressionsprov. De inledande försök vi gjort i dessa projektetapper visar, att metoden är högst användbar för provning av robusthet hos programenheter. I de exempel vi haft har det inte varit några större svårigheter att hitta ekvivalensklasserna i parametrarnas datatyper. Provdata inom ekvivalensklasserna ger sig sedan i stort sett själva. Det har inte heller varit några svårigheter att hitta provdata på gränserna mellan klasserna och omedelbart intill gränserna. Under förutsättning av att hypotesen om indelning av värdeförrådet hos en datatyp kan delas in i ekvivalensklasser håller, får vi därigenom en heltäckande mängd provdata. Väljer man provdata på detta sätt får man ett antal provfall med såväl giltiga som ogiltiga värden. Både de avsedda funktionerna hos en programenhet och dess begränsningar provas därigenom. Avsikten med att välja värden vid gränser är, att enligt erfarenhet samlas programfel vid gränser i de data en programenhet hanterar. Man försöker alltså välja provdata, som dels är representativa för programenhetens funktioner, dels är så ogynnsamma som möjligt. Då provar man inte bara funktionerna utan också begränsningarna genom att provocera programmen. I försöken med kopieringproceduren fick vi 3328 provfall med giltiga och ogiltiga värden på parametrarna vid val av provdata enligt ovan. I ett antal fall kraschade också proceduren, sannolikt genom att delar av det simulerade datorminnet skrevs över. Resultatet är egentligen väntat, eftersom proceduren inte hade särskilda krav på robusthet. I försök med 2200 provfall med slumpmässigt valda värden på parametrarna gav inget provfall ett observerbart felaktigt resultat. Resultaten av dessa försök med dels systematiskt, dels slumpmässigt valda provdata, visar hur effektiv metoden för automatisk generering och exekvering av provfall är. Provning bör vara verifiering av en programenhets funktioner och begränsningar. Väljer man provdata kritiskt med hänsyn till hur en programenhet är definierad provar man såväl de reguljära fallen som de mest ogynnsamma. Analysen av provdata ger därtill ett bra underlag för god dokumentation av en programenhet med funktioner och begränsningar. Provobjekten har inte haft någon interaktion med omgivningen och styrning av en omvärldsimulator ingår inte i FINT idag. Systemet är dock konstruerat för sådan skall ingå, så som vi gjort i provningssystemen på Chalmers. Målmaskinsimulatorn i SEEMACS har fungerat bra. Provobjekt från både Saab och Ericsson har gått att köra i den utan problem. Vid försök med ogiltiga anrop av programenheter har simulatorn kraschat. Ett av provobjekten körde också i en målmaskin. Ogiltiga anrop fick även den att krascha.? HiSafe AB WP3 0_5.doc av 21

18 Ett objekt är provningsbart om man kan:?? Sätta provobjektet i godtyckligt tillstånd före ett prov.?? Stimulera med det provdata.?? Registrera dess respons.?? Jämföra erhållet respons med förväntat. Ett automatiskt provningssystem måste alltid kunna återställas till ett givet grundtillstånd inför varje provfall. Alla provfall skall starta från gemensamma förutsättningar. En automatisk återställning är viktig speciellt när man provocerar ett objekt med provfall det inte är konstruerat för. Utfallet av provet är inte sällan en krasch och alla delar i provningssystem måste kunna återstartas automatiskt. I SEEMACS är detta möjligt. Även målmaskinsimulatorn återställs. För den SU från Saab vi har provat är också återställning relativt lätt att åstadkomma. Kommunikationen mellan programenheter sker via globala variabler. De bör relativt lätt kunna sparas undan för att återla gras inför nya provfall. Vid provning i en målmaskin kräver det naturligtvis, att minne finns tillgängligt. Vår metod för automatisk provning har använts av S&T som en tillämpning av FoTA-teknik inom FoTA P12; se bifogad rapport i appendix. Sammanfattning: Syftet med provning skall vara att verifiera funktioner och begränsningar hos programenheter och system. Fel hittar man effektivast genom granskningar och i idealfallet skall de ha hittats innan man börjar kompilera. Målmaskinsimulatorn i SEEMACS fungerar utmärkt för den typ av provning vi har gjort. De provfall, som kraschar, bör köras också i en målmaskin. Provningssystem, målmaskin och målmaskinsimulator måste vara konstruerade så att de alltid kan återstarta automatiskt. Annars kan man inte köra automatprovning. Den metod FINT bygger på är effektiv för verifiering av funktioner och begränsningar hos programenheter. Den uppmuntrar till konstruktion av robusta och provningsbara program.? HiSafe AB WP3 0_5.doc av 21

19 7. Fortsättning Enligt det ursprungliga förslaget till FoTA projekt [Edl98] skall innehållet i de kommande arbetspaketen vara: WP5 WP6 WP7 Bestämma provfall baserade på felmodellen. Köra systemet med konstlaster, som reagerar på injicerade fel enligt felmodellen. Logga resultaten och analysera. Välja några felhanteringsmekanismer i programvara, som kan inkluderas i driftsystemet som standardrutiner. Bygga in dem i driftsystemet. Köra systemet med samma provfall som i WP5. Logga resultaten och analysera. WP5 är redan gjort vad avser felinjicering på gränssnitten. Felinjicering i själva programenheterna kan vi göra på samma sätt som vi gjort i Chalmersförsöken: vi för in fel i källtexten, kompilerar och kör ett antal varianter. Det sättet att prova är lämpligt om man bygger in mekanismer för felhantering i programenheterna. Det kan vara mekanismer för upptäckt, diagnos och åtgärd av fel samt för återställande efter fel, d v s hela skalan av mekanismer från robust till feltolerant program. De föreslagna arbetspaketen kan också genomföras med felinjicering på gränssnitten. Det vi hittills provat är funktioner och begränsningar hos programenheter. FINT kan användas som det är och ge underlag för att bygga program mer robusta och sedan för att verifiera åtgärderna. FINT kan också användas för felinjicerin g på högre nivå. Injicering av fel i gränssnitten till program är injicering av feltillstånd i det överordnade systemet. Ett felbeteende hos en komponent är ju ett feltillstånd i systemet. Robusthet och feltolerans kan byggas på systemnivå ovanför de typer av komponenter vi provar idag och FINT kan verifiera den typen av pålitlighet. Vill man fortsätta att arbeta på detaljerad nivå kan vi komplettera systemet med funktioner för att styra en omvärldsimulator. Då kan vi troligen inte hålla oss på samma generella nivå som vi gjort hittills, då en omvärldsimulator i allmänhet är tillämpningsspecifik. Viss generalitet kan vi få genom att använda PLC-system eller mätdatasystem som LabView för interaktion med det provade systemet. Fördelen med dem är, att de hanterar vanligt förekommande signaltyper och att de programmeras i anpassade programspråk. Att arbeta vidare med omvärldssimulatorer innebär alltså en hel del utvecklingsarbete. Inom FoTA P12 har man visat visst intresse för vår metodik. Kockums planerade att under våren 2001 prova metodiken på ett programpaket ur företagets ubåtstillämpningar. Som det såg ut preliminärt skulle uppläggningen att bli som i de hittillsvarande programpaketen i FoTA P9. Vi analyserar gränssnittet till programenheter, väljer provdata och provar programenheterna. Programspråket är C++, så FINT måste anpassas till Kockums utvecklingsmiljö. Den delen ligger dock utanför FoTA P9. P g a tidsbrist hos Kockums har de proven inte kommit till stånd Ett annat projekt inom FoTA P12 är ett system från AerotechTelub för hantering av meddelanden. Man har idag tagit fram ett omfattande provningsprogram genom att manuellt skapa en mängd provfall. Kunde detta till en del automatiseras vore mycket vunnet. En del av provningen gäller interaktionen med brukare. Den passar inte att automatisera med vår metodik. Rollen för FINT i sammanhanget är däremot den som omvärldsimulator. Vi kan generera och ta emot en mängd meddelanden automatiskt. Varje meddelande är sammansatt av ett antal fält och varje fält kan ses som en variabel med ett givet definitionsområde. FINT kan då generera meddelanden, där valda värden för varje fält kombineras. Projektet har genomförts under hösten 2001 med gott resultat och avrapporterats inom FoTA P12? HiSafe AB WP3 0_5.doc av 21

20 På institutionen för datorteknik vid Uppsala universitet har man tagit fram specifikationerna för en run-timekärna till Ada enligt Ravenscar-specifikationerna för ett pålitligt realtidssystem [Lun00]. Korrektheten är bevisad med formella metoder och man har vid institutionen påbörjat en implementering i Solaris-miljö. Vi har idéer om ett projekt, där vi skulle implementera runtimekärnan i en enkortsdator med en Motorola processor. Syftet med projektet är:?? Bygga en realistisk och användbar version av ett pålitligt realtidssystem för Ada 95.?? Prova vår provningsmetodik från början i ett projekt, där man för varje komponent bygger upp provningsmiljön först och sedan själva komponenten. Båda utgår från specifikationerna, men byggs separat. Detta är ett sätt att arbeta, som börjar få spridning bl a i samband med Extreme programming.?? Korrektheten i run-timekärnan är bevisad med formella metoder. Den skall dock transformeras till ett körbart program, vilket ännu så länge är manuellt, kreativt arbete. Transformationen måste liksom alla andra tekniska konstruktioner verifieras. FINT vore ett bra verktyg. Som vi diskuterat projektet med Ada Ravenscar ligger det också utanför FoTA P9. Ett par tankar till om fortsättningen på projektet:?? Under arbetet med FINT och framför allt under försöken har vi observerat, att sättet att tänka vid utveckling av program förändrats. Man blir klart benägen att tänka på robusthet, vilka fel som inträffa vid användning av programmet och hur man skall hantera dem. Man tänker också på provningsbarhet, hur programmet skall kunna verifieras under sin utveckling och sedan det är färdigt. Kanske man skulle skapa en kurs m h a FINT hur bygger man robusta och feltoleranta program.?? FINT bör utvecklas vidare och bli en produkt, som kan användas i vidare sammanhang.? HiSafe AB WP3 0_5.doc av 21

21 8. Referenser [Car00] [Chr98] [CRH98] Caron, D., Design and implementation of a system for automatic fault injection at the interface of an RTOS, tech. report no. 00-3, Department of Computer Engineering, Chalmers University of Technology, Christmansson, J. An Exploration of Models for Software Faults and Errors: a Journey through Field Data and Injection Experiments, PhD thesis, Dept. of Computer Engineering, Chalmers University of Technology, Christmansson, J., Rimén and M., Hiller, M., An Experimental Comparision of Fault and Error Injection, in Proceedings of the 9 th International Symposium on Software Reliability Engineering (ISSRE), pp , [Dij72] Dijkstra, E. W., The Humble Programmer, Communications of the ACM, 15.5, October [Dum00] [Edl98] [EMW] [Hil98] [Hil00] [Lun00] [Saab] [WP1] [WP2] Dumortier, J., Building an environment for an automatic fault injection system at the interface of a Real Time Kernel, tech. report no , Dept. of Computer Engineering, Chalmers University of Technology, Edler, H., Experimentell verifiering av feldetektering och feltolerans, förslag till FoTA-projekt, HiSafe, okt Användardokumentation för SDS MACS, Ericsson Microwave Systems, Hiller, M., Executable Assertions for Detecting Data Errors in Embedded Control Systems, in Proceedings of the International Conference on Dependable Systems and Networks (DSN) 2000 (FTCS-30 & DCCA-8), pp , Hiller, M., A Tool for Examining the Behaviour of Faults and Errors in Software, tech. report no , Dept. of Computer Engineering, Chalmers University of Technology, Lundkvist, K., Distributed Computing and Safety Critical Systems in Ada, PhD thesis, Dept. of Computer Systems, Uppsala University, Material om uppbyggnaden av provningssystem för SD Gripen. Hermansson, S. och Sinclair, J., Etablering av experimentmiljö, Rapport inom FoTA P9, HiSafe, juni Edler, H., Felinjicering och felmodeller, Rapport inom FoTA P9, HiSafe, juni 2000.? HiSafe AB WP3 0_5.doc av 21

22 Tillämpning av felinjicering på Blueberry3D Appendix Tillämpning av felinjicering på Blueberry3D Mattias Widmark Andreas Ögren Sjöland & Thyselius Datakonsulter AB 1 Sammanfattning Blueberry3D är ett realtidssystem för 3D - visualisering av virtuella utomhusmiljöer. Systemet är tänkt att ingå i bland annat militära simulatorer, vilket ställer höga krav på stabilitet och tillförlitlighet. Valda delar av systemet, dess databashantering och API, har testats med felinjicering för att kontrollera dess stabilitet. Testning med felinjicering av felkällor visade sig vara bra för att kontrollera felhanteringen av felkällor inom systemet. Ett flertal fel i databashanteringen har upptäckts och korrigerats tack vare metoden och den är ett bra komplement till traditionella metoder för felsökning. Testning med felinjicering av feltillstånd är dock inte tillämpbart på realtidsmodulen i Blueberry3D på grund av att prestandakraven på visualiseringen inte medger extra testkontroller. Felinjicering kan delas upp i två varianter: injektion av felkällor och injektion av feltillstånd. Skillnaden är att genom att injicera en felkälla inhämtas felet genom ett specificerat gränssnitt till programmet medan om ett feltillstånd injiceras går man runt gränssnittet direkt in i programmet. 3 Blueberry3D Blueberry3D är ett realtidssystem för konstruktion och visualisering av virtuella utomhusmiljöer i 3D. Det kommer att användas som visualiseringsmotor för militära och civila simulatorer, spelmarknaden och som GIS-verktyg för 3D-presentation av digitalt kartmaterial. Programmet kan köras på PC med 3Dkort under Windows. Version 1 kommer att säljas från och med april Ett exempel på de bilder som kan genereras av Blueberry3D visas i Figur 1. 2 Tekniker för felinjicering Ett programs stabilitet kan avgöras genom studier av dess stabilitet vid normal exekvering och dess stabilitet vid exekvering när felkällor eller feltillstånd har injicerats. Att testa systemet under normal exekvering och dess felhantering från användare av systemet är ofta otillräckligt. Fel kan komma från många andra källor, som till exempel kompilatorer, systemprogramvara och hårdvara. Håkan Edler har utvecklat en metod för testning där fel injiceras i flera olika delar systemet [1]. Fel kan till exempel injiceras på elektrisk nivå, logiknivå eller funktionsnivå i hårdvaran, eller i programvaran i form av ändringar av dess minne eller maskinkod. Konsekvenserna av de genererade felen bör sedan minimeras av felhanteringsmekanismerna. Håkan Edler menar att med hjälp av felinjicering är det möjligt att?? Verifiera felhanteringsmekanismer?? Validera tillförlitligheten Detta kräver dock att man vet när, var och hur felen ska injiceras [1]. Figur 1: Terräng genererad av Blueberry3D. Blueberry3D består av tre huvudsakliga komponenter:?? Blueberry3D Viewer?? Blueberry3D Editor?? Blueberry3D SDK Blueberry3D Viewer är visualiseringskomponenten i systemet. Den arbetar interaktivt i realtid för att visualisera terrängen från olika vyer med hjälp av 1

23 Tillämpning av felinjicering på Blueberry3D Appendix OpenGL. Blueberry3D Editor används för att utforma och konstruera terrängen i de databaser som används av Blueberry3D Viewer. Det går även spela in filmer och skapa högkvalitetsbilder för till exempel presentationsmaterial. Blueberry3D SDK, Software Development Kit, är ett utvecklingspaket som består av Blueberry3D Viewer, Blueberry3D Editor och Blueberry3D API, Application Programming Interface. Det används av externa applikationer som integreras med Blueberry3D genom att anropa de funktioner som ingår i gränssnittet [2]. Figur 2 visar en skärmbild av Blueberry3D Editor. egenutvecklad databas som är optimerad för konstruktion och visualisering i realtid. Databasen består av följande komponenter:?? Höjdraster?? Terrängklassningsraster?? Ortotexturraster?? Vektordata?? 3D-modeller?? Realtidsdatabas?? Metadata Höjdrastret har ofta en upplösning på cirka 50 meter, medan terrängklassningsrastret och ortotexturrastret bör ha högre upplösning, till exempel 25 respektive 12,5 meter. Dessa raster är tillräckliga för visualisering av den naturliga terrängen eftersom det är möjligt att med fraktaler använda en kontrollerad slumpfunktion som genererar mindre detaljer än vad som är lagrat i BBDB [3]. Vektordatat används för positionering av konstruerade objekt, såsom till exempel vägar och hus. Detta data kan referera till en 3D-modell som sedan visualiseras på den position som vektordata specificerar. Både vektordatat och rasterdatat är lagrat i binärfiler. Figur 2: Blueberry3D Editor. 3.1 Fraktalbaserad beräkning Ett problem som uppstår vid 3D-visualisering av stora datamängder är begränsningen på de beräkningsresurser som finns tillgängliga. De är ofta otillräckliga för att upprätthålla en realtidsuppdatering ifall allt data används för att beräkna bildsekvensen. Terrängvisualisering är ett exempel där detta problem uppstår. Lösningen på problemet är att endast visualisera det data som är synligt för observatören på den detaljnivå som krävs. Till exempel vill man visa enskilda löv i närliggande träd medan det räcker med en approximativ bild av träd på större avstånd. Blueberry3D utnyttjar avancerade algoritmer baserade på fraktaler för att implementera denna lösning [3]. 3.2 BBDB Den databas som används av Blueberry3D kallas Blueberry3D Database, BBDB. BBDB är en Realtidsdatabasen innehåller raster- och vektordatat i ett format som är optimerat för realtidsvisualisering. Metadatat beskriver egenskaper hos det övriga datat och är lagrat i textfiler. Det faktum att fraktaler används för beräkningen av detaljnivåerna minimerar storleken av terrängdatabasen. Geometrin till vegetationen och markytan behöver inte sparas explicit, utan beräknas under exekveringen utifrån parametrarna till fraktalerna [3]. 3.3 Blueberry3D API Blueberry3D API är ett programmeringsgränsnitt för externa utvecklare som vill integrera deras program med Blueberry3D [4]. Det består utöver BBDB av 5 klasser. Blueberry är den centrala klassen som sammanlänkar de klasser som utför beräkningen av den fraktala modellen och de som visualiserar den. De fyra andra klasserna, Single_frame_view, Renderfeed_view, Deep_freeze_world_model och Deep_freeze_single_cover_object är vyobjekt som hanterar visualiseringen. Alla ärver från en abstrakt 2

24 Tillämpning av felinjicering på Blueberry3D Appendix basklass kallad View. Följande metoder är deklarerade i View och används i alla fyra vyklasser:?? init() Initierar vyobjektet och måste anropas före all visualisering. Ominitiering är möjlig genom nya anrop.?? adjust_to_win_size() Anropas då ritarean i vyn ändrar form eller storlek. Den måste också anropas före all visualisering men efter init().?? set_camera_shape() Bestämmer kamerans projektionstyp till antingen perspektivprojektion eller ortogonalprojektion.?? set_camera() Bestämmer kamerans position, riktning och lutning.?? generate() Genererar den geometri av databasen för den nuvarande vyinställningen.?? paint() Visualiserar den virtuella terrängen på skärmen enligt de inställningar som satts med funktionerna ovan och de som är bestämda i BBDB. I Blueberry används endast en funktion:?? add_view() Registrerar vyobjektet och sammanlänkar kopplingen mellan dem. I BBDB används två funktioner:?? load() Öppnar en databas.?? register_client() Registrerar Blueberry-objektet så att det kan läsa från databasen. 4 Testfall Blueberry3D kommer att användas till att konstruera och visualisera databaser över virtuell terräng. Detta kan dels ske genom de egenutvecklade användargränssnitten och dels via Blueberry3D API. Därför bör BBDB, visualiseringsmodulen och Blueberry3D API testas. Ett problem med 3Dvisualisering i allmänhet är, precis som nämndes i Sektion 3, att den underliggande hårdvaran inte är tillräckligt kraftfull för de behov som finns. Programmen måste därför optimeras för att åstadkomma tillräckligt bra bildkvalité under interaktiv bilduppdateringshastighet. Detta lämnar felhanteringsprocessen på lägre prioritetsnivå i realtidsmodulen än övriga moduler och måste därför utelämnas. Det som återstår är tester av felinjicering av felkällor på BBDB och Blueberry3D API. Eftersom det utdata som programmet beräknar är de bilder det visar på skärmen, är det omöjligt att kontrollera om beräkningarna har varit korrekt utförda. Därför kommer en felaktig programkörning definieras som en krasch av programmet. 4.1 Test av BBDB Det finns både textfiler och binärfiler lagrade i BBDB. Textfilerna innehåller läsbar text medan binärfilerna bara kan tolkas av Blueberry3D. Testet genomförs genom att ändra på en byte i någon av textfilerna och sedan låta Blueberry3D läsa in databasen. Detta upprepas sedan ett stort antal gånger. I textfilerna lagras det endast läsbar text som består av alla bokstäver och siffror samt en antal extra tecken som till exempel mellanslag, brädgård, komma, kolon, lika med, citationstecken, punkt och backslash. För att åstadkomma troliga fel har testfallen utformats så att ett tecken har slumpvist valts mellan mellanslag, slumpvis siffra 0-9, slumpvis bokstav a-z eller slumpvis ASCII-kod En störning kommer att införas på slumpvis position på varje rad i vardera av de fem textfiler som ingår i BBDB. Detta innebär att alla störningar kan inträffa, men det kommer att vara högst sannolikhet att störningen består av ett läsbart tecken. Databasen läses sedan in efter varje felinjicering. Samtidigt uppdateras en loggfil som hjälper oss hitta de fel som eventuellt uppstår. Den innehåller en beskrivning över den injicerade störningen och det resultat som störningen implicerade. 4.2 Test av Blueberry3D API Blueberry3D API består av en mängd klasser med tillhörande funktioner. Varje funktion har sin specifika uppsättning parametrar. Testet väljer ut funktionerna i en slumpvis ordning och anropas med en slumpvis uppsättning parametrar. Parametrarna är alltid i rätt antal och av rätt datatyp, eftersom en C++kompilator i alla realistiska fall inte tillåter något annat. I testkörningen kommer nio funktioner med totalt 16 parametrar i tre klasser som ingår i Blueberry3D API att testas 800 gånger. I varje test 3

Experimentell verifiering av feldetektering och feltolerans. Inledande prov med felinjicering på gränssnitt

Experimentell verifiering av feldetektering och feltolerans. Inledande prov med felinjicering på gränssnitt Experimentell verifiering av feldetektering och feltolerans Projekt P9 inom Forskning och teknikutveckling för anpassning Inledande prov med felinjicering på gränssnitt Författare Håkan Edler Siv Hermansson

Läs mer

Experimentell verifiering av feldetektering och feltolerans

Experimentell verifiering av feldetektering och feltolerans Experimentell verifiering av feldetektering och feltolerans Projekt P9 inom Forskning och teknikutveckling för anpassning Etablering av experimentmiljö Författare Siv Hermansson Jan Sinclair Dokument Id

Läs mer

Verifiering och validering av programvara med automatisk provning på gränssnitt. Håkan Edler

Verifiering och validering av programvara med automatisk provning på gränssnitt. Håkan Edler Verifiering och validering av programvara med automatisk provning på gränssnitt Håkan Edler edler@hisafe.se FoTA P9 Experimentell verifiering av feldetektering och feltolerans En teknik för att automatiskt

Läs mer

Experimentell verifiering av feldetektering och feltolerans

Experimentell verifiering av feldetektering och feltolerans FÖRSLAG 1 (8) Ert datum Er beteckning Handläggare Håkan Edler Fördelning Godkänd av Kopia till Projektets namn Experimentell verifiering av feldetektering och feltolerans Förslagsställare Håkan Edler HiSafe

Läs mer

Testning av program. Verklig modell för programutveckling

Testning av program. Verklig modell för programutveckling Fel i program När man skriver program uppkommer alltid fel. Felen kan indelas i följande kategorier: Under kompileringen upptäcker kompilatorn fel som handlar om att man använt konstruktionerna i programspråket

Läs mer

Några grundläggande begrepp

Några grundläggande begrepp Några grundläggande begrepp Validering bygger vi rätt system? Uppfyller kravspecifikationen de verkliga behoven? Verifiering bygger vi systemet rätt? Uppfyller det färdiga systemet kravspecifikationen?

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

Läs mer

Vad händer egentligen före en krasch? Svarta lådor och tidsmaskiner sparar pengar för företag

Vad händer egentligen före en krasch? Svarta lådor och tidsmaskiner sparar pengar för företag PRESSRELEASE 2003-02-07 Vad händer egentligen före en krasch? Res bakåt i tiden och se hur och varför programmet uppförde sig fel! Svarta lådor och tidsmaskiner sparar pengar för företag Svarta lådor och

Läs mer

Programmering i C++ Kompilering från kommandoraden

Programmering i C++ Kompilering från kommandoraden Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö

Läs mer

emopluppen Användning av "Ant" Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC)

emopluppen Användning av Ant Niklas Backlund Version: 1.4 ( 2002/04/26 07:27:52 UTC) emopluppen Användning av "Ant" Version: 1.4 ( 2002/04/26 07:27:52 UTC) Niklas Backlund Sammanfattning Det här dokumentet handlar om programmet Ant, som är en byggmiljö för programutvecklingsprojekt. Dess

Läs mer

Programdesign. Dokumentera. Dokumentera

Programdesign. Dokumentera. Dokumentera Programdesign Dokumentera Välj datastruktur så programmet blir så enkelt som möjligt. Välj algoritm så programmet blir lättläst, robust och effektivt. Analysera programmet för att få en bra metod. Överväganden

Läs mer

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document Programutvecklingsprojekt 2003-04-24 Projektgrupp Elvin Detailed Design Document Björn Engdahl Fredrik Dahlström Mats Eriksson Staffan Friberg Thomas Glod Tom Eriksson engdahl@kth.se fd@kth.se d94-mae@nada.kth.se

Läs mer

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm

Läs mer

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20 Programdesign Välj datastruktur så programmet blir så enkelt som möjligt. Välj algoritm så programmet blir lättläst, robust och effektivt. Analysera programmet för att få en bra metod. Överväganden vid

Läs mer

campus.borlänge Förstudie - Beslutsstöd för operativ tågtrafikstyrning

campus.borlänge Förstudie - Beslutsstöd för operativ tågtrafikstyrning campus.borlänge Förstudie - Beslutsstöd för operativ tågtrafikstyrning En rapport från CATD-projektet, januari-2001 1 2 Förstudie Beslutsstöd för operativ tågtrafikstyrning Bakgrund Bland de grundläggande

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar

Configuration testing Why? Vad det är tänkt att koden ska göra. Performance testing Kommentarer Skriva om koden som kommentar Skapa testfall Testing Köra testen Hitta fel Inspections and reviews Verifiera resultatet Formal methods Static analysis Completeness Verifiering Kvalitet Maintainability Validering Traceability Fault

Läs mer

Länkning av Prolog under C

Länkning av Prolog under C Länkning av Prolog under C Kent Boortz Swedish Institute of Computer Science Box 1263, S-164 28 Kista, Sweden 1 september 1991 T91:14 Sammanfattning SICStus länkmoduler ger möjlighet att blanda Prolog-

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Testning på 3 föreläsningar. PV7180 Verifiering och Validering. Litteratur. Vad är testning? Varför testa och olika syn? Målet med testning

Testning på 3 föreläsningar. PV7180 Verifiering och Validering. Litteratur. Vad är testning? Varför testa och olika syn? Målet med testning ning på 3 föreläsningar Första föreläsningen Översikt PV7180 Verifiering och Validering Föreläsning 3 ning del 1 Andra föreläsningen Coverage ing, OO-ing, Utvärdering av tekniker Tredje föreläsningen Automatiserad

Läs mer

Klassen javax.swing.timer

Klassen javax.swing.timer Klassen javax.swing.timer I Swing finns en klass Timer som man kan använda för att upprepa en vis kodsekvens med jämna tidsmellanrum. Ett objekt av klassen Timer exekveras som en egen tråd. Ett objekt

Läs mer

Inledande programmering med C# (1DV402) Introduktion till C#

Inledande programmering med C# (1DV402) Introduktion till C# Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i

Läs mer

Metoder och verktyg för funktionssäkerhet

Metoder och verktyg för funktionssäkerhet Metoder och verktyg för funktionssäkerhet Projektstart 1. Hantera kraven En bra process är grunden för att hantera kraven i ett säkerhetsprojekt. Det krävs att du har en tydlig spårbarhet mellan krav och

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) 2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

Sänk kostnaderna genom a/ ställa rä/ krav och testa effektivt

Sänk kostnaderna genom a/ ställa rä/ krav och testa effektivt Sänk kostnaderna genom a/ ställa rä/ krav och testa effektivt Kravhantering / Testprocess - Agenda AGENDA Grundläggande kravhanteringsprocess. Insamling, dokumentation, prioritering, Test och förvaltning

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering 1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1. Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning

Läs mer

IDA kursmaterial Informationsblad make. make

IDA kursmaterial Informationsblad make. make make make är ett verktyg som främst används för att underhålla, uppdatera och återskapa program och filer. Det är dock ett generellt verktyg som kan användas även i många andra sammanhang. En avancerad

Läs mer

Vinjetter TDDC91 Datastrukturer och algoritmer

Vinjetter TDDC91 Datastrukturer och algoritmer Vinjetter TDDC91 Datastrukturer och algoritmer 17 augusti 2015 2 Scenario 1 Man har inom Posten Logistik AB skrivit programvara för sortering av kundinformation och vill standardisera användningen av sorteringsalgoritmer.

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

SKOLFS. beslutade den XXX 2017.

SKOLFS. beslutade den XXX 2017. 1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning

Läs mer

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design RE SD PD I UT IT ST AT Mjukvarudesign System Requirement Specification Inkrementell och iterativ! Konceptuell design (VAD) Systemdesign (OOA) Arkitekturell (grovkornig, UML) Teknisk design (HUR) Programdesign

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Testning. 1. Inledning

Testning. 1. Inledning Testning 1. Inledning I all ingenjörsmässig verksamhet är testning en vedertagen metod för att fastställa om en hypotes, konstruktion eller produkt är korrekt och fungerar som avsett. Datorprogram är ofta

Läs mer

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 3. Programmering, C och programmeringsmiljö Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator

Läs mer

Värmedistribution i plåt

Värmedistribution i plåt Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.

Läs mer

Testplanering, test-first, testverktyg

Testplanering, test-first, testverktyg Testplanering, test-first, testverktyg Mats Skoglund Department of Computer and Systems Sciences Stockholm University/Royal Institute of Technology Stockholm, Sweden 12 mars 2007 Mats Skoglund Page 1(33)

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

FLEX Personalsystem. Uppdateringsanvisning

FLEX Personalsystem. Uppdateringsanvisning FLEX Personalsystem Uppdateringsanvisning Innehållsförteckning UPPDATERING... 3 Allmänt... 3 Förberedelser... 3 Informera om uppdatering... 3 Ladda hem uppdateringsfiler... 4 Att observera vid uppdatering...

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Godkännande av kundapplikationer

Godkännande av kundapplikationer samhällsskydd och beredskap 1 (9) Godkännande av kundapplikationer MSB-50.2 samhällsskydd och beredskap 2 (9) Innehållsförteckning 1 Alla applikationer måste godkännas... 3 1.1 Hur går ansökan om godkännande

Läs mer

Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 5 Realtidssystem och realtidsprogrammering Mål Att du ska förstå hur avbrott används för - Mätning - Styrning - Stöd för körning av flera processer Att du ska förstå begreppet tråd

Läs mer

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH. Datorteknik Föreläsning 5 Realtidssystem och realtidsprogrammering Mål Att du ska förstå hur avbrott används för - Mätning - Styrning - Stöd för körning av flera processer Att du ska förstå begreppet tråd

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 3. Programmering, C och programmeringsmiljö Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Protokollbeskrivning av OKI

Protokollbeskrivning av OKI Protokollbeskrivning av OKI Dokument: Protokollbeskrivning av OKI Sida 1 / 17 1 Syfte Det här dokumentet har som syfte att beskriva protokollet OKI. 2 Sammanfattning OKI är tänkt som en öppen standard

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #18 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblerprogrammering Assemblatorer vs kompilatorer

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #8 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblatorer vs kompilatorer En assemblator är ett program

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1. Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) Uppgift 1 ( Betyg 3 uppgift ) I filerna queue_handling.ads och queue_handling.adb finns en datastruktur som motsvarar en kö. Det finns fyra operationer som kan utföras på en kö. 1) Enqueue som stoppar

Läs mer

Objektorienterad programmering, allmänt

Objektorienterad programmering, allmänt Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara

Läs mer

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha? Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet

Läs mer

Slutrapport Get it going contracts

Slutrapport Get it going contracts Slutrapport Get it going contracts Författare: Anthony Dry Datum: 2011-06-02 Program: Utvecklare av digitala tjänster Kurs: Individuellt mjukvaruutvecklingsprojekt 7.5p Linnéuniversitetet (Kalmar) Abstrakt

Läs mer

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum: Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60 Superscalar vs VLIW Cornelia Kloth IDA2 Inlämningsdatum: 2018-12-05 Abstract Rapporten handlar om två tekniker inom multiple issue processorer

Läs mer

Inlämningsuppgifter, EDAF30, 2015

Inlämningsuppgifter, EDAF30, 2015 LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programmering i C++ Inlämningsuppgifter, EDAF30, 2015 Det finns två deluppgifter som båda ska lösas: 1. skriv ett program för att hantera bankkonton

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

LEU240 Mikrodatorsystem

LEU240 Mikrodatorsystem Institutionen för data- och informationsteknik 2011-10-11 LEU240 Mikrodatorsystem Vi har tidigare i olika sammanhang sett att det är önskvärt att kunna använda ett högnivåspråk som C för att skriva program

Läs mer

Simulering av brand i Virtual Reality

Simulering av brand i Virtual Reality Simulering av brand i Virtual Reality Bakgrund Användningen av virtual reality (VR, virtuell verklighet) som ett forskningsverktyg inom brandteknik och utrymning har på senare tid visat sig vara mycket

Läs mer

Pipelining i Intel Pentium II

Pipelining i Intel Pentium II Pipelining i Intel Pentium II John Abdulnoor Lund Universitet 04/12/2017 Abstract För att en processor ska fungera måste alla komponenter inuti den samarbeta för att nå en acceptabel nivå av prestanda.

Läs mer

Felhantering TDDD78, TDDE30, 729A

Felhantering TDDD78, TDDE30, 729A Felhantering TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

Läs mer

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Introduktion till integrering av Schenkers e-tjänster. Version 2.0 Introduktion till integrering av Schenkers e- Version 2.0 Datum: 2008-06-18 Sida 2 av 8 Revisionshistorik Lägg senaste ändringen först! Datum Version Revision 2008-06-18 2.0 Stora delar av introduktionen

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning 1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02) UMEÅ UNIVERSITET Institutionen för datavetenskap Thomas Johansson Oktober 1998 Programutveckling med Java Development Kit (JDK 1.1.x) och Programmers File Editor (PFE 7.02) Umeå universitet 901 87 Umeå.

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk

Läs mer

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Lärare: pl@cdt.luth.se A 3113 Tomas Klockar klockar@sm.luth.se A 3019 Mats Folke folke@sm.luth.se A 3019 Labhandledare: Natasja Saburova Fredrik Jonsson Lars Persson

Läs mer

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva

Läs mer

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer

Läs mer

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp Dag Wedelin, bitr professor, och K V S Prasad, docent Institutionen för data- och

Läs mer

1.1 Runnable och Thread

1.1 Runnable och Thread 1 Trådar 1.1 Runnable och Thread I övningen är ShoutThread hårdkodad att använda just ShoutRunnable. Det typiska förfarandet brukar annars vara att skicka över din Runnable i konstruktor-anropet till Thread:

Läs mer

Introduktion till MySQL

Introduktion till MySQL Introduktion till MySQL Vad är MySQL? MySQL är ett programmerings- och frågespråk för databaser. Med programmeringsspråk menas att du kan skapa och administrera databaser med hjälp av MySQL, och med frågespråk

Läs mer

Kurskatalog 2010 INNEHÅLLSFÖRTECKNING

Kurskatalog 2010 INNEHÅLLSFÖRTECKNING SFÖRTECKNING 1. RFID-Kurser... 2 1.1. RFID Grundkurs... 2 1.2. RFID Fortsättningskurs... 3 1.3. RFID dator programmering... 4 1.4. RFID Systemadministration... 5 1.5. RFID Aktiv Systemadministration...

Läs mer

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering och Python Grundkurs i programmering med Python Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?

Läs mer

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA

PARALLELLISERING AV ALGORITMER PROCESSORER FÖR FLERKÄRNIGA PARALLELLISERING AV ALGORITMER FÖR FLERKÄRNIGA PROCESSORER 870928 3017 Johan Gustafsson 870303 4952 Gustaf David Hallberg 880525 8210 Per Hallgren 801117 0597 Wuilbert Lopez 1/7 Innehållsförteckning Table

Läs mer

Quickstart manual. Rev SHTOOL Quickstart manual Smart-House

Quickstart manual. Rev SHTOOL Quickstart manual Smart-House Quickstart manual Rev. 2.3 2017-09-14 SHTOOL 6.5.33 1 Innehåll 1 FÖRORD... 3 2 PROGRAMVARA... 4 2.1 Hämta programvara... 4 2.2 PC krav... 4 3 DOKUMENTATION... 5 3.1 Manualer... 5 3.2 Projektdokumentation...

Läs mer

Objektorienterad konstruktion

Objektorienterad konstruktion Analys - Objektorienterad konstruktion Vad är objektorientering?» Ett sätt att angripa programmeringsproblem» Ett sätt att tänka när man programmerar Vad innebär objektorientering?» Att uppmärksamheten

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Programvaruutveckling - Metodik 2016 Jonas Wisbrant Föreläsning 3: Test och efterläsning om kodning Programvaruutveckling - Metodik 2016 Jonas Wisbrant 1 Kursinformation Detta har hänt: Pratat och skapat krav (och plan) Övning 2 Riskhantering, intressenter

Läs mer

Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson

Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson 2012-01-14 Introduktion Det första du behöver veta om PintOS är att det är ett riktigt

Läs mer

Uppgift 1a (Aktiekurser utan poster)

Uppgift 1a (Aktiekurser utan poster) Uppgift 1a (Aktiekurser utan poster) Vi har lite olika upplägg i de kurser vi håller och i vissa kurser finns det med något som vi kallar "poster" (eng. "record"). I andra har vi inte med detta. Vi har

Läs mer