**Sihilik vigade süstimine** või ka **sihilik vea tekitamine** on arvutisüsteemis kunstlike vigade tekitamine testimise eesmärgil. Sihilikku vigade sisestamist kasutatakse arvutisüsteemide töökindluse hindamisel. Teadlased ja insenerid on loonud vigade sisestamiseks palju uudseid meetodeid, mida saab rakendada nii riist- kui ka tarkvara testimisel.

Töökindluse hindamine hõlmab tõrgete ja vigade uurimist. Kokkujooksmiste destruktiivne iseloom ja tõrgete latentsus raskendavad süsteemi vigade põhjuste välja selgitamist. Eriti raske on tõrgete stsenaariumit taastada suurte komplekssüsteemide puhul. Süsteemi töökindluse uurimisel kasutatakse katsetel põhinevat lähenemisviisi võimalike vigade tuvastamiseks ja mõistmiseks. Sellist lähenemist kasutatakse nii kontseptsiooni-, disaini- kui ka prototüübifaasis.
Katsetel põhineva meetodi kasutamiseks tuleb eelnevalt mõista süsteemi ülesehitust, struktuuri ja käitumist. Täpsemalt on vaja teada süsteemi tolerantsi vigadele ja tõrgetele, võttes arvesse sisseehitatud tuvastamis- ja taastamismehhanisme ning kasutada tõrgete ja häirete loomiseks ja nende mõju jälgimiseks spetsiaalseid vahendeid.

Etapid ja lähenemisviisid
-------------------------

Kontseptuaalses ja disainifaasis oleva süsteemi töökindluse testimiseks kasutavad insenerid enamasti madalahinnalist simulatsioonil põhinevat vigade sisestamist. Nendes faasides on uuritav süsteem kõigest kogus kõrgtasemelisi üldistusi, mille rakendamise asjaolud on veel väljaselgitamisel. Seega on süsteem simuleeritud lihtsustatud oletuste baasil.

**Simulatsioonipõhine** vigade süstimismeetod eeldab, et vead või tõrked tekivad vastavalt eelnevalt kindlaks määratud jaotusel. See meetod on kasulik rikkekindlate mehhanismide tõhususe ja süsteemi töökindluse testimisel, andes süsteemiinseneridele kohest tagasisidet. Simulatsioon eeldab täpseid sisendparameetreid, kuid disaini ja tehnoloogia muutuste tõttu on raskendatud varasemate mõõtmistulemuste kasutamine. Prototüübi katsetamine annab võimaluse hinnata süsteemi ilma igasuguste oletusteta süsteemi disaini kohta, see viib omakorda täpsemate tulemusteni. Prototüübil põhineva sihiliku vigade sisestamise meetodi puhul sisestatakse süsteemi vigu, selleks et:

* määratleda süsteemi töökindluse kitsaskohad,
* uurida süsteemi käitumist vigade esinemise korral,
* määratleda vigade avastamise ja taastamise mehhanismide katvus
* hinnata mehhanismide tõrketaluvust ja jõudluse kadu.

**Prototüübipõhise** meetodi korral sisestatakse vead kas riistvara (loogilised või elektroonilised vead) või tarkvara (koodi- või andmevead) tasemel ning jälgitakse nende mõju. Testimisel saab kasutada arendusjärgus olevat süsteemiosa või täielikult toimivat süsteemi. Sihilike vigade sisestamine annab teavet ainult jäljendatud vigade rikkeprotsesside kohta ning ei suuda pakkuda usaldusväärset teavet rikke kestuse kohta.
Vigade tekitamise asemel võivad insenerid mõõta ka vahetult reaalsete andmetega opereerivaid süsteeme.

