Luotettavuus (tietokonetiede)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 19.5.2021 tarkistetusta versiosta . tarkastukset vaativat 4 muokkausta .

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] .

Johdanto

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] .

Ongelmia

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] .

Alueet

Luotettava ohjelmointi

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.

Periaatteet

Paranoia - 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

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] .

Vankka verkkosuunnittelu

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.

Luotettavat algoritmit

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] .

Muistiinpanot

  1. Mallipohjainen lähestymistapa kestävyystestaukseen  // Dl.ifip.org. Haettu 13.11.2016. Arkistoitu 24. marraskuuta 2020.
  2. 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Standard 610.12-1990, määrittelee luotettavuuden "asteena, jossa järjestelmä tai komponentti voi toimia oikein virheellisten syötteiden tai stressaavien ympäristöolosuhteiden vallitessa."
  3. Jack W. Baker, Matthias Schubert, Michael H. Faber. Kestävyyden arvioinnista  // Rakenneturvallisuus 30. - 2008. - Nro 30 . — S. 253–267 . - doi : 10.1016/j.strusafe.2006.11.004 . Arkistoitu 25. marraskuuta 2020.
  4. ↑ 1 2 3 4 5 6 7 Gerald Jay Sussman. Robust Systems  -essee // Groups.csail.mit.edu. Haettu 13.11.2016 - 13. tammikuuta 2007. Arkistoitu alkuperäisestä 12. elokuuta 2017.
  5. Joseph, Joby. Yleisten testitapausten tekemisen tärkeys - Software Testing Club - Online Software Testing Community  // Software Testing Club. Haettu 2016-11-13.. - 2009-09-21. Arkistoitu alkuperäisestä 24. kesäkuuta 2016.
  6. Rakentamalla vankkoja järjestelmiä essee  // Agentit verkossa : Robust Software : Cse.sc.edu. Haettu 13.11.2016. Arkistoitu alkuperäisestä 25. tammikuuta 2020.
  7. Vankka ohjelmointi . Nob.cs.ucdavis.edu. (Haettu 13.11.2016.). Haettu 18. helmikuuta 2020. Arkistoitu alkuperäisestä 17. helmikuuta 2020.
  8. El Sayed Mahmoud. Mikä on koneoppimisalgoritmin kestävyyden määritelmä? . tutkimusportti. Haettu 13.11.2016. Haettu 23.2.2020. Arkistoitu alkuperäisestä 14.11.2020.
  9. Vankka verkkosuunnittelu (downlink) . Math.mit.edu. Haettu 13.11.2016. Haettu 24. helmikuuta 2020. Arkistoitu alkuperäisestä 9. syyskuuta 2016. 
  10. Carbin, Michael; Rinard, Martin C. Kriittisten syöttöalueiden ja koodin automaattinen tunnistaminen sovelluksissa  // Proceedings of the 19th International Symposium on Software Testing and Analyst - ISSTA '10. — s. 37–48 . — ISBN 9781605588230 . - doi : 10.1145/1831708.1831713 . Arkistoitu alkuperäisestä 13. marraskuuta 2019.
  11. ↑ 1 2 Danglot, Benjamin; Preux, Philippe; Baudry, Benoit; Monperrus, Martin. Oikeudenmukaisuuden vetovoima: tutkimus ohjelmiston käyttäytymisen vakaudesta ajonaikaisen häiriön aikana  // Empirical Software Engineering. 23(4). - 21. joulukuuta 2017. - S. 2086-2119 . - doi : 10.1007/s10664-017-9571-8 . - arXiv : 1611.09187 . Arkistoitu alkuperäisestä 24. helmikuuta 2020.