Clang-Tidyn laajentaminen yrityksen tarpeiden mukaisesti
Kiiskilä, Eetu (2023)
Kiiskilä, Eetu
2023
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2023121336819
https://urn.fi/URN:NBN:fi:amk-2023121336819
Tiivistelmä
Tässä opinnäytetyössä kehitettiin laajennettu versio Clang-Tidysta, joka on osa LLVM-projektia. Tavoitteena oli lisätä työkaluun vähintään yksi uusi tarkistus sekä automaatiotestit ja dokumentaatio tälle. Tarkoituksena oli, että toimeksiantaja Bittium Wireless Oy voisi opinnäytetyön avulla arvioida, onko Clang-Tidyn kehittäminen yrityksen tarpeiden mukaan järkevää. Lisäksi opinnäytetyö toimisi tarvittaessa ohjeena uusien tarkistusten lisäämiselle työkaluun.
Aluksi tutustuttiin ohjelmointikäytänteiden teoriaan ja siihen, millaisia työkaluja ohjelmointikäytänteisiin liittyen on olemassa. Lisäksi tarkasteltiin toimeksiantajan tarpeita koodianalyysityökaluille. Clang-Tidyn käyttöönotto kuvattiin yksinkertaisen CMake-pohjaisen C++-projektin avulla. Esimerkkiprojektin avulla myös esiteltiin Clang-Tidyn tukemat määrittelytiedostot. Lisäksi selitettiin toimintaperiaate sille, miten ohjelmistokehityksen automaatioputkessa Clang-Tidya käyttäen on mahdollista estää ohjelmointikäytänteistä poikkeavan koodin pääsy versionhallinnan päähaaraan.
Käytännön toteutuksena saatiin aikaan oma moduuli toimeksiantajalle Clang-Tidyyn sekä tarkistus, jonka avulla voidaan havaita ei-julkinen luokkien periytyminen C++-koodissa. Tälle tarkistukselle kirjoitettiin automaatiotestit, jotka paljastivat virheen tarkistuksen toteutuksessa. Virhe korjattiin ja tarkistus todettiin testien päivittämisen jälkeen toimivaksi. Lopuksi uudelle tarkistukselle kirjoitettiin dokumentaatiosivu sekä lisäys julkaisutietoihin ja Clang-Tidyn tarkistusten luetteloon. Muokattu versio Clang-Tidysta otettiin onnistuneesti käyttöön toimeksiantajan projektissa. Aikaansaannos vastasi opinnäytetyölle asetettuja tavoitteita.
Työn aikana tuli selväksi, että LLVM:n dokumentaatio on monelta osin puutteellista. Clang-Tidyn laajentaminen projektin tarpeiden mukaan vahvisti käsitystä siitä, että ohjelmistojen kokoaminen lähdekoodeista ja avoimen lähdekoodin projektien muokkaaminen ovat hyödyllisiä taitoja. Testauksen paljastama virhe toimii hyvänä osoituksena ohjelmistotestaamisen tärkeydestä. Työn perusteella voidaan sanoa, että uuden moduulin lisääminen Clang-Tidyyn voi olla haastavaa puutteellisen dokumentaation takia. Uuden tarkistuksen lisääminen moduuliin on yksinkertainen prosessi, koska LLVM sisältää tähän tarkoitukseen apuohjelman. Ensimmäisen tarkistuksen toteuttaminen voi olla haastavaa, mutta koko prosessin testauksineen ja dokumentointeineen läpi käytyä uusien tarkistusten lisääminen pitäisi onnistua melko vaivattomasti tarkistusten vaikeustasoa vähitellen nostaen. Ammattilaiskäytön lisäksi Clang-Tidy sopii hyvin myös kouluprojekteihin, mutta näiden tarpeisiin Clang-Tidyn laajentaminen voi olla turhan työlästä.
Aluksi tutustuttiin ohjelmointikäytänteiden teoriaan ja siihen, millaisia työkaluja ohjelmointikäytänteisiin liittyen on olemassa. Lisäksi tarkasteltiin toimeksiantajan tarpeita koodianalyysityökaluille. Clang-Tidyn käyttöönotto kuvattiin yksinkertaisen CMake-pohjaisen C++-projektin avulla. Esimerkkiprojektin avulla myös esiteltiin Clang-Tidyn tukemat määrittelytiedostot. Lisäksi selitettiin toimintaperiaate sille, miten ohjelmistokehityksen automaatioputkessa Clang-Tidya käyttäen on mahdollista estää ohjelmointikäytänteistä poikkeavan koodin pääsy versionhallinnan päähaaraan.
Käytännön toteutuksena saatiin aikaan oma moduuli toimeksiantajalle Clang-Tidyyn sekä tarkistus, jonka avulla voidaan havaita ei-julkinen luokkien periytyminen C++-koodissa. Tälle tarkistukselle kirjoitettiin automaatiotestit, jotka paljastivat virheen tarkistuksen toteutuksessa. Virhe korjattiin ja tarkistus todettiin testien päivittämisen jälkeen toimivaksi. Lopuksi uudelle tarkistukselle kirjoitettiin dokumentaatiosivu sekä lisäys julkaisutietoihin ja Clang-Tidyn tarkistusten luetteloon. Muokattu versio Clang-Tidysta otettiin onnistuneesti käyttöön toimeksiantajan projektissa. Aikaansaannos vastasi opinnäytetyölle asetettuja tavoitteita.
Työn aikana tuli selväksi, että LLVM:n dokumentaatio on monelta osin puutteellista. Clang-Tidyn laajentaminen projektin tarpeiden mukaan vahvisti käsitystä siitä, että ohjelmistojen kokoaminen lähdekoodeista ja avoimen lähdekoodin projektien muokkaaminen ovat hyödyllisiä taitoja. Testauksen paljastama virhe toimii hyvänä osoituksena ohjelmistotestaamisen tärkeydestä. Työn perusteella voidaan sanoa, että uuden moduulin lisääminen Clang-Tidyyn voi olla haastavaa puutteellisen dokumentaation takia. Uuden tarkistuksen lisääminen moduuliin on yksinkertainen prosessi, koska LLVM sisältää tähän tarkoitukseen apuohjelman. Ensimmäisen tarkistuksen toteuttaminen voi olla haastavaa, mutta koko prosessin testauksineen ja dokumentointeineen läpi käytyä uusien tarkistusten lisääminen pitäisi onnistua melko vaivattomasti tarkistusten vaikeustasoa vähitellen nostaen. Ammattilaiskäytön lisäksi Clang-Tidy sopii hyvin myös kouluprojekteihin, mutta näiden tarpeisiin Clang-Tidyn laajentaminen voi olla turhan työlästä.