Kun kehitetään mitä tahansa ohjelmistoa tai järjestelmää sellaiseen kontekstiin, jossa ohjelmiston tai järjestelmän epätavallinen toiminta voi johtaa henkilö-, omaisuus- tai ympäristövahinkoihin, kohdistuu tähän tuotteeseen vaatimus toiminnallisesta turvallisuudesta. Toiminnallinen turvallisuus tarkoittaa tuotteeseen rakennettua ominaisuutta, jonka tarkoituksena on poistaa tai vähentää potentiaalisesti vahinkoa aiheuttavia riskejä.
Toiminnalliseen turvallisuuteen liittyy vaatimus siitä, että sen on oltava jäljitettävissä ja dokumentoitua. Siihen saattaa liittyä myös standardeja, joita halutaan – tai jotka tulee – täyttää. Mallipohjainen suunnittelu tukee erinomaisesti näitä vaatimuksia ja toiminnallista turvallisuutta yleisesti.
Kun me Devectolla puhumme vaativasta ohjelmistokehityksestä, tarkoitamme yleensä ohjelmistoja tai järjestelmiä, joita kehitetään sellaisiin käyttötarkoituksiin, joiden toiminnan turvallisuus on kriittistä. Oli kyse sitten tehtaan tuotantolinjoista tai 20 – 30 tonnia painavista metsäkoneista – voi jokainen kuvitella itse, minkälaista vahinkoa tuollainen voi saada aikaan toimiessaan epätavallisesti.
Turvallisuuden takaamisen prosessi
Työjärjestys tällaisen tuotteen turvallisuuden takaamisessa tuotekehityksessä on yksinkertaistettuna seuraavanlainen:
- Vaara- ja riskikartoitus
- Turvajärjestelmän toiminnallisuuden vaatimusmäärittely
- Turvajärjestelmän suunnittelu ja validointi
Vaarakartoitus tarkoittaa sananmukaisesti potentiaalisten vaaratilanteiden kartoittamista ja tunnistamista etukäteen, sekä niihin liittyvien riskien määrittelemistä esimerkiksi vaaran seurausten ja tapahtumistodennäköisyyksien mukaan. Näistä luodaan lista ja näihin usein pyritään löytämään ensin ns. luonnollinen tapa välttää vaaratilanne. Tämä tarkoittaa vaaran poistamista kokonaan suunnittelemalla toiminto eri tavalla, esimerkiksi korvaamalla korkeajännitteinen sähköinen toiminto matalammalla, vaarattomalla jännitetasolla. Mikäli vaaraa ei voida poistaa järjestelmästä, pyritään riskiä pienentämään passiivisilla menetelmillä, kuten henkilöiden pääsyn rajoittamisella potentiaalisesti vaarallisiin osiin järjestelmää – jos puhutaan esimerkiksi tehtaan tuotantolinjoista.
Ne riskit, joita ei voida taklata luontaisilla tai passiivisilla riskinvähennyskeinoilla asettavat vaatimukset turvajärjestelmän toiminnallisuudelle – eli mitä riskejä turvajärjestelmän tulee poistaa tai vähentää ja millä tavoin. Esimerkiksi varmistaa turva-alue työkoneen ympärillä ”aktiivisesti” sensoreilla tai muulla tekniikalla.
Mikäli mitään edellisistä menetelmistä ei voida toteuttaa, jäävät jäljelle vielä organisatoriset ja henkilökohtaiset toimenpiteet, joista ensimmäisellä voidaan tarkoittaa muun muassa työohjeita koneen käyttöön – esim. turva-alueen varmistamista metsäkoneen ympärillä sen ollessa työtehtävässä ja jälkimmäisellä esimerkiksi henkilökohtaisia kuulosuojaimia meluisan koneen läheisyydessä työskenneltäessä. Seuraavassa pureudumme kuitenkin tarkemmin kirjoituksen pääaiheeseen, eli turvatoimintojen ja -järjestelmien suunnitteluun.
Turvajärjestelmän suunnittelu ja validointi on toiminnallisen turvallisuuden kovaa ydintä. Sillä tarkoitetaan luotettavia ominaisuuksia laitteessa sekä siihen liittyvässä ohjelmistossa, jotka ovat todennettavia, jäljitettävissä olevia ja dokumentoituja. Näillä varmistetaan tuotteen toiminnan turvallisuus kaikissa tilanteissa. Käytännössä siis sitä, että toiminnot eivät itsessään aiheuta vaaratilanteita silloin kun tuote toimii normaalisti ja keinot havaita ja minimoida vahingot vähintään siedettävälle tasolle, silloin kun se toimii epänormaalisti – tällä voidaan tarkoittaa esim. savuvaroitinta sekä työkoneen liikkeen hätäpysäytystä. Mallipohjaisessa suunnittelussa suunnittelun lisäksi myös osa validoinnista voidaan tehdä mallipohjaisesti, sillä mallin turvallisuutta todennetaan testauksen kautta samoilla työkaluilla kuin sitä suunnitellaan.
Toiminnallisen turvallisuuden määritelmään kuuluu myös muita vaatimuksia, mutta nämä ovat ne, jotka koskettavat suunnittelua.
Mallipohjaisesta suunnittelysta tukea toiminnallisen turvallisuuden vaatimuksien täyttämiseen
Jäljitettävyys ja dokumentaatio ovat asioita, jotka toistuvat toiminnallisen turvallisuuden vaatimuksissa. Mallipohjainen suunnittelu tukee näitä vaatimuksia erinomaisesti, sillä osia tästä dokumentaatiosta syntyy automaattisesti ohjelmistokehityksen sivutuotteena.
Aiemmissa blogeissamme olemme avanneet tarkemmin sitä, miten mallipohjainen suunnittelu toimii, joten en mene siihen nyt syvällisemmin. Tyydyn toteamaan, että:
- Mallipohjaisessa suunnittelussa kehittäjä mallintaa toiminnallisuuksia kokonaisuuksina koodin kirjoittamisen sijaan
- Usein mallipohjaisen suunnittelun työkalut generoivat koodin automaattisesti visuaalisen mallin pohjalta
Tässä asiayhteydessä tämä tarkoittaa sitä, että tuon visuaalisen mallin pohjalta saadaan aikaan haluttu dokumentaatio sekä koodi, ja toiminnallisen turvallisuuden jäljitettävyys voidaan linkittää paremmin osaksi dokumentointia. Lisäksi visuaalisesta mallista toiminnan ymmärtäminen on helpompaa myös sidosryhmille, joille koodi ei ole niin tuttua. Tämän ansiosta turvallisuuteen liittyvien toimintojen toteutusta voi olla arvioimassa esimerkiksi loppukäyttäjiä, mikä parantaa tuotteen laatua ja turvallisuutta.
Eli lyhyesti sanottuna, toiminnallisen turvallisuuden jäljitettävyyden vaatimus saadaan paljon helpommin täytettyä silloin kun ohjelmistokehitys tehdään mallipohjaisen suunnittelun keinoin.
Otetaan käytännön esimerkiksi hätäpysäytys. Hätäpysäytyksen on toimittava siten, että aktivoituessaan se ylittää kaikki muut ao. tuotteen toiminnallisuudet. Käytännössä järkevin tapa toteuttaa hätäpysäytys on suunnitella se täysin irralliseksi kokonaisuudeksi. Näin pystytään varmistamaan, että hätäpysäytyksen toimivuus ei ole riippuvainen mistään muusta ja sen toiminnan dokumentointi on tällöin suhteellisen yksinkertaista. Varsinkin, jos se on suunniteltu mallipohjaisesti, Tällöin dokumentaatio siitä, että hätäpysäytys toimii muun kokonaisuuden ulkopuolella, on jo olemassa.
Lisäksi, jos mallia muutetaan jossakin vaiheessa, päivittyy toiminnalliseen turvallisuuteen liittyvä dokumentaatio samalla. Toki muutoksen mahdolliset vaikutukset muihin toimintoihin on huomioitava tarkasti.
Standardien täyttäminen tärkeää
Kaikkien laitteiden, koneiden ja järjestelmien turvallisuuteen liittyy suuri määrä erilaisia standardeja, joita valmistajan tulee täyttää. Näillä standardeilla voi olla lisäksi eri tasoja, joiden täyttymiseen liittyy erilaiset vaatimukset. Nämä vaatimukset on oltava myös todennettavissa.
Mallipohjainen suunnittelu ja sen työkalut tukevat erittäin hyvin eri standardien vaatimuksia. On myös varsin tavallista, että tietyn eheystason saavuttaminen tietyn standardin mukaan vaatii jo itsessään mallipohjaisten suunnittelumenetelmien käyttöä.
Mallipohjaisen suunnittelun edut
Jos kehitettävät tuotteet ovat sellaisia, että niihin liittyy vaatimus toiminnallisesta turvallisuudesta, ovat ne usein myös luonteeltaan sellaisia, että niillä on pitkä elinkaari ja korkea hintalappu. Tällöin voi sanoa, että tuotetta kehittävällä taholla ei ole mitään syytä tehdä kyseisen tuotteen kehitys- ja suunnittelutyötä mitenkään muuten kuin mallipohjaisesti.
Kun suunnittelu tehdään mallipohjaisesti:
- Jäljitettävyyden ja dokumentaation vaatimaa työmäärä pienenee kun toteutus voidaan yhdistää paremmin näihin vaiheisiin
- On mahdollista saavuttaa asiaan kuuluvien standardien ylempiä eheystasojaPäästään kehitettävää tuotetta testaamaan aiemmin ja sen myötä kattavammin, jolloin laatu ja turvallisuus paranee
Mallipohjaiseen suunnitteluun kohdistuva kritiikki perustuu usein käytettävien työkalujen korkeaan hintalappuun, mutta tämän tyyppisessä tekemisessä ne kustannukset ovat helposti perusteltavissa korkeammalla laadulla ja tehokkaammalla tuotekehityksellä.
Mikäli tuotekehitystä ei olla aiemmin tehty mallipohjaisella suunnittelulla, on ymmärrettävää, että sen mahdollisuuksiin voi liittyä epäilyksiä. Mikäli aihe kiinnostaa, mutta vähän myös epäilyttää, ota yhteyttä ja keskustelemme mielellämme kanssanne tarkemmin mallipohjaisen suunnittelun mahdollisuuksista.
Kirjoittaja
Jari Rauhamäki on ohjelmistoarkkitehti ja tekniikan tohtori Tampereen yliopistosta. Jarin erityisenä mielenkiinnon kohteena ovat turvallisuuskriittiset järjestelmät, koneturvallisuus ja mallipohjainen suunnittelu. Jarin tavoittaa osoitteesta: jari.rauhamaki@devecto.com