Tietojenkäsittelytieteessä (informatiikassa) luotettavuus on tietokonejärjestelmän kykyä käsitellä virheellisiä tietoja ja virheitä tehtävien suorittamisen aikana [1] [2] . Luotettavuus voi kattaa monia tietojenkäsittelytieteen alueita , kuten luotettavan ohjelmoinnin, luotettavan koneoppimisen ja luotettavan verkkosuojauksen. Muodolliset menetelmät, kuten sumea testaus, ovat tärkeitä luotettavuuden osoittamisessa, koska tämän tyyppinen testaus sisältää virheellisiä tai odottamattomia syötteitä. Vaihtoehtoisesti vakauden testaamiseen voidaan käyttää käynnissä olevaa järjestelmävikaa. Useat kaupalliset tuotteet suorittavat luotettavuustestauksen ohjelmistoanalyysin avulla [3] .
Yleensä luotettavien järjestelmien luominen, jotka kattavat kaikki mahdolliset vikakohdat, on vaikeaa mahdollisten tulojen ja niiden yhdistelmien valtavan määrän vuoksi [4] . Koska kaikkien syötteiden ja niiden yhdistelmien testaaminen kestäisi liian kauan, kehittäjät eivät voi tutkia kaikkia tapauksia tyhjentävästi. Sen sijaan kehittäjä yrittää yleistää tällaisia tapauksia [5] . Oletetaan esimerkiksi, että syötät kokonaislukuarvoja . Jotkut valitut syötteet voivat koostua negatiivisesta luvusta, nollasta ja positiivisesta luvusta. Käyttämällä näitä numeroita ohjelmiston testaamiseen tällä tavalla, kehittäjä yleistää kaikkien tapausten joukon kolmeen numeroon. Tämä on tehokkaampi ja hallittavampi menetelmä, mutta alttiimpi epäonnistumiselle. Testitapauksen yleistäminen on esimerkki vain yhdestä menetelmästä, jolla voidaan käsitellä vikaongelmaa, nimittäin virheellisen käyttäjän syötteen aiheuttamaa virhettä. Järjestelmät voivat yleensä epäonnistua myös muista syistä, kuten verkosta irtautumisesta.
Siitä huolimatta monimutkaisten järjestelmien on käsiteltävä kaikki virheet. Tällaisista onnistuneista järjestelmistä on monia esimerkkejä. Jotkut järeimmistä järjestelmistä ovat kehittymässä ja ne voidaan helposti mukauttaa uusiin tilanteisiin [4] .
Ohjelmat ja ohjelmistot ovat työkaluja, jotka keskittyvät hyvin tiettyyn tehtävään, eivätkä ne siksi ole yleisiä ja joustavia [4] . Sellaisten järjestelmien kuin Internetin tai biologisten järjestelmien havainnot osoittavat kuitenkin sellaisen tärkeän ominaisuuden kuin sopeutumisen ympäristöön . Yksi tapa mukauttaa biologisia järjestelmiä ympäristöön on käyttää redundanssia [4] . Monet elimet ovat toiminnallisesti tarpeettomia biologisessa organismissa. Esimerkiksi munuainen on yksi tällainen esimerkki. Ihmiset tarvitsevat yleensä vain yhden munuaisen, mutta toisen munuaisen saaminen säilyttää kehon kyvyt, kun ensimmäinen munuainen epäonnistuu. Samaa periaatetta voidaan soveltaa ohjelmistoihin, mutta siinä on joitain ongelmia. Sovellettaessa redundanssin periaatetta tietojenkäsittelytieteeseen ei suositella sokean koodin lisäämistä. Koodin sokea lisääminen johtaa enemmän virheisiin, monimutkaistaa järjestelmää ja vaikeuttaa sen ymmärtämistä [6] . Koodi, joka ei vahvista jo olemassa olevaa koodia, ei ole toivottavaa. Sen sijaan uudessa koodissa on oltava vastaava toiminnallisuus, jotta jos toiminto katkeaa, saman toiminnon tarjoava koodi voi korvata sen manuaalisella tai automaattisella ohjelmistovälillä. Tätä varten uuden koodin on tiedettävä, miten ja milloin ottaa huomioon vikakohta [4] . Tämä tarkoittaa, että järjestelmään on lisättävä enemmän logiikkaa. Mutta kun järjestelmä lisää logiikkaa, komponentteja ja kasvaa kokoa, siitä tulee entistä monimutkaisempi. Siten redundanttimpaa järjestelmää rakennettaessa siitä tulee myös monimutkaisempi, ja suunnittelijoiden on harkittava redundanssin ja monimutkaisuuden tasapainottamista.
Tällä hetkellä tietotekniikan tarkoituksena ei ole luoda luotettavia järjestelmiä [4] . Pikemminkin ne keskittyvät skaalautumiseen ja tehokkuuteen. Yksi tärkeimmistä syistä, miksi luotettavuutta laiminlyödään nykyään, on se, että sitä on vaikea tehdä yleisesti [4] .
luotettava ohjelmointi on ohjelmointityyli, joka keskittyy odottamattoman lopettamisen ja odottamattomien toimintojen käsittelyyn [7] . Erikoiskoodin avulla nämä täydennykset ja toiminnot käsitellään sulavasti näyttämällä tarkkoja ja yksiselitteisiä virheilmoituksia. Nämä virheilmoitukset helpottavat ohjelman mukauttamista.
PeriaatteetParanoia - Ohjelmoija olettaa ohjelmistoa luodessaan, että käyttäjät haluavat murtaa koodinsa. Ohjelmoija olettaa myös, että hänen oma kirjoitettu koodi ei välttämättä toimi tai toimi väärin.
Tyhmyys - ohjelmoija olettaa, että käyttäjät yrittävät syöttää vääriä, väärennettyjä ja vääriä tietoja. Tämän seurauksena ohjelmoija palauttaa käyttäjälle yksiselitteisen, intuitiivisen virhesanoman, joka ei vaadi virhekoodien etsimistä. Virheilmoituksen tulee olla mahdollisimman tarkka johtamatta käyttäjää harhaan, jotta ongelma voidaan korjata helposti.
Vaaralliset työkalut – Käyttäjien ei tule käyttää kirjastoja, tietorakenteita tai osoittimia tietorakenteisiin. Nämä tiedot tulee piilottaa käyttäjältä, jotta käyttäjä ei voi vahingossa muuttaa niitä ja aiheuttaa virhettä koodiin. Kun tällaiset rajapinnat on rakennettu oikein, käyttäjät käyttävät niitä löytämättä porsaanreikiä käyttöliittymän vaihtamiseen. Käyttöliittymän tulee olla valmiiksi toteutettu kunnolla, joten käyttäjän ei tarvitse tehdä muutoksia. Siksi käyttäjä keskittyy vain omaan koodiinsa.
Ei voi tapahtua - hyvin usein koodia muutetaan ja se voi johtaa "mahdottoman" tapaukseen. Siksi mahdottomien tapausten oletetaan olevan erittäin epätodennäköisiä. Kehittäjä ymmärtää, kuinka käsitellä tapauksia, jotka ovat erittäin epätodennäköisiä, ja toteuttaa suunnittelun sen mukaisesti.
Vankka koneoppiminen viittaa yleensä koneoppimisalgoritmien kestävyyteen. Jotta koneoppimisalgoritmia pidettäisiin luotettavana, joko testivirheen on vastattava harjoitusvirhettä tai suorituskyvyn on pysyttävä vakaana sen jälkeen, kun tietojoukkoon on lisätty kohinaa [8] .
Robust verkkosuunnittelu on verkon suunnittelun tutkimusta vaihtelevissa tai epävarmoissa vaatimuksissa [9] . Verkon suunnittelussa luotettavuus on tavallaan yhtä laajaa kuin ohjelmistosuunnittelussa, johtuen laajoista muutos- tai syöttömahdollisuuksista.
On algoritmeja, jotka tekevät virheitä syöttötiedoissa [10] tai laskelmissa [11] . Tässä tapauksessa laskelmat johtavat lopulta oikeaan johtopäätökseen. Tätä ilmiötä on kutsuttu "korrektisuus vetovoimaksi" (englanniksi correctness attraction) [11] .
Ohjelmiston laatu | |||||
---|---|---|---|---|---|
Ominaisuudet |
| ||||
Standardit ja suositukset |
| ||||
Prosessit ja organisaatiot |
|