Coccinelle

Wikipediasta
Siirry navigaatioon Siirry hakuun
Tämä artikkeli kertoo tietokoneohjelmasta. Muita merkityksiä täsmennyssivulla.
Coccinelle
Kehityshistoria
Vakaa versio 1.0.8 ()[1]
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.[2][3]

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.[4] Ohjelma käyttää semanttisia muutostiedostoja SmPL-kielellä (Semantic Patch Language), jolloin muutokset eivät ole rivikohtaisia vaan kohdentuu vastaavaan merkitykseen.[5]

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

Ohjelman havaitsemia varoituksia seurataan Herodotos-työkalulla.[7]

Historia[muokkaa | muokkaa wikitekstiä]

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

Käyttö[muokkaa | muokkaa wikitekstiä]

Esimerkiksi toistuva virhe on loogisten operaatioiden järjestys:[4]

if (!block->flags & ACPI_WMI_METHOD)

Virheen korjaamiseksi oikea järjestys on:[4]

if (!(block->flags & ACPI_WMI_METHOD))

Sen sijaan, että jokainen tapaus etsittäisiin ja korjattaisiin käsin voidaan molemmat tehdä automatisoimalla seuraavasti:[4]

 @@
 expression E;
 constant C;
 @@
 - !E & C
 + !(E & C)

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. https://github.com/coccinelle/coccinelle/releases/tag/1.0.8. Tieto on haettu Wikidatasta.
  2. Michael Kerrisk: KS2012: Kernel build/boot testing 5.9.2012. Lwn.net. Viitattu 7.8.2019. (englanniksi)
  3. Julia Lawall, Gilles Muller: Coccinelle: 10 years of automated evolution in the Linux kernel dl.acm.org. doi:10.5555/3277355.3277413. Viitattu 27.1.2020. (englanniksi)
  4. a b c d e f g h i Jake Edge: Inside the mind of a Coccinelle programmer 31.8.2016. Lwn.net. Viitattu 27.1.2020. (englanniksi)
  5. Yoann Padioleau, Julia L. Lawall, Gilles Muller: Semantic Patches (PDF) coccinelle.lip6.fr. Viitattu 27.1.2020. (englanniksi)
  6. Coccinelle kernel.org. Viitattu 27.1.2020. (englanniksi) 
  7. Nicolas Palix, Julia Lawall, Gilles Muller: Tracking Code Patterns over Multiple Software Versions with Herodotos (PDF) coccinelle.lip6.fr. Viitattu 27.1.2020. (englanniksi)

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]