Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

Relaterede dokumenter
26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

8 Specifikation med Logiske Udtryk.

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

4 Basal Objekt-orienteret Programmering I.

Exceptions i Delphi. Try except

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

3 Algebraisk Specifikation af Abstrakte Datatyper.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

29 Opsamling af Objekt-orienteret Programmering.

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

12 Nedarvning III. Noter. Multipel nedarvning. Nedarvning og assertions. PS1 -- Nedarvning III. Kurt Nørmark, Aalborg Universitet, 1994.

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

18 Multivejstræer og B-træer.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

13 Objekt-orienteret Design.

Kontraktbaseret Design. Anker Mørk Thomsen

Multiparadigme Programmering

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Forelæsning Uge 4 Torsdag

Objekt-orienteret programmering uden klasser: Self.

5 Basal Objekt-orienteret Programmering II.

Programmering, algoritmik og matematik en nødvendig sammenblanding?

16 Træer. Noter. Definition af et træ. Definitioner i tilknytning til træer. Repræsentation af træer. Binære træer. Den abstrakte datatype.

SWC eksamens-spørgsmål. Oversigt

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Ugeseddel 4 1. marts - 8. marts

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

Koordinering. dopsys

Videregående Programmering for Diplom-E Noter

Undtagelseshåndtering i C#

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

Forelæsning Uge 4 Torsdag

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

10 informationer som gør din fejlrapport selvforklarende for både forretningen og programmørerne

2 Abstrakte datatyper.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

17 Søgning og Søgetræer.

Forelæsning Uge 6 Mandag

Abstrakte datatyper C#-version

Ekstrakter - rammebevillinger

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Objektorienteret design med arv og polymorfi:

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Selvstudium 1, Diskret matematik

Eksempel: Skat i år 2000

Der er fejl i programmer. Ikke-trivielle programmer er næsten altid fejlbehæftede.

Vilkår for Dialogintegration

Når hunden er aggressiv

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser

Fra Computer til Virkelighed. TPE-kursus Elektroniske Systemer P1

PUT og INPUT funktionerne

1 Grundbegreber. Noter. Stilarter i programmering og sprog. Syntaks og semantik. Datatyper. Kontrolstrukturer. Udtryk. Abstraktioner.

Kursusarbejde 3 Grundlæggende Programmering

Generel projektbeskrivelse

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

30 Objekt-orienteret Programmering i Andre Sprog.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Forelæsning Uge 10 Torsdag

Moduler i Standard ML

Bypassing the. Brian Marick

Kapitel 4 Løkker i C#

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

Forelæsning Uge 4 Mandag

Bevisteknikker (relevant både ved design og verifikation)

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Planen for idag. Opdatering af delt lager

Algoritmedesign med internetanvendelser ved Keld Helsgaun

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Programmering i C. Lektion september 2009

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Undervisningsbeskrivelse

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Hvad er Objekter - Programmering

Rolf Fagerberg. Forår 2013

Fagets IT Introduktion til MATLAB

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

Programmering i C. Lektion oktober 2008

Forelæsning Uge 2 Torsdag

Metaklasser i Smalltalk.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

1.1 Indledning. Features: Højintensitet LED-display. Fleksibel forsyning (12-45V). Kan placeres op til 100m fra controlleren.

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Rolf Fagerberg. Forår 2015

Planen for idag. Datalogi 1F Forår Hvad er en proces? Livscyklus for en proces. Hvad består en proces af?

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Styring af testmiljøer almindelig god praksis

Transkript:

9 Fejlhåndtering Årsagen til fejl Erkelse af fejl Håndtering af fejl Fejlerkelse og -håndtering i objekt-orienterede sprog Fejlerkelse og -håndtering i Eiffel Udbredelse af fejl i Eiffel Nuanceret fejlhåndtering i Eiffel Kurt Nørmark, Aalborg Universitet, 1994 Denne forelæsning handler om, hvordan man kan finde ud af, at fejl er opstået i et objekt-orienteret program, og hvordan man kan håndtere dem 125

