Koodin katselmointi (myös vertaisarviointi) on ohjelmiston lähdekoodin tietoista ja järjestelmällistä tarkistamista ohjelmoijan vertaisten toimesta. Tavoitteena on löytää ohjelmointivirheitä toistensa ohjelmakoodista. Arviointiin on useita apuohjelmia, mutta käsite on tärkeä ymmärtää: ohjelmistoa tekevät ihmiset ja ihmiset tekevät virheitä. Lisäksi ohjelmistoa testataan manuaalisesti tai automatisoidusti.}
Katselmoinnissa toinen kehittäjä kuin muutoksen tekijä katsoo ohjelmakoodia ja pyrkii vastaamaan kysymyksiin kuten: Onko koodissa ilmeisiä logiikkavirheitä? Vaatimuksia katsoen, ovatko kaikki tapaukset täysin toteutettuja? Ovatko uudet automatisoidut testit riittäviä uudelle koodille? Onko olemassa olevia automatisoituja testejä kirjoitettava uudestaan vastaamaan muuttuneeseen koodiin? Vastaako uusi koodi olemassa olevia tyyliohjeita?
Katselmointi voi vähentää merkittävästi virheitä ohjelmistoprojekteissa. Lisäksi staattinen analyysi voi vähentää katselmoinnin aiheuttamaa kuormitusta.
Historia Michael Fagan julkaisi menetelmän ohjelmiston tarkastukseen vuonna 1976 (Fagan-tarkistus, Fagan Inspection). Tarkastuksen tavoitteena on ollut virheiden varhainen löytäminen ja korjaaminen, jolloin etsiminen ja korjaaminen on edullisempaa kuin myöhemmin. Väitteiden mukaan tarkastuksella on ollut toinen hyöty, eli ohjelmakoodin tekeminen helpommin ymmärrettäväksi ja muokattavaksi. Helpommin ylläpidettävä ohjelma on helpottanut myös turvallisuutta, siirrettävyyttä ja parantanut dokumentaation laatua.
Koodin katselmointi yleistyi merkittävästi kun Git yleistyi, jolloin tehtävät muutokset järjestettiin liitospyynnöiksi (), joita voidaan katselmoida ja keskustella ennen yhdistämistä pääversioihin. Gitin kanssa on mahdollista kloonata tietovarasto, jolloin muutokset tehdään klooniin ennen yhdistämistä. Toinen tapa on käyttää samaa tietovarastoa, mutta tehdä muutoksille omat haarat ennen yhdistämistä päähaaraan. Molemmissa menetelmissä muutokset voidaan katselmoida ennen liittämistä, mutta jälkimmäisessä on oltava myös oikeudet työntää muutoksia jaettuun tietovarastoon. Liitospyyntömallia käytetään erityisen paljon avoimen lähdekoodin projekteissa.
2020-luvulla esiteltiin suuriin kielimalleihin (LLM) perustuvia agentteja koodin katselmoinnin automatisoimiseen.
Merkittävyys Maailmanlaajuisesti yli 28 miljoonaa ohjelmistokehittäjää käyttää 10% – 20% työajastaan koodin katselmointiin, jolloin päivittäin käytetään 22–44 miljoonaa tuntia katselmointiin.
Katselmoinnilla saavutettu hyöty riippuu nopeudesta, jossa virheitä ei havaita nopeuden kasvaessa liian suureksi. 200 riviä tai vähemmän per tunti on ollut suositeltu tahti. Pelkällä testaamisella ei saavuteta hyötyä mikäli testit eivät kata riittävästi koodia. Lisäksi syvät ehtotapaukset aiheuttavat tarpeen testata suuria määriä eri vaihtoehtoja.
Menetelmät Toisin kuin ohjelmiston tarkastamisessa katselmointi ei vaadi osallistujien olevan samaan aikaan samassa paikassa vaan voi tapahtua hajautetusti eri paikoissa. Katselmointi on usein osa työtä erillisen tapaamisen sijaan.
Tavallisesti tietyn muutoksen jälkeen ohjelmoija pyytää toista mielipidettä ratkaisuun ja toteutustapaan ennen sen yhdistämistä ylävirtaan tai ohjelmakoodin päähaaraan. Mahdollisten ohjelmointivirheiden tai puutteiden tunnistamisen lisäksi katselmointi jakaa tietoa nopeasti ryhmän jäsenien välillä ja voi toimia tapana opettaa aloittavia ohjelmoijia kokeneempien toimesta. Toisaalta katselmointi voi hidastaa ja viedä resursseja muilta tehtäviltä.
Koodin tyyliseikkojen käsittelyä ja ohjelmointikäytäntöjen noudattamista voidaan vähentää käyttämällä koodin automaattista muotoilua etukäteen aputyökalujen avulla. Useat tyyliseikat voivat olla subjektiivisia ja kiistanalaisia, mutta yhdenmukaisen ja johdonmukaisen muotoilun tavoitteena on tehdä koodista luettavampaa ryhmän jäsenien kesken.
Katselmoinnissa voidaan havaita koodihajuja eli epätavallisesti tehtyjä ratkaisuja, jotka voivat viitata muihin piileviin ongelmiin.
Katso myös Ohjelmiston tarkastus Ohjelmiston laatu
Lähteet
Aiheesta muualla OWASP Code Review Guide 2.0 Release (PDF)
Luokka:Ohjelmiston katselmointi