Arto Salminen,

Samankaltaiset tiedostot
11. Luento: Vikasietoisuus. Tommi Mikkonen,

OHJ-4301 Sulautettu Ohjelmointi

11. Vikasietoisuus Vikasietoisuuden käsitteitä

Ohjelmistojen virheistä

Poikkeustenkäsittely

Tosiaikajärjestelmät Luento 6: Luotettavuus ja turvallisuus

Luotettavuus ja vikasietoisuus. Tosiaikajärjestelmät Luento 6: Luotettavuus ja turvallisuus. Vika, virhe, häiriö. Mistä häiriöt syntyvät?

Toiminnallinen turvallisuus

Vikasietoisuus ja luotettavuus

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

14. Poikkeukset 14.1

Mitä poikkeuskäsittely tarkoittaa?

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

11. Javan toistorakenteet 11.1

Sulautettujen järjestelmien vikadiagnostiikan kehittäminen ohjelmistopohjaisilla menetelmillä

OHJ-4301 Sulautettu Ohjelmointi

Vikasietoisuus ja luotettavuus

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

12. Näppäimistöltä lukeminen 12.1

Liittymän vikadiagnosointi

8. Näppäimistöltä lukeminen 8.1

Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

12. Javan toistorakenteet 12.1

Avoimen lähdekoodin kehitysmallit

12. Javan toistorakenteet 12.1

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

13. Loogiset operaatiot 13.1

9. Luento: Ohjelmistotyö. Tommi Mikkonen,

1. Mitä tehdään ensiksi?

Ohjelmoinnin perusteet, syksy 2006

Listarakenne (ArrayList-luokka)

Ohjelmoinnin perusteet Y Python

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

WINDOWSIN ASENTAMINEN

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Topfieldin sarjaporttipäivitystyökalun asennus(rs232)

Taulukoiden käsittely Javalla

iloq P10S.10/20 -ohjelmointilaite Käyttöohje

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

8. Näppäimistöltä lukeminen 8.1

1 Tehtävän kuvaus ja analysointi

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

1 Tivax siirto uuteen koneeseen

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Huawei E3276s ohjelmistopäivitys

Metodien tekeminen Javalla

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Garmin laitteiden ohjelmistopäivitys

TK Palvelinympäristö

VISUAALINEN TIETOTURVASUUNNITELMA PENTTI LIIKANEN

Agenda. Läpäisyvaatimukset Henkilökunta Luennot ja aikataulu Kurssimateriaali Harjoitustyöt Demoharjoitus Tentti ja arvostelu Muuta?

Olio-ohjelmointi Virhetilanteiden käsittely

XEROXIN TURVATIEDOTE XRX Versio 1.0 Muutettu viimeksi: 10/08/05

Javan asennus ja ohjeita ongelmatilanteisiin

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

13. Loogiset operaatiot 13.1

Algoritmit 2. Luento 13 Ti Timo Männikkö

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Lyhyt kertaus osoittimista

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

erasmartcard-kortinlukijaohjelmiston asennusohje (mpollux jää toiseksi kortinlukijaohjelmistoksi)

Palomuurit. Palomuuri. Teoriaa. Pakettitason palomuuri. Sovellustason palomuuri

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Teollisuusautomaation standardit. Osio 6:

4. Lausekielinen ohjelmointi 4.1

Java-kielen perusteet

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Maha Eurosystem jarrulaskentaohjelman asennusohje versio

5. HelloWorld-ohjelma 5.1

Visma Avendon asennusohje

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Ongelmatilanteita verkkokokousympäristössä (BigBlueButton) Mediamaisteri Group PL 82 (Sumeliuksenkatu 18 B) FI TAMPERE

11. Javan valintarakenteet 11.1

TOIMINNALLINEN MÄÄRITTELY MS

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

CEM DT-3353 Pihtimittari

Kameran laiteohjelman päivittäminen

Java ja grafiikka. Ville Sundberg

Graafisen käyttöliittymän ohjelmointi Syksy 2013

PROBYTE GSM ALARM #6d

2 Konekieli, aliohjelmat, keskeytykset

SAS-ohjelmiston perusteet 2010

-Motorracing Electronics WB-NÄYTTÖ KÄYTTÖOHJE. WB-näyttö Käyttöohje v1.0 12/2011 1/7

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

7. Koneenohjausjärjestelmien suunnittelumallit. OhAr Veli-Pekka Eloranta

Simulaattorin asennus- ja käyttöohje

Asynkroninen ohjelmointi.net 4.5 versiolla

Transkriptio:

11. Luento: Vikasietoisuus Arto Salminen, arto.salminen@tut.fi

