Silumine

**Silumine** on tarkvaraarenduse protsess, mille käigus leitakse ja parandatakse vigu koodis, mis takistavad programmi või süsteemi korrektset toimimist. 

Silumist tuleb eristada silurist, mis on tarkvaraprogramm või -moodul, mida kasutatakse silumiseks. Silumist võib kasutada ka koodi ridahaaval läbimiseks, et seda paremini mõista.

Silumisel on erinevaid tehnikaid ja lähenemisi, millest tuntuimad on interaktiivne silumine, juhtimisvoo analüüs, komponenditestimine, integratsioonitestimine, logifailianalüüs, rakenduse- või süsteemitasemel programmi seisu jälgimine erinevatel ajahetkedel, mälutõmmis ja profileerimine.

## Vahendid
Silumise keerukus võib erineda suuresti sõltuvalt programmist või süsteemist. Tegemist võib olla lihtsate vigade parandamisega, aga ka aeganõudvate ja väsitavate andmete kogumise, analüüsi ja uuenduste planeerimisega. Programmeerija silumisoskus võib suuresti mõjutada silumisedukust, kuid tarkvara silumise raskusaste varieerub suuresti sõltuvalt süsteemi keerukusest. Mingil määral sõltub see ka kasutatud programmeerimiskeelest ja saadaval olevatest siluritest. Silurid on tarkvaratööriistad, millega on võimalik jälgida programmi täitmist, seda peatada, uuesti alustada, vaatluspunkte seada ja mälus olevate andmete väärtusi muuta.

Üldiselt on parim siluda kõrgema taseme programmeerimiskeeltes nagu Java, mida lihtsustavad selliste keelte mitmed omadused, näiteks erindite käsitlemine ja tüübikontroll. Programmeerimiskeeltes nagu C ja assembler võib juhtuda, et tekkinud vead on peidetud, näiteks mälusaaste puhul. Seetõttu on keeruline leida, kust algne probleem tekkis. Neil juhtudel võib olla vaja kasutada mäluspetsiifilist silurit.

Keelespetsiifilisi tööriistu nimetatakse staatilise koodianalüüsi tööriistadeks ja teatud olukordades on nad väga kasulikud. Staatilise koodianalüüsi tööriistade või vahendite eesmärk on otsida spetsiifilisi probleeme koodist, mis võivad olla nii levinud kui haruldased. Selliseid probleeme kompilaator või interpretaator üldiselt ei leia. Staatilise koodianalüüsi vahendid ei kontrolli süntaksit vaid semantilisi aspekte.

## Antisilumine
Antisilumise eesmärgiks on kasutada koodis tehnikaid, mis takistavad pöördprojekteerimist (inglise keeles *reverse engineering*) ja teatud protsesside silumist. Antisilumist saab kasutada koopiakaitsetehnikana kirjastajate poolt, aga ka pahavaras, et pahavara leidmist ja eemaldamist keerulisemaks teha. 
Mõned antisilumise tehnikad:
*API-põhised – kontrollitakse siluri olemasolu, kasutades süsteemiinfot;
*erindipõhised – kontrollitakse, kas kuidagi segatakse erindite viskamisele vahele;
*protsesside ja lõimede blokeerimine – kontrollitakse, kas kuidagi mõjutatakse protsesside ja lõimede blokeerimist;
*muudetud kood – otsitakse siluri vaatluspunktide abil tehtud koodimuudatusi;
*riistvara- ja registripõhised – otsitakse riistvaralisi vaatluspunkte ja CPU registreid;
*ajastus ja latentsusaeg – uuritakse juhiste täitmisele kulunud aega.

Üks varaseid näiteid antisilumisest oli Microsoft Wordi esimestes versioonides. Kui programmiga tuvastati silur, väljastas programm ingliskeelse teate "The tree of evil bears bitter fruit. Now trashing program disk." (Tõlge: Kurjuse puul on mõrud viljad. Nüüd aeglustan programmiketast.) Seejärel hakkas programm arvuti disketiseadmes tekitama valjusid helisid eesmärgiga hirmutada kasutajat, et ta ei üritaks edaspidi silurit kasutada.

## Vaata ka
* Regressioonitestimine

## Viited