| Coccinelle | |
|---|---|
| Kehityshistoria | |
| Vakaa versio | 1.3.0 () |
| Tiedot | |
| Lisenssi | GPLv2 |
| Aiheesta muualla | |
| Verkkosivusto | |
| Versiohallinta | |
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 on saatavilla Linuxille sekä NetBSD:lle ja FreeBSD:lle.
Ohjelman havaitsemia varoituksia seurataan Herodotos-työkalulla.
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.
Ohjelma käyttää semanttisia muutostiedostoja SmPL-kielellä (Semantic Patch Language), jolloin muutokset eivät ole rivikohtaisia vaan kohdentuu vastaavaan merkitykseen.
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)