Agenda Vikasietoisuuden käsitteistöä Vikasietoisuuden saavuttaminen Ohjelmisto- ja laitteistovioista Vika-analyysi Esimerkkejä Vikasietoisuuden luokittelua Käynnistys ja uudelleenkäynnistys Ohjelmistotyö ja ylläpito suorituksen aikana Yhteenveto

Käsitteistö ei vakiintunut kaikilta osin Vika (fault): Matalimman tason poikkeuksellinen toiminta Virhe/virhetila (error): Vian seurauksena aiheutuva järjestelmän poikkeuksellinen tila Virhetoiminto (failure): Järjestelmän väärä toiminta virhetilanteessa Entä bug ja defect?

Turvallisuus- ja elävyysominaisuudet Turvallisuus (safety): Järjestelmä ei tee mitään sellaista mitä se ei saisi tehdä Elävyys (liveness ~ availability): Laite tekee jotakin Alpern and Schneider (Inf. Proc. Letters, 1985) "Any specification can be expressed as the conjunction of a safety property and a liveness property."

Mistä viat aiheutuvat? Virheet speksissä Virheet toteutuksessa Ulkoiset tekijät Laitteisto HUOM! Vikaisietoisuus määritellään jotain tiettyä ominaisuutta kohti

Ei vikasietoisuutta Toisin sanoen kyseistä tapahtumaa ei osata odottaa Pillastuminen Täydellinen jumiutuminen (Onnekas sattuma) Sekä elävyys että turvallisuus rikkoutuvat

Ei-peittävä vikasietoisuus Jotain edelleen tapahtuu, mutta tulokset eivät välttämättä ole luotettavia Ei kovin houkutteleva vaihtoehto; yhdistettynä itsestabiloituvuuden kanssa kuitenkin mahdollinen Turvallisuus rikkoutuu, elävyys säilyy Myös itsestabiloituvuuden kanssa turvallisuusominaisuudet ovat hetken rikki

Vikaturvallisuus Järjestelmä lopettaa toimintansa kun tulee ongelmia Siis: Mitään pahaa ei tapahdu, mutta ei välttämättä mitään hyvääkään Turvallisuus säilyy, elävyys rikkoutuu Yleisin vikasietoisuuden muoto (varmaankin siksi että peittävästi vikasietoinen järjestelmä on niin paljon vaikeampi tehdä)

Peittävä vikasietoisuus Virhetilassa käyntiä ei huomata lainkaan Käytännössä tietysti vaaditaan diagnostiikka- ja toipumisrutiineja, mutta nämä on kätketty normaalitoimintaan niin, ettei niitä huomata Sekä turvallisuus että elävyys säilyvät

Vikasietoisuuden eri muodot: Summary Turvallisuus säilyy Elävyys säilyy Peittävä vikasietoisuus Elävyys ei säily Vikaturvallinen Turvallisuus ei säily Ei-peittävä vikasietoisuus Ei vikasietoisuutta

Vikasietoisuuden eri muodot: Summary Vikasietoisuus Attributes Availability Safety Reliability Means Tolerance, prevention, removal, forecasting Impairments Faults, errors, failures

Vikasietoisuuden saavuttaminen Välttämätön ehto on varautua vikaan; geneeristä vikasietoisuusmoduulia ei ole! Tapoja useita Datan redundanssi (kaikkea tietoa ei tarvita suorituksessa); erilaiset pariteettijärjestelmät, tarkistussummat jne. Ohjelmakoodin redundanssi (erilaiset vikaantumistestit); tyypillisesti koodissa haaroja jotka ovat ylimääräisiä, defensiivinen ohjelmointi yleisenä käytäntönä

Vikojen havaitsemisesta Virhetarkastelut Tarkistussummat Assertiot Vahtikoira (watchdog)/pulssi (heartbeat) Joskus molemmat; toinen tarkkailee ohjelman suorituksessa oloa ja toinen laskennan etenemistä tms.

Ongelmia Jatkuva tarkistussummalaskenta vie aikaa Virhetarkastelut rikkovat helposti ohjelmalogiikan, kun yhtenään joudutaan tarkastelemaan tuliko virheitä Poikkeuskäsittely on kallista Esim. normaali paluu 1/10000 ajasta verrattuna paluuseen poikkeuskäsittelijän kautta

