Megbízhatóság (számítástechnika)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. május 19-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

Az informatikában (informatikában) a megbízhatóság  a számítógépes rendszer azon képessége, hogy megbirkózik a feladatok végrehajtása során fellépő hibás adatokkal és hibákkal [1] [2] . A megbízhatóság a számítástechnika számos területére kiterjedhet , például a megbízható programozásra, megbízható gépi tanulásra és megbízható hálózati biztonságra. Az olyan formális módszerek, mint a fuzzy tesztelés, fontosak a megbízhatóság kimutatásában, mivel az ilyen típusú tesztelés helytelen vagy váratlan bevitelekkel jár. Alternatív megoldásként egy futó rendszerhiba is használható a stabilitás tesztelésére. Különféle kereskedelmi termékek megbízhatósági tesztelést végeznek szoftverelemzés segítségével [3] .

Bevezetés

Általánosságban elmondható, hogy a lehetséges meghibásodások minden pontját lefedő megbízható rendszerek létrehozása a lehetséges bemenetek és azok kombinációinak nagy száma miatt nehéz [4] . Mivel túl sokáig tartana az összes bemenet és kombinációik tesztelése, a fejlesztők nem tudnak minden esetet kimerítően megvizsgálni. Ehelyett a fejlesztő megpróbálja általánosítani az ilyen eseteket [5] . Képzelje el például, hogy egész számokat ad meg . Néhány kiválasztott bemenet negatív számból, nullából és pozitív számból állhat. Ha ezeket a számokat használja a szoftver ilyen módon történő tesztelésére, a fejlesztő az összes eset halmazát három számra általánosítja. Ez egy hatékonyabb és kezelhetőbb módszer, de hajlamosabb a kudarcra. A teszteset általánosítása csak egy példa a hibaprobléma kezelésére, nevezetesen az érvénytelen felhasználói bevitelből adódó hiba kezelésére. A rendszerek általában más okok miatt is meghibásodhatnak, például a hálózatról való leválasztás miatt.

Ennek ellenére az összetett rendszereknek kezelniük kell az esetleges hibákat. Számos példa van ilyen sikeres rendszerre. A legrobusztusabb rendszerek némelyike ​​fejlődik, és könnyen adaptálható az új helyzetekhez [4] .

Problémák

A programok és szoftverek olyan eszközök, amelyek egy nagyon konkrét feladatra összpontosítanak, ezért nem általánosíthatók és nem rugalmasak [4] . Az olyan rendszerek megfigyelései, mint az internet vagy a biológiai rendszerek azonban olyan fontos jellemzőt mutatnak, mint a környezethez való alkalmazkodás . A biológiai rendszerek környezethez igazításának egyik módja a redundancia alkalmazása [4] . Számos szerv funkcionálisan redundáns egy biológiai szervezetben. Például a vese egy ilyen példa. Az embereknek általában csak egy vesére van szükségük, de a második vese megőrzi a szervezet képességeit, ha az első meghibásodik. Ugyanez az elv alkalmazható a szoftverekre is, de vannak problémák. Ha a redundancia elvét alkalmazzuk a számítástechnikában, a vakkód hozzáadása nem ajánlott. A kód vakon történő hozzáadása több hibához vezet, bonyolítja a rendszert és megnehezíti annak megértését [6] . Nem kívánatos olyan kód, amely nem erősíti meg a már meglévő kódot. Ehelyett az új kódnak egyenértékű funkcionalitással kell rendelkeznie, hogy ha egy funkció megszakad, az ugyanazt a funkciót biztosító kód kézi vagy automatikus szoftvertávolsággal helyettesíthesse azt. Ehhez az új kódnak tudnia kell, hogyan és mikor kell figyelembe venni a meghibásodási pontot [4] . Ez azt jelenti, hogy több logikát kell hozzáadni a rendszerhez. De ahogy a rendszer egyre több logikát, komponenseket ad hozzá, és a mérete növekszik, egyre bonyolultabbá válik. Így egy redundánsabb rendszer felépítésekor az is bonyolultabbá válik, és a tervezőknek mérlegelni kell a redundancia és a komplexitás egyensúlyát.

A számítógépes technológiák jelenleg nem a megbízható rendszerek létrehozására irányulnak [4] . Inkább a méretezhetőségre és a hatékonyságra helyezik a hangsúlyt. Az egyik fő ok, amiért manapság elhanyagolják a megbízhatóságot, az az, hogy nehéz általánosan megvalósítani [4] .

Területek

Megbízható programozás

A megbízható programozás egy olyan programozási stílus, amely a váratlan leállás és a váratlan műveletek kezelésére összpontosít [7] . Speciális kóddal kecsesen kezeljük ezeket a befejezéseket és műveleteket, pontos és egyértelmű hibaüzenetek megjelenítésével. Ezek a hibaüzenetek megkönnyítik a felhasználó számára a program testreszabását.

Alapelvek

Paranoia – A szoftver létrehozásakor a programozó feltételezi, hogy a felhasználók meg akarják törni a kódjukat. A programozó azt is feltételezi, hogy a saját írott kódja esetleg nem vagy hibásan működik.

Hülyeség - a programozó azt feltételezi, hogy a felhasználók megpróbálnak helytelen, hamis és helytelen adatokat beírni. Ennek eredményeként a programozó egyértelmű, intuitív hibaüzenetet küld a felhasználónak, amely nem igényli hibakódok keresését. A hibaüzenetnek a lehető legpontosabbnak kell lennie a felhasználó félrevezetése nélkül, hogy a probléma könnyen megoldható legyen.

