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

Relevanta dokument
Experimentell verifiering av feldetektering och feltolerans

Experimentell verifiering av feldetektering och feltolerans

Pålitlig och feltolerant programvara. Håkan Edler Laboratoriet för pålitliga datorsystem Institutionen för datorteknik Chalmers tekniska högskola

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

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

Felhantering TDDD78, TDDE30, 729A

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 av program. Verklig modell för programutveckling

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Felträdsanalys FTA

Metoder och verktyg för funktionssäkerhet

Realtidssystem HT03. Vad är realtidssystem? Inbyggda system. Att programmera, Tasks (Uppgifter) Realtidssystem kräver analys

Några grundläggande begrepp

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

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

Klassen javax.swing.timer

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Programdesign. Dokumentera. Dokumentera

PMM (Process Maturity Metrics) Allmänt. Mätetal för framgångsfaktorer. 1. CM konfigurationsstyrning

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

Introduktion till hårdvara, mjukvara och operativsystem

M7005 Exportera data på Q- DAS ASCII Transferformat

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Objektorienterad programmering

Riktlinje för säkerhetskrav vid upphandling av IT-stöd

Kopiering av objekt i Java

Vad är RTCA DO-178C? och: Hur arbetar Saab med dessa krav? Lars Ljungberg, Saab AB, Avionics Systems

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

FLEX Personalsystem. Uppdateringsanvisning

DIG IN TO Dator och nätverksteknik

Länkning av Prolog under C

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Operativsystem - input/output, skydd, virtualisering

Testplanering, test-first, testverktyg

1.1 Runnable och Thread

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Vinjetter TDDC91 Datastrukturer och algoritmer

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

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Tentamen ID1004 Objektorienterad programmering October 29, 2013

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

Säkerhetskopiering - SQL

Programvaruutveckling - Metodik 2016 Jonas Wisbrant

Utforskande testning Så gör jag. Torbjörn Ryber Fearless Consulting

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad konstruktion

C++ Slumptalsfunktioner + switch-satsen

TUTORIAL: SAMLING & KONSOLL

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Föreläsning 2. Operativsystem och programmering

Hogia Personal version ( )

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

Slutrapport Get it going contracts

Testning. 1. Inledning

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det

FileCentral Desktop. Användarhandledning Version

Programmering = modellering

kl Tentaupplägg

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

In- och Utenheter. Fö 3: In/Ut matning och kopplingsstruktur. Några exempel. Egenskaper. In- och Utenheter. Styrning.

Programvara i säkerhetskritiska tillämpningar

Objektorienterad programmering, allmänt

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

Programmering i C++ Kompilering från kommandoraden

Formella metoder. Loop-program som statetransformers. Betrakta följande problem. specifikationen.

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

PayByBill Betalmoduler v1.09

Klientprogrammering mot databaser

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Användarhandledning för The Secure Channel

Praktisk hantering av automatiserade testfall T U A C A P T M F T W!

Inkapsling (encapsulation)

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

CABA Win Brytaranalysprogram

Risk som 2-dimensionellt begrepp

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Institutionen för elektro- och informationsteknologi, LTH

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

INSTITUTIONEN FÖR DATA- OCH INFORMATIONSTEKNIK

Belastningstester med Visual Studio Gränssnittet

ClamatorVoiceSystem II

Säkra Designmönster (Secure Design Patterns)

Nedladdning från PA. 1. Koden (nyckeln) 2. Programmet. SPSS Statistics 23. Gunilla Rudander IBM Corporation

F5: Högnivåprogrammering

SIMULERING. Vad är simulering?

F5: Högnivåprogrammering

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

LEX INSTRUKTION REPLIKERING UPPGRADERING

Fallstudie: numerisk integration Baserad på läroboken, Case Study 19.9

Systemsäkerhet i ett marint ledningssystem

(Lösningsförslag finns sist i denna fil.)

M7005 och IBR Användarhandbok

Transkript:

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 generera och exekvera provfall för beteendeprovning - blackbox testing En provbänk för provning av robusthet och feltolerans i programvarumoduler Ett projekt för tekniköverföring baserat på vår forskning på Chalmers om pålitlig programvara

Mål för vår forskning Metoder att analysera datorbaserade system ur pålitlighetssynvinkel Analytisk modellering för att verifiera pålitlighet och som underlag för felinjicering Utveckling av metoder att bygga feltolerant Utveckling av metoder att experimentellt verifiera pålitlighet

Vision Pålitliga datorsystem tack vare programvara

Att åstadkomma pålitlighet Pålitliga programvarusystem skall byggas så att Fel undvikes Kvarvarande fel skall tålas Fel i kompilatorer, länkare, laddare, systemprogramvara skall tolereras likaväl som temporära och permanenta maskinvarufel. Pålitliga programvarusystem skall provas så att Fel hittas och rättas Mängden kvarvarande fel skall kunna förutsägas

Varför prova? Varför prova program? Att verifiera att en konstruktion stämmer sin specifikation Att validera att ett systems funktioner stämmer med användarnas förväntningar Att finna fel Det senare är ineffektivt, fel skall ha hittas tidigare. Dijkstra 1972: program testing can be used to show the presence of bugs, but is hopelessly inadequate to show their absence