Konventionel fejl-erkelse og håndtering P (fp: T) is local do if fejl-situation then ; if pre-fejl-situation(ap) then ; P(ap); if post-fejl-situation then ; Forurening af programmet De interessante dele af programmet drukner i fejl-check og -håndtering Tidskræve at evaluere fejl-betingelserne Et program, der antages fejlfrit, betaler for evaluering af fejl-betingelserne Ansvarsfordeling? Er det proceduren eller procedurekalderen, der har ansvar for at teste for fejl? Kurt Nørmark, Aalborg Universitet, 1994 I et konventionelt program, hvor der ikke er indbygget en eller anden form for specifikation af hvad elementerne i programmet skal opfylde, er der ingen anden mulighed at programmere eksplicitte check af, om der er fejl Hvis der er fejl, skal der reageres passe på disse Beskrivelsen af disse fejl-reaktioner kan være genere, hvis man skal læse og forstå et program; I ekstremet kan det være vanskeligt at finde "de egentlige aspekter" af programmet mellem "undtagelseshåndteringen" (de fejl-behandle aspekter) Det er derfor nyttigt at separere fejl-håndtering og mere normale programaspekter i programteksten Fejl-check koster udførelsestid Det er specielt dyrt, hvis der testes mere ét sted for en fejlsituation; for en sikkerheds skyld Det er således nyttigt, hvis man "med ét slag" kan eliminere alle fejl-check, når man på et tidspunkt har tilstrækkelig tiltro til, at programmet fungerer korrekt 126

Årsag, erkelse og håndtering af fejl Årsag til fejl: Der er en fejl i programmet Der er en abnorm tilstand i programudførelsens omgivelse Erkelse af fejl: Via eksplicit programmerede tests i programmet for fejl-situationer Via brud på assertions Via brud på fundamentale regler (generelle assertions, så som numerisk overløb) eller overskridelse af ressourcegrænser (såsom mængden af tilgængeligt lager) Håndtering af fejl: Programudførelsen afbrydes (det "går ned") Fejlen håndteres med henblik på genoptagelse af udførelsen Kurt Nørmark, Aalborg Universitet, 1994 - sammenflettet med de øvrige dele af programmet - i særligt afgrænsede dele af programmet Hvis årsagen til fejlen er, at programmet indholder en fejl, er det næsten altid det bedste at rette fejlen fremfor at lade programmet håndtere fejlsituationen på en eller anden avanceret måde Hvis specifikation og program er integreret, er det naturligt og elegant, hvis brud på specifikationen fører til en erkelse af fejl Når der er erkt en fejl, havner vi i en undtagelsessituation som kan vare kortere eller længere, og som måske ultimativt vil afbryde programudførelsen Vi siger ofte, at der opstår et exception Hvis der ikke i programmet (og i det understøtte programmeringssprog) er specifikations-elementer, som udtrykker, hvad programmet bør gøre, er der ikke anden udvej at gøre fejl-erkelse til en eksplicit del af programmet Dette udelukker naturligvis ikke, at man kan være systematisk på forskellig vis omkring fejl-erkelse, feks ved at sikre at visse typer af fejl-erkelse kan slåes fra på en enkel måde Man kan opfatte det som om, at maskinen og det underligge operativ-system er specificeret ved en række implicitte assertions, som testes passe steder i basale biblioteks-operationer Hvis der feks divideres med 0, er det en fejl, som vi ønsker erkt (Vi ønsker ikke at maskinen går ned, og at den skal rebootes) Tilsvare, hvis filsystemet er fuldt, eller hvis programmøren afbryder programudførelsen Der er mange eksempler på programmer, som nødig skulle "gå ned" på grund af en fejl i programmet Operativ-system programmet i en maskine, programmer der kontrollerer sikkerheden i farlige industrier, og programmer i livsvigtigt hospitalsudstyr I mange moderne programmeringssprog er der en tens til at separere fejlhåndtering fra de andre aspekter af programmet Dette løser delvis problemet, som består i, at man ikke kan overskue sit program på grund af mange fejl-check og på grund af megen fejlhåndterings kode 127

