Diagnostikaprogramm

**Diagnostikaprogramm** on automaatne arvutiprogrammide jada, mis määrab tarkvara ja/või riistvara tööoleku elektroonikakomponendis, süsteemis või süsteemide võrgus. Ideaaljuhul annavad diagnostikaprogrammid kasutajale juhiseid selle töö käigus leitud probleemide kohta.

Diagnostikaprogrammi kaudu saab kasutaja teada, milliste riistvaraliste komponentide puhul tuleks üle vaadata ühendused või komponent ise välja vahetada. Näiteks mikrolaineahjude puhul saab vastav diagnostikaprogramm tuvastada ja kasutajat õige veakoodi abil teavitada, et temperatuuriandur on lühises.

Leidub diagnostikaprogramme, mida saab kasutaja seadme otsene kasutaja, näiteks kõvaketta vigade otsimise programm S.M.A.R.T. Samuti on olemas diagnostikaprogramme, millele on ligipääs vaid vastaval tehnikul, näiteks autoelektroonika vigade puhul. 

Paljud diagnostikaprogrammid toimivad koostöös kasutaja ja vastava tehnoloogiafirma vahel: kasutaja saadab oma programmist tekkiva diagnostilise informatsiooni edasi ning saadud andmete põhjal viivad vastavad spetsialistid läbi diagnostilisi analüüse. Niisuguseid andmeid saab saata spetsiifiliste lisatavate programmide raames, näiteks Microsoft 365 rakenduste puhul. Samuti saab diagnostilisi andmeid saata operatsioonisüsteemi tasandil, näiteks operatsioonisüsteemi Windows puhul.

Üks diagnostikaprogrammidest on arvuti käivitamisel käitatav Power-On Self-Test (POST), mida viivad läbi BIOS või UEFI. Arvuti käivitamist jätkatakse ning operatsioonisüsteem käivitatakse vaid juhul, kui diagnostikaprogramm ühtegi viga ei leia.

## Ajalugu
Varane diagnostika polnud mitte arvutiprogrammi kujul, vaid vastav kontrollimine viidi läbi käsitsi. Uuriti, kas vooluringis on nähtavaid mehaanilisi probleeme – katkised juhtmed/komponendid, kulunud isolatsioon, halvad ühendused. Samuti testiti süsteeme osade või komponentide kaupa, kontrollides, kas vastav osa toimib iseseisvalt nagu vaja. 

Varasemates süsteemides olid kasutuses olevad komponendid enamasti suured (nähtavates mõõtudes) ja mehaaniliste ühendustega ning seega oli probleeme ka füüsiliselt võimalik peale vaadates tuvastada, näiteks arvulaua puhul. Tehnoloogia arenedes aga muutusid komponendid väiksemateks ning tekkis vajadus kontrollida süsteemi toimimist mingi abisüsteemi või -programmiga. 

Ühed esimesed diagnostikaprogrammid võeti kasutusele sõjatööstuses. 1945. aastal valminud ENIAC pidi olema väga töökindel ja seetõttu loodi sellele testsisendid, mis oodatavate väljundite puhul näitasid, et masin on töökorras. 1960. aastatel eristati USA kosmoseprogrammis esimest korda tarkvara diagnostikaga tegelevat tiimi teistest tarkvara valdkondadest. 

1970. aastatel tulid lennunduses kasutusele Built-In Test Equipmenti (BITE) seireseadmed. BITE on lennuki tõrkeotsinguseade, mis jälgib lennuki mootori ja kere süsteeme ning vea tuvastamisel väljastab sellele vastava veateate. Lennuki diagnostiline seireseade ühendub BITE külge ja jälgib selle väljundeid.

1980. aastatel võttis IBM oma IBM PC arvutites kasutusele tööriista IBM PC Diagnostics, mis kontrollis arvuti emaplaati, mälu jm enne arvuti käivitamist. Arvuti käivitamine oli küll aeglane, kuid probleemide varane tuvastamine tagas suurema töökindluse.

Tänapäeval on diagnostikaprogrammid kasutusel peaaegu kõikides arvutus- ja loogikaseadmetes. Seadmeid kasutatakse peamiselt vigade tuvastamiseks, aga ka andmete kogumiseks ning statistiliste trendide jälgimiseks ja tuvastamiseks.

## Töömeetodid
Diagnostikaprogrammide töömeetodid (*Methods of Operation*) ehk erinevad lähenemised probleemide tuvastamisele on järgnevalt toodud kasvavas järjestuses oma keerukuse ning diagnostiliste andmete väärtuse poolest.

# Süsteemi indikaatorite taustmonitoorimine, et tuvastada statistilisi trende ning fikseerida ebatavalisi olekuid. Jälgitakse näiteks süsteemi riistvaralisi ja tarkvaralisi komponente, temperatuuri, koormustaluvust, võrguühendust ja jõudlust.
# Lahenduspõhine diagnostika, mis annab süsteemile ette vigatekitavad tingimused ning jälgib, kas need vead ka tuvastatakse.