Try Catch vaikutus suorituskykyyn C:\>Main.exe without try/catch 250ms with try/catch 1332ms without try/catch 261ms with try/catch 1322ms C:\>java -classpath. Main without try/catch 80ms with try/catch 321ms without try/catch 70ms with try/catch 320ms Windows still uses longjmp... Similar hardware, Linux: int i = 0; public void foo() { ++i; } public void foo1() { foo(); } public void foo2() { try { foo(); } catch (RuntimeException re) { System.out.println("caught "+re); } } without try/catch 207ms with try/catch 227ms without try/catch 202ms with try/catch 209ms private static int LOOP_COUNT = 10000000;

Laitteistovioista Tyypillisesti transientti (toiminto ei onnistu yhdellä kertaa esim. ulkoisten häiriöiden takia mutta laitteessa ei kuitenkaan vikaa) Laitteisto voi sisältää logiikan tämän hoitamiselle Redundanssi vaatii laitteiden monistamista tai suunnittelua siten että yksittäisen signaalin virhe ei aiheuta virhettä Yleensä siis ylimääräistä laitteistoa! Ongelma: Jos 2 laitetta jotka ovat eri mieltä, kumpi oikeassa?

N+1- ja 2Nvaralaitteistomallit N+1: Varalaite on yleensä kylmä joten se pitää lämmittää ; vain 1 varalaite koko järjestelmälle 2N: Varalaite voi suoraan matkia päälaitetta; jokaisella laitteella oma kopionsa

Ohjelmistoviat Ohjelmiston sisäinen redundanssi Suunnitteluvirheisiin varautumista Vaatii täydellisyyteen saakka vietynä eri menetelmiin perustuvan toteutuksen Sitten äänestys oikeasta tuloksesta Defensiivinen ohjelmointi Kattava testaus Ajonaikainen diagnostiikka

Defensiivinen ohjelmointi Laatu yleensä: Lähtökohtainen pyrkimys korkeaan laatuun; ei tilaa ohjelmointivirheille Ohjelmakoodin luettavuus: Toiminta pystytään varmentamaan helpommin esimerkiksi katselmoinnein Oletusten vähyys: Minimoidaan oletukset, joiden varaan ohjelman toiminta rakentuu; esim. varmistetaan että ohjelma toimii kaikilla syötearvoilla HUOM: Defensiivinen ohjelmointi ei välttämättä pure täysin aikakäyttäytymiseen, jossa oletuksia joudutaan väistämättä tekemään!