Exceptions i Eiffel Et exception er en begivenhed under udførelsen af en operation, som umiddelbart forhindrer operationen i at opfylde sin postbetingelse Mulige former for exceptions under udførelsen af en operation i Eiffel: Der udføres en operation på et target, der er void Kald af en operation, som ikke får opfyldt sin prebetingelse Reglerne omkring løkkeinvariant eller -variant brydes Operationens postbetingelse opfyldes ikke Der kaldes en operation (på et objekt), som fejler Et assertion i en check kommando beregnes til falsk Der rejses et eksplicit exception (ved brug af raise) Der opstår en abnorm situation på maskinen, som programmet ikke eksplict har taget højde for Kurt Nørmark, Aalborg Universitet, 1994 I Eiffel er det ikke normalt, at programmøren bruger raise til eksplicit at bektgøre en fejl Normalt sker dette ved, at et assertion (som er en del af specifikationen) bliver brudt Raise er en routine i klassen EXCEPTIONS, som omtales senere i denne forelæsning 128

Fejlhåndtering i Eiffel class C feature op1() is require pre-op do ensure post-op rescue fejlhåndtering for operation op1 op2() is op3() is default_rescue is do default-fejlhåndtering Kurt Nørmark, Aalborg Universitet, 1994 Denne slide viser på skematisk form, i hvilke dele af et program fejl håndteres i en klasse i Eiffel Det mest normale er nok, at en routine har sin egen "redningskrans" i form af en 'rescue clause' Hvis ikke en routine har en 'rescue clause', udgør routinen med navnet default_rescue routinens 'rescue clause' Med andre ord, default_rescue spiller rollen af redningskrans for routiner, hvis de ikke har en selv Det siger næsten sig selv, at en fælles redningskrans i en klasse ikke kan håndtere fejl så nuanceret som i routiner Hvis hverken routine eller klasse har en 'recue clause', er den benyttede 'rescue clause' tom for den pågælde routine Et ord om nedarvning i forbindelse med rescue: redningsklausuler i routiner nedarves sammen med routiner til subklasser; Også operationen default_rescue arves naturligvis af subklasser, og den kan redefineres efter sædvanlige regler 129

Fejlhåndtering i en Eiffel-routine 2 op1() is require pre-op local do her opstår et exception ensure post-op rescue reparation ; if reparation succesfuld then retry else 3 1 4 eller 1 2 3 4 Der opstår et exception Rescue-konstruktionen aktiveres Efter reparation genudføres operationen, hvori exception opstod Det anbefales af klasse-invarianten and pre-op opfyldes Operationen fejler Klasse-invarianten skal være opfyldt Operationen lykkes Klasse-invarianten and post-betingelsen skal være opfyldt Kurt Nørmark, Aalborg Universitet, 1994 Det er væsentligt at slå følge fast: Et exception (en undtagelse) er en hændelse der kan opstå under programmets udførelse En routine kan enten lykkes eller fejle Hvis en routine ikke lykkes forlader den rescue clause uden at udføre retry Der er ikke nogen mellemting mellem, at operationen lykkes, og at den fejler Hvis post-betingelsen ikke kan opfyldes, skal operationen fejle Hvorfor skal den effektive pre-betingelse være opfyldt efter et retry (tilfælde 2 ovenfor)? Et retry starter routinen i den nuvære tilstand, uden at omgøre parameteroverførsel eller definition af lokale variable (Det er derfor ingen tilfældighed, at pilen 2 peger på do, og ikke local) Ved enhver begyndelse (eller som her,, nybegyndelse) af en routine skal den effektive prebetingelse være opfyldt Hvis ikke man opfylder dette krav vil det være meget svært at programmere en ordentlig routine krop, idet vi ikke i starten af routinen er klar over vore forudsætninger (om vi kommer udefra, eller fra retry) Det er værdifuldt, at invarianten af klassen er opfyldt, selv om operationen fejler (tilfælde 3) Det at operationen fejler er ikke ensbetyde med, at programmet bliver afbrudt Tidligere kald af routiner kan vælge at reparere fejlen, således at programmet kører videre Det vil da være fatalt, hvis der findes objekter, som er i en tilstand, der bryder med deres invarianter Det skal bemærkes, at kommandoen retry tekstuelt skal forekomme i rescue-delen af operationen Det er således ikke tilladt at kalde en operation, hvori retry udføres Specielt er det ikke muligt at udføre retry fra default_rescue 130