# *Black Box Testing* ehk musta kasti testimine, kus ei teata, kuidas süsteem toimib, ning uuritakse sisendite põhjal tekkivaid väljundeid ja väljundite täpsust võrreldes oodatavate väljunditega. Musta kasti testimised kategoriseeritakse kolmeks:
## Funktsionaalne – testitakse, kas süsteem annab sisendite peale õiged väljundid.
## Mittefunktsionaalne – testitakse süsteemi sisemisi funktsioone, näiteks jõudlus ja turvalisus.
## Tagasilanguslik (*Regression Testing*) – testitakse, kas muutus või veaparandus süsteemis on vähendanud süsteemi võimekust või kitsendanud funktsionaalsust.
# *White Box Testing* ehk valge kasti testimine, kus teatakse, kuidas süsteem toimib, ning otsitakse vigu süsteemi struktuuris ning erinevates süsteemi osades. Valge kasti testimised kategoriseeritakse viieks:
## Üksuste testimine – igat komponenti testitakse eraldi.
## Mutatsioonitestimine – kontrollitakse koodi, tehes selles väikseid suvalisi muutuseid ning jälgides, kas kood vastab ka nii nõuetele.
## Integratsioonitestimine – kontrollitakse ühenduspunkte süsteemi erinevate komponentide vahel.
## Valge kasti penetratsioonitestimine – üritatakse süsteemi sisse häkkida, omades teadmisi selle sisemise toimimise kohta.
## Staatiline koodianalüüs – otsitakse tarkvaralisi nõrku kohti ja vigu ilma ühtegi programmi käivitamata.
# *Gray Box Testing* ehk halli kasti testimine ehk kombinatsioon musta kasti ja valge kasti testimisest: teatakse, kuidas süsteem toimib, ning selle põhjal antakse sisendeid ning uuritakse sisendite põhjal tekkivaid väljundeid. Halli kasti testimised kategoriseeritakse kaheksaks:
## Maatrikstestimine – süsteem uuritakse täielikult läbi ning hinnatakse iga osa teoreetilist riski.
## Mustertestimine – valede väljundite ja süsteemi tööprobleemide põhjal uuritakse tarkvara, et leida üles viga.
## Ortogonaalne massiivitestimine – kasutatakse suure hulga testandmete puhul, kui testolukordi on vähe.
## Tagasilanguslik testimine (*Regression Testing*) – pärast igat tarkvaralist muudatust viiakse läbi kontroll, et uurida, ega muudatus ei vähendanud süsteemi võimekust või kitsendanud funktsionaalsust.
## Olekumuutuse testimine – minimaalsete teadmistega süsteemi olekutest luuakse sisendid ja kontrollitakse, kas süsteem läheb õigetesse olekutesse.
## Otsustustabelitega testimine – luuakse reeglid ja arutluskäigud, mille põhjal luuakse otsustustabel, ning vastava tabeli põhjal luuakse sisendandmed ja uuritakse väljundandmeid.
## API (*Application Programming Interface* ehk rakendusliidese) testimine – testitakse programmi väliseid liideseid (*exposed interfaces*), andes sinna sisendeid ja kontrollides väljundeid.
## Andmevoo testimine – osaliste teadmistega süsteemi toimimisest luuakse sisendandmed ja jälgitakse andmete liikumist süsteemis.
# Integreeritud taustadiagnostika, mis testib süsteemi komponente süsteemi puhkeajal (*idle-time*).
# Toimingutega põimitud diagnostika, mis käitab diagnostilisi programme süsteemi normaalse toimimisega samaaegselt.

## Rakendused

# Arvutis BIOS-i või UEFI käitatav Power-On Self-Test (POST), mis kontrollib riistvaralisi komponente enne operatsioonisüsteemi käivitamist. POST jaotatakse seitsmeks alamprogrammiks:
## CPU and Register Test ehk keskprotsessori ja registrite test – kontrollib protsessori sisemisi protsesse ning kõiki protsessori registreid.
## *Interrupt and Exception Test* ehk katkestuse ja erandi test – kontrollib, luues katkestuse ja erandi tingimused ning oodates nende tuvastamist. Katkestuse testimiseks näiteks lubatakse taimeri katkestus, erandi testimiseks luuakse näiteks nulliga jagamise olukord.
## *EPROM Checksum Test* ehk EPROM (kustutatava-programmeeritava püsimälu) kontrollsumma test – viimased 2 baiti EPROM-is initsialiseeritakse nullideks ja laseb EPROM-il sinna kontrollsumma kirjutada. Testprogramm arvutab ka ise vastava kontrollsumma ning see peab ühtima EPROM-i arvutatud kontrollsummaga.
## *RAM March Test* ehk muutmälu marssimise test – kontrollib lugemise ja kirjutamise mälu plaadil, muuhulgas viib läbi testi *Marching Ones* ehk marssivad ühed: kõikidesse mälu asukohtadesse kirjutatakse nullid, seejärel hakatakse ükshaaval ühtesid kirjutama, iga kirjutamise järel kontrollides, kas kirjutamine õnnestus.
## *DMA Controller Test* ehk otsemälupöördumiste kontrolleri test.
## *Device Tests* ehk perifeeriaseadmete testid – olenevalt seadmest testitakse ühenduses olevaid perifeeriaseadmeid.
## *Loop Back Test* – seadme saatja (*transmitter*) ühendatakse sama seadme vastuvõtjaga (*receiver*), seejärel saadetakse väljundisse informatsioon ja oodatakse seda sisendisse tagasi.
# Arvutis kasutaja käitatavad diagnostikaprogrammid, tavaliselt operatsioonisüsteemi sees:
## Operatsioonisüsteemi sisseehitatud programmid, operatsioonisüsteemi Windows puhul näiteks programm Troubleshoot.
## Lisatavad programmid, näiteks HWiNFO ning CrystalDiskInfo.
# Kodumasinates kasutatavad diagnostikaprogrammid igasuguste rikete ja töö kõrvalekallete tuvastamiseks, näiteks pesumasinate puhul.
# Masinatööstuses (nt autotööstuses ja lennunduses) kasutamiseelsed diagnostilised töökindluse kontrollid, samuti kasutamisest tingitud kulumistest tekkivate probleemide tuvastamine.

## Viited