**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 kasutates 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
------

1. ↑  Silumine (debug) Pythoni õppematerjalid, 2017
2. ↑  "Debugger (Silur)".
3. ↑  Globus, A; Raible, E (mai 1994). "Fourteen ways to say nothing with scientific visualization". *IEEE Computer*. **27** (7): 86–88. DOI:10.1109/2.299418. Vaadatud 29.04.2018.
4. ↑  Vonnegut, S. (8. aprill 2016). "Static Analysis Tools: All You Need to Know". Originaali arhiivikoopia seisuga 30. aprill 2018.
5. ↑  Shields, Tyler (2. detsember 2008). "Anti-Debugging Series – Part I". *Veracode*. Vaadatud 17.03.2009.
6. ↑  "What is anti debugging".
7. ↑  Ross J. Anderson. *Security Engineering*. Lk 684. ISBN 0-471-38922-6.
8. ↑  "Microsoft Word for DOS 1.15".