Fejl-udbredelse i Eiffel (I) Den oprindelige creation procedure fejler og programmet afbrydes Kurt Nørmark, Aalborg Universitet, 1994 P fejler Exception i P Q fejler Exception i Q R fejler Exception i R S fejler Creation procedure P() Q() R() S() P kalder Q Q kalder R R kalder S Der sker en exception i udførelsen af S Det skitserede forløb er ikke nødvigvis det eneste mulige Hvis én af de involverede routiner, feks Q, håndterer fejlen, således at Q lykkes, ændres forløbet af fejlhåndteringen Dette er vist på næste slide 131

Fejl-udbredelse i Eiffel (II) P lykkes Q lykkes Exception i Q R fejler Exception i R S fejler Kurt Nørmark, Aalborg Universitet, 1994 Creation procedure P() Q() R() S() R kalder S Q() is require pre-q do XR() ensure post-q rescue reparation ; retry Der sker en exception i udførelsen af S INV and post-q Det er vist, at Q, som kalder R på et objekt, der refereres af X, håndterer fejlen, som indirekte er opstået ved, at R fejlede Redningsklausulen i Q reparerer fejlen og genstarter Q Vi antager, at dette resulterer i, at Q opfylder sin specifikation; R kaldes igen på objektet refereret af X, og tilsvare kan S blive kaldt igen af R Hvis Q's reparation har været effektiv, vil S ikke fejle igen 132

Nuanceret fejlhåndtering Vi ønsker at kunne ke forskel på forskellige former for exceptions i en 'recue clause' op() is require pre-op do ensure post-op rescue if exception = then elsif exception = then else default_rescue Kurt Nørmark, Aalborg Universitet, 1994 Klassen EXCEPTIONS indeholder en række mekanismer, der støtter en mere nuanceret fejlhåndtering Exception, som er et heltal, betegner arten af den sidst forekomne exception Klassen indeholder desuden en række andre informationer og mekanismer, som kan være nyttige for en mere nuanceret undtagelseshåndtering For at bruge faciliteterne i EXCEPTIONS i klassen C skal man sørge for, at C har adgang til EXCEPTIONS Dette kan ske ved at lade C arve fra EXCEPTIONS Vi ver tilbage til nedarvning i en af de følge forelæsninger Klassen EXCEPTIONS er beskrevet i kapitel 29 i Eiffel the Language 133

Om anvelse af exception handling Undlad for enhver pris at bruge exceptions som et implicit udført hop Exception handling mekanismen er ikke en avanceret kontrolstruktur Lad være med at udføre komplicerede handlinger i rescue-delen af et program Oprydning før lukketid er i de fleste tilfælde tilstrækkeligt I de fleste programmer afspejler et exception en fejl i programmet Det mest fornuftige er at afbryde udførelsen af programmet, og dernæst rette fejlen i programmet I programmer, som kræver ekstrem robusthed, er det muligt via håndtering af exceptions i recue-delen af et Eiffel program at holde programmet køre på trods af opståede exceptions Kurt Nørmark, Aalborg Universitet, 1994 Oprydning før lukketid kan enten være i interne data i programmet (sørge for, at objekter overholder klasseinvarianter), eller i eksterne data Hvis programmet arbejde på eksterne data er det katastrofalt at disse efterlades i en inkonsistent tilstand, feks som følge af en halv opdatering Om muligt, skal man i rescue-delen af en opdateringsoperation sikre sig, at eksterne data er sunde, inden programmet får lov til at terminere 134