Veszélyes eszközök – A felhasználók nem férhetnek hozzá könyvtárakhoz, adatstruktúrákhoz vagy adatstruktúrákra mutató mutatókhoz. Ezt az információt el kell rejteni a felhasználó elől, hogy a felhasználó ne tudja véletlenül megváltoztatni és hibát bevinni a kódba. Ha az ilyen interfészek megfelelően vannak megépítve, a felhasználók anélkül használják őket, hogy kiskapukat találnának az interfész megváltoztatásához. A felületnek már megfelelően implementáltnak kell lennie, így a felhasználónak nem kell változtatásokat végrehajtania. Ezért a felhasználó kizárólag a kódjára összpontosít.

Nem történhet meg  – nagyon gyakran a kód módosul, és ez a „lehetetlen” esethez vezethet. Ezért a lehetetlen eseteket rendkívül valószínűtlennek tekintjük. A fejlesztő tudja, hogyan kell kezelni a rendkívül valószínűtlen eseteket, és ennek megfelelően hajtja végre a tervezést.

Robusztus gépi tanulás

A robusztus gépi tanulás általában a gépi tanulási algoritmusok robusztusságára utal. Ahhoz, hogy egy gépi tanulási algoritmust megbízhatónak lehessen tekinteni, vagy a teszthibának meg kell egyeznie a betanítási hibával, vagy a teljesítménynek stabilnak kell maradnia, miután némi zajt hozzáadott az adatkészlethez [8] .

Robusztus hálózati kialakítás

A robusztus hálózattervezés a hálózattervezés tanulmányozása változó vagy bizonytalan követelmények mellett [9] . Bizonyos értelemben a megbízhatóság a hálózattervezésben ugyanolyan széles, mint a szoftvertervezésben, a változtatás vagy a bevitel hatalmas lehetőségeinek köszönhetően.

Megbízható algoritmusok

Vannak olyan algoritmusok, amelyek hibáznak a bemeneti adatokban [10] vagy a számítások során [11] . Ebben az esetben a számítások végül a helyes következtetéshez konvergálnak. Ezt a jelenséget "korrektségi vonzerőnek" (angolul correctness attraction) [11] nevezték el .

Jegyzetek

  1. Modell-alapú megközelítés a robusztusság teszteléséhez  // Dl.ifip.org. Letöltve: 2016. 11. 13.. Archiválva : 2020. november 24.
  2. 1990. Az IEEE Standard Glossary of Software Engineering Terminology, IEEE Standard 610.12-1990, a megbízhatóságot úgy határozza meg, mint "a rendszer vagy a komponens megfelelő működésének mértékét helytelen bevitel vagy stresszes környezeti feltételek mellett".
  3. Jack W. Baker, Matthias Schubert, Michael H. Faber. A robusztusság értékeléséről  // Strukturális biztonság 30. - 2008. - 30. sz . – S. 253–267 . - doi : 10.1016/j.strusafe.2006.11.004 . Archiválva : 2020. november 25.
  4. ↑ 1 2 3 4 5 6 7 Gerald Jay Sussman. Robust Systems építése esszé  // Groups.csail.mit.edu. Letöltve 2016. 11. 13.. - 2007. január 13. Az eredetiből archiválva : 2017. augusztus 12.
  5. József, Joby. Az általánosított tesztesetek készítésének fontossága – Szoftvertesztelő Klub – Online Szoftvertesztelő Közösség  // Szoftvertesztelő Klub. Letöltve 2016-11-13.. - 2009-09-21. Az eredetiből archiválva : 2016. június 24.
  6. Robust Systems építése esszé  // Ügynökök a weben : Robust Software : Cse.sc.edu. Letöltve: 2016-11-13. Archiválva az eredetiből: 2020. január 25.
  7. Robusztus programozás . Nob.cs.ucdavis.edu. (Letöltve: 2016-11-13.). Letöltve: 2020. február 18. Az eredetiből archiválva : 2020. február 17..
  8. El Sayed Mahmoud. Mi a definíciója a gépi tanulási algoritmus robusztusságának? . kutatókapu. Letöltve: 2016-11-13. Letöltve: 2020. február 23. Az eredetiből archiválva : 2020. november 14.
  9. Robusztus hálózati tervezés (lefelé irányuló kapcsolat) . Math.mit.edu. Letöltve: 2016-11-13. Letöltve: 2020. február 24. Az eredetiből archiválva : 2016. szeptember 9.. 
  10. Carbin, Michael; Rinard, Martin C. A kritikus beviteli régiók és kódok automatikus azonosítása az alkalmazásokban  // Proceedings of the 19. International Symposium on Software Testing and Analytics - ISSTA '10. – 37–48 . — ISBN 9781605588230 . - doi : 10.1145/1831708.1831713 . Az eredetiből archiválva : 2019. november 13.
  11. ↑ 1 2 Danglot, Benjamin; Preux, Philippe; Baudry, Benoit; Monperrus, Martin. Helyességvonzás: a szoftver viselkedésének stabilitásának vizsgálata futásidejű perturbáció alatt  // Empirical Software Engineering. 23. (4) bekezdése alapján. - 2017. december 21. - S. 2086-2119 . - doi : 10.1007/s10664-017-9571-8 . - arXiv : 1611.09187 . Archiválva az eredetiből: 2020. február 24.