**Mõõtmispõhine** meetod kasutab reaalseid andmeid, ta sisaldab hulganisti teavet loomulikul teel ilmnenud vigadest ja eksimustest ning vahel ka taastamiskatsetest. Selle andmestiku analüüsimine võimaldab aru saada reaalsest vigade ja eksimuste iseloomust ning analüütilistest mudelitest.
Mõõtmistel põhinev analüüs annab teavet ainult tuvastatud vigade kohta. Andmed peavad olema kogutud pika aja jooksul, sest vead ja tõrked tekivad harva. Katsetingimused võivad oluliselt varieeruda, mis seab kahtluse alla tulemuste statistilise õigsuse. 

Kuigi kõigil kolmel eksperimentaalsel meetodil on omad piirangud, täiustavad nende unikaalsed väärtused üksteist ja võimaldavad saada laiaulatuslikku teavet süsteemide töökindlusest.

Ülesehitus
----------

 Joonis 1. Vigade süstimise süsteem
Joonis 1 näitab vigade süstimissüsteemi, mis koosneb tavaliselt uuritavast süsteemist ja vigade sisestajast, vigade teegist, töökoormuse generaatorist, kontrollerist, seireseadmest, andmekogujast ja andmeanalüsaatorist.

Vigade sisestaja süstib tahtlikke vigu uuritavasse süsteemi kohe pärast töökoormusgeneraatori edastatud käsklusi. Seireseade jälgib käskluste täitmist ning vajadusel algatab andmete kogumise. Andmete koguja teostab reaalajas andmete kogumist ja andmete analüsaator töötleb ning analüüsib neid. Kontrolleri tööülesandeks on kogu eksperimendi juhtimine. Füüsiliselt on kontroller programm, mis võib töötada uuritavas süsteemis või eraldi arvutis. Vigade sisestajaks võib olla spetsiaalselt valmistatud riistvaraseade või tarkvaraprogramm. Vigade sisestaja toetab erinevaid veatüüpe, vigade tekke asukohamääramist, nende ilmumisaja muutmist ning erinevaid riistvara skeeme või tarkvara ülesehitusi, mille väärtused on defineeritud vigade teegis. Joonisel 1 olev vigade teek on eraldi komponent, mis võimaldab suuremat paindlikkust ja lihtsat teisaldamist. Töökoormuse generaatorit, jälgimisseadet ning muid komponente saab rakendada samal viisil.

Erinevad süsteemid
------------------

Insenerid kasutavad vigade sisestamist, et testida süsteemi või komponentide töökindlust. Süstemeetod uurib vigade tuvastamist, tõrgete lokaliseerimist ja ümber konfigureerimise ning taastamise suutlikkust. Süstmeetodit saab rakendada nii riist- kui ka tarkvarasüsteemides, olenevalt sellest, mis tüüpi vigadest huvitutakse. Näiteks stuck-at-faults ehk vigade, mis sisestavad jääva väärtuse vooluringi kindlasse punkti, uurimiseks soovitatakse kasutada riistvara vigade süstimist, sest sellisel juhul on võimalik kontrollida ja muuta vea asukohta. Sama vea uurimine tarkvara vigade süstimismeetodi abil oleks olenevalt veast väga keeruline või isegi võimatu. Tarkvaralist lähenemist kasutatakse rohkem andmetega seonduvates süsteemides, näiteks rikutud andmete uurimine. 

### Riistvarapõhise vea tekitamine

Riistvarapõhise vea tekitamiseks kasutatakse lisariistvara selleks, et tekitada viga uuritava süsteemi riistvaras. Olenevalt vigade iseloomust ja nende asukohast, saab riistvaralist vigade süstimist liigitada kaheks: 

* Riistvarapõhise vea tekitamine otsese kontakti abil. Vea tekitaja puutub otseselt kokku uuritava süsteemiga, tekitades pinge või voolusuuna muutust uuritava kiibile.

* Riistvarapõhise vea tekitamine kaudsel teel. Vea tekitajal puudub otsene kontakt uuritava süsteemiga. Selle asemel tekitab väline allikas mõne füüsilise fenomeni, nagu näiteks radiatsioonikiirguse või elektromagnetilise häire, mis omakorda põhjustab kõrvalepõikeid katsesüsteemi kiibis.

