Coccinelle

Coccinelle on C-kielen parseri ja muunnostyökalu, jota käytetään muun muassa Linux-ytimen kehityksessä ja testaamisessa.

Ohjelma on suunniteltu staattiseen analyysiin, jossa yhdestä paikasta löydetty ohjelmointivirhe voidaan työkalun avulla helposti korjata myös muissa paikoissa, joissa sama virhe esiintyy. Ohjelma käyttää semanttisia muutostiedostoja SmPL-kielellä (Semantic
Patch Language), jolloin muutokset eivät ole rivikohtaisia vaan kohdentuu vastaavaan merkitykseen.

Ohjelma on saatavilla Linuxille sekä NetBSD:lle ja FreeBSD:lle.

Ohjelman havaitsemia varoituksia seurataan Herodotos-työkalulla.

Historia 
Ohjelman alku ajoittuu vuoteen 2004, jolloin sovelluksen kehittäjä Julia Lawall oli sapattivapaalla. Tuohon aikaan Linux-ytimen versio 2.6 oli juuri julkaistu, mutta monet ajurit olivat vielä versiolle 2.4. Ajurien siirtämiseksi oli tarpeen tehdä muutoksia, kuten lisätä parametreja funktiokutsuihin.
Ongelman ratkaisuksi Lawall ja kolme muuta kehittivät Coccinellen Kööpenhaminan yliopistossa vuosien 2005 ja 2007 välillä.
Ohjelman tuottamia muutostiedostoja ei voi ”sokkona” käyttää vaan on edelleen vastuu tarkistaa tuotetut muutokset.

Käyttö 
Esimerkiksi toistuva virhe on loogisten operaatioiden järjestys:
if (!block->flags & ACPI_WMI_METHOD)

Virheen korjaamiseksi oikea järjestys on:
if (!(block->flags & ACPI_WMI_METHOD))

Sen sijaan, että jokainen tapaus etsittäisiin ja korjattaisiin käsin voidaan molemmat tehdä automatisoimalla seuraavasti:
 @@
 expression E;
 constant C;
 @@
 - !E & C
 + !(E & C)

Lähteet

Aiheesta muualla 
 Semantic patching with Coccinelle 
 Evolutionary development of a semantic patch using Coccinelle 
 http://coccinellery.org

C
Linux-ohjelmat
Staattisen analyysin työkaluohjelmat