Om kvarvarande fel Hur ser fel ut i beprövad programvara? Kör program i automatprovning ett år med slumpvis valda indata ur en given användningsprofil. Sannolikheten för ett fel under en drifttimme är då av storleksordningen 10-4, om provets användningsprofil är relevant för driftsituationen. En undersökning av fältrapporter från tre operativsystem hos IBM 1984 visade att en tredjedel av alla fel hade inträffat en gång hos en kund. Det gav MTTF på 5000 h. Felet som orsakade att Ariane 5 kraschade på sin jungfrutur var ett enkelt programfel, men sex samverkande faktorer bidrog till att det aktiverades.

Felinjicering För att prova programvara av hög kvalitet måste man vid provning artificiellt föra in fel i systemet - felinjicering - för att: verifiera felhanteringsmekanismer validera tillförlitligheten Det kräver att man finner : en bra modell för fel på den abstraktionsnivå man arbetar var felen skall injiceras när felen skall injiceras lämplig belastning för systemet vid provning

En provningsmiljö User input Campaign specification I/O 3 FIC Readouts Faults or errors I/O Reset Target system Signals Environment simulator Data analyzer Readouts Trigger Error injector

Provbänk för felinjicering Styrdator Monitor Felinjicerare Målsystem Datainsamlare Omvärldssimulator Analysator

Felinjicering i anrop av program Felinjicering: Anrop med fel parametervärden Felyttring: Crash Omission Timing Value Är feltill stånd i systemet

Hur hitta provdata Ekvivalenspartitioner Gränsvärdesanalys Analys av tillståndsmaskin Felträdsanalys Felmodsanalys

En generell modell för felbeteende Byzantine Computation Timing Omission Crash

Generering av provfall API alloc (OSBUFSIZE size, SIGSELECT signo) TESTING OBJECTS TEST VALUES memory buffer size test object SIZE_1 SIZE_16 SIZE_MAX SIZE_MAXplus1 SIZE_MAXminus1 SIZE_ZERO SIZE_NEG SIZE_MAXINT SIZE_MININT signal number test object NB_ZERO NB_32 NB_MAXINT NB_MININT NB_NEG NB_ALREADYUSED NB_1 TEST CASE { inits } alloc (SIZE_16, NB_ALREADYUSED)

Provning av ett RTOS Definition och utförande Definition av systemanrop Definition av provmönster Definition av provfall Definition av prov Loggare Databas Generator Provat system Monitor Felhanterare Injector Reflektor

Ett RTOS, resultat 20 systemanrop ingick i provbänken. Omfattande provningsmetodik fanns. För varje systemanrop fanns ett antal program i källtext, som utgjorde separata provfall. Varje provfall kördes för sig. Provfallen hade växt fram organiskt som följd av funna fel i systemet. Metoden med felinjicering på gränssnitt gav mångfalt fler provfall. De kan köras automatiskt. Problemet med att sätta systemet i ett givet tillstånd före ett provfall löstes med en följd av anrop.

Ett provfall Ett provfall består av: En följd av inledande systemanrop De sätter systemet i ett givet tillstånd innan det provande anropet görs. T ex måste minne allokeras innan en process kan skapas. Två processer måste skapas om man vill prova kommunikation mellan processer. Returvärden från målsystemet måste kunna användas i såväl inledande som provande anrop. Ett provande anrop Det har parametrar genererade genom cyklisk permutation av alla ingående datatypers värdemängder valda för proven. Ett resultat Systemets svar på det provande anropet. Det skickas till datainsamlaren för loggning och senare analys.

Syfte med FoTA P9 Lära oss hur felhanteringsmekanismer i programvara kan klara fel i programvaran, indatafel, temporära maskinvarufel och permanenta maskinvarufel. Etablera ett sätt att analysera, konstruera och bygga programvarusystem med hänsyn till pålitlighet. Etablera för praktisk användning en provningsmiljö för experimentell verifiering av pålitlig programvara. Studera hur generella mekanismer för felupptäckt och felhantering kan byggas in i ett driftsystem. Studera en metod att mäta på gränssnitten i programvara. Detta kan vara av stor framtida betydelse, då det gäller att verifiera COTS.

Blueberry Blueberry 3D är ett realtidssystem för visualisering av virtuella utomhusmiljöer. BBDB är det egenutvecklade databassystemet, som lagrar data om terrängen. Blueberry 3D API är ett programmeringsgränssnitt för externa utvecklare. För prov av felhanteringsmekanismerna använde man injicering av felkällor. För BBDB ändrades slumpmässigt tecken i databasen, som sedan lästes in för visualisering. En loggfil skrevs för att underlätta felsökning. I API provades nio funktioner med sammanlagt 16 parameterar. Anropsordning och parametervärden slumpades fram för varje provfall.