Need meetodid on sobivad prototüüpide töökindluse hindamiseks, mis peavad vastu pidama pidevale riistvara lülitamistele, seirele (näiteks protsessori vea latentsus) või kui teiste veatekitamismeetodite kasutamine ei ole ligipääsmatuse tõttu võimalik. Enamasti modelleerivad insenerid riistvara võimalikult väikeste veatasemetega, näiteks võib ületusviga tekkida lühise tagajärjel.

### Tarkvarapõhise vea tekitamine

Viimastel aastatel on teadlased rohkem arendanud vahendeid tarkvararakenduste vigade uurimiseks. Tarkvaratehnikas on vigade süstimise meetod väga atraktiivne, sest see ei nõua kallist riistvara. Lisaks saab neid kasutada rakenduste ja operatsioonisüsteemide uurimisel, mis riistvaraliste vigade süstimismeetodiga pole võimalik. 
Rakenduste töökindluse uurimisel lisatakse vigade sisestaja rakenduse sisse või rakenduse ja operatsioonisüsteemi kihi vahele. Operatsioonisüsteemi uurimisel lisatakse vigade sisestaja operatsioonisüsteemi sisse, sest masina ning operatsioonisüsteemi vahele eraldi kihi tekitamine on väga raske. Kuigi tarkvaraline lähenemine on paindlik, on selle ka omad puudused.

* vigu ei saa sisestada kohta, kus tarkvaral puudub ligipääs.
* tarkvaralised mõõteriistad võivad häirida uuritava süsteemi töökoormust või isegi muuta tarkvara esialgset tööstruktuuri. Hoolikalt läbimõeldud sisestamiskeskkond võib vähendada häirituse hulka.

Tarkvaralisi vigade süstimismeetodeid saab grupeerida vea sisestuse toimumise alusel kaheks: vead sisestatakse kompileerimisel või süsteemi töötamise ajal. Tuntumad GRID-süsteemi vigade tekitamise töökeskkonnad ja vahendid on CECIUM, DOCTOR, ORCHESTRA, NFTAPE, LOKI, Mendosus, OGSA ja FAIL-FCI.

### Riistvara- ja tarkvarapõhiste vigade võrdlus

Riistvara ja tarkvara meetodite erinevus seisneb peamiselt vigade sisestuse punktides, millele ligi pääsetakse, maksumuses ja häirituse tasemes. Riistvara meetoditega saab vigu süstida kiibi kontaktidesse ja sisemistesse komponentidesse nagu kombineeritud ahelad ja registrid, mis ei ole tarkvara-adresseeritavad. Tarkvarameetodid sobivad otse tarkvara tasandil (näiteks mälu, register) muudatuste tegemiseks. Seega riistvarametoodikat kasutatakse madala taseme vigade tuvastamise ja varjamise mehhanismide hindamiseks ning tarkvarameetodeid kõrgema taseme mehhanismide testimiseks. Tarkvarameetodid on odavamad, kuid need pole nii täpsed, sest testprogrammi jooksutatakse uuritava süsteemi sees.

Viited
------

1. ↑  J.A. Clark ja D.K. Pradhan, "Fault Injection: A Method for Validating Computing-System Dependability," Computer, juuni 1995, lk. 47–56.
2. 1 2 3  D. Tang ja R.K. Iyer, "Experimental Analysis of Computer System Dependability," in Fault-Tolerant Computer System Design, D.K. Pradhan, ed. Prentice-Hall Prof. Tech. Ref. Upper Saddle River, N.J. lk. 282–392.
3. 1 2 3 4  Mei-Chen Hsueh, Timothy K. Tsai, Ravishankar K. Iyer, *Fault Injection Techniques and Tools*
4. ↑  "Sebastien Tixeuil, William Hoarau ja Luis Silva, *An Overview of Existing Tools for Fault-Injection and Dependability Benchmarking in Grid*" (PDF). Originaali (PDF) arhiivikoopia seisuga 16. märts 2007. Vaadatud 13. novembril 2011.