Esimerkki int i = 0; while (1) { // Jotain ihmeellistä tekemistä i++ if (i == 10) break; // Ihmeellinen laskenta jatkuu }

Esimerkki int i = 0; while (1) { // Jotain ihmeellistä tekemistä i++ if (i >= 10) break; // Ihmeellinen laskenta jatkuu }

Esimerkki 2 int risky_programming(char *input){ // one more for the null character char str[1000+1]; //... strcpy(str, input); // copy input } //...

Esimerkki 2 int secure_programming(char *input){ char str[1000]; //... } // copy input without exceeding the length of // the destination strncpy(str, input, sizeof(str)); // if strlen(input) == sizeof(str) // then strncpy won't NUL terminate str[sizeof(str) - 1] = '\0'; //...

Vika-analyysi Vikasietoisuus vain etukäteen tunnistettuja vikoja kohtaan Analysoidaan mahdolliset viat Miten vikaan voidaan reagoida Miten viasta voidaan toipua

Esimerkki Sähkönsyöttö katoaa Akut kunnossa Aggrekaatti käynnistyy Aggrekaatti käynnistyy Siirrytään käsiajanottoon OK OK 30min jonka jälkeen käsiajanotto Pieni katkos, Ei ongelmia tuloksissa Tulokset viivästyvät mutta ne saadaan Tuloksia katoaa, kisoja tai sarjoja hylätään

Joitakin esimerkkijärjestelmiä Avaruussukkula 5 tietokonetta (laitteistoviat) 2 valmistajan ohjelmat (ohjelmistoviat) http://www1.nasa.gov/mission_pages/shuttle/flyout/flyfeature_shuttlecomputers.html Ariane 5 avaruusraketti Alun perin määrittelyvirhe; raja-arvon ylittyminen johti siihen että laitteiston uskottiin olevan vialla ja se sammutettiin Syöksyi lopulta turvallisesti mereen

Vikaturvallisuuden luokittelua Taso 1: Normaalin toiminnan vikatilanteet Normaalit pikkuviat, esim. muistitilan ylittyminen, levyn täyttyminen Laitteistoviat transientteja Diagnostiikkajärjestelmä; käynnistystestit ainakin muisteille Taso 2: Vikaturvallinen toipuminen Vaatii tyypillisesti uudelleenkäynnistämisen vian havaitsemisen ja siitä toipumisen jälkeen Käyttöjännitteen seuranta, vahtikoira tms.

Luokittelu jatkuu Taso 3: ei-peittävä itsestabiloituva vikasietoisuus Esimerkkitapaus vikaantuneen muistin hallinta: Virhe tunnistetaan pariteettikentästä, ja vikaantunut muisti poistetaan käytöstä. Korjaus pysyvä jos muistin vaihto vaikeaa, muuten laite voi ilmoittaa huoltotarpeesta Muita vastaavia tapauksia ovat esim. ohjausvirheet ja ympäristön yllättävä käytös. Taso 4: peittävä vikasietoisuus Tärkeimät laitteet (tai osa niistä) monistettu Ongelmatilanteessa varayksikkö olemassa ja valmis astumaan remmiin nopeasti Esim. RAID, tietoliikenneyhteyksien monistaminen

Luokittelu jatkuu edelleen Taso 5: Korjaus konetta sammuttamatta Vain pieni parannus edelliseen; myös lopullinen korjaus konetta sammuttamatta Taso 6: Kaikkien laitteiden varmistus Kaikki laitteet monistettu Esim. Suurehko puhelinkeskus (pienemmät tasoja 4 ja 5) Taso 7: Koneiden monistaminen Eli siis kuten 6 mutta joka yksikkö laskee oman tuloksen ja valittu tulos saadaan äänestämällä tms. Käytännössä harvinaisia

Käynnistys ja uudelleenkäynnistys Käynnistys on aina erikoistilanne Oheislaitteet eivät ole käynnissä -> Ohjauselektroniikka saattaa tulkita tiloja miten haluaa (kytkennöistä toki riippuen, hyvällä elektroniikkasuunnittelulla voidaan saada ihmeitä aikaan!) Ulkoisten liittymien tulee toimia turvallisesti; ei satunnaiskäyttäytymistä edes käynnistyksen aikana Yleissääntöä turvalliseen käynnistämiseen ilman laitteistotukea ei ole; ohjelmoija voi toki luoda lisää ongelmia väärillä alustusrutiineilla Ajossa olevan järjestelmän käynnistys (varsinkin esim. jotain aktiivisesti ohjaavan) on muutenkin harkittava huolellisesti vaikkei ohjelmoijien mielenkiinto ja ohjelmointityyli työläitä tarkistuksia suosisikaan

Ohjelmistotyö ohjelman suorituksen aikana Järjestelmä voi olla jatkuvasti käytössä Alasajo ei vaihtoehto, jos toimintaa ei saa keskeyttää Ainoa mahdollisuus toteuttaa ylläpitotoimenpiteen ajon aikana Ääritapauksisssa sekä ohjelmisto- että laitteistotuki tarpeen

Ohjelmiston muuntelu suorituksen aikana Yksinkertainen tapaus: Parametrein tapahtuva ohjaus Esim. joku diagnostiikkaa häiritsevä toiminto kytketään pois päältä diagnostiikan käytön ajaksi Paikko-ohjelmistot (patch) Joku muistialue varataan patcheille Uudelleenkäynnistys/initialisointi jolloin patchit ladataan käyttöön Joskus voidaan toteuttaa komponentti kerrallaan, jolloin saadaan aikaiseksi hienorakeisempi päivitettävyys Joskus koko ohjelmiston uudelleenlataus ja uudelleenkäynnistys DISCLAIMER: Lähtökohtaisesti mitä ilmeisimmin virheherkkää eikä missään nimessä suositeltava yleinen käytäntö

Laitteistotuesta Laitteisto voi olla rakennettu siten, että se sallii kahden ohjelmiston ajamisen rinnakkaisesti kahdella eri tietokoneella Tällöin ohjelmisto voidaan päivittää tietokoneeseen A, ja päivityksen + toiminnan varmentamisen aikana tietokone B hoitaa toimintaa Jos A vaikuttaa toimivan hyvin, myös B voidaan päivittää Yleensä huomioitu järjestelmätason vaatimuksissa Ongelma: Mitä jos vanhaa versiota ajava B vikaantuu kun A:ta ollaan päivittämässä?

Yhteenveto Vikasietoinen järjestelmä kykenee jatkamaan toimintaansa itsenäisesti myös silloin kun siinä on vikaa Vikaturvallisen järjestelmän suunnittelussa on huomioitu erikseen ettei vikaantumisesta ettei tule vaaraa Vikasietoisuus voi kohdistua vain vikoihin jotka on otettu huomioon osana suunnittelua Ohjelmistojen sisäisen vikasietoisuuden toteutuskeinoina Ohjelman toiminnan tarkkailu Defensiivinen ohjelmointi