Blueberry, resultat Ett stort antal provfall kördes: 1445 på BBDB. 513 gav normalt resultat. 886 avbröts av en timer loop eller felmeddelande från Windows, alltså inte nödvändigtvis fel i systemet. 25 gav ohanterat undantag. 21 gav hanterat undantag. 800 på API. 489 gav normalt resultat, systemet kunde hantera felet. 311 gav hanterat undantag, felet blev för stort. Felinjicering av felkällor är en bra metod att eliminera fel i felhanteringen. Man måste ha en bra felmodell. Ett automatiskt verktyg kostar men lönar sig.

MACS, Airborne Modular Computer System Prefix Anrop Variabel Generator Programtext Direktiv Kompilator Länkare Laddare Laddmodul Målsystem Logg Värdetabell Suffix

MACS, resultat Tre moduler användes vid våra prov. Kopiering av minnesblock 2200 provfall skapades med enbart giltiga parametrar. Alla provfallen fungerade som förväntat. 3328 provfall skapades, medvetet valda för att provocera programmen. Proceduren gav felbeteende i ett antal fall. Dessa felbeteenden är förväntade, då proceduren inte konstruerats för robusthet utan snabbhet. Flyttalskonvertering mellan MACS och D80E. 22 provfall skapades, alla gav korrekt beteende. Sättning av datum och klocka. 1080 provfall skapades, alla gav korrekt beteende.

Gripen systemdator Starta och initiera test. Gör att testfallen kan köras igenom från början. Sätt tillbaka testfall ett steg Nästa testfall, ett bestämt kodområde. Sätt parametrarna till nästa variant. Gör anrop och logga Avsluta när alla testfall har gåtts igenom

Gripen systemdator, resultat Periodisk exekutiv. Den är den aktiva processen och driver systemet. Procedurer kan inte enkelt isoleras och provas separat. Källtestskal byggda för programvaran. Ett antal provfall definierade, som i sekvens provar procedurerna i en tillämpning. Extra programtext genererades, som lades in i k-testskalet och som körde ett stort antal provfall på en procedur. Av utrymmesskäl begränsades antalet till 294. Det viktigt att tänka ut sätt för återstart av systemet eftersom systemet avsiktligt misshandlas med felaktiga och provocerande provvärden. Man kan förvänta sig, att allvarliga fel uppstår. De använda metoderna ersätter inte de nuvarande provfallen men tillför mervärde och kanske kan antalet befintliga provfall reduceras och istället ett stort antal provfall för varje proceduranrop genereras.

Tyko 32, planerat Tyko32 WAN Tyko32 LAN LAN Minimal VBS Automatprovare Minimal VBS Provfall med stimulus Respons

Tyko 32, genomförande WAN Provfall med stimulus och respons Tyko32 LAN VBS med testfunktionalitet LAN Tyko32 Passiv VBS

Tyko 32, resultat Ett stort antal provfall körda 45 134 genererade 43 004 fungerade enligt förväntningar 2 130 gav felbeteende Analys av resultaten gav: En del av felen berodde på felaktig kravbild, systemet var byggt enligt kraven, men kraven var fel. Resterande fel var konstruktionsfel. Inte helt lätt att kontrollera loggar. Ett effektivt sätt att verifiera ett system. Loggen från en körning blir ett bra facit för kommande prov.

Generalisering av provbänkarna, blockschema Generell del Definition av systemanrop Definition av provmönster Definition av provfall Definition av prov Loggare Databas Generator Speciell del Monitor Felhanterare Injector Målsystem Omvärldssimulator

Några erfarenheter Genom ett genomtänkt val av provdata kan man 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.

Sättet att tänka vid utveckling av program förändras. Program byggs provningsbara Man blir klart benägen att tänka på robusthet, vilka fel som kan 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. Provning beaktas tidigt. Man ser man systemet ur en annan synvinkel, vilket betyder mycket för att man skall kunna ge det en god arkitektur. Man skapar också provfall på rätt systemnivå innan man trängt för djupt in i detaljerna.

Säkerhet i programutveckling Man får en säkerhet i det man gör. Behärskar konstruktionen Får en känsla för var det kan gå snett. Provningssystemet byggs parallellt med programmet Det kan användas kontinuerligt under utvecklingen. Det blir ett kraftfullt komplement till en debugger Loggar från gjorda prov blir referensdata till kommande prov golden run, oracle

Hur kan teknik och metod användas Pålitligheten kan kvantifieras En programvarumodul kan provas under oförändrade förutsättningar medan den utvecklas. Repeterbarheten är mycket viktig. Verifiera funktioner och begränsningar. Återanvändning av programdelar förenklas. Provningsprogrammet kan återanvändas. Provresultat kan återanvändas. Kvalitet och produktivitet ökar. Omfattande provning kan göras till acceptabla kostnader. Man får konkreta mätetal för processförbättringar.

Provning av objekt 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 och sluttillstånd. Jämföra erhållet respons med förväntat.

Fortsatt arbete en provbänk för utvecklare Verifiera pålitlighet. Prova existerande komponenter Lägg in mekanismer för att öka robusthet. Gör om prov och mät förändring. Lägg in mekanismer för feltolerans. Gör om prov och mät förändring. Komplettera med inbyggda mekanismer för provning - Component+. Studera processförbättringar för V&V. Utveckla tekniken och skapa en produkt, som kan användas i vidare sammanhang.